Class: ActiveFedora::Relation
- Inherits:
-
Object
- Object
- ActiveFedora::Relation
- Includes:
- Calculations, Delegation, FinderMethods, QueryMethods, SpawnMethods
- Defined in:
- lib/active_fedora/relation.rb,
lib/active_fedora/relation/merger.rb
Direct Known Subclasses
Defined Under Namespace
Classes: HashMerger, Merger
Instance Attribute Summary collapse
-
#default_scoped ⇒ Object
Returns the value of attribute default_scoped.
-
#klass ⇒ Object
Returns the value of attribute klass.
-
#loaded ⇒ Object
(also: #loaded?)
readonly
Returns the value of attribute loaded.
-
#values ⇒ Object
Returns the value of attribute values.
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#create(*args, &block) ⇒ Object
Tries to create a new record with the same scoped attributes defined in the relation.
- #delete_all(conditions = nil) ⇒ Object
-
#destroy_all(conditions = nil) ⇒ Object
Destroys the records matching
conditions
by instantiating each record and calling itsdestroy
method. -
#initialize(klass, values = {}) ⇒ Relation
constructor
A new instance of Relation.
-
#initialize_copy(other) ⇒ Object
This method gets called on clone.
- #inspect ⇒ Object
- #reset ⇒ Object
- #to_a ⇒ Object
Methods included from FinderMethods
#exists?, #find, #find_each, #find_in_batches, #find_one, #find_with_conditions, #first, #last
Methods included from Calculations
Methods included from SpawnMethods
Methods included from QueryMethods
#build_where, #extending!, #extending_values, #extending_values=, #limit, #limit!, #limit_value, #limit_value=, #none!, #offset, #offset!, #offset_value, #offset_value=, #order, #order!, #order_values, #order_values=, #select, #where, #where!, #where_values, #where_values=
Methods included from Delegation
Constructor Details
#initialize(klass, values = {}) ⇒ Relation
Returns a new instance of Relation.
13 14 15 16 17 |
# File 'lib/active_fedora/relation.rb', line 13 def initialize(klass, values = {}) @klass = klass @loaded = false @values = {} end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class ActiveFedora::Delegation
Instance Attribute Details
#default_scoped ⇒ Object
Returns the value of attribute default_scoped.
8 9 10 |
# File 'lib/active_fedora/relation.rb', line 8 def default_scoped @default_scoped end |
#klass ⇒ Object
Returns the value of attribute klass.
11 12 13 |
# File 'lib/active_fedora/relation.rb', line 11 def klass @klass end |
#loaded ⇒ Object (readonly) Also known as: loaded?
Returns the value of attribute loaded.
7 8 9 |
# File 'lib/active_fedora/relation.rb', line 7 def loaded @loaded end |
#values ⇒ Object
Returns the value of attribute values.
11 12 13 |
# File 'lib/active_fedora/relation.rb', line 11 def values @values end |
Instance Method Details
#==(other) ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/active_fedora/relation.rb', line 67 def ==(other) case other when Relation other.where_values == where_values when Array to_a == other end end |
#create(*args, &block) ⇒ Object
Tries to create a new record with the same scoped attributes defined in the relation. Returns the initialized object if validation fails.
Expects arguments in the same format as Base.create
.
Examples
users = User.where(name: 'Oscar')
users.create # #<User id: 3, name: "oscar", ...>
users.create(name: 'fxn')
users.create # #<User id: 4, name: "fxn", ...>
users.create { |user| user.name = 'tenderlove' }
# #<User id: 5, name: "tenderlove", ...>
users.create(name: nil) # validation on name
# #<User id: nil, name: nil, ...>
43 44 45 |
# File 'lib/active_fedora/relation.rb', line 43 def create(*args, &block) scoping { @klass.create(*args, &block) } end |
#delete_all(conditions = nil) ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/active_fedora/relation.rb', line 114 def delete_all(conditions = nil) if conditions where(conditions).delete_all else to_a.each {|object| object.delete }.tap { reset }.size 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
106 107 108 109 110 111 112 |
# File 'lib/active_fedora/relation.rb', line 106 def destroy_all(conditions = nil) if conditions where(conditions).destroy_all else to_a.each {|object| object.destroy }.tap { reset }.size end end |
#initialize_copy(other) ⇒ Object
This method gets called on clone
20 21 22 23 24 |
# File 'lib/active_fedora/relation.rb', line 20 def initialize_copy(other) # Dup the values @values = Hash[@values] reset end |
#inspect ⇒ Object
76 77 78 |
# File 'lib/active_fedora/relation.rb', line 76 def inspect to_a.inspect end |
#reset ⇒ Object
47 48 49 50 51 |
# File 'lib/active_fedora/relation.rb', line 47 def reset @first = @loaded = nil @records = [] self end |
#to_a ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/active_fedora/relation.rb', line 53 def to_a return @records if loaded? args = @klass == ActiveFedora::Base ? {:cast=>true} : {} args[:rows] = limit_value if limit_value args[:start] = offset_value if offset_value args[:sort] = order_values if order_values @records = to_enum(:find_each, where_values, args).to_a @loaded = true @records end |