# frozen_string_literal: true module Eancom module Edifact class Location attr_accessor :items, :hash def initialize @items = [] @hash = {} end def add_item(item) @items << item end def <<(segment) start_item if segment.starts_item? if @item @item << segment elsif name = group_name(segment) @hash[name] = [] if @hash[name].nil? @hash[name] << segment.to_json_hash else @hash.merge!(segment.to_json_hash) end end def to_json_hash if @item && !@item.empty? add_item(@item.to_json_hash) end @hash.merge({ items: @items }) end def empty? @hash.empty? end def start_item if @item && !@item.empty? add_item(@item.to_json_hash) end @item = Eancom::Edifact::Item.new end private def group_name(segment) segment.item_group_name || segment.group_name end end end end