Sha256: 109a5ef0e50b3ef83036418876b1ad369399fdc97a7c8306f6d3375d94eb145e

Contents?: true

Size: 1.47 KB

Versions: 13

Compression:

Stored size: 1.47 KB

Contents

require File.expand_path('../../mixins/properties', __FILE__)


module CouchRest
  module CastedModel
    
    def self.included(base)
      base.send(:include, ::CouchRest::Callbacks)
      base.send(:include, ::CouchRest::Mixins::Properties)
      base.send(:attr_accessor, :casted_by)
      base.send(:attr_accessor, :document_saved)
    end
    
    def initialize(keys={})
      raise StandardError unless self.is_a? Hash
      apply_defaults # defined in CouchRest::Mixins::Properties
      super()
      keys.each do |k,v|
        self[k.to_s] = v
      end if keys
      cast_keys      # defined in CouchRest::Mixins::Properties
    end
    
    def []= key, value
      super(key.to_s, value)
    end
    
    def [] key
      super(key.to_s)
    end
    
    # Gets a reference to the top level extended
    # document that a model is saved inside of
    def base_doc
      return nil unless @casted_by
      @casted_by.base_doc
    end
    
    # False if the casted model has already
    # been saved in the containing document
    def new?
      !@document_saved
    end
    alias :new_record? :new?
    
    # Sets the attributes from a hash
    def update_attributes_without_saving(hash)
      hash.each do |k, v|
        raise NoMethodError, "#{k}= method not available, use property :#{k}" unless self.respond_to?("#{k}=")
      end      
      hash.each do |k, v|
        self.send("#{k}=",v)
      end
    end
    alias :attributes= :update_attributes_without_saving
    
  end
end

Version data entries

13 entries across 13 versions & 5 rubygems

Version Path
mattetti-couchrest-0.34 lib/couchrest/more/casted_model.rb
norr-couchrest-0.33.06 lib/couchrest/more/casted_model.rb
norr-couchrest-0.33.07 lib/couchrest/more/casted_model.rb
sporkd-couchrest-0.33 lib/couchrest/more/casted_model.rb
sporkd-couchrest-0.34 lib/couchrest/more/casted_model.rb
couchrest-0.38 lib/couchrest/more/casted_model.rb
samlown-couchrest-0.37.2 lib/couchrest/more/casted_model.rb
samlown-couchrest-0.37.1 lib/couchrest/more/casted_model.rb
samlown-couchrest-0.35 lib/couchrest/more/casted_model.rb
couchrest-0.37 lib/couchrest/more/casted_model.rb
couchrest-0.36 lib/couchrest/more/casted_model.rb
couchrest-0.35 lib/couchrest/more/casted_model.rb
couchrest-0.34 lib/couchrest/more/casted_model.rb