Class: ActiveFedora::FinderMethods::RepositoryMethods::Relation
- Inherits:
-
Object
- Object
- ActiveFedora::FinderMethods::RepositoryMethods::Relation
- 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
-
#default_scoped ⇒ Object
Returns the value of attribute default_scoped.
-
#loaded ⇒ Object
(also: #loaded?)
readonly
Returns the value of attribute loaded.
Instance Method Summary collapse
- #find_by(conditions = {}) ⇒ Object
- #find_by!(conditions = {}) ⇒ Object
- #first ⇒ Object
- #first! ⇒ Object
-
#initialize(klass, values = nil) ⇒ Relation
constructor
A new instance of Relation.
- #limit(limit_value) ⇒ Object
- #limit!(limit_value) ⇒ Object
- #load ⇒ Object
- #reset ⇒ Object
- #reset! ⇒ Object
- #spawn ⇒ Object
- #to_a ⇒ Object
- #where(conditions = {}) ⇒ Object
- #where!(conditions = {}) ⇒ Object
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_scoped ⇒ Object
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 |
#loaded ⇒ Object (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
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 |
#first ⇒ Object
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
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 |
#load ⇒ Object
79 80 81 82 |
# File 'lib/active_fedora_finders/relation.rb', line 79 def load @records = fcrepo_find(@values) @loaded = true end |
#reset ⇒ Object
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 |
#spawn ⇒ Object
43 44 45 |
# File 'lib/active_fedora_finders/relation.rb', line 43 def spawn self.class.new(@klass, @values.dup) end |
#to_a ⇒ Object
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 |