Class: ActiveFedora::Relation
- Inherits:
-
Object
- Object
- ActiveFedora::Relation
- Includes:
- Calculations, Delegation, FinderMethods, QueryMethods, SpawnMethods, Enumerable
- Defined in:
- lib/active_fedora/relation.rb,
lib/active_fedora/relation/merger.rb
Direct Known Subclasses
AssociationRelation, Associations::CollectionProxy, FileRelation
Defined Under Namespace
Classes: HashMerger, Merger
Constant Summary
Constants included from Delegation
Delegation::BLACKLISTED_ARRAY_METHODS
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.
- #reset ⇒ Object
- #scope_for_create ⇒ Object
- #to_a ⇒ Object
-
#where_values_hash ⇒ Object
Returns a hash of where conditions.
Methods included from FinderMethods
#exists?, #find, #find_each, #find_in_batches, #find_one, #find_take, #find_with_conditions, #first, #last, #take
Methods included from Calculations
Methods included from SpawnMethods
Methods included from QueryMethods
#build_where, #create_with_value, #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=
Constructor Details
#initialize(klass, _values = {}) ⇒ Relation
Returns a new instance of Relation.
12 13 14 15 16 |
# File 'lib/active_fedora/relation.rb', line 12 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.
7 8 9 |
# File 'lib/active_fedora/relation.rb', line 7 def default_scoped @default_scoped end |
#klass ⇒ Object
Returns the value of attribute klass.
10 11 12 |
# File 'lib/active_fedora/relation.rb', line 10 def klass @klass end |
#loaded ⇒ Object (readonly) Also known as: loaded?
Returns the value of attribute loaded.
6 7 8 |
# File 'lib/active_fedora/relation.rb', line 6 def loaded @loaded end |
#values ⇒ Object
Returns the value of attribute values.
10 11 12 |
# File 'lib/active_fedora/relation.rb', line 10 def values @values end |
Instance Method Details
#==(other) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/active_fedora/relation.rb', line 65 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, ...>
42 43 44 |
# File 'lib/active_fedora/relation.rb', line 42 def create(*args, &block) scoping { @klass.create(*args, &block) } end |
#delete_all(conditions = nil) ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/active_fedora/relation.rb', line 110 def delete_all(conditions = nil) if conditions where(conditions).delete_all else to_a.each(&: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
102 103 104 105 106 107 108 |
# File 'lib/active_fedora/relation.rb', line 102 def destroy_all(conditions = nil) if conditions where(conditions).destroy_all else to_a.each(&:destroy).tap { reset }.size end end |
#initialize_copy(_other) ⇒ Object
This method gets called on clone
19 20 21 22 23 |
# File 'lib/active_fedora/relation.rb', line 19 def initialize_copy(_other) # Dup the values @values = Hash[@values] reset end |
#reset ⇒ Object
46 47 48 49 50 |
# File 'lib/active_fedora/relation.rb', line 46 def reset @first = @loaded = nil @records = [] self end |
#scope_for_create ⇒ Object
126 127 128 |
# File 'lib/active_fedora/relation.rb', line 126 def scope_for_create @scope_for_create ||= where_values_hash.merge(create_with_value) end |
#to_a ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/active_fedora/relation.rb', line 52 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 |
#where_values_hash ⇒ Object
Returns a hash of where conditions.
User.where(name: 'Oscar').where_values_hash
# => {name: "Oscar"}
122 123 124 |
# File 'lib/active_fedora/relation.rb', line 122 def where_values_hash {} end |