class CulturalDates::CulturalInterval
Public Class Methods
new(val="", debug=false)
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 13 def initialize(val="", debug=false) if val begin parse_result = DateStringParser.new.parse_with_debug(val, reporter: Parslet::ErrorReporter::Deepest.new) puts "parse_result: #{parse_result.inspect}" if debug transformed_result = DateTransform.new.apply(parse_result) puts "transformed_result: #{transformed_result.inspect}" if debug if transformed_result @value = transformed_result end rescue Parslet::ParseFailed => e @value = nil end else @value = nil end # puts "@value: #{@value}" end
parse(val, debug=false)
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 8 def parse(val, debug=false) return CulturalInterval.new(val, debug) end
Public Instance Methods
begin_interval()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 73 def begin_interval from = earliest || :unknown to = earliest_definite || :unknown EDTF::Interval.new(from, to) end
Also aliased as: beginning_interval, beginning
botb()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 32 def botb @botb ||= CulturalDate.edtf @value[:botb] end
bote()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 36 def bote @bote ||= CulturalDate.edtf @value[:bote] end
definite_interval()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 98 def definite_interval from = earliest_definite || :unknown to = latest_definite || :unknown EDTF::Interval.new(from, to) end
earliest()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 49 def earliest return nil if botb.unknown? botb.earliest end
earliest_definite()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 59 def earliest_definite return nil if eotb.unknown? && bote.unknown? return latest_definite if eotb.unknown? return eotb.earliest if eotb == bote eotb.latest end
end_interval()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 82 def end_interval from = latest_definite || :unknown to = latest || :unknown EDTF::Interval.new(from, to) end
Also aliased as: ending_interval, ending
eotb()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 40 def eotb @eotb ||= CulturalDate.edtf @value[:eotb] end
eote()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 44 def eote @eote ||= CulturalDate.edtf @value[:eote] end
latest()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 54 def latest return nil if eote.unknown? eote.latest end
latest_definite()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 66 def latest_definite return nil if bote.unknown? && eotb.unknown? return earliest_definite if bote.unknown? return bote.latest if eotb == bote bote.earliest end
possible_interval()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 90 def possible_interval from = earliest || :unknown to = latest || :unknown EDTF::Interval.new(from, to) end
to_definite_edtf()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 109 def to_definite_edtf definite_interval.edtf end
to_edtf()
click to toggle source
# File lib/cultural_dates/cultural_interval.rb, line 105 def to_edtf possible_interval.edtf end
to_s()
click to toggle source
Generate a textual representation of the timeframe of the period. @return [String]
# File lib/cultural_dates/cultural_interval.rb, line 115 def to_s # Handle special "throughout" case if (eotb.known? && bote.known?) && !(botb.known? || eote.known?) && eotb == bote return "throughout #{eotb}" end # Handle special "throughout, until" case if (eotb.known? && bote.known? && eote.known?) && !botb.known? && eotb == bote return "throughout #{eotb} until no later than #{eote}" end # Handle special "on" case if (botb.known? && eotb.known? && bote.known? && eote.known?) && (botb == eotb && bote == eote && botb == eote) && botb.earliest == botb.latest return "on #{botb}" end first_string = "" if botb.known? && eotb.known? if botb == eotb first_string = botb else first_string = "sometime between #{botb} and #{eotb}" end elsif botb.known? first_string = "after #{botb}" elsif eotb.known? first_string = "by #{eotb}" end second_string = nil if bote.known? && eote.known? if bote == eote second_string = bote else second_string = "sometime between #{bote} and #{eote}" end elsif bote.known? second_string = "at least #{bote}" elsif eote.known? second_string = "no later than #{eote}" end [first_string,second_string].compact.join(" until ").strip end