lib/iso_bib_item/person.rb in iso-bib-item-0.1.6 vs lib/iso_bib_item/person.rb in iso-bib-item-0.1.7

- old
+ new

@@ -1,37 +1,66 @@ +# frozen_string_literal: true + require 'iso_bib_item/contributor' module IsoBibItem # Person's full name class FullName # @return [Array<IsoBibItem::LocalizedString>] attr_accessor :forenames - # @return [Array<IsoBibItem::LocalizedString] - attr_accessor :inials + # @return [Array<IsoBibItem::LocalizedString>] + attr_accessor :initials # @return [IsoBibItem::LocalizedString] attr_accessor :surname - # @return [Array<IsoBibItem::LocalizedString] + # @return [Array<IsoBibItem::LocalizedString>] attr_accessor :additions - # @return [Array<IsoBibItem::LocalizedString] + # @return [Array<IsoBibItem::LocalizedString>] attr_accessor :prefix - def initialize(surname) - @surname = surname - @forenames = [] - @initials = [] - @additions = [] - @prefix = [] + # @return [IsoBibItem::LocalizedString] + attr_reader :completename + + # @param surname [IsoBibItem::LocalizedString] + # @param forenames [Array<IsoBibItem::LocalizedString>] + # @param initials [Array<IsoBibItem::LocalizedString>] + # @param prefix [Array<IsoBibItem::LocalizedString>] + # @param completename [IsoBibItem::LocalizedString] + def initialize(**args) + unless args[:surname] || args[:completename] + raise ArgumentError, 'Should be given :surname or :completename' + end + @surname = args[:surname] + @forenames = args[:forenames] + @initials = args[:initials] + @additions = args[:additions] + @prefix = args[:prefix] + @completename = args[:completename] end + + # @param builder [Nokogiri::XML::Builder] + def to_xml(builder) + builder.name do + if completename + builder.completename { completename.to_xml builder } + else + builder.prefix { prefix.each { |p| p.to_xml builder } } if prefix + builder.initial { initials.each { |i| i.to_xml builder } } if initials + builder.addition { additions.each { |a| a.to_xml builder } } if additions + builder.surname { surname.to_xml builder } + builder.forename { forenames.each { |f| f.to_xml builder } } if forenames + end + end + end end module PersonIdentifierType - ISNI = 'isni'.freeze - URI = 'uri'.freeze + ISNI = 'isni' + URI = 'uri' end # Person identifier. class PersonIdentifier # @return [PersonIdentifierType] @@ -55,12 +84,22 @@ attr_accessor :affilation # @return [Array<IsoBibItem::PersonIdentifier>] attr_accessor :identifiers - def initialize - super - @affilation = [] + # @param name [IsoBibItem::FullName] + # @param affilation [Array<IsoBibItem::Affilation>] + def initialize(name:, affilation: [], contacts:) + super(contacts: contacts) + @name = name + @affilation = affilation @identifiers = [] + end + + def to_xml(builder) + builder.person do + name.to_xml builder + affilation.each { |a| a.to_xml builder } + end end end end