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.
41 42 43 44 45 46 47 48 |
# File 'lib/hanami/model/associations/has_one.rb', line 41 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.
21 22 23 |
# File 'lib/hanami/model/associations/has_one.rb', line 21 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.
37 38 39 |
# File 'lib/hanami/model/associations/has_one.rb', line 37 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.
25 26 27 |
# File 'lib/hanami/model/associations/has_one.rb', line 25 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.
33 34 35 |
# File 'lib/hanami/model/associations/has_one.rb', line 33 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.
29 30 31 |
# File 'lib/hanami/model/associations/has_one.rb', line 29 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.
15 16 17 |
# File 'lib/hanami/model/associations/has_one.rb', line 15 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.
62 63 64 65 66 |
# File 'lib/hanami/model/associations/has_one.rb', line 62 def add(data) command(:create, relation(target), mapper: nil).call(associate(serialize(data))) rescue => exception raise Hanami::Model::Error.for(exception) 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.
54 55 56 57 58 59 60 |
# File 'lib/hanami/model/associations/has_one.rb', line 54 def create(data) entity.new( command(:create, aggregate(target), mapper: nil).call(serialize(data)) ) rescue => exception raise Hanami::Model::Error.for(exception) 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.
77 78 79 |
# File 'lib/hanami/model/associations/has_one.rb', line 77 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.
50 51 52 |
# File 'lib/hanami/model/associations/has_one.rb', line 50 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.
82 83 84 85 86 87 |
# File 'lib/hanami/model/associations/has_one.rb', line 82 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.
68 69 70 71 72 73 74 75 |
# File 'lib/hanami/model/associations/has_one.rb', line 68 def update(data) command(:update, relation(target), mapper: nil) .by_pk( one.public_send(relation(target).primary_key) ).call(serialize(data)) rescue => exception raise Hanami::Model::Error.for(exception) end |