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