Class: ImpExp::Serializers::RelationOneToOne
- Inherits:
-
Object
- Object
- ImpExp::Serializers::RelationOneToOne
- Defined in:
- app/services/imp_exp/serializers/relation_one_to_one.rb
Instance Attribute Summary collapse
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
Instance Method Summary collapse
- #dump(record, relation_name) ⇒ Object
-
#initialize(*columns) ⇒ RelationOneToOne
constructor
A new instance of RelationOneToOne.
- #load(data, model:, relation_name:, scoping_parent:) ⇒ Object
Constructor Details
#initialize(*columns) ⇒ RelationOneToOne
Returns a new instance of RelationOneToOne.
8 9 10 |
# File 'app/services/imp_exp/serializers/relation_one_to_one.rb', line 8 def initialize(*columns) @columns = columns end |
Instance Attribute Details
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
6 7 8 |
# File 'app/services/imp_exp/serializers/relation_one_to_one.rb', line 6 def columns @columns end |
Instance Method Details
#dump(record, relation_name) ⇒ Object
12 13 14 15 16 |
# File 'app/services/imp_exp/serializers/relation_one_to_one.rb', line 12 def dump(record, relation_name) columns.map do |column| record.send(relation_name)&.send(column) end.join(COMPOSITE_IDENTIFIER_SEPARATOR) end |
#load(data, model:, relation_name:, scoping_parent:) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'app/services/imp_exp/serializers/relation_one_to_one.rb', line 18 def load(data, model:, relation_name:, scoping_parent:) return if data.blank? relation_class = model.active_record_class.reflections[relation_name.to_s].[:class_name] relation_class ||= relation_name.to_s.classify relation_class = relation_class.constantize data = data.to_s.split(COMPOSITE_IDENTIFIER_SEPARATOR).map(&:strip) conditions = columns.zip(data).to_h query_scoped = Utils::RelationScoper.call(relation_class.all, relation_class, scoping_parent) record = query_scoped.find_by(conditions) return record if record ImpExp::Serializers::Errors::RecordNotFound.new(relation_class, conditions) end |