Class: Valkyrie::Sequel::Persister::SaveAllPersister::Factory
- Inherits:
-
Object
- Object
- Valkyrie::Sequel::Persister::SaveAllPersister::Factory
- Defined in:
- lib/valkyrie/sequel/persister.rb
Instance Attribute Summary collapse
-
#persister ⇒ Object
readonly
Returns the value of attribute persister.
Instance Method Summary collapse
-
#for(resources:) ⇒ Object
Resources have to be handled differently based on whether or not optimistic locking is enabled.
-
#initialize(persister:) ⇒ Factory
constructor
A new instance of Factory.
-
#locking_relation ⇒ Object
Locking relation has an update_where condition.
- #relation ⇒ Object
- #update_branches ⇒ Object
Constructor Details
#initialize(persister:) ⇒ Factory
Returns a new instance of Factory.
33 34 35 |
# File 'lib/valkyrie/sequel/persister.rb', line 33 def initialize(persister:) @persister = persister end |
Instance Attribute Details
#persister ⇒ Object (readonly)
Returns the value of attribute persister.
32 33 34 |
# File 'lib/valkyrie/sequel/persister.rb', line 32 def persister @persister end |
Instance Method Details
#for(resources:) ⇒ Object
Resources have to be handled differently based on whether or not optimistic locking is enabled. Splitting it into two upserts allows for faster save_all while still handling optimistic locking.
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/valkyrie/sequel/persister.rb', line 40 def for(resources:) grouped_resources = resources.group_by(&:optimistic_locking_enabled?) locked_resources = grouped_resources[true] || [] unlocked_resources = grouped_resources[false] || [] CompositePersister.new( [ SaveAllPersister.new(resources: locked_resources, relation: locking_relation, resource_factory: resource_factory), SaveAllPersister.new(resources: unlocked_resources, relation: relation, resource_factory: resource_factory) ] ) end |
#locking_relation ⇒ Object
Locking relation has an update_where condition.
61 62 63 64 65 66 67 |
# File 'lib/valkyrie/sequel/persister.rb', line 61 def locking_relation resources.returning.insert_conflict( target: :id, update: update_branches, update_where: { Sequel.function(:coalesce, Sequel[:orm_resources][:lock_version], 0) => Sequel[:excluded][:lock_version] } ) end |
#relation ⇒ Object
53 54 55 56 57 58 |
# File 'lib/valkyrie/sequel/persister.rb', line 53 def relation resources.returning.insert_conflict( target: :id, update: update_branches ) end |
#update_branches ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/valkyrie/sequel/persister.rb', line 69 def update_branches { metadata: Sequel[:excluded][:metadata], internal_resource: Sequel[:excluded][:internal_resource], lock_version: Sequel.function(:coalesce, Sequel[:excluded][:lock_version], 0) + 1, created_at: Sequel[:excluded][:created_at], updated_at: Time.now.utc } end |