Class: Aws::Record::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/aws-record/record/attribute.rb

Overview

This class provides helper methods for Aws::Record attributes. These include marshalers for type casting of item attributes, the Amazon DynamoDB type for use in certain table and item operation calls, and the ability to define a database name that is separate from the name used within the model class and item instances.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Attribute

Returns a new instance of Attribute.

Parameters:

  • name (Symbol)

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

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

Options Hash (options):

  • :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.

  • :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.



49
50
51
52
53
54
55
56
57
# File 'lib/aws-record/record/attribute.rb', line 49

def initialize(name, options = {})
  @name = name
  @database_name = options[:database_attribute_name] || name.to_s
  @dynamodb_type = options[:dynamodb_type]
  @marshaler = options[:marshaler] || DefaultMarshaler
  @persist_nil = options[:persist_nil]
  dv = options[:default_value]
  @default_value_or_lambda = type_cast(dv) unless dv.nil?
end

Instance Attribute Details

#database_nameObject (readonly)

Returns the value of attribute database_name.



24
25
26
# File 'lib/aws-record/record/attribute.rb', line 24

def database_name
  @database_name
end

#dynamodb_typeObject (readonly)

Returns the value of attribute dynamodb_type.



24
25
26
# File 'lib/aws-record/record/attribute.rb', line 24

def dynamodb_type
  @dynamodb_type
end

#nameObject (readonly)

Returns the value of attribute name.



24
25
26
# File 'lib/aws-record/record/attribute.rb', line 24

def name
  @name
end

Instance Method Details

#default_valueObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



94
95
96
97
98
99
100
# File 'lib/aws-record/record/attribute.rb', line 94

def default_value
  if @default_value_or_lambda.respond_to?(:call)
    @default_value_or_lambda.call
  else
    _deep_copy(@default_value_or_lambda)
  end
end

#extract(dynamodb_item) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/aws-record/record/attribute.rb', line 89

def extract(dynamodb_item)
  dynamodb_item[@database_name]
end

#persist_nil?Boolean

Returns true if this attribute will actively persist nil values, false otherwise. Default: false.

Returns:

  • (Boolean)

    true if this attribute will actively persist nil values, false otherwise. Default: false



84
85
86
# File 'lib/aws-record/record/attribute.rb', line 84

def persist_nil?
  @persist_nil ? true : false
end

#serialize(raw_value) ⇒ Object

Attempts to serialize a raw value into the attribute’s serialized storage type. This call will forward the raw value to this attribute’s marshaler class.

Returns:

  • (Object)

    the serialized object. Return type is dependent on the marshaler used. See your attribute’s marshaler class for details.



76
77
78
79
80
# File 'lib/aws-record/record/attribute.rb', line 76

def serialize(raw_value)
  cast_value = type_cast(raw_value)
  cast_value = default_value if cast_value.nil?
  @marshaler.serialize(cast_value)
end

#type_cast(raw_value) ⇒ Object

Attempts to type cast a raw value into the attribute’s type. This call will forward the raw value to this attribute’s marshaler class.

Returns:

  • (Object)

    the type cast object. Return type is dependent on the marshaler used. See your attribute’s marshaler class for details.



64
65
66
67
68
# File 'lib/aws-record/record/attribute.rb', line 64

def type_cast(raw_value)
  cast_value = @marshaler.type_cast(raw_value)
  cast_value = default_value if cast_value.nil?
  cast_value
end