lib/datacite/mapping/date.rb in datacite-mapping-0.4.1 vs lib/datacite/mapping/date.rb in datacite-mapping-0.5.0

- old
+ new

@@ -58,13 +58,11 @@ # if it represents a range, and the range is not open on the upper end class Date include Comparable include XML::Mapping - attr_reader :date_value - attr_reader :range_start - attr_reader :range_end + attr_reader :date_value, :range_start, :range_end # Initializes a new `Date` # # @param type [DateType] the type of date. Cannot be nil. # @param value [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, @@ -78,25 +76,29 @@ raise ArgumentError, 'Date type cannot be nil' unless val @type = val end + # rubocop:disable Metrics/MethodLength + def value=(val) # rubocop:disable Metrics/AbcSize parts = val.to_s.split('/', -1) # negative limit so we don't drop trailing empty string @date_value, @range_start, @range_end = nil - if parts.size == 1 + case parts.size + when 1 @date_value = DateValue.new(val) - elsif parts.size == 2 + when 2 @range_start, @range_end = parts.map(&:strip).map { |part| DateValue.new(part) unless part == '' } # puts "#{val} -> [#{range_start}, #{range_end}]" else raise ArgumentError, "Unable to parse date value #{val}" end @value = date_value ? date_value.to_s : "#{range_start}/#{range_end}" end + # rubocop:enable Metrics/MethodLength def <=>(other) - return nil unless other.class == self.class + return nil unless other.instance_of?(self.class) %i[date_value range_start range_end type].each do |v| order = send(v) <=> other.send(v) return order if order.nonzero? end