module Arke::Resource::Associations::ClassMethods

Public Instance Methods

belongs_to(name, options={}) click to toggle source
# File lib/arke/resource/associations.rb, line 21
def belongs_to(name, options={})
  # self.associations ||= {}
  # self.associations[name] = {class: infer_class(name, options), options: options}
  # define_method name do
  #   if self.persisted?
  #     instance_variable_set "@#{name}".to_sym, self.class.associations[name][:class].
  #       new(id: self.send("#{name}_id".to_sym)).reload unless instance_variable_get("@#{name}".to_sym)
  #     instance_variable_get("@#{name}".to_sym)
  #   else
  #     nil
  #   end
  # end
end
has_many(name, options={}) click to toggle source
# File lib/arke/resource/associations.rb, line 35
def has_many(name, options={})
  build_association(:has_many, name, '/{parent_resource_name}/{relation_id}/{resource_name}?{query*}', self._collection, options)
end

Private Instance Methods

build_association(type, name, template, klass, options) click to toggle source
# File lib/arke/resource/associations.rb, line 41
def build_association(type, name, template, klass, options)
  self.associations ||= {}
  self.associations[name] = {
    template:   (options[:template] || template),
    class_name: infer_class_name(options.delete(:class_name)|| name.to_s.classify)
  }.merge(options).merge({
                           type:           type,
                           instance_class: klass
                         })
  define_method name do
    association = self.class.associations[name]
    k = association[:class_name].constantize
    set_instance_variable_if_nil("@#{name}", association[:instance_class].new(k, k.send(:get, {
      _template:             association[:template],
      _relation_id:          self.id,
      _resource_name:        k.resource_name,
      _parent_resource_name: self.resource_name
    })))

  end
end
infer_class_name(class_name) click to toggle source
# File lib/arke/resource/associations.rb, line 63
def infer_class_name(class_name)
  "#{self.name.split('::')[0..-2].unshift('').join('::')}::#{class_name}"
end