Class: Caboose::Timezone

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/caboose/timezone.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.load_zones(temp_dir = '/tmp', country_codes = ['US']) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/models/caboose/timezone.rb', line 9

def self.load_zones(temp_dir = '/tmp', country_codes = ['US'])
  `curl -o #{temp_dir}/timezones.csv.zip http://timezonedb.com/files/timezonedb.csv.zip`
  `unzip #{temp_dir}/timezones.csv.zip -d #{temp_dir}/timezones`

  #Caboose::Timezone.destroy_all
  #Caboose::TimezoneOffset.destroy_all
  
  File.foreach("#{temp_dir}/timezones/zone.csv") do |line|      
    data = CSV.parse_line(line)
    next if !country_codes.include?(data[1])
    next if Caboose::Timezone.where(:id => data[0].to_i).exists?
    Caboose::Timezone.create(
      :id           => data[0].to_i,
      :country_code => data[1], 
      :name         => data[2]
    )
  end
  
  File.foreach("#{temp_dir}/timezones/timezone.csv") do |line|      
    data = CSV.parse_line(line)
    tz_id = data[0].to_i
    next if !Caboose::Timezone.where(:id => tz_id).exists?
    next if Caboose::TimezoneOffset.where(:timezone_id => tz_id, :time_start => data[2].to_i).exists?
    Caboose::TimezoneOffset.create(
      :timezone_id  => data[0].to_i,
      :abbreviation => data[1],
      :time_start   => data[2],
      :gmt_offset   => data[3],
      :dst          => data[4]        
    )
  end
  
  spec = Gem::Specification.find_by_name("caboose-cms")
  gem_root = spec.gem_dir
  
  File.foreach(gem_root + '/lib/sample_files/timezone_abbreviations.csv') do |line|      
    data = CSV.parse_line(line)      
    next if Caboose::TimezoneAbbreviation.where(:abbreviation => data[0]).exists?      
    Caboose::TimezoneAbbreviation.create(        
      :abbreviation => data[0],
      :name         => data[1]                
    )
  end        
  
  `rm -rf #{temp_dir}/timezones`
  `rm -rf #{temp_dir}/timezones.csv.zip`
  
end

Instance Method Details

#local(utc_datetime) ⇒ Object



58
59
60
61
# File 'app/models/caboose/timezone.rb', line 58

def local(utc_datetime)
  tzo = self.timezone_offsets.where('time_start < ?', utc_datetime.to_i).reorder('time_start desc').first
  return utc_datetime + tzo.gmt_offset.seconds
end

#string_format(d = DateTime.now.utc) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/caboose/timezone.rb', line 63

def string_format(d = DateTime.now.utc)
  tzo = self.timezone_offsets.where('time_start < ?', d.to_i).reorder('time_start desc').first
  total = tzo.gmt_offset.abs
  hours = (total/3600).floor
  x = total - (hours*3600)
  minutes = x > 0 ? (x/60).floor : 0
  seconds = total - (hours*3600) - (minutes*60)
  sign = tzo.gmt_offset >= 0 ? '+' : '-'    
  hours = hours.to_s.rjust(2, '0')    
  return "#{sign}#{hours}#{minutes}"
end