currency_exchange 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,8 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency "rspec"
23
- s.add_runtime_dependency "rest-client"
24
- s.add_runtime_dependency "json"
25
- s.add_runtime_dependency "activesupport", ">= 3.2.0"
26
- s.add_runtime_dependency "rails", ">= 3.2.0"
23
+ s.add_development_dependency "rest-client"
24
+ s.add_development_dependency "json"
25
+ s.add_development_dependency "rails", ">= 3.2.0"
27
26
  end
@@ -7,8 +7,8 @@ module CurrencyExchange
7
7
  end
8
8
 
9
9
  module Transporters
10
- autoload :ExchangeTransporter, 'currency_exchange/transporters/exchange_transporter'
11
10
  autoload :JsonTransporter, 'currency_exchange/transporters/json_transporter'
11
+ autoload :ExchangeTransporter, 'currency_exchange/transporters/exchange_transporter'
12
12
  end
13
13
 
14
14
  module Data
@@ -16,8 +16,8 @@ module CurrencyExchange
16
16
  end
17
17
 
18
18
  module Storage
19
+ autoload :RailsCache, 'currency_exchange/storage/rails_cache'
19
20
  autoload :Cache, 'currency_exchange/storage/cache'
20
- autoload :MemCache, 'currency_exchange/storage/mem_cache'
21
21
  end
22
22
 
23
23
  class << self
@@ -1,7 +1,7 @@
1
1
  module CurrencyExchange
2
2
  class Storage::Cache
3
3
 
4
- CACHE_STRATEGY = { :memcache => CurrencyExchange::Storage::MemCache }
4
+ CACHE_STRATEGY = { :rails_cache => CurrencyExchange::Storage::RailsCache }
5
5
 
6
6
  class << self
7
7
  attr_accessor :cache_strategy
@@ -1,19 +1,19 @@
1
1
  begin
2
2
  require 'rails'
3
3
  rescue LoadError
4
- raise "You don't have rails installed"
4
+ raise "You don't have required libraries installed"
5
5
  end
6
6
 
7
7
  module CurrencyExchange
8
8
  module Storage
9
- class MemCache < Cache
9
+ class RailsCache < Cache
10
10
 
11
11
  def fetch(key)
12
12
  Rails.cache.read(key)
13
13
  end
14
14
 
15
15
  def store(key, value)
16
- Rails.cache.write(key, value, :expires_in => 1.day)
16
+ Rails.cache.write(key, value, :expires_in => 86400)
17
17
  value
18
18
  end
19
19
  end
@@ -1,10 +1,3 @@
1
- begin
2
- require 'rest-client'
3
- require 'json'
4
- rescue LoadError
5
- raise "You don't have the required gems installed"
6
- end
7
-
8
1
  module CurrencyExchange
9
2
  module Transporters
10
3
  class ExchangeTransporter
@@ -1,3 +1,3 @@
1
1
  module CurrencyExchange
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurrencyExchange::Storage::Cache do
4
+
5
+ describe "#cache_strategy" do
6
+ let(:cache_strategy) { :ok }
7
+
8
+ before do
9
+ CurrencyExchange::Storage::Cache.cache_strategy = cache_strategy
10
+ end
11
+
12
+ it "should set a cache strategy" do
13
+ CurrencyExchange::Storage::Cache.cache_strategy.should == cache_strategy
14
+ end
15
+ end
16
+
17
+ describe "#load_instance" do
18
+ let(:cache_strategy) { nil }
19
+ subject { CurrencyExchange::Storage::Cache.send(:load_instance) }
20
+
21
+ before do
22
+ CurrencyExchange::Storage::Cache.cache_strategy = cache_strategy
23
+ end
24
+
25
+ it "should return self" do
26
+ subject.class.should == CurrencyExchange::Storage::Cache
27
+ end
28
+
29
+ context "when strategy is to rails cache" do
30
+ let(:cache_strategy) { :rails_cache }
31
+
32
+ it "should return rails cache storage" do
33
+ subject.class.should == CurrencyExchange::Storage::RailsCache
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "#store" do
39
+ let(:key) { "abc" }
40
+ let(:value) { 10 }
41
+ subject { CurrencyExchange::Storage::Cache.new.store(key, value) }
42
+
43
+ it "should not store and return value" do
44
+ subject.should == value
45
+ end
46
+ end
47
+
48
+ end
49
+
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurrencyExchange::Storage::RailsCache do
4
+
5
+ describe "#fetch" do
6
+ let(:cache_data) { "my data" }
7
+ let(:key) { 123 }
8
+
9
+ subject { CurrencyExchange::Storage::RailsCache.new.fetch(key) }
10
+
11
+ before do
12
+ Rails.stub_chain(:cache, :read).and_return(cache_data)
13
+ end
14
+
15
+ it "should retrieve from cache" do
16
+ subject.should == cache_data
17
+ end
18
+ end
19
+
20
+ describe "#store" do
21
+ let(:key) { 123 }
22
+ let(:value) { "ok" }
23
+ subject { CurrencyExchange::Storage::RailsCache.new.store(key, value) }
24
+
25
+ before do
26
+ Rails.stub_chain(:cache, :write).with(key, value, anything()).and_return(true)
27
+ end
28
+
29
+ it "should return back value" do
30
+ subject.should == value
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurrencyExchange::Transporters::ExchangeTransporter do
4
+
5
+ describe "#load_instance" do
6
+ let(:strategy) { nil }
7
+ subject { CurrencyExchange::Transporters::ExchangeTransporter.load_instance(strategy) }
8
+
9
+ context "when strategy is to use json" do
10
+ let(:strategy) { :json }
11
+
12
+ it "should return json transporter" do
13
+ subject.class.should == CurrencyExchange::Transporters::ExchangeTransporter::TRANSPORTER_STRATEGY[:json]
14
+ end
15
+ end
16
+
17
+ it "should return an instance of itself" do
18
+ subject.class.should == CurrencyExchange::Transporters::ExchangeTransporter
19
+ end
20
+ end
21
+
22
+ describe "#fetch_data" do
23
+ let(:url) { "http://www.blah.com" }
24
+
25
+ subject { CurrencyExchange::Transporters::ExchangeTransporter.new.fetch_data(url) }
26
+ it "should throw a not implemented error" do
27
+ expect { subject }.to raise_error(NotImplementedError)
28
+ end
29
+ end
30
+
31
+ describe "#retrieve_rates" do
32
+ let(:url) { "http://www.blah.com" }
33
+ let(:fetch_data) { "fetched data" }
34
+ let(:store_data) { "store data" }
35
+ let(:storage) { mock('storage', :fetch => fetch_data, :store => store_data) }
36
+ let(:transporter) { CurrencyExchange::Transporters::ExchangeTransporter.new }
37
+
38
+ subject { transporter.retrieve_rates(url) }
39
+
40
+ before do
41
+ CurrencyExchange::Storage::Cache.stub(:instance).and_return(storage)
42
+ transporter.stub(:fetch_data)
43
+ end
44
+
45
+ it "should return data in storage" do
46
+ subject.should == fetch_data
47
+ end
48
+
49
+ context "when fetch data is nil" do
50
+ let(:fetch_data) { nil }
51
+
52
+ it "should store and return data" do
53
+ subject.should == store_data
54
+ end
55
+ end
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurrencyExchange::Transporters::JsonTransporter do
4
+
5
+ describe "#fetch_data" do
6
+ let(:url) { "http://www.blah.com" }
7
+ let(:body) { '{"one":true}' }
8
+ let(:json) { { 'one' => true } }
9
+ let(:response) { mock("response", :body => body) }
10
+
11
+ subject { CurrencyExchange::Transporters::JsonTransporter.new.fetch_data url }
12
+
13
+ before do
14
+ RestClient.stub(:get).and_return(response)
15
+ end
16
+
17
+ it "should call rest client" do
18
+ RestClient.should_receive(:get).with(url, anything())
19
+ subject
20
+ end
21
+
22
+ it "should retrieve body of response" do
23
+ subject.should == json
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: currency_exchange
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Thil Bandara
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-14 00:00:00 Z
18
+ date: 2012-02-15 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec
@@ -43,7 +43,7 @@ dependencies:
43
43
  segments:
44
44
  - 0
45
45
  version: "0"
46
- type: :runtime
46
+ type: :development
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: json
@@ -57,10 +57,10 @@ dependencies:
57
57
  segments:
58
58
  - 0
59
59
  version: "0"
60
- type: :runtime
60
+ type: :development
61
61
  version_requirements: *id003
62
62
  - !ruby/object:Gem::Dependency
63
- name: activesupport
63
+ name: rails
64
64
  prerelease: false
65
65
  requirement: &id004 !ruby/object:Gem::Requirement
66
66
  none: false
@@ -73,24 +73,8 @@ dependencies:
73
73
  - 2
74
74
  - 0
75
75
  version: 3.2.0
76
- type: :runtime
76
+ type: :development
77
77
  version_requirements: *id004
78
- - !ruby/object:Gem::Dependency
79
- name: rails
80
- prerelease: false
81
- requirement: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 15
87
- segments:
88
- - 3
89
- - 2
90
- - 0
91
- version: 3.2.0
92
- type: :runtime
93
- version_requirements: *id005
94
78
  description: A basic library to retrieve and convert currency
95
79
  email:
96
80
  - tbandara@gmail.com
@@ -110,7 +94,7 @@ files:
110
94
  - lib/currency_exchange/exchangers/open_exchange.rb
111
95
  - lib/currency_exchange/ext/fixnum.rb
112
96
  - lib/currency_exchange/storage/cache.rb
113
- - lib/currency_exchange/storage/mem_cache.rb
97
+ - lib/currency_exchange/storage/rails_cache.rb
114
98
  - lib/currency_exchange/transporters/exchange_transporter.rb
115
99
  - lib/currency_exchange/transporters/json_transporter.rb
116
100
  - lib/currency_exchange/version.rb
@@ -118,6 +102,10 @@ files:
118
102
  - spec/exchangers/open_exchange_spec.rb
119
103
  - spec/ext/fixnum_spec.rb
120
104
  - spec/spec_helper.rb
105
+ - spec/storage/cache_spec.rb
106
+ - spec/storage/rails_cache_spec.rb
107
+ - spec/transporters/exchange_transporter_spec.rb
108
+ - spec/transporters/json_transporter_spec.rb
121
109
  homepage: https://github.com/thil/currency_exchange
122
110
  licenses: []
123
111
 
@@ -156,3 +144,7 @@ test_files:
156
144
  - spec/exchangers/open_exchange_spec.rb
157
145
  - spec/ext/fixnum_spec.rb
158
146
  - spec/spec_helper.rb
147
+ - spec/storage/cache_spec.rb
148
+ - spec/storage/rails_cache_spec.rb
149
+ - spec/transporters/exchange_transporter_spec.rb
150
+ - spec/transporters/json_transporter_spec.rb