timezone_local 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+
2
+ begin
3
+ require 'rubygems'
4
+ require 'jeweler'
5
+ Jeweler::Tasks.new do |gemspec|
6
+ gemspec.name = "timezone_local"
7
+ gemspec.summary = "Determine the local system's time zone"
8
+ gemspec.description = ""
9
+ gemspec.email = "chetan@evidon.com"
10
+ gemspec.homepage = "http://github.com/chetan/timezone_local"
11
+ gemspec.authors = ["Chetan Sarva"]
12
+ gemspec.add_dependency('tzinfo', '>= 0.3.24')
13
+ end
14
+ Jeweler::GemcutterTasks.new
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
17
+ end
18
+
19
+ require "rake/testtask"
20
+ desc "Run unit tests"
21
+ Rake::TestTask.new("test") { |t|
22
+ #t.libs << "test"
23
+ t.ruby_opts << "-rubygems"
24
+ t.pattern = "test/**/*_test.rb"
25
+ t.verbose = false
26
+ t.warning = false
27
+ }
28
+
29
+ require "yard"
30
+ YARD::Rake::YardocTask.new("docs") do |t|
31
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,35 @@
1
+
2
+ require 'tzinfo'
3
+
4
+ module TimeZone
5
+ module Local
6
+
7
+ # load the correct module depending on OS
8
+ if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM then
9
+ require File.join(File.dirname(__FILE__), 'windows')
10
+ include TimeZone::Local::Windows
11
+ else
12
+ require File.join(File.dirname(__FILE__), 'unix')
13
+ extend TimeZone::Local::Unix
14
+ end
15
+
16
+ def self.get
17
+
18
+ self.METHODS.each do |m|
19
+ begin
20
+ tz = self.send(m)
21
+ return tz if not tz.nil?
22
+ rescue Exception => ex
23
+ end
24
+ end
25
+
26
+ nil
27
+ end
28
+ end
29
+ end
30
+
31
+ class TZInfo::Timezone
32
+ def self.get_local_timezone
33
+ TimeZone::Local.get
34
+ end
35
+ end
data/lib/unix.rb ADDED
@@ -0,0 +1,138 @@
1
+
2
+ require 'find'
3
+ require 'ftools'
4
+
5
+ module TimeZone::Local
6
+ module Unix
7
+
8
+ def METHODS
9
+ [ :from_env, :from_etc_localtime, :from_etc_timezone, :from_etc_TIMEZONE,
10
+ :from_etc_sysconfig_clock, :from_etc_default_init ]
11
+ end
12
+
13
+ def from_env
14
+ return ENV["TZ"] if ENV.include? "TZ"
15
+ end
16
+
17
+ def from_etc_localtime
18
+
19
+ lt_file = "/etc/localtime"
20
+
21
+ # check if it is symlinked
22
+ real_name = expand_symlink(lt_file)
23
+
24
+ # search for it not found
25
+ real_name ||= find_matching_zoneinfo_file(lt_file)
26
+
27
+ return nil if real_name.nil?
28
+
29
+ dirs, file = File.split(real_name)
30
+ parts = dirs.split(File::Separator).reject{ |f| f.empty? } << file
31
+ parts.reverse.each_with_index do |part, x|
32
+ name = x < parts.size ? parts[x..parts.size].join("/") : part
33
+ tz = load_tz(name)
34
+ return tz if not tz.nil?
35
+ end
36
+
37
+ end
38
+
39
+ def expand_symlink(f)
40
+ return nil if File.symlink?(f)
41
+ File.expand_path(File.readlink(f), File.dirname(File.expand_path(f)))
42
+ end
43
+
44
+ def find_matching_zoneinfo_file(file_to_match)
45
+
46
+ zoneinfo = '/usr/share/zoneinfo'
47
+ return if not (File.exists? file_to_match and File.directory? zoneinfo)
48
+
49
+ size = File.size(file_to_match) # look for this
50
+
51
+ match = nil
52
+ Find.find(zoneinfo) do |path|
53
+ if File.file? path and
54
+ File.size(path) == size and
55
+ File.basename(path) != 'posixrules' and
56
+ File.compare(file_to_match, path) then
57
+
58
+ match = path
59
+ end
60
+ end
61
+
62
+ return match
63
+ end
64
+
65
+ def from_etc_timezone
66
+
67
+ tz_file = '/etc/timezone'
68
+
69
+ return nil if not (File.exists? tz_file and File.file? tz_file and File.readable? tz_file)
70
+
71
+ name = IO.read(tz_file).strip
72
+
73
+ return nil if not is_valid_name? name
74
+ return load_tz(name)
75
+ end
76
+
77
+ def from_etc_TIMEZONE
78
+ tz_file = '/etc/timezone'
79
+
80
+ return nil if not (File.exists? tz_file and File.file? tz_file and File.readable? tz_file)
81
+
82
+ IO.readlines(tz_file).each do |line|
83
+ if line =~ /\A\s*TZ\s*=\s*(\S+)/ then
84
+ name = $1
85
+ break
86
+ end
87
+ end
88
+
89
+ return nil if not is_valid_name? name
90
+ return load_tz(name)
91
+ end
92
+
93
+ def from_etc_sysconfig_clock
94
+ tz_file = '/etc/sysconfig/clock'
95
+ return nil if not (File.exists? tz_file and File.file? tz_file and File.readable? tz_file)
96
+ IO.readlines(tz_file).each do |line|
97
+ if line =~ /^(?:TIME)?ZONE="([^"]+)"/ then
98
+ name = $1
99
+ break
100
+ end
101
+ end
102
+
103
+ return nil if not is_valid_name? name
104
+ return load_tz(name)
105
+ end
106
+
107
+ def from_etc_default_init
108
+ tz_file = '/etc/default/init'
109
+ return nil if not (File.exists? tz_file and File.file? tz_file and File.readable? tz_file)
110
+
111
+ IO.readlines(tz_file).each do |line|
112
+ if line =~ /^TZ=(.+)/ then
113
+ name = $1
114
+ break
115
+ end
116
+ end
117
+
118
+ return nil if not is_valid_name? name
119
+ return load_tz(name)
120
+ end
121
+
122
+ def load_tz(name)
123
+ begin
124
+ tz = TZInfo::Timezone.get(name)
125
+ return tz
126
+ rescue Exception => ex
127
+ end
128
+ return nil
129
+ end
130
+
131
+ def is_valid_name?(name)
132
+ return false if name.nil? or name.empty? or name == 'local'
133
+ return name =~ %r{^[\w/\-\+]+$}
134
+ end
135
+
136
+ end # Unix
137
+ end # DateTime
138
+
@@ -0,0 +1,40 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{timezone_local}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Chetan Sarva"]
12
+ s.date = %q{2011-03-28}
13
+ s.description = %q{}
14
+ s.email = %q{chetan@evidon.com}
15
+ s.files = [
16
+ "Rakefile",
17
+ "VERSION",
18
+ "lib/timezone_local.rb",
19
+ "lib/unix.rb",
20
+ "timezone_local.gemspec"
21
+ ]
22
+ s.homepage = %q{http://github.com/chetan/timezone_local}
23
+ s.require_paths = ["lib"]
24
+ s.rubygems_version = %q{1.3.6}
25
+ s.summary = %q{Determine the local system's time zone}
26
+
27
+ if s.respond_to? :specification_version then
28
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
29
+ s.specification_version = 3
30
+
31
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
32
+ s.add_runtime_dependency(%q<tzinfo>, [">= 0.3.24"])
33
+ else
34
+ s.add_dependency(%q<tzinfo>, [">= 0.3.24"])
35
+ end
36
+ else
37
+ s.add_dependency(%q<tzinfo>, [">= 0.3.24"])
38
+ end
39
+ end
40
+
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: timezone_local
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Chetan Sarva
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-28 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: tzinfo
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 3
30
+ - 24
31
+ version: 0.3.24
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: ""
35
+ email: chetan@evidon.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - Rakefile
44
+ - VERSION
45
+ - lib/timezone_local.rb
46
+ - lib/unix.rb
47
+ - timezone_local.gemspec
48
+ has_rdoc: true
49
+ homepage: http://github.com/chetan/timezone_local
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.6
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Determine the local system's time zone
78
+ test_files: []
79
+