google_timezone 0.0.4 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dea49ca959de6ba6012065a8aeff097548ac5b90
4
- data.tar.gz: 5daf4c90ce40c1babbc0daa07810b51adb9b423d
3
+ metadata.gz: ae74565f590f1ed3353d714d67960da46128420b
4
+ data.tar.gz: 6aab6816a3c652bbdbd7b504d7d359e7f880e5dd
5
5
  SHA512:
6
- metadata.gz: f067c96016a48390ed2904fa607e29a8a725e44184a923371cbc461a76c75e23ab43138e027bba52c02154e55aa1b44b2083b7253cace049a782cb742290fa92
7
- data.tar.gz: 8af5396dcb560ea1d5a5c37375f96ecfe5c597c6e8d824c67eaff3ac0d7a485271787de9cd137f020e85d1a29ce64383a2f52751b348879b9db2002c083dc6d6
6
+ metadata.gz: 7dbdbc71964dd180eecb60a566c49246770dd9223f3b1de127215e6e87436295449845be1c66349c62b358c7ad6c8fd46d839c148ed53f34e1fb3dbd542ff5a9
7
+ data.tar.gz: 15121d942e69ec62b8b978b793dbea9501ed5b2218e65e0b646a90c16d9cafeb919217b2e228d5f4db0c932312ab3ceb215b852f376db17bbfd494ccd0db9fc2
data/README.md CHANGED
@@ -38,6 +38,18 @@ Also there is `GoogleTimezone::Result#success?` method. It returns true if respo
38
38
 
39
39
  The bang version `fetch!` raises an `GoogleTimezone::Error` exception with error message if response from Google wasn't success.
40
40
 
41
+ ## Usage in tests/specs
42
+
43
+ During tests, you probably don't want to make remote calls. To achieve this, you should set a default stub in your test/spec helper file, e.g.:
44
+
45
+ # spec/support/google_timezone.rb
46
+ GoogleTimezone.set_default_stub(
47
+ 'dstOffset' => 3600,
48
+ 'rawOffset' => -10800,
49
+ 'status' => 'OK',
50
+ 'timeZoneId' => 'America/Sao_Paulo',
51
+ 'timeZoneName' => 'Brasilia Summer Time'
52
+ )
41
53
 
42
54
  ## Contributing
43
55
 
@@ -11,5 +11,9 @@ module GoogleTimezone
11
11
  def fetch!(*args)
12
12
  Base.new(*args).fetch!
13
13
  end
14
+
15
+ def set_default_stub(default_stub)
16
+ Base.default_stub = default_stub
17
+ end
14
18
  end
15
19
  end
@@ -6,7 +6,11 @@ module GoogleTimezone
6
6
  class Error < StandardError; end
7
7
 
8
8
  class Base
9
- ALLOWED_PARAMS = [:language, :sensor, :timestamp, :client, :signature, :key]
9
+ ALLOWED_PARAMS = [:language, :timestamp, :client, :signature, :key]
10
+
11
+ class << self
12
+ attr_accessor :default_stub
13
+ end
10
14
 
11
15
  def initialize(*args)
12
16
  @lat, @lon = if args.first.is_a? Array
@@ -21,15 +25,15 @@ module GoogleTimezone
21
25
 
22
26
  def fetch
23
27
  location = [@lat, @lon].join(',')
24
- params = { location: location, sensor: false, timestamp: Time.now.to_i }.merge(@options)
28
+ params = { location: location, timestamp: Time.now.to_i }.merge(@options)
25
29
  result = get_result(params)
26
30
  Result.new(result)
27
31
  end
28
32
 
29
33
  def fetch!
30
- result = fetch
31
- raise(GoogleTimezone::Error.new(result.result)) unless result.success?
32
- result
34
+ fetch.tap do |result|
35
+ raise(GoogleTimezone::Error.new(result.result)) unless result.success?
36
+ end
33
37
  end
34
38
 
35
39
  private
@@ -47,7 +51,7 @@ module GoogleTimezone
47
51
  end
48
52
 
49
53
  def get_result(params)
50
- open(url(params)) { |r| JSON.parse(r.read) }
54
+ self.class.default_stub || open(url(params)) { |r| JSON.parse(r.read) }
51
55
  end
52
56
  end
53
57
  end
@@ -1,3 +1,3 @@
1
1
  module GoogleTimezone
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -1,23 +1,20 @@
1
1
  require 'google_timezone'
2
2
 
3
3
  describe GoogleTimezone do
4
- describe '.fetch' do
5
- context 'without any optional parameters' do
6
- let(:base_instance) { spy }
7
- let(:result) { GoogleTimezone::Result.new({}) }
4
+ def self.stub_remote_calls!
5
+ let(:raw_result) { {} }
8
6
 
9
- before do
10
- allow_any_instance_of(GoogleTimezone::Base).to(
11
- receive(:new).with(any_args)
12
- .and_return(base_instance)
13
- )
7
+ before do
8
+ allow_any_instance_of(GoogleTimezone::Base).to(
9
+ receive(:get_result).and_return(raw_result)
10
+ )
11
+ end
12
+ end
14
13
 
15
- allow(base_instance).to(
16
- receive(:fetch).with(no_args)
17
- .and_return(result)
18
- )
19
- end
14
+ describe '.fetch' do
15
+ stub_remote_calls!
20
16
 
17
+ context 'without any optional parameters' do
21
18
  it 'should accept separate lat/long paramenters' do
22
19
  g = GoogleTimezone.fetch(0, 0)
23
20
  expect(g).to be_an_instance_of(GoogleTimezone::Result)
@@ -30,32 +27,20 @@ describe GoogleTimezone do
30
27
  end
31
28
 
32
29
  context 'with optional parameters' do
33
- let(:base_instance) { spy }
34
- let(:result) { GoogleTimezone::Result.new(0) }
35
30
  let(:valid_params) { { timestamp: 1331161200,
36
31
  key: 'A24br8v2w' } }
37
32
  let(:invalid_params) { { timestamp: 1331161200,
38
33
  key: 'A24br8v2w',
39
34
  unallowed_param: true } }
40
35
 
41
- before(:each) do
42
- allow_any_instance_of(GoogleTimezone::Base).to(
43
- receive(:new).with(0, 0, valid_params)
44
- .and_return(base_instance)
45
- )
46
-
47
- allow(base_instance).to(
48
- receive(:fetch).with(no_args)
49
- .and_return(result)
50
- )
51
- end
52
-
53
36
  it 'should pass allowed parameters on to the query' do
54
37
  g = GoogleTimezone.fetch(0, 0, valid_params)
55
38
  expect(g).to be_an_instance_of(GoogleTimezone::Result)
56
39
  end
57
40
 
58
41
  it 'should reject unallowed parameters' do
42
+ a_hash_excluding = -> (*keys) { satisfy { |actual| (keys & actual.keys).empty? } }
43
+ expect_any_instance_of(GoogleTimezone::Base).to receive(:get_result).with(a_hash_excluding[:unallowed_param])
59
44
  g = GoogleTimezone.fetch(0, 0, invalid_params)
60
45
  expect(g).to be_an_instance_of(GoogleTimezone::Result)
61
46
  end
@@ -63,21 +48,37 @@ describe GoogleTimezone do
63
48
  end
64
49
 
65
50
  describe '.fetch!' do
51
+ stub_remote_calls!
52
+
66
53
  describe 'if result is not successful' do
67
- let(:result) { GoogleTimezone::Result.new({}) }
68
- let(:error) { GoogleTimezone::Error }
54
+ it 'should raise an error' do
55
+ expect { GoogleTimezone.fetch!(0, 0) }.to raise_error(GoogleTimezone::Error)
56
+ end
57
+ end
69
58
 
70
- before { allow(result).to receive(:success?).and_return(false) }
71
- before { allow(result).to receive(:result).and_return('error message') }
72
- before {
73
- allow_any_instance_of(GoogleTimezone::Base).to(
74
- receive(:fetch).and_return(result)
75
- )
76
- }
59
+ describe 'if result is successul' do
60
+ let(:raw_result) { { 'status' => 'OK' } }
77
61
 
78
- it 'should raise an error' do
79
- expect { GoogleTimezone.fetch!(0,0) }.to raise_error(error)
62
+ it 'should return a result' do
63
+ g = GoogleTimezone.fetch!(0, 0)
64
+ expect(g).to be_an_instance_of(GoogleTimezone::Result)
80
65
  end
81
66
  end
82
67
  end
68
+
69
+ describe '.set_default_stub' do
70
+ after { GoogleTimezone.set_default_stub(nil) }
71
+
72
+ it 'does not make a remote call' do
73
+ GoogleTimezone.set_default_stub({})
74
+ expect_any_instance_of(GoogleTimezone::Base).not_to receive(:open)
75
+ GoogleTimezone.fetch(0, 0)
76
+ end
77
+
78
+ it 'returns the configured stub' do
79
+ GoogleTimezone.set_default_stub('timeZoneId' => 'Europe/Berlin')
80
+ g = GoogleTimezone.fetch(0, 0)
81
+ expect(g.time_zone_id).to eq('Europe/Berlin')
82
+ end
83
+ end
83
84
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_timezone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - sck-v
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-25 00:00:00.000000000 Z
11
+ date: 2015-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec