Class: ActiveFedora::Orders::Builder

Inherits:
Associations::Builder::CollectionAssociation
  • Object
show all
Includes:
AutosaveAssociation::AssociationBuilderExtension
Defined in:
lib/active_fedora/orders/builder.rb

Defined Under Namespace

Modules: FixFirstLast

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, name, options) ⇒ Builder

Returns a new instance of Builder.



17
18
19
20
21
22
23
# File 'lib/active_fedora/orders/builder.rb', line 17

def initialize(model, name, options)
  @original_name = name
  @model = model
  name = :"ordered_#{name.to_s.singularize}_proxies"
  options = {ordered_reflection: ordered_reflection}.merge(options)
  super
end

Class Method Details

.define_readers(mixin, name) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/active_fedora/orders/builder.rb', line 7

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

Instance Method Details

#buildObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/active_fedora/orders/builder.rb', line 42

def build
  super.tap do |result|
    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(result.options[:through])
      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
  end
end