Sha256: 21f1463eedddbd88a8f6da296b863c5513b53a9235a4981a55e8c89744b61607

Contents?: true

Size: 1.68 KB

Versions: 3

Compression:

Stored size: 1.68 KB

Contents

module CouchRest::Model
  module CastedModel

    extend ActiveSupport::Concern

    included do
      include CouchRest::Model::Configuration
      include CouchRest::Model::Callbacks
      include CouchRest::Model::Properties
      include CouchRest::Model::PropertyProtection
      include CouchRest::Model::Associations
      include CouchRest::Model::Validations
      include CouchRest::Model::CastedBy
      include CouchRest::Model::Dirty
      class_eval do
        # Override CastedBy's base_doc?
        def base_doc?
          false # Can never be base doc!
        end
      end
    end

    def initialize(keys = {})
      raise StandardError unless self.is_a? Hash
      prepare_all_attributes(keys)
      super()
    end

    def []= key, value
      super(key.to_s, value)
    end

    def [] key
      super(key.to_s)
    end

    # False if the casted model has already
    # been saved in the containing document
    def new?
      casted_by.nil? ? true : casted_by.new?
    end
    alias :new_record? :new?

    def persisted?
      !new?
    end

    # The to_param method is needed for rails to generate resourceful routes.
    # In your controller, remember that it's actually the id of the document.
    def id
      return nil if base_doc.nil?
      base_doc.id
    end
    alias :to_key :id
    alias :to_param :id

    # 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

3 entries across 3 versions & 1 rubygems

Version Path
couchrest_model-1.1.0.rc1 lib/couchrest/model/casted_model.rb
couchrest_model-1.1.0.beta5 lib/couchrest/model/casted_model.rb
couchrest_model-1.1.0.beta4 lib/couchrest/model/casted_model.rb