Module: CouchPotato::Persistence::Properties::ClassMethods
- Defined in:
- lib/couch_potato/persistence/properties.rb
Instance Method Summary collapse
-
#property(name, options = {}) ⇒ Object
Declare a property on a model class.
-
#property_names ⇒ Object
returns all the property names of a model class that have been defined using the #property method.
Instance Method Details
#property(name, options = {}) ⇒ Object
Declare a property on a model class. Properties are not typed by default. You can store anything in a property that can be serialized into JSON. If you want a property to be of a custom class you have to define it using the :type option.
example:
class Book
property :title
property :year
property :publisher, type: Publisher
property :published_at, default: -> { Date.current }
property :next_year, default: ->(book) { book.year + 1 }
end
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/couch_potato/persistence/properties.rb', line 87 def property(name, = {}) # ActiveModel::AttributeMethods.generated_attribute_methods active_support_module = send(:generated_attribute_methods) # Mimic ActiveModel::AttributeMethods.undefine_attribute_methods, but only for this # property's accessor method active_support_module.module_eval do undef_method(name) if instance_methods.include?(name) end cache = send(:attribute_method_matchers_cache) cache.delete(name) define_attribute_method name properties << SimpleProperty.new(self, name, ) # Remove the default ActiveModel::AttributeMethods accessor if active_support_module.instance_methods.include?(name) active_support_module.send(:remove_method, name) end end |
#property_names ⇒ Object
returns all the property names of a model class that have been defined using the #property method
example:
class Book
property :title
property :year
end
Book.property_names # => [:title, :year]
71 72 73 |
# File 'lib/couch_potato/persistence/properties.rb', line 71 def property_names properties.map(&:name) end |