Module: SpreeCmCommissioner::Transit::TripHelper

Included in:
MultiLegTripsQuery, SpreeCmCommissioner::Trips::CreateMultiLeg, SpreeCmCommissioner::Trips::CreateSingleLeg
Defined in:
app/helpers/spree_cm_commissioner/transit/trip_helper.rb

Instance Method Summary collapse

Instance Method Details

#minutes_since_midnight(minutes) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'app/helpers/spree_cm_commissioner/transit/trip_helper.rb', line 34

def minutes_since_midnight(minutes)
  if minutes.instance_of?(Time) || minutes.instance_of?(ActiveSupport::TimeWithZone)
    (minutes.hour * 60) + minutes.min
  elsif minutes.instance_of?(String)
    str = minutes.strip
    h, m = str.split(':', 2).map(&:to_i)
    (h * 60) + (m || 0)
  else
    raise ArgumentError, "minutes must be a Time, ActiveSupport::TimeWithZone, or String, got #{minutes.class}"
  end
end

#normalize_date(value) ⇒ Object

Raises:

  • (ArgumentError)


20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/helpers/spree_cm_commissioner/transit/trip_helper.rb', line 20

def normalize_date(value)
  # If already a TimeWithZone, return as-is
  return value if value.is_a?(ActiveSupport::TimeWithZone)

  # If Time object, ensure it's in the app's timezone
  return value.in_time_zone if value.is_a?(Time)

  # For Date objects or strings, parse as text (results in midnight)
  parsed = Time.zone.parse(value.to_s)
  return parsed if parsed

  raise ArgumentError, "Unable to parse date/time from #{value.inspect}"
end

#parse_date(date_obj) ⇒ Object

Helper to parse date strings or return date objects



12
13
14
15
16
17
18
# File 'app/helpers/spree_cm_commissioner/transit/trip_helper.rb', line 12

def parse_date(date_obj)
  return date_obj if date_obj.is_a?(Date)

  Date.parse(date_obj.to_s)
rescue ArgumentError
  nil
end

#parse_time(time, timezone = nil) ⇒ Object



4
5
6
7
8
9
# File 'app/helpers/spree_cm_commissioner/transit/trip_helper.rb', line 4

def parse_time(time, timezone = nil)
  return nil if time.blank?

  formatted_time = Time.zone.parse(time.to_s)
  timezone ? formatted_time.in_time_zone(timezone) : formatted_time
end