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
58
59
# 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]
  unless dv.nil?
    @default_value_or_lambda = _is_lambda?(dv) ? dv : type_cast(dv)
  end
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.



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

def default_value
  if _is_lambda?(@default_value_or_lambda)
    type_cast(@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.



91
92
93
# File 'lib/aws-record/record/attribute.rb', line 91

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



86
87
88
# File 'lib/aws-record/record/attribute.rb', line 86

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.



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

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.



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

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