worldtimeengine 0.0.1
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/LICENSE.md +20 -0
- data/README.md +77 -0
- data/Rakefile +8 -0
- data/lib/worldtimeengine.rb +29 -0
- data/lib/worldtimeengine/client.rb +59 -0
- data/lib/worldtimeengine/configurable.rb +47 -0
- data/spec/fixtures/193.174.32.100.xml +30 -0
- data/spec/fixtures/another.xml +22 -0
- data/spec/fixtures/us.xml +31 -0
- data/spec/helper.rb +20 -0
- data/spec/worldtimeengine_spec.rb +78 -0
- data/worldtimeengine.gemspec +24 -0
- metadata +161 -0
data/LICENSE.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
[[Copyright]] (c) 2012 Nikita Fedyashev
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+

|
2
|
+
|
3
|
+
# The WorldTimeEngine.com Ruby gem
|
4
|
+
|
5
|
+
Convert any IP address to current local time.
|
6
|
+
|
7
|
+
http://worldtimeengine.com/api/ip
|
8
|
+
|
9
|
+
### Installation
|
10
|
+
|
11
|
+
Install the gem:
|
12
|
+
|
13
|
+
``` bash
|
14
|
+
$ gem install worldtimeengine
|
15
|
+
```
|
16
|
+
|
17
|
+
Add it to your Gemfile:
|
18
|
+
|
19
|
+
``` ruby
|
20
|
+
gem 'worldtimeengine'
|
21
|
+
```
|
22
|
+
|
23
|
+
### Configuration
|
24
|
+
|
25
|
+
WorldTimeEngine.configure do |config|
|
26
|
+
config.api_key = YOUR_API_KEY
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
### Synopsis
|
31
|
+
|
32
|
+
response = WorldTimeEngine.api('193.174.32.100')
|
33
|
+
|
34
|
+
response.version
|
35
|
+
=> '1.1'
|
36
|
+
response.location.region
|
37
|
+
=> 'Germany'
|
38
|
+
response.location.latitude
|
39
|
+
=> 53.25
|
40
|
+
response.location.longitude
|
41
|
+
=> 10.4
|
42
|
+
|
43
|
+
response.time.utc
|
44
|
+
=> 2012-08-25 14:10:29 UTC
|
45
|
+
response.time.local
|
46
|
+
=> 2012-08-25 16:10:29 +0200
|
47
|
+
|
48
|
+
response.time.zone.has_dst
|
49
|
+
=> true
|
50
|
+
response.time.zone.current.abbreviation
|
51
|
+
=> "CEST"
|
52
|
+
response.time.zone.current.description
|
53
|
+
=> "Central European Summer Time"
|
54
|
+
response.time.zone.current.utc_offset
|
55
|
+
=> '+2:00'
|
56
|
+
response.time.zone.current.is_dst
|
57
|
+
=> true
|
58
|
+
response.time.zone.current.effective_until
|
59
|
+
=> 2012-10-28 03:00:00 +0200
|
60
|
+
|
61
|
+
response.time.zone.next.abbreviation
|
62
|
+
=> 'CET'
|
63
|
+
response.time.zone.next.description
|
64
|
+
=> "Central European Time"
|
65
|
+
response.time.zone.next.utc_offset
|
66
|
+
=> "+1:00"
|
67
|
+
response.time.zone.next.is_dst
|
68
|
+
=> false
|
69
|
+
response.time.zone.next.effective_until
|
70
|
+
=> 2013-03-31 02:00:00 +0100
|
71
|
+
|
72
|
+
|
73
|
+
## Copyright
|
74
|
+
Copyright (c) 2012 Nikita Fedyashev.
|
75
|
+
See [LICENSE][] for details.
|
76
|
+
|
77
|
+
[license]: https://github.com/nfedyashev/worldtimeengine/blob/master/LICENSE.md
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'worldtimeengine/client'
|
2
|
+
require 'worldtimeengine/configurable'
|
3
|
+
|
4
|
+
module WorldTimeEngine
|
5
|
+
class << self
|
6
|
+
include WorldTimeEngine::Configurable
|
7
|
+
|
8
|
+
# Delegate to a WorldTimeEngine::Client
|
9
|
+
#
|
10
|
+
# @return [WorldTimeEngine::Client]
|
11
|
+
def client
|
12
|
+
if @client
|
13
|
+
@client
|
14
|
+
else
|
15
|
+
@client = WorldTimeEngine::Client.new(options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def method_missing(method_name, *args, &block)
|
22
|
+
return super unless client.respond_to?(method_name)
|
23
|
+
client.send(method_name, *args, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
WorldTimeEngine.setup
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'hashie'
|
3
|
+
require 'worldtimeengine/configurable'
|
4
|
+
|
5
|
+
module WorldTimeEngine
|
6
|
+
# Wrapper for the WorldTimeEngine API
|
7
|
+
class Client
|
8
|
+
#include WorldTimeEngine::API
|
9
|
+
include WorldTimeEngine::Configurable
|
10
|
+
|
11
|
+
# Initializes a new Client object
|
12
|
+
#
|
13
|
+
# @return [WorldTimeEngine::Client]
|
14
|
+
def initialize(options={})
|
15
|
+
end
|
16
|
+
|
17
|
+
# Perform an HTTP GET request
|
18
|
+
def get(path, params={}, options={})
|
19
|
+
request(:get, path, params, options)
|
20
|
+
end
|
21
|
+
|
22
|
+
def api(ip)
|
23
|
+
endpoint = WorldTimeEngine.instance_variable_get(:@endpoint)
|
24
|
+
api_key = WorldTimeEngine.instance_variable_get(:@api_key)
|
25
|
+
|
26
|
+
timezone_hash = HTTParty.get("#{endpoint}/api/ip/#{api_key}/#{ip}", :format => :xml).to_hash['timezone']
|
27
|
+
timezone_hash.delete('xmlns:xsi')
|
28
|
+
timezone_hash.delete('xsi:noNamespaceSchemaLocation')
|
29
|
+
|
30
|
+
Hashie::Mash.new(timezone_hash).tap do |mash|
|
31
|
+
mash.time.utc = Time.parse "#{mash.time.utc} UTC"
|
32
|
+
mash.time.local = Time.parse "#{mash.time.local} #{mash.time.zone.current.abbreviation} #{mash.time.zone.current.utcoffset}"
|
33
|
+
|
34
|
+
mash.location.latitude = mash.location.latitude.to_f
|
35
|
+
mash.location.longitude = mash.location.longitude.to_f
|
36
|
+
|
37
|
+
mash.time.zone.has_dst = to_boolean mash.time.zone.hasDST
|
38
|
+
|
39
|
+
mash.time.zone.current.is_dst = to_boolean mash.time.zone.current.isdst
|
40
|
+
mash.time.zone.current.utc_offset = mash.time.zone.current.utcoffset
|
41
|
+
mash.time.zone.current.effective_until = Time.parse "#{mash.time.zone.current.effectiveUntil} #{mash.time.zone.current.abbreviation} #{mash.time.zone.current.utcoffset}"
|
42
|
+
|
43
|
+
mash.time.zone.next.is_dst = to_boolean mash.time.zone.next.isdst
|
44
|
+
mash.time.zone.next.utc_offset = mash.time.zone.next.utcoffset
|
45
|
+
mash.time.zone.next.effective_until = Time.parse "#{mash.time.zone.next.effectiveUntil} #{mash.time.zone.next.abbreviation} #{mash.time.zone.next.utcoffset}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def to_time(string)
|
52
|
+
Time.parse string
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_boolean(string)
|
56
|
+
string == 'true' ? true : false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module WorldTimeEngine
|
2
|
+
module Configurable
|
3
|
+
attr_writer :api_key
|
4
|
+
attr_accessor :endpoint
|
5
|
+
|
6
|
+
class << self
|
7
|
+
|
8
|
+
def keys
|
9
|
+
@keys ||= [
|
10
|
+
:api_key,
|
11
|
+
:endpoint
|
12
|
+
]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
# Convenience method to allow configuration options to be set in a block
|
18
|
+
def configure
|
19
|
+
yield self
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Boolean]
|
24
|
+
def credentials?
|
25
|
+
credentials.values.all?
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset!
|
29
|
+
@api_key = nil
|
30
|
+
@endpoint = 'http://worldtimeengine.com'
|
31
|
+
self
|
32
|
+
end
|
33
|
+
alias setup reset!
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# @return [Hash]
|
38
|
+
def credentials
|
39
|
+
{ :api_key => @api_key }
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [Hash]
|
43
|
+
def options
|
44
|
+
Hash[WorldTimeEngine::Configurable.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://worldtimeengine.com/timezone.xsd">
|
3
|
+
<version>1.1</version>
|
4
|
+
<location>
|
5
|
+
<region>Germany</region>
|
6
|
+
<latitude>53.25</latitude>
|
7
|
+
<longitude>10.4</longitude>
|
8
|
+
</location>
|
9
|
+
<time>
|
10
|
+
<utc>2012-08-25 14:10:29</utc>
|
11
|
+
<local>2012-08-25 16:10:29</local>
|
12
|
+
<zone>
|
13
|
+
<hasDST>true</hasDST>
|
14
|
+
<current>
|
15
|
+
<abbreviation>CEST</abbreviation>
|
16
|
+
<description>Central European Summer Time</description>
|
17
|
+
<utcoffset>+2:00</utcoffset>
|
18
|
+
<isdst>true</isdst>
|
19
|
+
<effectiveUntil>2012-10-28 03:00:00</effectiveUntil>
|
20
|
+
</current>
|
21
|
+
<next>
|
22
|
+
<abbreviation>CET</abbreviation>
|
23
|
+
<description>Central European Time</description>
|
24
|
+
<utcoffset>+1:00</utcoffset>
|
25
|
+
<isdst>false</isdst>
|
26
|
+
<effectiveUntil>2013-03-31 02:00:00</effectiveUntil>
|
27
|
+
</next>
|
28
|
+
</zone>
|
29
|
+
</time>
|
30
|
+
</timezone>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
curl http://worldtimeengine.com/api/ip/83c2bd05ec9bb21904cd8195ff93db/212.154.168.243
|
2
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
3
|
+
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://worldtimeengine.com/timezone.xsd">
|
4
|
+
<version>1.1</version>
|
5
|
+
<location>
|
6
|
+
<region>Kazakhstan</region>
|
7
|
+
<latitude>51.1811</latitude>
|
8
|
+
<longitude>71.4278</longitude>
|
9
|
+
</location>
|
10
|
+
<time>
|
11
|
+
<utc>2012-08-25 18:14:04</utc>
|
12
|
+
<local>2012-08-26 00:14:04</local>
|
13
|
+
<zone>
|
14
|
+
<hasDST>false</hasDST>
|
15
|
+
<current>
|
16
|
+
<abbreviation>ALMT</abbreviation>
|
17
|
+
<description>Alma-Ata Mean Time</description>
|
18
|
+
<utcoffset>+6:00</utcoffset>
|
19
|
+
</current>
|
20
|
+
</zone>
|
21
|
+
</time>
|
22
|
+
</timezone>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
curl http://worldtimeengine.com/api/ip/83c2bd05ec9bb21904cd8195ff93db/98.138.253.109
|
2
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
3
|
+
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://worldtimeengine.com/timezone.xsd">
|
4
|
+
<version>1.1</version>
|
5
|
+
<location>
|
6
|
+
<region>United States</region>
|
7
|
+
<latitude>37.4249</latitude>
|
8
|
+
<longitude>-122.0074</longitude>
|
9
|
+
</location>
|
10
|
+
<time>
|
11
|
+
<utc>2012-08-25 18:15:50</utc>
|
12
|
+
<local>2012-08-25 11:15:50</local>
|
13
|
+
<zone>
|
14
|
+
<hasDST>true</hasDST>
|
15
|
+
<current>
|
16
|
+
<abbreviation>PDT</abbreviation>
|
17
|
+
<description>Pacific Daylight Time</description>
|
18
|
+
<utcoffset>-7:00</utcoffset>
|
19
|
+
<isdst>true</isdst>
|
20
|
+
<effectiveUntil>2012-11-04 02:00:00</effectiveUntil>
|
21
|
+
</current>
|
22
|
+
<next>
|
23
|
+
<abbreviation>PST</abbreviation>
|
24
|
+
<description>Pacific Standard Time</description>
|
25
|
+
<utcoffset>-8:00</utcoffset>
|
26
|
+
<isdst>false</isdst>
|
27
|
+
<effectiveUntil>2013-03-10 02:00:00</effectiveUntil>
|
28
|
+
</next>
|
29
|
+
</zone>
|
30
|
+
</time>
|
31
|
+
</timezone>
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'worldtimeengine'
|
2
|
+
require 'rspec'
|
3
|
+
require 'webmock/rspec'
|
4
|
+
require 'pry'
|
5
|
+
|
6
|
+
def a_get(path, endpoint='http://worldtimeengine.com')
|
7
|
+
a_request(:get, endpoint + path)
|
8
|
+
end
|
9
|
+
|
10
|
+
def stub_get(path, endpoint='http://worldtimeengine.com')
|
11
|
+
stub_request(:get, endpoint + path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fixture_path
|
15
|
+
File.expand_path("../fixtures", __FILE__)
|
16
|
+
end
|
17
|
+
|
18
|
+
def fixture(file)
|
19
|
+
File.new(fixture_path + '/' + file)
|
20
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe WorldTimeEngine do
|
4
|
+
after do
|
5
|
+
WorldTimeEngine.reset!
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "delegating to a client" do
|
9
|
+
before do
|
10
|
+
WorldTimeEngine.configure do |config|
|
11
|
+
config.api_key = 'abc'
|
12
|
+
end
|
13
|
+
|
14
|
+
stub_request(:get, "http://worldtimeengine.com/api/ip/abc/193.174.32.100").
|
15
|
+
to_return(:status => 200, :body => fixture('193.174.32.100.xml'), :headers => {})
|
16
|
+
end
|
17
|
+
|
18
|
+
it "requests the correct resource" do
|
19
|
+
WorldTimeEngine.api('193.174.32.100')
|
20
|
+
|
21
|
+
a_get("/api/ip/abc/193.174.32.100").should have_been_made
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns needed values" do
|
25
|
+
response = WorldTimeEngine.api('193.174.32.100')
|
26
|
+
|
27
|
+
response.version.should == '1.1'
|
28
|
+
response.location.region.should == 'Germany'
|
29
|
+
response.location.latitude.should == 53.25
|
30
|
+
response.location.longitude.should == 10.4
|
31
|
+
|
32
|
+
response.time.utc.should == Time.parse("2012-08-25 14:10:29 UTC")
|
33
|
+
response.time.local.should == Time.parse("2012-08-25 16:10:29")
|
34
|
+
|
35
|
+
response.time.zone.has_dst.should == true
|
36
|
+
response.time.zone.current.abbreviation.should == "CEST"
|
37
|
+
response.time.zone.current.description.should == "Central European Summer Time"
|
38
|
+
response.time.zone.current.utc_offset.should == '+2:00'
|
39
|
+
response.time.zone.current.is_dst.should == true
|
40
|
+
response.time.zone.current.effective_until.should == Time.parse("2012-10-28 03:00:00")
|
41
|
+
|
42
|
+
response.time.zone.next.abbreviation.should == 'CET'
|
43
|
+
response.time.zone.next.description.should == "Central European Time"
|
44
|
+
response.time.zone.next.utc_offset.should == "+1:00"
|
45
|
+
response.time.zone.next.is_dst.should == false
|
46
|
+
response.time.zone.next.effective_until.should == Time.parse("2013-03-31 02:00:00")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".client" do
|
51
|
+
it "returns a WorldTimeEngine::Client" do
|
52
|
+
WorldTimeEngine.client.should be_a WorldTimeEngine::Client
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe ".configure" do
|
57
|
+
it "sets the api_key" do
|
58
|
+
WorldTimeEngine.configure do |config|
|
59
|
+
config.api_key = 'abc'
|
60
|
+
end
|
61
|
+
WorldTimeEngine.instance_variable_get(:@api_key).should eq 'abc'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe ".credentials?" do
|
66
|
+
it "returns true if all credentials are present" do
|
67
|
+
WorldTimeEngine.configure do |config|
|
68
|
+
config.api_key = 'CK'
|
69
|
+
end
|
70
|
+
WorldTimeEngine.credentials?.should be_true
|
71
|
+
end
|
72
|
+
it "returns false if any credentials are missing" do
|
73
|
+
WorldTimeEngine.configure do |config|
|
74
|
+
end
|
75
|
+
WorldTimeEngine.credentials?.should be_false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.add_dependency 'hashie'
|
5
|
+
gem.add_dependency 'httparty'
|
6
|
+
gem.add_development_dependency 'pry'
|
7
|
+
gem.add_development_dependency 'rake'
|
8
|
+
gem.add_development_dependency 'rspec'
|
9
|
+
gem.add_development_dependency 'webmock'
|
10
|
+
gem.authors = ["Nikita Fedyashev"]
|
11
|
+
gem.description = %q{A Ruby wrapper for the WorldTimeEngine.com API.}
|
12
|
+
gem.email = ['nfedyashev@gmail.com']
|
13
|
+
gem.files = %w(LICENSE.md README.md Rakefile worldtimeengine.gemspec)
|
14
|
+
gem.files += Dir.glob("lib/**/*.rb")
|
15
|
+
gem.files += Dir.glob("spec/**/*")
|
16
|
+
gem.homepage = 'https://github.com/nfedyashev/worldtimeengine'
|
17
|
+
gem.name = 'worldtimeengine'
|
18
|
+
gem.require_paths = ['lib']
|
19
|
+
gem.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
|
20
|
+
gem.summary = %q{WorldTimeEngine API wrapper}
|
21
|
+
gem.test_files = Dir.glob("spec/**/*")
|
22
|
+
gem.version = '0.0.1'
|
23
|
+
end
|
24
|
+
|
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: worldtimeengine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nikita Fedyashev
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: hashie
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: httparty
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: pry
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: webmock
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: A Ruby wrapper for the WorldTimeEngine.com API.
|
111
|
+
email:
|
112
|
+
- nfedyashev@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- LICENSE.md
|
118
|
+
- README.md
|
119
|
+
- Rakefile
|
120
|
+
- worldtimeengine.gemspec
|
121
|
+
- lib/worldtimeengine/client.rb
|
122
|
+
- lib/worldtimeengine/configurable.rb
|
123
|
+
- lib/worldtimeengine.rb
|
124
|
+
- spec/fixtures/193.174.32.100.xml
|
125
|
+
- spec/fixtures/another.xml
|
126
|
+
- spec/fixtures/us.xml
|
127
|
+
- spec/helper.rb
|
128
|
+
- spec/worldtimeengine_spec.rb
|
129
|
+
homepage: https://github.com/nfedyashev/worldtimeengine
|
130
|
+
licenses: []
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ! '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
hash: -4077128795819690830
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.3.6
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 1.8.24
|
153
|
+
signing_key:
|
154
|
+
specification_version: 3
|
155
|
+
summary: WorldTimeEngine API wrapper
|
156
|
+
test_files:
|
157
|
+
- spec/fixtures/193.174.32.100.xml
|
158
|
+
- spec/fixtures/another.xml
|
159
|
+
- spec/fixtures/us.xml
|
160
|
+
- spec/helper.rb
|
161
|
+
- spec/worldtimeengine_spec.rb
|