Class: ActiveFedora::Relation
- Inherits:
-
Object
- Object
- ActiveFedora::Relation
- Defined in:
- lib/active_fedora/relation.rb
Instance Attribute Summary collapse
-
#limit_value ⇒ Object
Returns the value of attribute limit_value.
-
#loaded ⇒ Object
(also: #loaded?)
readonly
Returns the value of attribute loaded.
-
#order_values ⇒ Object
Returns the value of attribute order_values.
-
#where_values ⇒ Object
Returns the value of attribute where_values.
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#all(*args) ⇒ Object
A convenience wrapper for
find(:all, *args)
. - #delete_all(conditions = nil) ⇒ Object
-
#destroy_all(conditions = nil) ⇒ Object
Destroys the records matching
conditions
by instantiating each record and calling itsdestroy
method. -
#find(*args) ⇒ Object
Returns an Array of objects of the Class that
find
is being called on. - #find_some(ids, cast) ⇒ Object
- #find_with_ids(ids, cast) ⇒ Object
-
#first ⇒ Object
Returns the first records that was found.
-
#initialize(klass) ⇒ Relation
constructor
A new instance of Relation.
- #inspect ⇒ Object
-
#limit(value) ⇒ Object
Limits the number of returned records to the value specified.
-
#order(*args) ⇒ Object
Order the returned records by the field and direction provided.
- #reset ⇒ Object
- #to_a ⇒ Object
-
#where(opts) ⇒ Object
Limits the returned records to those that match the provided search conditions.
Constructor Details
#initialize(klass) ⇒ Relation
Returns a new instance of Relation.
9 10 11 12 13 14 |
# File 'lib/active_fedora/relation.rb', line 9 def initialize(klass) @klass = klass @loaded = false self.where_values = [] self.order_values = [] end |
Instance Attribute Details
#limit_value ⇒ Object
Returns the value of attribute limit_value.
7 8 9 |
# File 'lib/active_fedora/relation.rb', line 7 def limit_value @limit_value end |
#loaded ⇒ Object (readonly) Also known as: loaded?
Returns the value of attribute loaded.
4 5 6 |
# File 'lib/active_fedora/relation.rb', line 4 def loaded @loaded end |
#order_values ⇒ Object
Returns the value of attribute order_values.
7 8 9 |
# File 'lib/active_fedora/relation.rb', line 7 def order_values @order_values end |
#where_values ⇒ Object
Returns the value of attribute where_values.
7 8 9 |
# File 'lib/active_fedora/relation.rb', line 7 def where_values @where_values end |
Instance Method Details
#==(other) ⇒ Object
152 153 154 155 156 157 158 159 |
# File 'lib/active_fedora/relation.rb', line 152 def ==(other) case other when Relation other.where_values == where_values when Array to_a == other end end |
#all(*args) ⇒ Object
A convenience wrapper for find(:all, *args)
. You can pass in all the same arguments to this method as you can to find(:all)
.
134 135 136 |
# File 'lib/active_fedora/relation.rb', line 134 def all(*args) args.any? ? (args.first).to_a : to_a end |
#delete_all(conditions = nil) ⇒ Object
199 200 201 202 203 204 205 |
# File 'lib/active_fedora/relation.rb', line 199 def delete_all(conditions = nil) if conditions where(conditions).delete_all else to_a.each {|object| object.delete }.tap { reset } end end |
#destroy_all(conditions = nil) ⇒ Object
Destroys the records matching conditions
by instantiating each record and calling its destroy
method. Each object’s callbacks are executed (including :dependent
association options and before_destroy
/after_destroy
Observer methods). Returns the collection of objects that were destroyed; each will be frozen, to reflect that no changes should be made (since they can’t be persisted).
Note: Instantiation, callback execution, and deletion of each record can be time consuming when you’re removing many records at once. It generates at least one fedora DELETE
query per record (or possibly more, to enforce your callbacks). If you want to delete many rows quickly, without concern for their associations or callbacks, use delete_all
instead.
Parameters
-
conditions
- A string, array, or hash that specifies which records to destroy. If omitted, all records are destroyed. See the Conditions section in the ActiveFedora::Relation#where for more information.
Examples
Person.destroy_all(:status_s => "inactive")
Person.where(:age_i => 18).destroy_all
191 192 193 194 195 196 197 |
# File 'lib/active_fedora/relation.rb', line 191 def destroy_all(conditions = nil) if conditions where(conditions).destroy_all else to_a.each {|object| object.destroy }.tap { reset } end end |
#find(*args) ⇒ Object
Returns an Array of objects of the Class that find
is being called on
@param args either a pid or :all or a hash of conditions
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/active_fedora/relation.rb', line 85 def find(*args) return to_a.find { |*block_args| yield(*block_args) } if block_given? = args. # TODO is there any reason not to cast? cast = .delete(:cast) if [:sort] # Deprecate sort sometime? sort = .delete(:sort) [:order] ||= sort if sort.present? end if .present? = {conditions: } ().all else case args.first when :first, :last, :all send(args.first) else find_with_ids(args, cast) end end end |
#find_some(ids, cast) ⇒ Object
128 129 130 |
# File 'lib/active_fedora/relation.rb', line 128 def find_some(ids, cast) ids.map{|id| @klass.find_one(id, cast)} end |
#find_with_ids(ids, cast) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/active_fedora/relation.rb', line 111 def find_with_ids(ids, cast) expects_array = ids.first.kind_of?(Array) return ids.first if expects_array && ids.first.empty? ids = ids.flatten.compact.uniq case ids.size when 0 raise ArgumentError, "Couldn't find #{@klass.name} without an ID" when 1 result = @klass.find_one(ids.first, cast) expects_array ? [ result ] : result else find_some(ids, cast) end end |
#first ⇒ Object
Returns the first records that was found.
28 29 30 31 32 33 34 |
# File 'lib/active_fedora/relation.rb', line 28 def first if loaded? @records.first else @first ||= limit(1).to_a[0] end end |
#inspect ⇒ Object
161 162 163 |
# File 'lib/active_fedora/relation.rb', line 161 def inspect to_a.inspect end |
#limit(value) ⇒ Object
Limits the number of returned records to the value specified
43 44 45 46 47 |
# File 'lib/active_fedora/relation.rb', line 43 def limit(value) relation = clone relation.limit_value = value relation end |
#order(*args) ⇒ Object
Order the returned records by the field and direction provided
70 71 72 73 74 75 76 |
# File 'lib/active_fedora/relation.rb', line 70 def order(*args) return self if args.blank? relation = clone relation.order_values += args.flatten relation end |
#reset ⇒ Object
16 17 18 19 20 |
# File 'lib/active_fedora/relation.rb', line 16 def reset @first = @loaded = nil @records = [] self end |
#to_a ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/active_fedora/relation.rb', line 140 def to_a return @records if loaded? args = {} #:cast=>true} args[:rows] = @limit_value if @limit_value args[:sort] = @order_values if @order_values query = @where_values.present? ? @where_values : {} @records = @klass.to_enum(:find_each, query, args).to_a @records end |
#where(opts) ⇒ Object
Limits the returned records to those that match the provided search conditions
56 57 58 59 60 61 |
# File 'lib/active_fedora/relation.rb', line 56 def where(opts) return self if opts.blank? relation = clone relation.where_values = opts relation end |