Class: Hanami::Model::Associations::HasOne Private
- Inherits:
-
Object
- Object
- Hanami::Model::Associations::HasOne
- Defined in:
- lib/hanami/model/associations/has_one.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Many-To-One association
Instance Attribute Summary collapse
- #repository ⇒ Object readonly private
- #scope ⇒ Object readonly private
- #source ⇒ Object readonly private
- #subject ⇒ Object readonly private
- #target ⇒ Object readonly private
Class Method Summary collapse
- .schema_type(entity) ⇒ Object private
Instance Method Summary collapse
- #add(data) ⇒ Object private
- #create(data) ⇒ Object private
- #delete ⇒ Object (also: #remove) private
-
#initialize(repository, source, target, subject, scope = nil) ⇒ HasOne
constructor
private
A new instance of HasOne.
- #one ⇒ Object private
- #replace(data) ⇒ Object private
- #update(data) ⇒ Object private
Constructor Details
#initialize(repository, source, target, subject, scope = nil) ⇒ HasOne
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of HasOne.
39 40 41 42 43 44 45 46 |
# File 'lib/hanami/model/associations/has_one.rb', line 39 def initialize(repository, source, target, subject, scope = nil) @repository = repository @source = source @target = target @subject = subject.to_hash unless subject.nil? @scope = scope || _build_scope freeze end |
Instance Attribute Details
#repository ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
19 20 21 |
# File 'lib/hanami/model/associations/has_one.rb', line 19 def repository @repository end |
#scope ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
35 36 37 |
# File 'lib/hanami/model/associations/has_one.rb', line 35 def scope @scope end |
#source ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
23 24 25 |
# File 'lib/hanami/model/associations/has_one.rb', line 23 def source @source end |
#subject ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
31 32 33 |
# File 'lib/hanami/model/associations/has_one.rb', line 31 def subject @subject end |
#target ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
27 28 29 |
# File 'lib/hanami/model/associations/has_one.rb', line 27 def target @target end |
Class Method Details
.schema_type(entity) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
13 14 15 |
# File 'lib/hanami/model/associations/has_one.rb', line 13 def self.schema_type(entity) Sql::Types::Schema::AssociationType.new(entity) end |
Instance Method Details
#add(data) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
60 61 62 63 64 |
# File 'lib/hanami/model/associations/has_one.rb', line 60 def add(data) command(:create, relation(target), mapper: nil).call(associate(serialize(data))) rescue => e raise Hanami::Model::Error.for(e) end |
#create(data) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
52 53 54 55 56 57 58 |
# File 'lib/hanami/model/associations/has_one.rb', line 52 def create(data) entity.new( command(:create, aggregate(target), mapper: nil).call(serialize(data)) ) rescue => e raise Hanami::Model::Error.for(e) end |
#delete ⇒ Object Also known as: remove
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
75 76 77 |
# File 'lib/hanami/model/associations/has_one.rb', line 75 def delete scope.delete end |
#one ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
48 49 50 |
# File 'lib/hanami/model/associations/has_one.rb', line 48 def one scope.one end |
#replace(data) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
80 81 82 83 84 85 |
# File 'lib/hanami/model/associations/has_one.rb', line 80 def replace(data) repository.transaction do delete add(serialize(data)) end end |
#update(data) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
66 67 68 69 70 71 72 73 |
# File 'lib/hanami/model/associations/has_one.rb', line 66 def update(data) command(:update, relation(target), mapper: nil) .by_pk( one.public_send(relation(target).primary_key) ).call(serialize(data)) rescue => e raise Hanami::Model::Error.for(e) end |