Class: Ddr::Models::YearFacet
- Inherits:
-
Object
- Object
- Ddr::Models::YearFacet
- Defined in:
- lib/ddr/models/year_facet.rb
Constant Summary collapse
- EARLIEST_YEAR =
1000
- BETWEEN =
Between 1965 and 1968
Regexp.new '\A([Bb]etween\s+)(\d{4})(\s+and\s+)(\d{4})\??\z'
- IN_DECADE =
YYYx (192x) YYYX (192X) YYY? (192?) YYY- (192-) YYY-? (192-?)
Regexp.new '\A(\d{3})([xX\-]\??|\?)\z'
- IN_CENTURY =
YYxx (19xx)
Regexp.new '\A(\d{2})xx\z'
- DECADE =
YYY0s (1920s) YYY0s? (1920s?)
Regexp.new '\A(\d{3}0)s\??\z'
- YEAR_MONTH =
YYYY-MM (2010-01) YYYY/MM (2010/01)
Regexp.new '\A(\d{4})[/-](0[1-9]|1[0-2])\z'
- YEAR_RANGE =
YYYY-YYYY (1935-2010) YYYY/YYYY (1935/2010)
Regexp.new '\A(\d{4})[/-](\d{4})\z'
- YEAR =
YYYY (1979)
Regexp.new '\A\d{4}\z'
- SQUARE_BRACKETS =
Regexp.new '[\[\]]'
- CIRCA =
-
1920
ca. 1920 c1920
-
Regexp.new '\b(circa\s+|ca?\.\s*|c(?=\d{4}[^\d]*))'
Instance Attribute Summary collapse
-
#obj ⇒ Object
readonly
Returns the value of attribute obj.
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Class Method Summary collapse
Instance Method Summary collapse
- #clean!(value) ⇒ Object
- #extract_years(value) ⇒ Object
- #facet_values ⇒ Object
-
#initialize(obj) ⇒ YearFacet
constructor
A new instance of YearFacet.
- #latest_year ⇒ Object
- #match_between(value) ⇒ Object
- #match_decade(value) ⇒ Object
- #match_in_century(value) ⇒ Object
- #match_in_decade(value) ⇒ Object
- #match_year(value) ⇒ Object
- #match_year_month(value) ⇒ Object
- #match_year_range(value) ⇒ Object
- #match_years(value) ⇒ Object
- #parse_year(value) ⇒ Object
- #valid_years ⇒ Object
- #validate!(years) ⇒ Object
Constructor Details
#initialize(obj) ⇒ YearFacet
Returns a new instance of YearFacet.
51 52 53 54 55 |
# File 'lib/ddr/models/year_facet.rb', line 51 def initialize(obj) @obj = obj @values = [] facet_values end |
Instance Attribute Details
#obj ⇒ Object (readonly)
Returns the value of attribute obj.
49 50 51 |
# File 'lib/ddr/models/year_facet.rb', line 49 def obj @obj end |
#values ⇒ Object (readonly)
Returns the value of attribute values.
49 50 51 |
# File 'lib/ddr/models/year_facet.rb', line 49 def values @values end |
Class Method Details
.call(obj) ⇒ Object
44 45 46 |
# File 'lib/ddr/models/year_facet.rb', line 44 def call(obj) new(obj).values end |
Instance Method Details
#clean!(value) ⇒ Object
73 74 75 76 77 |
# File 'lib/ddr/models/year_facet.rb', line 73 def clean!(value) value.strip! value.gsub! SQUARE_BRACKETS, "" value.gsub! CIRCA, "" end |
#extract_years(value) ⇒ Object
68 69 70 71 |
# File 'lib/ddr/models/year_facet.rb', line 68 def extract_years(value) years = match_years(value) || parse_year(value) Array(years) end |
#facet_values ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ddr/models/year_facet.rb', line 57 def facet_values obj.date.each do |date| date.split(/;/).each do |value| clean! value years = extract_years(value) validate! years values.push *years end end end |
#latest_year ⇒ Object
93 94 95 |
# File 'lib/ddr/models/year_facet.rb', line 93 def latest_year Date.today.year + 100 end |
#match_between(value) ⇒ Object
145 146 147 148 149 150 151 |
# File 'lib/ddr/models/year_facet.rb', line 145 def match_between(value) if m = BETWEEN.match(value) value.sub! m[1], "" # [Bb]etween value.sub! m[3], "-" # and match_year_range(value) end end |
#match_decade(value) ⇒ Object
139 140 141 142 143 |
# File 'lib/ddr/models/year_facet.rb', line 139 def match_decade(value) if m = DECADE.match(value) [ m[1], m[1].sub(/0\z/, "9") ] end end |
#match_in_century(value) ⇒ Object
133 134 135 136 137 |
# File 'lib/ddr/models/year_facet.rb', line 133 def match_in_century(value) if m = IN_CENTURY.match(value) [ "#{m[1]}00", "#{m[1]}99" ] end end |
#match_in_decade(value) ⇒ Object
127 128 129 130 131 |
# File 'lib/ddr/models/year_facet.rb', line 127 def match_in_decade(value) if m = IN_DECADE.match(value) [ "#{m[1]}0", "#{m[1]}9" ] end end |
#match_year(value) ⇒ Object
121 122 123 124 125 |
# File 'lib/ddr/models/year_facet.rb', line 121 def match_year(value) if m = YEAR.match(value) value end end |
#match_year_month(value) ⇒ Object
115 116 117 118 119 |
# File 'lib/ddr/models/year_facet.rb', line 115 def match_year_month(value) if m = YEAR_MONTH.match(value) m[1] end end |
#match_year_range(value) ⇒ Object
109 110 111 112 113 |
# File 'lib/ddr/models/year_facet.rb', line 109 def match_year_range(value) if m = YEAR_RANGE.match(value) m[1, 2] end end |
#match_years(value) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/ddr/models/year_facet.rb', line 97 def match_years(value) result = match_year_range(value) || match_year_month(value) || match_year(value) || match_in_decade(value) || match_in_century(value) || match_decade(value) || match_between(value) first_year, last_year = Array(result).map(&:to_i) last_year ? (first_year..last_year) : first_year end |
#parse_year(value) ⇒ Object
83 84 85 86 87 |
# File 'lib/ddr/models/year_facet.rb', line 83 def parse_year(value) Date.parse(value).year rescue ArgumentError nil end |
#valid_years ⇒ Object
89 90 91 |
# File 'lib/ddr/models/year_facet.rb', line 89 def valid_years (EARLIEST_YEAR..latest_year) end |
#validate!(years) ⇒ Object
79 80 81 |
# File 'lib/ddr/models/year_facet.rb', line 79 def validate!(years) years = years & valid_years.to_a end |