module Proxima::Attributes::ClassMethods

Public Instance Methods

attribute(attribute, klass = nil, json_path = nil, params = nil) click to toggle source
# File lib/proxima/attributes.rb, line 50
def attribute(attribute, klass = nil, json_path = nil, params = nil)
  params ||= json_path if json_path.is_a? Hash
  params ||= klass     if klass.is_a? Hash
  params ||= {}

  params[:klass]     ||= klass     if klass.is_a? Class
  params[:json_path] ||= json_path if json_path.is_a? String
  params[:json_path] ||= klass     if klass.is_a? String
  params[:json_path] ||= attribute.to_s

  # Create attribute accessors
  attr_reader attribute
  define_method("#{attribute}=") do |value|
    self.persisted = false
    attribute_will_change! attribute
    self.instance_variable_set "@#{attribute}", value
    Proxima.watch value do
      attribute_will_change! attribute
    end
  end

  # Create attribute? methods
  define_method "#{attribute}?" do
    self.instance_variable_get("@#{attribute}") != nil
  end

  # Create suffixed/prefixed attribute methods
  self.define_attribute_method attribute

  self.attributes[attribute] = params
end
attributes() click to toggle source
# File lib/proxima/attributes.rb, line 46
def attributes
  @attributes ||= {}
end