class Cordage::Adapters::ActiveRecord::Association::Proxy
Public Class Methods
new( model_klass, association_name, associated_klass_instance, options = {} )
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 11 def initialize( model_klass, association_name, associated_klass_instance, options = {} ) @model_klass = model_klass @association_name = association_name @associated_klass_instance = associated_klass_instance @relation_namespace = options[:relation_namespace] || "info:fedora/fedora-system:def/relations-external#" @fedora_namespace = options[:fedora_namespace] || @relation_namespace.split('/').first @relation_property = options[:relation_property] || "has_#{@association_name}" @association_primary_key = options[:primary_key] || @model_klass.primary_key.to_sym ActiveFedora::Predicates.predicate_mappings[@relation_namespace][@relation_property.to_sym] = @relation_property.camelize(:lower) end
Public Instance Methods
<<( new_models )
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 22 def << ( new_models ) models [new_models].flatten.each do |model| unless model.instance_of? @model_klass raise ::ActiveRecord::AssociationTypeMismatch.new("#{@model_klass.to_s}(#{@model_klass.object_id}) expected, got #{model.class.to_s}(#{model.class.object_id})") end @associated_klass_instance.add_relationship(@relation_property.to_sym, RDF::Literal.new(id_to_pid(model))) @models << model unless model.in?(@models) end end
clear()
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 38 def clear @associated_klass_instance.clear_relationship @relation_property.to_sym @models = [] end
delete( model )
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 33 def delete( model ) @models.delete(model) @associated_klass_instance.remove_relationship(@relation_property.to_sym, id_to_pid(model)) end
method_missing(name, *args, &block)
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 48 def method_missing(name, *args, &block) models.send(name, *args, &block) end
reload()
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 43 def reload clear models end
Private Instance Methods
find_models()
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 62 def find_models ids = @associated_klass_instance.relationships(@relation_property.to_sym).map{|property| property.to_s.split('/').last } ids.empty? ? [] : @model_klass.where(@association_primary_key.to_sym =>[ids] ).to_a end
id_to_pid( model )
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 54 def id_to_pid( model ) "#{@fedora_namespace}/#{model.send(@association_primary_key)}" end
models()
click to toggle source
# File lib/cordage/adapters/active_record/association.rb, line 58 def models @models ||= find_models end