Class: ActiveFedora::Rdf::Term

Inherits:
Object
  • Object
show all
Defined in:
lib/active_fedora/rdf/term.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent, value_arguments) ⇒ Term

Returns a new instance of Term.



5
6
7
8
# File 'lib/active_fedora/rdf/term.rb', line 5

def initialize(parent, value_arguments)
  self.parent = parent
  self.value_arguments = value_arguments
end

Instance Attribute Details

#node_cache=(value) ⇒ Object

Sets the attribute node_cache

Parameters:

  • value

    the value to set the attribute node_cache to.



3
4
5
# File 'lib/active_fedora/rdf/term.rb', line 3

def node_cache=(value)
  @node_cache = value
end

#parentObject

Returns the value of attribute parent.



3
4
5
# File 'lib/active_fedora/rdf/term.rb', line 3

def parent
  @parent
end

#value_argumentsObject

Returns the value of attribute value_arguments.



3
4
5
# File 'lib/active_fedora/rdf/term.rb', line 3

def value_arguments
  @value_arguments
end

Instance Method Details

#<<(values) ⇒ Object Also known as: push



64
65
66
67
# File 'lib/active_fedora/rdf/term.rb', line 64

def << (values)
  values = Array.wrap(result) | Array.wrap(values)
  self.set(values)
end

#build(attributes = {}) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/active_fedora/rdf/term.rb', line 39

def build(attributes={})
  new_subject = attributes.key?('id') ? attributes.delete('id') : RDF::Node.new
  node = make_node(new_subject)
  node.attributes = attributes
  if parent.kind_of? List::ListResource
    parent.list << node
    return node
  elsif node.kind_of? RDF::List
    self.push node.rdf_subject
    return node
  end
  self.push node
  node
end

#clearObject



10
11
12
# File 'lib/active_fedora/rdf/term.rb', line 10

def clear
  set(nil)
end

#delete(*values) ⇒ Object



58
59
60
61
62
# File 'lib/active_fedora/rdf/term.rb', line 58

def delete(*values)
  values.each do |value|
    parent.delete([rdf_subject, predicate, value])
  end
end

#empty_propertyObject



31
32
33
34
35
36
37
# File 'lib/active_fedora/rdf/term.rb', line 31

def empty_property
  parent.query([rdf_subject, predicate, nil]).each_statement do |statement|
    if !uri_class(statement.object) || uri_class(statement.object) == class_for_property
      parent.delete(statement)
    end
  end
end

#first_or_create(attributes = {}) ⇒ Object



54
55
56
# File 'lib/active_fedora/rdf/term.rb', line 54

def first_or_create(attributes={})
  result.first || build(attributes)
end

#propertyObject



83
84
85
# File 'lib/active_fedora/rdf/term.rb', line 83

def property
  value_arguments.last
end

#property_configObject



71
72
73
74
# File 'lib/active_fedora/rdf/term.rb', line 71

def property_config
  return type_property if (property == RDF.type || property.to_s == "type") && !parent.send(:properties)[property]
  parent.send(:properties)[property]
end

#rdf_subjectObject



87
88
89
90
91
92
93
94
# File 'lib/active_fedora/rdf/term.rb', line 87

def rdf_subject
  raise ArgumentError("wrong number of arguments (#{value_arguments.length} for 1-2)") if value_arguments.length < 1 || value_arguments.length > 2
  if value_arguments.length > 1
    value_arguments.first
  else
    parent.rdf_subject
  end
end

#reset!Object



80
81
# File 'lib/active_fedora/rdf/term.rb', line 80

def reset!
end

#resultObject



14
15
16
17
18
19
20
# File 'lib/active_fedora/rdf/term.rb', line 14

def result
  result = parent.query(:subject => rdf_subject, :predicate => predicate)
  .map{|x| convert_object(x.object)}
  .reject(&:nil?)
  return result if !property_config || property_config[:multivalue]
  result.first
end

#set(values) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/active_fedora/rdf/term.rb', line 22

def set(values)
  values = [values].compact unless values.kind_of?(Array)
  empty_property
  values.each do |val|
    set_value(val)
  end
  parent.persist! if parent.class.repository == :parent && parent.send(:repository)
end

#type_propertyObject



76
77
78
# File 'lib/active_fedora/rdf/term.rb', line 76

def type_property
  {:multivalue => true, :predicate => RDF.type}
end