Module: AWS::Record::AbstractBase::ClassMethods
- Defined in:
- lib/aws/record/abstract_base.rb
Instance Method Summary collapse
- #add_attribute(attribute) ⇒ Object
- #attribute_for(attribute_name, &block) ⇒ Object
-
#attributes ⇒ Hash<String,Attribute>
Returns a hash of all of the configured attributes for this class.
- #new_scope ⇒ Object
- #optimistic_locking(attribute_name = :version_id) ⇒ Object
-
#optimistic_locking? ⇒ Boolean
Returns true if this class is configured to perform optimistic locking.
- #optimistic_locking_attr ⇒ Object
-
#scope(name, scope = nil, &block) ⇒ Object
Adds a scoped finder to this class.
-
#set_shard_name(name) ⇒ Object
(also: #set_domain_name, #shard_name=)
Allows you to override the default shard name for this class.
-
#shard_name(name = nil) ⇒ String
(also: #domain_name)
Returns the name of the shard this class will persist records into by default.
Instance Method Details
#add_attribute(attribute) ⇒ Object
595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 |
# File 'lib/aws/record/abstract_base.rb', line 595 def add_attribute attribute attr_name = attribute.name attributes[attr_name] = attribute # setter define_method("#{attr_name}=") do |value| self[attr_name] = value end # getter define_method(attr_name) do self[attr_name] end # before type-cast getter define_method("#{attr_name}_before_type_cast") do @_data[attr_name] end ## dirty tracking methods define_method("#{attr_name}_changed?") do attribute_changed?(attr_name) end define_method("#{attr_name}_change") do attribute_change(attr_name) end define_method("#{attr_name}_was") do attribute_was(attr_name) end define_method("#{attr_name}_will_change!") do attribute_will_change!(attr_name) end define_method("reset_#{attr_name}!") do reset_attribute!(attr_name) end attribute end |
#attribute_for(attribute_name, &block) ⇒ Object
587 588 589 590 591 592 |
# File 'lib/aws/record/abstract_base.rb', line 587 def attribute_for attribute_name, &block unless attribute = attributes[attribute_name.to_s] raise UndefinedAttributeError.new(attribute_name.to_s) end block_given? ? yield(attribute) : attribute end |
#attributes ⇒ Hash<String,Attribute>
Returns a hash of all of the configured attributes for this class.
582 583 584 |
# File 'lib/aws/record/abstract_base.rb', line 582 def attributes @attributes ||= {} end |
#new_scope ⇒ Object
560 561 562 |
# File 'lib/aws/record/abstract_base.rb', line 560 def new_scope self::Scope.new(self) end |
#optimistic_locking(attribute_name = :version_id) ⇒ Object
564 565 566 567 |
# File 'lib/aws/record/abstract_base.rb', line 564 def optimistic_locking attribute_name = :version_id attribute = integer_attr(attribute_name) @optimistic_locking_attr = attribute end |
#optimistic_locking? ⇒ Boolean
Returns true if this class is configured to perform optimistic locking.
571 572 573 |
# File 'lib/aws/record/abstract_base.rb', line 571 def optimistic_locking? !!@optimistic_locking_attr end |
#optimistic_locking_attr ⇒ Object
576 577 578 |
# File 'lib/aws/record/abstract_base.rb', line 576 def optimistic_locking_attr @optimistic_locking_attr end |
#scope(name, scope = nil, &block) ⇒ Object
Adds a scoped finder to this class.
class Book < AWS::Record::Model
scope :top_10, order(:popularity, :desc).limit(10)
end
Book.top_10.to_a
#=> [#<Book...>, #<Book...>]
Book.top_10.first
#=> #<Book...>
You can also provide a block that accepts params for the scoped finder. This block should return a scope.
class Book < AWS::Record::Model
scope :by_author, lambda {|name| where(:author => name) }
end
# top 10 books by the author 'John Doe'
Book.('John Doe').top_10
551 552 553 554 555 556 557 |
# File 'lib/aws/record/abstract_base.rb', line 551 def scope name, scope = nil, &block method_definition = scope ? lambda { scope } : block extend(Module.new { define_method(name, &method_definition) }) end |
#set_shard_name(name) ⇒ Object Also known as: set_domain_name,
Allows you to override the default shard name for this class. The shard name defaults to the class name.
500 501 502 |
# File 'lib/aws/record/abstract_base.rb', line 500 def set_shard_name name @_shard_name = name end |
#shard_name(name = nil) ⇒ String Also known as: domain_name
Returns the name of the shard this class will persist records into by default.
511 512 513 514 515 516 517 518 519 520 521 |
# File 'lib/aws/record/abstract_base.rb', line 511 def shard_name name = nil case name when nil @_shard_name || self.name when AWS::DynamoDB::Table name.name.gsub(/^#{Record::table_prefix}/, '') when AWS::SimpleDB::Domain name.name.gsub(/^#{Record::domain_prefix}/, '') else name end end |