Module: Labimotion::Segmentable
- Extended by:
- ActiveSupport::Concern
- Included in:
- Element
- Defined in:
- lib/labimotion/models/concerns/segmentable.rb
Overview
Segmentable concern
Instance Method Summary collapse
- #copy_segments(**args) ⇒ Object
-
#save_segments(**args) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity.
Instance Method Details
#copy_segments(**args) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/labimotion/models/concerns/segmentable.rb', line 13 def copy_segments(**args) return if args[:segments].nil? segments = save_segments(segments: args[:segments], current_user_id: args[:current_user_id]) segments.each do |segment| properties = segment.properties properties['layers'].keys.each do |key| layer = properties['layers'][key] field_uploads = layer['fields'].select { |ss| ss['type'] == 'upload' } field_uploads&.each do |upload| idx = properties['layers'][key]['fields'].index(upload) files = upload["value"] && upload["value"]["files"] files&.each_with_index do |fi, fdx| aid = properties['layers'][key]['fields'][idx]['value']['files'][fdx]['aid'] unless aid.nil? copied_att = Attachment.find(aid)&.copy(attachable_type: 'SegmentProps', attachable_id: segment.id, transferred: true) unless copied_att.nil? copied_att.save! properties['layers'][key]['fields'][idx]['value']['files'][fdx]['aid'] = copied_att.id properties['layers'][key]['fields'][idx]['value']['files'][fdx]['uid'] = copied_att.identifier end end end end end segment.update!(properties: properties) end end |
#save_segments(**args) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/labimotion/models/concerns/segmentable.rb', line 42 def save_segments(**args) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity return if args[:segments].nil? segments = [] args[:segments]&.each do |seg| klass = Labimotion::SegmentKlass.find_by(id: seg['segment_klass_id']) uuid = SecureRandom.uuid props = seg['properties'] props['pkg'] = Labimotion::Utils.pkg(props['pkg']) props['identifier'] = klass.identifier if klass.identifier.present? props['uuid'] = uuid props['klass'] = 'Segment' segment = Labimotion::Segment.find_by(element_type: Labimotion::Utils.element_name(self.class.name), element_id: self.id, segment_klass_id: seg['segment_klass_id']) if segment.present? && (segment.klass_uuid != props['klass_uuid'] || segment.properties != props) segment.update!(properties_release: klass.properties_release, properties: props, uuid: uuid, klass_uuid: props['klass_uuid']) segments.push(segment) end next if segment.present? props['klass_uuid'] = klass.uuid segment = Labimotion::Segment.create!(properties_release: klass.properties_release, segment_klass_id: seg['segment_klass_id'], element_type: self.class.name, element_id: self.id, properties: props, created_by: args[:current_user_id], uuid: uuid, klass_uuid: klass.uuid) segments.push(segment) end segments end |