Class: Hanami::Model::Associations::ManyToMany Private
- Inherits:
-
Object
- Object
- Hanami::Model::Associations::ManyToMany
- Defined in:
- lib/hanami/model/associations/many_to_many.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-Many 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
- #through ⇒ Object readonly private
Class Method Summary collapse
- .schema_type(entity) ⇒ Object private
Instance Method Summary collapse
-
#add(*data) ⇒ Object
private
Return the association table object.
- #count ⇒ Object private
- #delete ⇒ Object private
- #each(&blk) ⇒ Object private
-
#initialize(repository, source, target, subject, scope = nil) ⇒ ManyToMany
constructor
private
A new instance of ManyToMany.
- #map(&blk) ⇒ Object private
- #remove(target_id) ⇒ Object private
- #to_a ⇒ Object private
- #where(condition) ⇒ Object private
Constructor Details
#initialize(repository, source, target, subject, scope = nil) ⇒ ManyToMany
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 ManyToMany.
44 45 46 47 48 49 50 51 52 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 44 def initialize(repository, source, target, subject, scope = nil) @repository = repository @source = source @target = target @subject = subject.to_hash unless subject.nil? @through = relation(source).associations[target].through.to_sym @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.
22 23 24 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 22 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.
38 39 40 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 38 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.
26 27 28 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 26 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.
34 35 36 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 34 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.
30 31 32 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 30 def target @target end |
#through ⇒ 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.
42 43 44 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 42 def through @through 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 18 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 15 def self.schema_type(entity) type = Sql::Types::Schema::AssociationType.new(entity) Types::Strict::Array.member(type) 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.
Return the association table object. Would need an aditional query to return the entity
78 79 80 81 82 83 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 78 def add(*data) command(:create, relation(through), use: [:timestamps]) .call(associate(serialize(data))) rescue => exception raise Hanami::Model::Error.for(exception) end |
#count ⇒ 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 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 66 def count scope.count end |
#delete ⇒ 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.
87 88 89 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 87 def delete relation(through).where(source_foreign_key => subject.fetch(source_primary_key)).delete end |
#each(&blk) ⇒ 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 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 62 def each(&blk) scope.each(&blk) end |
#map(&blk) ⇒ 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.
58 59 60 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 58 def map(&blk) to_a.map(&blk) end |
#remove(target_id) ⇒ 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.
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 93 def remove(target_id) association_record = relation(through) .where(target_foreign_key => target_id, source_foreign_key => subject.fetch(source_primary_key)) .one return if association_record.nil? ar_id = association_record.public_send relation(through).primary_key command(:delete, relation(through)).by_pk(ar_id).call end |
#to_a ⇒ 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 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 54 def to_a scope.to_a end |
#where(condition) ⇒ 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.
70 71 72 |
# File 'lib/hanami/model/associations/many_to_many.rb', line 70 def where(condition) __new__(scope.where(condition)) end |