Class: Lita::Handlers::Timezone

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/timezone.rb

Instance Method Summary collapse

Constructor Details

#initialize(robot) ⇒ Timezone

Returns a new instance of Timezone.



21
22
23
24
25
# File 'lib/lita/handlers/timezone.rb', line 21

def initialize(robot)
  super
  Time.zone = config.default_zone
  @all_zones = ActiveSupport::TimeZone.zones_map.keys + TZInfo::Timezone.all_identifiers
end

Instance Method Details

#list_timezones(response) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/lita/handlers/timezone.rb', line 64

def list_timezones(response)
  zone_filter = (response.match_data[:filter] rescue nil)
  zones = zone_filter ? @all_zones.select { |name| name.include? zone_filter } : @all_zones

  if zones.empty?
    response.reply t('messages.no_zones_found', zone: zone_filter)
  else
    response.reply render_template('available_timezones', zones: zones)
  end
end

#time_between_locations(response) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/lita/handlers/timezone.rb', line 41

def time_between_locations(response)
  requested_time = time_from_response(response)
  first_zone = ActiveSupport::TimeZone[response.match_data[:zone1]]
  second_zone = ActiveSupport::TimeZone[response.match_data[:zone2]]

  if requested_time.blank?
    response.reply t('messages.invalid_time')
  elsif first_zone.blank?
    response.reply t('messages.invalid_first_zone')
  elsif second_zone.blank?
    response.reply t('messages.invalid_second_zone')
  else
    original_time = first_zone.parse(requested_time.asctime)
    time_in_new_time_zone = original_time.in_time_zone(second_zone)

    response.reply t('messages.response_from_to_zone',
                      time: format_time(time_in_new_time_zone),
                      zone1: first_zone.name,
                      zone2: second_zone.name
                    )
  end
end

#time_in_other_timezone(response) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/lita/handlers/timezone.rb', line 27

def time_in_other_timezone(response)
  requested_time = time_from_response(response)
  requested_zone = ActiveSupport::TimeZone[response.match_data[:zone1]]

  if requested_time.blank?
    response.reply t('messages.invalid_time')
  elsif requested_zone.blank?
    response.reply t('messages.invalid_zone')
  else
    time_in_new_time_zone = requested_time.in_time_zone(requested_zone)
    response.reply t('messages.response_in_zone', time: format_time(time_in_new_time_zone))
  end
end