Class: ImpExp::Serializers::RelationOneToOne

Inherits:
Object
  • Object
show all
Defined in:
app/services/imp_exp/serializers/relation_one_to_one.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#columnsObject (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].options[: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