Sha256: d4977d60a1ab902858d2c0348af8d1a80c5287b5ad9a71e819f6fc27112e0079
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
# frozen_string_literal: true require 'time' module IsoBibItem # Bibliographic date. class BibliographicDate # @return [String] attr_reader :type # @return [Time] attr_reader :from # @return [Time] attr_reader :to # @return [Time] attr_reader :on # @param type [String] "published", "accessed", "created", "activated" # @param from [String] # @param to [String] def initialize(type:, on: nil, from: nil, to: nil) raise ArgumentError, 'expected :on or :form argument' unless on || from @type = type @on = parse_date on @from = parse_date from @to = parse_date to end # rubocop:disable Metrics/AbcSize # @param builder [Nokogiri::XML::Builder] # @return [Nokogiri::XML::Builder] def to_xml(builder, **opts) builder.date(type: type) do if on date = opts[:full_date] ? on.strftime("%Y-%m") : on.year builder.on(opts[:no_year] ? '--' : date) elsif from if opts[:full_date] date_form = from.strftime("%Y-%m") date_to = to.strftime("%Y-%m") if to else date_form = from.year date_to = to.year if to end builder.from(opts[:no_year] ? '--' : date_form) builder.to date_to if to end end end # rubocop:enable Metrics/AbcSize private # @params date [String] 'yyyy' or 'yyyy-mm' def parse_date(date) return unless date if date =~ /^\d{4}$/ Time.strptime date, '%Y' else Time.strptime date, '%Y-%m' end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
iso-bib-item-0.4.5 | lib/iso_bib_item/bibliographic_date.rb |