Module: ActiveEntity::AttributeMethods
- Extended by:
- ActiveSupport::Autoload, ActiveSupport::Concern
- Includes:
- AMAttributeMethods
- Included in:
- Base
- Defined in:
- lib/active_entity/attribute_methods.rb,
lib/active_entity.rb,
lib/active_entity/attribute_methods/read.rb,
lib/active_entity/attribute_methods/dirty.rb,
lib/active_entity/attribute_methods/query.rb,
lib/active_entity/attribute_methods/write.rb,
lib/active_entity/attribute_methods/primary_key.rb,
lib/active_entity/attribute_methods/serialization.rb,
lib/active_entity/attribute_methods/before_type_cast.rb,
lib/active_entity/attribute_methods/time_zone_conversion.rb
Overview
Active Entity Attribute Methods
Defined Under Namespace
Modules: BeforeTypeCast, ClassMethods, Dirty, PrimaryKey, Query, Read, Serialization, TimeZoneConversion, Write Classes: GeneratedAttributeMethods
Constant Summary collapse
- RESTRICTED_CLASS_METHODS =
%w(private public protected allocate new name parent superclass)
Constants included from AMAttributeMethods
ActiveEntity::AMAttributeMethods::CALL_COMPILABLE_REGEXP, ActiveEntity::AMAttributeMethods::NAME_COMPILABLE_REGEXP
Class Method Summary collapse
Instance Method Summary collapse
-
#[](attr_name) ⇒ Object
Returns the value of the attribute identified by
attr_name
after it has been typecast (for example, “2004-12-12” in a date column is cast to a date object, like Date.new(2004, 12, 12)). -
#[]=(attr_name, value) ⇒ Object
Updates the attribute identified by
attr_name
with the specifiedvalue
. -
#_has_attribute?(attr_name) ⇒ Boolean
:nodoc:.
-
#attribute_for_inspect(attr_name) ⇒ Object
Returns an
#inspect
-like string for the value of the attributeattr_name
. -
#attribute_names ⇒ Object
Returns an array of names for the attributes available on this object.
-
#attribute_present?(attr_name) ⇒ Boolean
Returns
true
if the specifiedattribute
has been set by the user or by a database load and is neithernil
norempty?
(the latter only applies to objects that respond toempty?
, most notably Strings). -
#attributes ⇒ Object
Returns a hash of all the attributes with their names as keys and the values of the attributes as values.
-
#has_attribute?(attr_name) ⇒ Boolean
Returns
true
if the given attribute is in the attributes hash, otherwisefalse
.
Methods included from AMAttributeMethods
#attribute_missing, #method_missing, #respond_to?, #respond_to_without_attributes?
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class ActiveEntity::AMAttributeMethods
Class Method Details
.dangerous_attribute_methods ⇒ Object
:nodoc:
523 524 525 526 527 528 529 530 |
# File 'lib/active_entity/attribute_methods.rb', line 523 def dangerous_attribute_methods # :nodoc: @dangerous_attribute_methods ||= ( Base.instance_methods + Base.private_instance_methods - Base.superclass.instance_methods - Base.superclass.private_instance_methods ).map { |m| -m.to_s }.to_set.freeze end |
Instance Method Details
#[](attr_name) ⇒ Object
Returns the value of the attribute identified by attr_name
after it has been typecast (for example, “2004-12-12” in a date column is cast to a date object, like Date.new(2004, 12, 12)). It raises ActiveModel::MissingAttributeError
if the identified attribute is missing.
Note: :id
is always present.
class Person < ActiveEntity::Base
belongs_to :organization
end
person = Person.new(name: 'Francesco', age: '22')
person[:name] # => "Francesco"
person[:age] # => 22
person = Person.select('id').first
person[:name] # => ActiveModel::MissingAttributeError: missing attribute: name
person[:organization_id] # => ActiveModel::MissingAttributeError: missing attribute: organization_id
786 787 788 |
# File 'lib/active_entity/attribute_methods.rb', line 786 def [](attr_name) read_attribute(attr_name) { |n| missing_attribute(n, caller) } end |
#[]=(attr_name, value) ⇒ Object
Updates the attribute identified by attr_name
with the specified value
. (Alias for the protected #write_attribute method).
class Person < ActiveEntity::Base
end
person = Person.new
person[:age] = '22'
person[:age] # => 22
person[:age].class # => Integer
800 801 802 |
# File 'lib/active_entity/attribute_methods.rb', line 800 def []=(attr_name, value) write_attribute(attr_name, value) end |
#_has_attribute?(attr_name) ⇒ Boolean
:nodoc:
698 699 700 |
# File 'lib/active_entity/attribute_methods.rb', line 698 def _has_attribute?(attr_name) # :nodoc: @attributes.key?(attr_name) end |
#attribute_for_inspect(attr_name) ⇒ Object
Returns an #inspect
-like string for the value of the attribute attr_name
. String attributes are truncated up to 50 characters, Date and Time attributes are returned in the :db
format. Other attributes return the value of #inspect
without modification.
person = Person.create!(name: 'David Heinemeier Hansson ' * 3)
person.attribute_for_inspect(:name)
# => "\"David Heinemeier Hansson David Heinemeier Hansson ...\""
person.attribute_for_inspect(:created_at)
# => "\"2012-10-22 00:15:07\""
person.attribute_for_inspect(:tag_ids)
# => "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]"
742 743 744 745 746 |
# File 'lib/active_entity/attribute_methods.rb', line 742 def attribute_for_inspect(attr_name) attr_name = attr_name.to_s value = _read_attribute(attr_name) format_for_inspect(value) end |
#attribute_names ⇒ Object
Returns an array of names for the attributes available on this object.
class Person < ActiveEntity::Base
end
person = Person.new
person.attribute_names
# => ["id", "created_at", "updated_at", "name", "age"]
710 711 712 |
# File 'lib/active_entity/attribute_methods.rb', line 710 def attribute_names @attributes.keys end |
#attribute_present?(attr_name) ⇒ Boolean
Returns true
if the specified attribute
has been set by the user or by a database load and is neither nil
nor empty?
(the latter only applies to objects that respond to empty?
, most notably Strings). Otherwise, false
. Note that it always returns true
with boolean attributes.
class Task < ActiveEntity::Base
end
task = Task.new(title: '', is_done: false)
task.attribute_present?(:title) # => false
task.attribute_present?(:is_done) # => true
task.title = 'Buy milk'
task.is_done = true
task.attribute_present?(:title) # => true
task.attribute_present?(:is_done) # => true
763 764 765 766 767 |
# File 'lib/active_entity/attribute_methods.rb', line 763 def attribute_present?(attr_name) attr_name = attr_name.to_s value = _read_attribute(attr_name) !value.nil? && !(value.respond_to?(:empty?) && value.empty?) end |
#attributes ⇒ Object
Returns a hash of all the attributes with their names as keys and the values of the attributes as values.
class Person < ActiveEntity::Base
end
person = Person.create(name: 'Francesco', age: 22)
person.attributes
# => {"id"=>3, "created_at"=>Sun, 21 Oct 2012 04:53:04, "updated_at"=>Sun, 21 Oct 2012 04:53:04, "name"=>"Francesco", "age"=>22}
722 723 724 |
# File 'lib/active_entity/attribute_methods.rb', line 722 def attributes @attributes.to_hash end |
#has_attribute?(attr_name) ⇒ Boolean
Returns true
if the given attribute is in the attributes hash, otherwise false
.
class Person < ActiveEntity::Base
alias_attribute :new_name, :name
end
person = Person.new
person.has_attribute?(:name) # => true
person.has_attribute?(:new_name) # => true
person.has_attribute?('age') # => true
person.has_attribute?(:nothing) # => false
692 693 694 695 696 |
# File 'lib/active_entity/attribute_methods.rb', line 692 def has_attribute?(attr_name) attr_name = attr_name.to_s attr_name = self.class.attribute_aliases[attr_name] || attr_name @attributes.key?(attr_name) end |