Class: Valkyrie::Persistence::Postgres::ResourceConverter
- Inherits:
-
Object
- Object
- Valkyrie::Persistence::Postgres::ResourceConverter
- Defined in:
- lib/valkyrie/persistence/postgres/resource_converter.rb
Overview
Responsible for converting a Resource into a ORM::Resource
Instance Attribute Summary collapse
-
#resource ⇒ Object
readonly
Returns the value of attribute resource.
-
#resource_factory ⇒ Object
readonly
Returns the value of attribute resource_factory.
Instance Method Summary collapse
-
#attributes ⇒ Hash
Convert attributes to all be arrays to better enable querying and “changing of minds” later on.
-
#convert! ⇒ ORM::Resource
Converts the Valkyrie Resource into an ActiveRecord object.
-
#initialize(resource, resource_factory:) ⇒ ResourceConverter
constructor
A new instance of ResourceConverter.
-
#process_lock_token(orm_object) ⇒ Object
Retrieves the optimistic lock token from the Valkyrie attribute value and sets it to the lock_version on ORM resource.
Constructor Details
#initialize(resource, resource_factory:) ⇒ ResourceConverter
Returns a new instance of ResourceConverter.
11 12 13 14 |
# File 'lib/valkyrie/persistence/postgres/resource_converter.rb', line 11 def initialize(resource, resource_factory:) @resource = resource @resource_factory = resource_factory end |
Instance Attribute Details
#resource ⇒ Object (readonly)
Returns the value of attribute resource.
7 8 9 |
# File 'lib/valkyrie/persistence/postgres/resource_converter.rb', line 7 def resource @resource end |
#resource_factory ⇒ Object (readonly)
Returns the value of attribute resource_factory.
7 8 9 |
# File 'lib/valkyrie/persistence/postgres/resource_converter.rb', line 7 def resource_factory @resource_factory end |
Instance Method Details
#attributes ⇒ Hash
Convert attributes to all be arrays to better enable querying and “changing of minds” later on.
43 44 45 46 47 48 49 |
# File 'lib/valkyrie/persistence/postgres/resource_converter.rb', line 43 def attributes Hash[ resource.attributes.except(:id, :internal_resource, :created_at, :updated_at).compact.map do |k, v| [k, Array.wrap(v)] end ] end |
#convert! ⇒ ORM::Resource
Converts the Valkyrie Resource into an ActiveRecord object
18 19 20 21 22 23 24 25 |
# File 'lib/valkyrie/persistence/postgres/resource_converter.rb', line 18 def convert! orm_class.find_or_initialize_by(id: resource.id && resource.id.to_s).tap do |orm_object| orm_object.internal_resource = resource.internal_resource process_lock_token(orm_object) orm_object.disable_optimistic_locking! unless resource.optimistic_locking_enabled? orm_object. = attributes end end |
#process_lock_token(orm_object) ⇒ Object
Retrieves the optimistic lock token from the Valkyrie attribute value and
sets it to the lock_version on ORM resource
31 32 33 34 35 36 37 38 |
# File 'lib/valkyrie/persistence/postgres/resource_converter.rb', line 31 def process_lock_token(orm_object) return unless resource.respond_to?(Valkyrie::Persistence::Attributes::OPTIMISTIC_LOCK) postgres_token = resource[Valkyrie::Persistence::Attributes::OPTIMISTIC_LOCK].find do |token| token.adapter_id == resource_factory.adapter_id end return unless postgres_token orm_object.lock_version = postgres_token.token end |