Class: ActiveFedora::FinderMethods::RepositoryMethods::Relation

Inherits:
Object
  • Object
show all
Defined in:
lib/active_fedora_finders/relation.rb

Constant Summary collapse

SINGLE_VALUE_FIELDS =
[:pid, :cDate, :mDate, :label]
SYSTEM_FIELDS =
[:ownerId].concat(SINGLE_VALUE_FIELDS)
DC_FIELDS =
[:contributor, :coverage, :creator, :date, :description, :format,
:identifier, :language, :publisher, :relation, :rights, :source,
:subject, :title, :type ]
SUPPORTED_ALTS =
[:cdate, :create_date, :mdate, :modified_date, :owner_id]
ALL_FIELDS =
[].concat(SYSTEM_FIELDS).concat(DC_FIELDS)
FIELD_KEYS =
begin
  fk = Hash[ALL_FIELDS.map {|a| [a.to_s, a]}]
  fk["cdate"] = :cDate
  fk["create_date"] = :cDate
  fk["mdate"] = :mDate
  fk["modified_date"] = :mDate
  fk["owner_id"] = :ownerId
  fk
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, values = nil) ⇒ Relation

Returns a new instance of Relation.



26
27
28
29
30
# File 'lib/active_fedora_finders/relation.rb', line 26

def initialize(klass, values = nil)
  @klass = klass
  @loaded = false
  @values = values || {}
end

Instance Attribute Details

#default_scopedObject

Returns the value of attribute default_scoped.



23
24
25
# File 'lib/active_fedora_finders/relation.rb', line 23

def default_scoped
  @default_scoped
end

#loadedObject (readonly) Also known as: loaded?

Returns the value of attribute loaded.



22
23
24
# File 'lib/active_fedora_finders/relation.rb', line 22

def loaded
  @loaded
end

Instance Method Details

#find_by(conditions = {}) ⇒ Object



98
99
100
# File 'lib/active_fedora_finders/relation.rb', line 98

def find_by(conditions={})
  where(conditions).to_a.first
end

#find_by!(conditions = {}) ⇒ Object

Raises:

  • (ActiveRecord::RecordNotFound)


102
103
104
105
106
# File 'lib/active_fedora_finders/relation.rb', line 102

def find_by!(conditions={})
  r = find_by(conditions)
  raise ActiveRecord::RecordNotFound.new(conditions.inspect) unless r
  r
end

#firstObject



84
85
86
87
88
89
90
# File 'lib/active_fedora_finders/relation.rb', line 84

def first
  if loaded?
    @records.first
  else
    @first ||= limit(1).to_a[0]
  end
end

#first!Object

Raises:

  • (ActiveRecord::RecordNotFound)


92
93
94
95
96
# File 'lib/active_fedora_finders/relation.rb', line 92

def first!
  r = first()
  raise ActiveRecord::RecordNotFound.new(@values.inspect) unless r
  r
end

#limit(limit_value) ⇒ Object



65
66
67
# File 'lib/active_fedora_finders/relation.rb', line 65

def limit(limit_value)
  spawn.limit!(limit_value)
end

#limit!(limit_value) ⇒ Object



69
70
71
72
# File 'lib/active_fedora_finders/relation.rb', line 69

def limit!(limit_value)
  @values[:maxResults] = limit_value
  self
end

#loadObject



79
80
81
82
# File 'lib/active_fedora_finders/relation.rb', line 79

def load
  @records = fcrepo_find(@values)
  @loaded = true
end

#resetObject



32
33
34
# File 'lib/active_fedora_finders/relation.rb', line 32

def reset
  spawn.reset!
end

#reset!Object



36
37
38
39
40
41
# File 'lib/active_fedora_finders/relation.rb', line 36

def reset!
  @values.delete_if {|k,v| true}
  @loaded = false
  @records = nil
  self
end

#spawnObject



43
44
45
# File 'lib/active_fedora_finders/relation.rb', line 43

def spawn
  self.class.new(@klass, @values.dup)
end

#to_aObject



74
75
76
77
# File 'lib/active_fedora_finders/relation.rb', line 74

def to_a
  load
  @records
end

#where(conditions = {}) ⇒ Object



47
48
49
# File 'lib/active_fedora_finders/relation.rb', line 47

def where(conditions={})
  spawn.where!(conditions)
end

#where!(conditions = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/active_fedora_finders/relation.rb', line 51

def where!(conditions={})
  query = (@values[:query] ||= {})
  conditions.each do |k,v|
    k = FIELD_KEYS[k.to_s]
    v = Array(v)
    if query[k] and not SINGLE_VALUE_FIELDS.include?(k)
      query[k] = (Array(query[k]) + v).uniq
    else
      query[k] = v[1] ? v : v.first
    end
  end
  self
end