Module: Aws::Record::Attributes::ClassMethods

Included in:
Aws::Record
Defined in:
lib/aws-record/record/attributes.rb

Instance Method Summary collapse

Instance Method Details

#attr(name, marshaler, opts = {}) ⇒ Object

Define an attribute for your model, providing your own attribute type.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • marshaler (Marshaler)

    The marshaler for this attribute. So long as you provide a marshaler which implements #type_cast and #serialize that consume raw values as expected, you can bring your own marshaler type. Convenience methods will provide this for you.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :database_attribute_name (String)

    Optional attribute used to specify a different name for database persistence than the `name` parameter. Must be unique (you can't have overlap between database attribute names and the names of other attributes).

  • :dynamodb_type (String)

    Generally used for keys and index attributes, one of “S”, “N”, “B”, “BOOL”, “SS”, “NS”, “BS”, “M”, “L”. Optional if this attribute will never be used for a key or secondary index, but most convenience methods for setting attributes will provide this.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.



90
91
92
93
94
# File 'lib/aws-record/record/attributes.rb', line 90

def attr(name, marshaler, opts = {})
  @attributes.register_attribute(name, marshaler, opts)
  _define_attr_methods(name)
  _key_attributes(name, opts)
end

#boolean_attr(name, opts = {}) ⇒ Object

Define a boolean-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



133
134
135
136
# File 'lib/aws-record/record/attributes.rb', line 133

def boolean_attr(name, opts = {})
  opts[:dynamodb_type] = "BOOL"
  attr(name, Marshalers::BooleanMarshaler.new(opts), opts)
end

#date_attr(name, opts = {}) ⇒ Object

Define a date-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})
  • options (Hash)

    a customizable set of options

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.



196
197
198
199
# File 'lib/aws-record/record/attributes.rb', line 196

def date_attr(name, opts = {})
  opts[:dynamodb_type] = "S"
  attr(name, Marshalers::DateMarshaler.new(opts), opts)
end

#datetime_attr(name, opts = {}) ⇒ Object

Define a datetime-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



217
218
219
220
# File 'lib/aws-record/record/attributes.rb', line 217

def datetime_attr(name, opts = {})
  opts[:dynamodb_type] = "S"
  attr(name, Marshalers::DateTimeMarshaler.new(opts), opts)
end

#epoch_time_attr(name, opts = {}) ⇒ Object

Define a time-type attribute for your model which persists as

epoch-seconds.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



260
261
262
263
# File 'lib/aws-record/record/attributes.rb', line 260

def epoch_time_attr(name, opts = {})
  opts[:dynamodb_type] = "N"
  attr(name, Marshalers::EpochTimeMarshaler.new(opts), opts)
end

#float_attr(name, opts = {}) ⇒ Object

Define a float-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



175
176
177
178
# File 'lib/aws-record/record/attributes.rb', line 175

def float_attr(name, opts = {})
  opts[:dynamodb_type] = "N"
  attr(name, Marshalers::FloatMarshaler.new(opts), opts)
end

#hash_keySymbol?

Returns The symbolic name of the table's hash key.

Returns:

  • (Symbol, nil)

    The symbolic name of the table's hash key.



386
387
388
# File 'lib/aws-record/record/attributes.rb', line 386

def hash_key
  @keys.hash_key
end

#integer_attr(name, opts = {}) ⇒ Object

Define a integer-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



154
155
156
157
# File 'lib/aws-record/record/attributes.rb', line 154

def integer_attr(name, opts = {})
  opts[:dynamodb_type] = "N"
  attr(name, Marshalers::IntegerMarshaler.new(opts), opts)
end

#list_attr(name, opts = {}) ⇒ Object

Define a list-type attribute for your model.

Lists do not have to be homogeneous, but they do have to be types that the AWS SDK for Ruby V2's DynamoDB client knows how to marshal and unmarshal. Those types are:

  • Hash

  • Array

  • String

  • Numeric

  • Boolean

  • IO

  • Set

  • nil

Also note that, since lists are heterogeneous, you may lose some precision when marshaling and unmarshaling. For example, symbols will be stringified, but there is no way to return those strings to symbols when the object is read back from DynamoDB.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



295
296
297
298
# File 'lib/aws-record/record/attributes.rb', line 295

def list_attr(name, opts = {})
  opts[:dynamodb_type] = "L"
  attr(name, Marshalers::ListMarshaler.new(opts), opts)
end

#map_attr(name, opts = {}) ⇒ Object

Define a map-type attribute for your model.

Maps do not have to be homogeneous, but they do have to use types that the AWS SDK for Ruby V2's DynamoDB client knows how to marshal and unmarshal. Those types are:

  • Hash

  • Array

  • String

  • Numeric

  • Boolean

  • IO

  • Set

  • nil

Also note that, since maps are heterogeneous, you may lose some precision when marshaling and unmarshaling. For example, symbols will be stringified, but there is no way to return those strings to symbols when the object is read back from DynamoDB.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



330
331
332
333
# File 'lib/aws-record/record/attributes.rb', line 330

def map_attr(name, opts = {})
  opts[:dynamodb_type] = "M"
  attr(name, Marshalers::MapMarshaler.new(opts), opts)
end

#numeric_set_attr(name, opts = {}) ⇒ Object

Define a numeric set attribute for your model.

Numeric sets are homogeneous sets, containing only numbers. Note that empty sets cannot be persisted to DynamoDB. Empty sets are valid for aws-record items, but they will not be persisted as sets. nil values from your table, or a lack of value from your table, will be treated as an empty set for item instances. At persistence time, the marshaler will attempt to marshal any non-numerics within the set to be Numeric objects.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



380
381
382
383
# File 'lib/aws-record/record/attributes.rb', line 380

def numeric_set_attr(name, opts = {})
  opts[:dynamodb_type] = "NS"
  attr(name, Marshalers::NumericSetMarshaler.new(opts), opts)
end

#range_keySymbol?

Returns The symbloc name of the table's range key, or nil if there is no range key.

Returns:

  • (Symbol, nil)

    The symbloc name of the table's range key, or nil if there is no range key.



391
392
393
# File 'lib/aws-record/record/attributes.rb', line 391

def range_key
  @keys.range_key
end

#string_attr(name, opts = {}) ⇒ Object

Define a string-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



112
113
114
115
# File 'lib/aws-record/record/attributes.rb', line 112

def string_attr(name, opts = {})
  opts[:dynamodb_type] = "S"
  attr(name, Marshalers::StringMarshaler.new(opts), opts)
end

#string_set_attr(name, opts = {}) ⇒ Object

Define a string set attribute for your model.

String sets are homogeneous sets, containing only strings. Note that empty sets cannot be persisted to DynamoDB. Empty sets are valid for aws-record items, but they will not be persisted as sets. nil values from your table, or a lack of value from your table, will be treated as an empty set for item instances. At persistence time, the marshaler will attempt to marshal any non-strings within the set to be String objects.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



355
356
357
358
# File 'lib/aws-record/record/attributes.rb', line 355

def string_set_attr(name, opts = {})
  opts[:dynamodb_type] = "SS"
  attr(name, Marshalers::StringSetMarshaler.new(opts), opts)
end

#time_attr(name, opts = {}) ⇒ Object

Define a time-type attribute for your model.

Parameters:

  • name (Symbol)

    Name of this attribute. It should be a name that is safe to use as a method.

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :hash_key (Boolean)

    Set to true if this attribute is the hash key for the table.

  • :range_key (Boolean)

    Set to true if this attribute is the range key for the table.

  • :persist_nil (Boolean)

    Optional attribute used to indicate whether nil values should be persisted. If true, explicitly set nil values will be saved to DynamoDB as a “null” type. If false, nil values will be ignored and not persisted. By default, is false.

  • :default_value (Object)

    Optional attribute used to define a “default value” to be used if the attribute's value on an item is nil or not set at persistence time.



238
239
240
241
# File 'lib/aws-record/record/attributes.rb', line 238

def time_attr(name, opts = {})
  opts[:dynamodb_type] = "S"
  attr(name, Marshalers::TimeMarshaler.new(opts), opts)
end