Skip to content

Commit

Permalink
Handle sm/sd and sd/sm with time
Browse files Browse the repository at this point in the history
  • Loading branch information
digitalcora committed Sep 7, 2012
1 parent 2b4fdb0 commit 32b1980
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
3 changes: 2 additions & 1 deletion lib/chronic/chronic.rb
Expand Up @@ -188,7 +188,6 @@ def definitions(options={})
Handler.new([:scalar_day, :repeater_month_name, :scalar_year, :separator_at?, 'time?'], :handle_sd_rmn_sy),
Handler.new([:scalar_day, :repeater_month_name, :separator_at?, 'time?'], :handle_sd_rmn),
Handler.new([:scalar_year, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sy_sm_sd),
Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day], :handle_sm_sd),
Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_year], :handle_sm_sy),
Handler.new([:scalar_day, :separator_slash_or_dash, :repeater_month_name, :separator_slash_or_dash, :scalar_year], :handle_sm_rmn_sy)
],
Expand Down Expand Up @@ -216,6 +215,8 @@ def definitions(options={})

endians = [
Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sm_sd_sy),
Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sm_sd),
Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_at?, 'time?'], :handle_sd_sm),
Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sd_sm_sy)
]

Expand Down
19 changes: 11 additions & 8 deletions lib/chronic/handlers.rb
Expand Up @@ -224,27 +224,30 @@ def handle_sy_sm_sd(tokens, options)
handle_sm_sd_sy(new_tokens + time_tokens, options)
end

# Handle scalar-day/scalar-month AND scalar-month/scalar-day
# Handle scalar-month/scalar-day
def handle_sm_sd(tokens, options)
month = tokens[0].get_tag(ScalarMonth).type
day = tokens[1].get_tag(ScalarDay).type
year = Chronic.now.year

if Array(options[:endian_precedence]).first == :little
day, month = month, day
end
time_tokens = tokens.last(tokens.size - 2)

return if month_overflow?(year, month, day)

begin
start_time = Chronic.time_class.local(year, month, day)
end_time = Chronic.time_class.local(year, month, day + 1)
Span.new(start_time, end_time)
day_start = Chronic.time_class.local(year, month, day)
day_or_time(day_start, time_tokens, options)
rescue ArgumentError
nil
end
end

# Handle scalar-day/scalar-month
def handle_sd_sm(tokens, options)
new_tokens = [tokens[1], tokens[0]]
time_tokens = tokens.last(tokens.size - 2)
handle_sm_sd(new_tokens + time_tokens, options)
end

# Handle scalar-month/scalar-year
def handle_sm_sy(tokens, options)
month = tokens[0].get_tag(ScalarMonth).type
Expand Down
2 changes: 2 additions & 0 deletions test/test_chronic.rb
Expand Up @@ -67,6 +67,8 @@ def test_endian_definitions
# middle, little
endians = [
Chronic::Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sm_sd_sy),
Chronic::Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sm_sd),
Chronic::Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_at?, 'time?'], :handle_sd_sm),
Chronic::Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sd_sm_sy)
]

Expand Down

0 comments on commit 32b1980

Please sign in to comment.