class ActiveFedora::Orders::Builder

Public Class Methods

build(model, name, options) click to toggle source
Calls superclass method
# File lib/active_fedora/orders/builder.rb, line 22
def self.build(model, name, options)
  options = { unordered_reflection: unordered_reflection(model, name)}.merge(options)
  name = :"ordered_#{name.to_s.singularize}_proxies"
  model.property :head, predicate: ::RDF::Vocab::IANA['first']
  model.property :tail, predicate: ::RDF::Vocab::IANA.last
  model.send(:define_method, :apply_first_and_last) do
    source = send(options[:through])
    source.save
    return if head.map(&:rdf_subject) == source.head_id && tail.map(&:rdf_subject) == source.tail_id
    self.head = source.head_id
    self.tail = source.tail_id
    save! if changed?
  end
  model.include ActiveFedora::Orders::Builder::FixFirstLast
  super
end
create_reflection(model, name, scope, options, extension = nil) click to toggle source
# File lib/active_fedora/orders/builder.rb, line 39
def self.create_reflection(model, name, scope, options, extension = nil)
  unless name.is_a?(Symbol)
    name = name.to_sym
    Deprecation.warn(ActiveFedora::Base, "association names must be a Symbol")
  end
  validate_options(options)
  translate_property_to_predicate(options)

  scope = build_scope(scope, extension)
  name = better_name(name)

  ActiveFedora::Orders::Reflection.create(macro, name, scope, options, model)
end
define_readers(mixin, name) click to toggle source
Calls superclass method
# File lib/active_fedora/orders/builder.rb, line 12
def self.define_readers(mixin, name)
  super
  mixin.redefine_method(target_accessor(name)) do
    association(name).target_reader
  end
  mixin.redefine_method("#{target_accessor(name)}=") do |nodes|
    association(name).target_writer(nodes)
  end
end
macro() click to toggle source
# File lib/active_fedora/orders/builder.rb, line 4
def self.macro
  :orders
end
valid_options(options) click to toggle source
Calls superclass method
# File lib/active_fedora/orders/builder.rb, line 8
def self.valid_options(options)
  super + [:through, :unordered_reflection]
end

Private Class Methods

target_accessor(name) click to toggle source
# File lib/active_fedora/orders/builder.rb, line 72
def self.target_accessor(name)
  name.to_s.gsub("_proxies","").pluralize
end
unordered_reflection(model, original_name) click to toggle source
# File lib/active_fedora/orders/builder.rb, line 76
def self.unordered_reflection(model, original_name)
  model._reflect_on_association(original_name)
end