lib/relaton_itu/itu_group.rb
module RelatonItu
class ItuGroup
class Period
# @return [String] group period start year
attr_reader :start
# @return [String, NilClass] group period end year
attr_reader :finish
# @params start [String]
# @params finish [String, NilClass]
def initialize(start:, finish: nil)
@start = start
@finish = finish
end
# @param builder [Nokogiri::XML::Builder]
def to_xml(builder)
builder.period do
builder.start start
builder.end finish if finish
end
end
# @return [Hash]
def to_hash
hash = { "start" => start }
hash["finish"] = finish if finish
hash
end
# @param prefix [String]
# @return [String]
def to_asciibib(prefix)
pref = prefix.empty? ? prefix : prefix + "."
pref += "period"
out = "#{pref}.start:: #{start}\n"
out += "#{pref}.finish:: #{finish}\n" if finish
out
end
end
TYPES = %w[tsag study-group work-group].freeze
# @return [String]
attr_reader :name
# @return [String, NilClass]
attr_reader :type, :acronym
# @return [RelatonItu::ItuGroup::Period, NilClass] group period
attr_reader :period
# @param type [String, NilClass]
# @param name [String]
# @param acronym [String, NilClass]
# @param period [Hash, RelatonItu::ItuGroup::Period, NilClass]
def initialize(type: nil, name:, acronym: nil, period: nil)
if type && !TYPES.include?(type)
raise ArgumentError, "invalid type: #{type}"
end
@type = type
@name = name
@acronym = acronym
@period = period.is_a?(Hash) ? Period.new(**period) : period
end
# @param builder [Nokogiri::XML::Builder]
def to_xml(builder)
builder.parent[:type] = type if type
builder.name name
builder.acronym acronym if acronym
period&.to_xml builder
end
# @return [Hash]
def to_hash
hash = { "name" => name }
hash["type"] = type if type
hash["acronym"] = acronym if acronym
hash["period"] = period.to_hash if period
hash
end
# @param prefix [String]
# @return [String]
def to_asciibib(prefix)
pref = prefix.empty? ? prefix : prefix + "."
out = "#{pref}name:: #{name}\n"
out += "#{pref}type:: #{type}\n" if type
out += "#{pref}acronym:: #{acronym}\n" if acronym
out += period.to_asciibib prefix if period
out
end
end
end