Module | AWS::Record::AttributeMacros |
In: |
lib/aws/record/attribute_macros.rb
|
Adds a boolean attribute to this class.
@example
class Book < AWS::Record::Base boolean_attr :read end b = Book.new b.read? # => false b.read = true b.read? # => true listing = Listing.new(:score => '123.456' listing.score # => 123.456
@param [Symbol] name The name of the attribute.
Adds a datetime attribute to this class.
@example A standard datetime attribute
class Recipe < AWS::Record::Base datetime_attr :invented end recipe = Recipe.new(:invented => Time.now) recipe.invented #=> <DateTime ...>
If you add a datetime_attr for +:created_at+ and/or +:updated_at+ those will be automanaged.
@param [Symbol] name The name of the attribute. @param [Hash] options @option options [Integer] :precision When set, the integer will be
serialized with the correct number of digits to SimpleDB, left padded by zeros to allow sorting.
@option options [Boolean] :set (false) When true this attribute
can have multiple values.
Adds a float attribute to this class.
class Listing < AWS::Record::Base float_attr :score end listing = Listing.new(:score => '123.456') listing.score # => 123.456
@param [Symbol] name The name of the attribute. @param [Hash] options @option options [Boolean] :set (false) When true this attribute
can have multiple values.
Adds an integer attribute to this class.
class Recipe < AWS::Record::Base integer_attr :servings end recipe = Recipe.new(:servings => '10') recipe.servings #=> 10
@param [Symbol] name The name of the attribute. @param [Hash] options @option options [Boolean] :set (false) When true this attribute
can have multiple values.
Adds sortable float attribute to this class.
Persisted values are stored (and sorted) as strings. This makes it more difficult to sort numbers because they don‘t sort lexicographically unless they have been offset to be positive and then zero padded.
To store floats in a sort-friendly manor:
sortable_float_attr :score, :range => (0..10)
This will cause values like 5.5 to persist as a string like ‘05.5’ so that they can be sorted lexicographically.
If you need to store negative sortable floats, increase your +:range+ to include a negative value.
sortable_float_attr :position, :range => (-10..10)
AWS::Record will add 10 to all values and zero pad them (e.g. -10.0 will be represented as ‘00.0’ and 10 will be represented as ‘20.0’). This will allow the values to be compared lexicographically.
@note If you change the +:range+ after some values have been persisted
you must also manually migrate all of the old values to have the correct padding & offset or they will be interpreted differently.
@param [Symbol] name The name of the attribute. @param [Hash] options @option options [Range] :range The range of numbers this attribute
should represent. The min and max values of this range will determine how many digits of precision are required and how much of an offset is required to make the numbers sort lexicographically.
@option options [Boolean] :set (false) When true this attribute
can have multiple values.
Adds a sortable integer attribute to this class.
class Person < AWS::Record::Base sortable_integer_attr :age, :range => 0..150 end person = Person.new(:age => 10) person.age #=> 10
It is recomended to apply a validates_numericality_of with minimum and maximum value constraints. If a value is assigned to a sortable integer that falls outside of the +:range: it will raise a runtime error when the record is saved.
Because SimpleDB does not support numeric types, all values must be converted to strings. This complicates sorting by numeric values. To accomplish sorting numeric attributes the values must be zero padded and have an offset applied to eliminate negative values.
@param [Symbol] name The name of the attribute. @param [Hash] options @option options [Range] :range A numeric range the represents the
minimum and maximum values this attribute should accept.
@option options [Boolean] :set (false) When true this attribute
can have multiple values.
Adds a string attribute to this class.
@example A standard string attribute
class Recipe < AWS::Record::Base string_attr :name end recipe = Recipe.new(:name => "Buttermilk Pancakes") recipe.name #=> 'Buttermilk Pancakes'
@example A string attribute with +:set+ set to true
class Recipe < AWS::Record::Base string_attr :tags, :set => true end recipe = Recipe.new(:tags => %w(popular dessert)) recipe.tags #=> #<Set: {"popular", "desert"}>
@param [Symbol] name The name of the attribute. @param [Hash] options @option options [Boolean] :set (false) When true this attribute
can have multiple values.