module ApiResource::Associations::ClassMethods
Public Instance Methods
association?(assoc)
click to toggle source
# File lib/api_resource/associations.rb, line 79 def association?(assoc) self.related_objects.any? do |key, value| next if key.to_s == "scope" value.detect { |k,v| k.to_sym == assoc.to_sym } end end
association_class_name(assoc)
click to toggle source
# File lib/api_resource/associations.rb, line 86 def association_class_name(assoc) raise ArgumentError, "#{assoc} is not a valid association of #{self}" unless self.association?(assoc) result = self.related_objects.detect do |key,value| ret = value.detect{|k,v| k.to_sym == assoc.to_sym } return ret[1] if ret end end
clear_associations()
click to toggle source
# File lib/api_resource/associations.rb, line 94 def clear_associations self.related_objects.each do |_, val| val.clear end end
scope(name, hsh)
click to toggle source
# File lib/api_resource/associations.rb, line 59 def scope(name, hsh) raise ArgumentError, "Expecting an attributes hash given #{hsh.inspect}" unless hsh.is_a?(Hash) self.related_objects[:scope][name.to_sym] = hsh # we also need to define a class method for each scope self.instance_eval <<-EOE, __FILE__, __LINE__ + 1 def #{name}(opts = {}) return ApiResource::Associations::ResourceScope.new(self, :#{name}, opts) end EOE end
scope?(name)
click to toggle source
# File lib/api_resource/associations.rb, line 70 def scope?(name) self.related_objects[:scope][name.to_sym].present? end
scope_attributes(name)
click to toggle source
# File lib/api_resource/associations.rb, line 74 def scope_attributes(name) raise "No such scope #{name}" unless self.scope?(name) self.related_objects[:scope][name.to_sym] end
scopes()
click to toggle source
# File lib/api_resource/associations.rb, line 55 def scopes return self.related_objects[:scope] end
Protected Instance Methods
define_association_as_attribute(assoc_type, assoc_name)
click to toggle source
# File lib/api_resource/associations.rb, line 101 def define_association_as_attribute(assoc_type, assoc_name) define_attributes assoc_name case assoc_type.to_sym when :has_many self.class_eval <<-EOE, __FILE__, __LINE__ + 1 def #{assoc_name} self.attributes[:#{assoc_name}] ||= MultiObjectProxy.new(self.class.to_s, nil) end EOE else self.class_eval <<-EOE, __FILE__, __LINE__ + 1 def #{assoc_name} self.attributes[:#{assoc_name}] ||= SingleObjectProxy.new(self.class.to_s, nil) end EOE end # Always define the setter the same self.class_eval <<-EOE, __FILE__, __LINE__ + 1 def #{assoc_name}=(val) #{assoc_name}_will_change! unless self.#{assoc_name}.internal_object == val self.#{assoc_name}.internal_object = val end EOE end