Sha256: ad7118927e91538bd3e0e757c47f6e235952090ae771259a642720ca8e80bb0b
Contents?: true
Size: 1.5 KB
Versions: 5
Compression:
Stored size: 1.5 KB
Contents
module Toy class Attribute attr_reader :model, :name, :type, :options def initialize(model, name, type, options={}) options.assert_valid_keys(:default, :embedded_list, :virtual, :abbr) @model, @name, @type, @options = model, name.to_s, type, options @virtual = options.fetch(:virtual, false) if abbr? options[:abbr] = abbr.to_s model.alias_attribute(abbr, name) end model.attributes[name.to_s] = self end def from_store(value) value = default if default? && value.nil? type.from_store(value, self) end def to_store(value) value = default if default? && value.nil? type.to_store(value, self) end def default if options.key?(:default) options[:default].respond_to?(:call) ? options[:default].call : options[:default] else type.respond_to?(:store_default) ? type.store_default : nil end end def default? options.key?(:default) || type.respond_to?(:store_default) end def virtual? @virtual end def persisted? !virtual? end def abbr? options.key?(:abbr) end def abbr options[:abbr] end def persisted_name abbr? ? abbr : name end # Stores reference to related embedded list def embedded_list options[:embedded_list] end def eql?(other) self.class.eql?(other.class) && model == other.model && name == other.name end alias :== :eql? end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
toystore-0.8.3 | lib/toy/attribute.rb |
toystore-0.8.2 | lib/toy/attribute.rb |
toystore-0.8.1 | lib/toy/attribute.rb |
toystore-0.8.0 | lib/toy/attribute.rb |
toystore-0.7.0 | lib/toy/attribute.rb |