Sha256: 46dbb871a143c91c2dd781986e173d5933e271a31adc9baf5886c459c8edc5fb

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module JsonApiClient
  module Attributes
    extend ActiveSupport::Concern

    included do
      attr_reader :attributes
      initialize do |obj, params|
        obj.attributes = params
      end
    end

    def attributes=(attrs = {})
      @attributes ||= {}.with_indifferent_access
      @attributes.merge!(attrs)
    end

    def update_attributes(attrs = {})
      self.attributes = attrs
      save
    end

    def method_missing(method, *args, &block)
      if match = method.to_s.match(/^(.*)=$/)
        set_attribute(match[1], args.first)
      elsif has_attribute?(method)
        attributes[method]
      else
        nil
      end
    end

    def persisted?
      attributes.has_key?(primary_key)
    end

    def query_params
      attributes.except(primary_key)
    end

    def to_param
      attributes.fetch(primary_key, "").to_s
    end

    protected

    def read_attribute(name)
      attributes.fetch(name, nil)
    end

    def set_attribute(name, value)
      attributes[name] = value
    end

    def has_attribute?(attr_name)
      attributes.has_key?(attr_name)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
json_api_client-0.0.3 lib/json_api_client/attributes.rb