Module: Eco::API::UseCases::OozeSamples::Helpers::OozeHandlers
- Included in:
- ExportableOoze, ExportableRegister
- Defined in:
- lib/eco/api/usecases/ooze_samples/helpers/ooze_handlers.rb
Instance Method Summary collapse
- #array_indexes(ary) ⇒ Object
- #merge_arrays(ref, plus) ⇒ Object
- #merge_values(origin, append, klass: nil, delimiter: "\n") ⇒ Object
Instance Method Details
#array_indexes(ary) ⇒ Object
77 78 79 |
# File 'lib/eco/api/usecases/ooze_samples/helpers/ooze_handlers.rb', line 77 def array_indexes(ary) ary.each_with_index.to_h end |
#merge_arrays(ref, plus) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/eco/api/usecases/ooze_samples/helpers/ooze_handlers.rb', line 44 def merge_arrays(ref, plus) return ref if ref == plus href_idx = array_indexes(ref) hplus_idx = array_indexes(plus) shared = ref & plus hshared_ref_idx = href_idx.slice(*shared) # hidx_plus_shared = hplus_idx.slice(*shared).each_with_object({}) do |(e, idx), reversed| # reversed[idx] = e # end # shared_plus_idxs = hidx_plus_shared.keys.reverse shared_plus_idxs = hplus_idx.values_at(*shared).sort.reverse only_plus = plus - ref honly_plus_idx = hplus_idx.slice(*only_plus) hplus_ref_idx = honly_plus_idx.each_with_object({}) do |(e, idx), hplus_ref_idx| ps_idx = shared_plus_idxs.bsearch {|i| idx >= i} rs_idx = ps_idx ? hshared_ref_idx[plus[ps_idx]] : -1 hplus_ref_idx[e] = rs_idx end.group_by do |e, idx| idx end.to_a.sort_by do |(idx, pairs)| idx end.reverse.to_h.transform_values do |pairs| pairs.map(&:first) end hplus_ref_idx.each_with_object(ref.dup) do |(idx, elements), ref| ref.insert(idx+1, *elements) end end |
#merge_values(origin, append, klass: nil, delimiter: "\n") ⇒ Object
7 8 9 10 11 12 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 41 42 |
# File 'lib/eco/api/usecases/ooze_samples/helpers/ooze_handlers.rb', line 7 def merge_values(origin, append, klass: nil, delimiter: "\n") return origin if !append || append.to_s.strip.empty? return append if !origin || origin.to_s.strip.empty? case klass when Ecoportal::API::V2::Page::Component::RichTextField merge_values(origin, append, delimiter: "\n") when Ecoportal::API::V2::Page::Component::PlainTextField merge_values(origin, append, delimiter: "\n") when Ecoportal::API::V2::Page::Component::SelectionField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::ReferenceField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::PeopleField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::DateField origin when Ecoportal::API::V2::Page::Component::NumberField origin when Ecoportal::API::V2::Page::Component::GaugeField origin when Ecoportal::API::V2::Page::Component::ChecklistField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::ActionField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::FilesField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::ImagesField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::GeoField merge_values(origin, append, delimiter: delimiter) when Ecoportal::API::V2::Page::Component::LawField merge_values(origin, append, delimiter: delimiter) else [origin, append].join(delimiter) end end |