Class: ParseDate
- Inherits:
-
Object
- Object
- ParseDate
- Extended by:
- IntFromString
- Includes:
- Singleton
- Defined in:
- lib/parse_date.rb,
lib/parse_date/version.rb,
lib/parse_date/int_from_string.rb
Defined Under Namespace
Modules: IntFromString Classes: Error
Constant Summary collapse
- VERSION =
'0.4.1'
Class Method Summary collapse
-
.earliest_year(date_str) ⇒ Object
class method delegation.
- .latest_year(date_str) ⇒ Object
-
.parse_range(date_str) ⇒ Array
Array of Integer year values from earliest year to latest year, inclusive.
-
.range_array(first_year, last_year) ⇒ Array
Array of Integer year values from first to last, inclusive.
- .year_int_valid?(date_str) ⇒ Boolean
-
.year_range_valid?(first_year, last_year) ⇒ Boolean
true if: both years are not newer than (current year + 1) first_year <= last_year false otherwise.
Class Method Details
.earliest_year(date_str) ⇒ Object
class method delegation
29 30 31 |
# File 'lib/parse_date.rb', line 29 def self.earliest_year(date_str) ParseDate::IntFromString.earliest_year(date_str) end |
.latest_year(date_str) ⇒ Object
33 34 35 |
# File 'lib/parse_date.rb', line 33 def self.latest_year(date_str) ParseDate::IntFromString.latest_year(date_str) end |
.parse_range(date_str) ⇒ Array
Returns array of Integer year values from earliest year to latest year, inclusive.
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/parse_date.rb', line 42 def self.parse_range(date_str) first = earliest_year(date_str) last = latest_year(date_str) return nil unless first || last raise ParseDate::Error, "Unable to parse range from '#{date_str}'" unless year_range_valid?(first, last) range_array(first, last) rescue StandardError => e raise ParseDate::Error, "Unable to parse range from '#{date_str}': #{e.}" end |
.range_array(first_year, last_year) ⇒ Array
Returns array of Integer year values from first to last, inclusive.
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/parse_date.rb', line 68 def self.range_array(first_year, last_year) first_year = first_year.to_i if first_year.is_a?(String) && first_year.match?(/^-?\d+$/) last_year = last_year.to_i if last_year.is_a?(String) && last_year.match?(/^-?\d+$/) return [] unless last_year || first_year return [first_year] if last_year.nil? && first_year return [last_year] if first_year.nil? && last_year raise(StandardError, "unable to create year range array from #{first_year}, #{last_year}") unless year_range_valid?(first_year, last_year) Range.new(first_year, last_year).to_a end |
.year_int_valid?(date_str) ⇒ Boolean
37 38 39 |
# File 'lib/parse_date.rb', line 37 def self.year_int_valid?(date_str) ParseDate::IntFromString.year_int_valid?(date_str) end |
.year_range_valid?(first_year, last_year) ⇒ Boolean
true if:
both years are not newer than (current year + 1)
first_year <= last_year
false otherwise
57 58 59 60 61 62 63 |
# File 'lib/parse_date.rb', line 57 def self.year_range_valid?(first_year, last_year) upper_bound = Date.today.year + 2 return false if first_year > upper_bound || last_year > upper_bound return false if first_year > last_year true end |