Sha256: 1696be8d21c61408cdb15040a8b663db9c6e5829e64231182307a018754f31ea

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module RelatonItu
  class EditorialGroup
    BUREAUS = %w[T D R].freeze

    # @return [String]
    attr_reader :bureau

    # @returnn [RelatonItu::ItuGroup]
    attr_reader :group

    # @return [RelatonItu::ItuGroup, NilClass]
    attr_reader :subgroup, :workgroup

    # @param bureau [String]
    # @param group [Hash, RelatonItu::ItuGroup]
    # @param subgroup [Hash, RelatonItu::ItuGroup, NilClass]
    # @param workgroup [Hash, RelatonItu::ItuGroup, NilClass]
    def initialize(bureau:, group:, subgroup: nil, workgroup: nil)
      raise ArgumentError, "invalid bureau: #{bureau}" unless BUREAUS.include? bureau

      @bureau = bureau
      @group = group.is_a?(Hash) ? ItuGroup.new(group) : group
      @subgroup = subgroup.is_a?(Hash) ? ItuGroup.new(subgroup) : subgroup
      @workgroup = workgroup.is_a?(Hash) ? ItuGroup.new(workgroup) : workgroup
    end

    # @param builder [Nokogiri::XML::Builder]
    def to_xml(builder)
      builder.editorialgroup do
        builder.bureau bureau
        builder.group { |b| group.to_xml b }
        builder.subgroup { |b| group.to_xml b } if subgroup
        builder.workgroup { |b| group.to_xml b } if workgroup
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
relaton-itu-0.3.1 lib/relaton_itu/editorial_group.rb