Sha256: 77bce9e4fc626c433ffbbc3c2eaedcef74807c020616cae00a68aa6d26367e72
Contents?: true
Size: 1.7 KB
Versions: 1
Compression:
Stored size: 1.7 KB
Contents
module CouchRest module Mixins module DocumentProperties def self.included(base) base.extend(ClassMethods) end module ClassMethods # Stores the class properties def properties @@properties ||= [] end # This is not a thread safe operation, if you have to set new properties at runtime # make sure to use a mutex. def property(name, options={}) unless properties.map{|p| p.name}.include?(name.to_s) property = CouchRest::Property.new(name, options.delete(:type), options) create_property_getter(property) create_property_setter(property) unless property.read_only == true properties << property end end protected # defines the getter for the property def create_property_getter(property) meth = property.name class_eval <<-EOS def #{meth} self['#{meth}'] end EOS if property.alias class_eval <<-EOS alias #{property.alias.to_sym} #{meth.to_sym} EOS end end # defines the setter for the property def create_property_setter(property) meth = property.name class_eval <<-EOS def #{meth}=(value) self['#{meth}'] = value end EOS if property.alias class_eval <<-EOS alias #{property.alias.to_sym}= #{meth.to_sym}= EOS end end end # module ClassMethods end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
derfred-couchrest-0.12.6.3 | lib/couchrest/mixins/properties.rb |