Class: Datacite::Mapping::Date
- Inherits:
-
Object
- Object
- Datacite::Mapping::Date
- Includes:
- XML::Mapping
- Defined in:
- lib/datacite/mapping/date.rb
Overview
Represents a DataCite <date/> field, which can be a year, date (year-month-day or just year-month),
or ISO8601 datetime.
Instance Attribute Summary collapse
-
#day ⇒ Integer?
readonly
The day.
-
#hour ⇒ Integer?
readonly
The hour.
-
#minute ⇒ Integer?
readonly
The minutes.
-
#month ⇒ Integer?
readonly
The month.
-
#nsec ⇒ Integer?
readonly
The nanoseconds.
-
#sec ⇒ Integer?
readonly
The seconds.
-
#type ⇒ DateType
The type of date.
-
#year ⇒ Integer
readonly
The year.
Instance Method Summary collapse
-
#initialize(type:, value:) ⇒ Date
constructor
Initializes a new
Date. -
#value ⇒ String
The value as a string.
-
#value=(val)
Sets the value.
Constructor Details
#initialize(type:, value:) ⇒ Date
Initializes a new Date
82 83 84 85 |
# File 'lib/datacite/mapping/date.rb', line 82 def initialize(type:, value:) self.type = type self.value = value end |
Instance Attribute Details
#day ⇒ Integer? (readonly)
Returns The day. Can be nil if no day was specified.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
#hour ⇒ Integer? (readonly)
Returns The hour. Can be nil if no hour was specified.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
#minute ⇒ Integer? (readonly)
Returns The minutes. Can be nil if no minutes were specified.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
#month ⇒ Integer? (readonly)
Returns The month. Can be nil if no month was specified.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
#nsec ⇒ Integer? (readonly)
Returns The nanoseconds. Can be nil if no nanoseconds were specified.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
#sec ⇒ Integer? (readonly)
Returns The seconds. Can be nil if no seconds were specified.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
#type ⇒ DateType
Returns the type of date. Cannot be nil.
59 |
# File 'lib/datacite/mapping/date.rb', line 59 typesafe_enum_node :type, '@dateType', class: DateType |
#year ⇒ Integer (readonly)
Returns The year.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/datacite/mapping/date.rb', line 54 class Date include XML::Mapping # @!attribute [rw] type # @return [DateType] the type of date. Cannot be nil. typesafe_enum_node :type, '@dateType', class: DateType alias_method :_type=, :type= private :_type= # @!method value # @return [String] The value as a string. May be any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime). text_node :value, 'text()' alias_method :_value=, :value= private :_value= attr_reader :year attr_reader :month attr_reader :day attr_reader :hour attr_reader :minute attr_reader :sec attr_reader :nsec # 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`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def initialize(type:, value:) self.type = type self.value = value end def type=(val) fail ArgumentError, 'Date type cannot be nil' unless val self._type = val end # Sets the value. # # @param val [DateTime, Date, Integer, String] The value, as a `DateTime`, `Date`, or `Integer`, # or as a `String` in any [W3C DateTime format](http://www.w3.org/TR/NOTE-datetime) def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end private def to_year(val) return val if val.is_a?(Integer) return val.year if val.respond_to?(:year) matchdata = val.to_s.match(/^[0-9]+/) matchdata[0].to_i if matchdata end def to_month(val) return val.month if val.respond_to?(:month) matchdata = val.to_s.match(/^[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_day(val) return val.day if val.respond_to?(:day) matchdata = val.to_s.match(/^[0-9]+-[0-9]+-([0-9]+)/) matchdata[1].to_i if matchdata end def to_datetime(val) return val if val.is_a?(DateTime) DateTime.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract DateTime from date value '#{val}': #{e}") nil end def to_date(val) return val if val.is_a?(::Date) return ::Date.parse(val.iso8601) if val.respond_to?(:iso8601) ::Date.parse(val.to_s) rescue ArgumentError => e Mapping.log.debug("Can't extract Date from date value '#{val}': #{e}") nil end end |
Instance Method Details
#value ⇒ String
Returns The value as a string. May be any W3C DateTime format.
65 |
# File 'lib/datacite/mapping/date.rb', line 65 text_node :value, 'text()' |
#value=(val)
Sets the value.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/datacite/mapping/date.rb', line 96 def value=(val) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity @date_time = to_datetime(val) @date = @date_time ? @date_time.to_date : to_date(val) @year = to_year(val) @month = to_month(val) @day = to_day(val) new_value = val.respond_to?(:iso8601) ? val.iso8601 : val.to_s if new_value.include?('T') @hour = @date_time.hour if @date_time @minute = @date_time.minute if @date_time @sec = @date_time.sec if @date_time @nsec = @date_time.to_time.nsec if @date_time end fail ArgumentError, "Unable to parse date value '#{val}'" unless @year self._value = new_value end |