open_exchange_rates 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.gem
2
2
  *.rbc
3
+ .env
3
4
  .bundle
4
5
  .config
5
6
  .yardoc
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # OpenExchangeRates
2
2
 
3
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/vlado/open_exchange_rates)
4
+
3
5
  Ruby gem for currency conversion based on [Open Exchange Rates API](http://openexchangerates.org) - free / open source hourly-updated currency data for everybody
4
6
 
5
7
  ## Accuracy
@@ -19,6 +21,31 @@ And then execute:
19
21
  Or install it yourself as:
20
22
 
21
23
  $ gem install open_exchange_rates
24
+
25
+ ## Configuration
26
+
27
+ You will need App ID to use OpenExchangeRates, you can get one for free [here](https://openexchangerates.org/signup/). Wanna know [why App ID is needed](http://www.josscrowcroft.com/2012/projects/open-exchange-rates-update-the-partys-not-over-it-just-got-a-little-too-noisy/).
28
+
29
+ **Option 1**
30
+
31
+ Set OPEN_EXCHANGE_RATES_APP_ID environment variable and it will be used automatically. If you are using [foreman](http://ddollar.github.com/foreman/) for example just add it to your .env file like this
32
+
33
+ OPEN_EXCHANGE_RATES_APP_ID=YourAppID
34
+
35
+ **Option 2**
36
+
37
+ OpenExchangeRates.configure do |config|
38
+ config.app_id = "YourAppID"
39
+ end
40
+
41
+ If you are using Rails good place to add this is config/initializers/open_exchange_rates.rb
42
+
43
+ **Option 3**
44
+
45
+ Pass it on initialization
46
+
47
+ fx = OpenExchangeRates::Rates.new(:app_id => "YourAppID")
48
+
22
49
 
23
50
  ## Usage
24
51
 
data/env.example ADDED
@@ -0,0 +1 @@
1
+ OPEN_EXCHANGE_RATES_APP_ID=YourAppID
@@ -0,0 +1,5 @@
1
+ module OpenExchangeRates
2
+ class Configuration
3
+ attr_accessor :app_id
4
+ end
5
+ end
@@ -3,6 +3,17 @@ require "open-uri"
3
3
  module OpenExchangeRates
4
4
  class Rates
5
5
 
6
+ class MissingAppIdError < StandardError
7
+ def initialize(msg = "Go to https://openexchangerates.org/signup to get App ID and then add it to the configuration: OpenExchangeRates.configuration.app_id = 'your app id'")
8
+ super(msg)
9
+ end
10
+ end
11
+
12
+ def initialize(app_id = nil)
13
+ @app_id = app_id || OpenExchangeRates.configuration.app_id
14
+ raise MissingAppIdError unless @app_id
15
+ end
16
+
6
17
  def exchange_rate(options = {})
7
18
  from_curr = options[:from].to_s.upcase
8
19
  to_curr = options[:to].to_s.upcase
@@ -44,12 +55,12 @@ module OpenExchangeRates
44
55
 
45
56
  def parse_latest
46
57
  @latest_parser ||= OpenExchangeRates::Parser.new
47
- @latest_parser.parse(open(OpenExchangeRates::LATEST_URL))
58
+ @latest_parser.parse(open("#{OpenExchangeRates::LATEST_URL}?app_id=#{@app_id}"))
48
59
  end
49
60
 
50
61
  def parse_on(date_string)
51
62
  @on_parser = OpenExchangeRates::Parser.new
52
- @on_parser.parse(open("#{OpenExchangeRates::BASE_URL}/historical/#{date_string}.json"))
63
+ @on_parser.parse(open("#{OpenExchangeRates::BASE_URL}/historical/#{date_string}.json?app_id=#{@app_id}"))
53
64
  end
54
65
 
55
66
  end
@@ -1,3 +1,3 @@
1
1
  module OpenExchangeRates
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require "rubygems"
2
2
  require "open_exchange_rates/version"
3
+ require "open_exchange_rates/configuration"
3
4
  require "open_exchange_rates/parser"
4
5
  require "open_exchange_rates/response"
5
6
  require "open_exchange_rates/rates"
@@ -7,4 +8,18 @@ require "open_exchange_rates/rates"
7
8
  module OpenExchangeRates
8
9
  BASE_URL = "http://openexchangerates.org"
9
10
  LATEST_URL = "#{BASE_URL}/latest.json"
11
+
12
+ class << self
13
+ attr_accessor :configuration
14
+ end
15
+
16
+ def self.configure
17
+ self.configuration ||= OpenExchangeRates::Configuration.new
18
+ yield(configuration)
19
+ end
20
+ end
21
+
22
+ # Default configuration
23
+ OpenExchangeRates.configure do |config|
24
+ config.app_id = ENV['OPEN_EXCHANGE_RATES_APP_ID']
10
25
  end
data/test/rates_test.rb CHANGED
@@ -2,6 +2,26 @@ require "test_helper"
2
2
 
3
3
  class TestOpenExchangeRates < Test::Unit::TestCase
4
4
 
5
+ def test_app_id_is_required
6
+ assert_nothing_raised { OpenExchangeRates::Rates.new }
7
+
8
+ stub(OpenExchangeRates.configuration).app_id { nil }
9
+ assert_raise(OpenExchangeRates::Rates::MissingAppIdError) { OpenExchangeRates::Rates.new }
10
+
11
+ assert_nothing_raised { OpenExchangeRates::Rates.new(:app_id => "myappid") }
12
+
13
+ OpenExchangeRates.configuration.app_id = ENV['OPEN_EXCHANGE_RATES_APP_ID']
14
+ end
15
+
16
+ def test_invalid_app_id_raise_error
17
+ stub(OpenExchangeRates.configuration).app_id { "somethingstupid" }
18
+ fx = OpenExchangeRates::Rates.new
19
+
20
+ assert_raise NoMethodError do
21
+ fx.exchange_rate(:from => "USD", :to => "EUR")
22
+ end
23
+ end
24
+
5
25
  def test_exchange_rate
6
26
  fx = OpenExchangeRates::Rates.new
7
27
  stub(fx).parse_latest { OpenExchangeRates::Parser.new.parse(open_asset("latest.json")) }
@@ -123,11 +143,10 @@ class TestOpenExchangeRates < Test::Unit::TestCase
123
143
 
124
144
  assert_equal "USD", on_rates.base_currency
125
145
  assert_equal "USD", on_rates.base
126
- assert on_rates.rates.is_a?(Hash)
127
146
 
128
147
  assert_equal 1, on_rates.rates["USD"]
129
- assert_equal 0.99458, on_rates.rates["AUD"]
130
- assert_equal 5.80025, on_rates.rates["HRK"]
148
+ assert_equal 0.991118, on_rates.rates["AUD"]
149
+ assert_equal 5.795542, on_rates.rates["HRK"]
131
150
  end
132
151
 
133
152
  def test_round
@@ -141,6 +160,7 @@ class TestOpenExchangeRates < Test::Unit::TestCase
141
160
 
142
161
  def test_multiple_calls
143
162
  fx = OpenExchangeRates::Rates.new
163
+
144
164
  assert_nothing_raised do
145
165
  fx.convert(123, :from => "EUR", :to => "AUD", :on => "2012-03-10")
146
166
  fx.convert(100, :from => "USD", :to => "EUR")
data/test/test_helper.rb CHANGED
@@ -3,6 +3,17 @@ require "test/unit"
3
3
  require "rr"
4
4
  require "open_exchange_rates"
5
5
 
6
+ # Pick up ENV variables from .env file if exists
7
+ dot_env_file_path = File.expand_path("../../.env", __FILE__)
8
+ if File.exist?(dot_env_file_path)
9
+ File.open(dot_env_file_path).each_line do |line|
10
+ key, value = line.strip.split("=")
11
+ ENV[key] = value unless key.nil? || value.nil?
12
+ end
13
+ end
14
+
15
+ OpenExchangeRates.configuration.app_id = ENV['OPEN_EXCHANGE_RATES_APP_ID']
16
+
6
17
  class Test::Unit::TestCase
7
18
  include RR::Adapters::TestUnit
8
19
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_exchange_rates
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Vlado Cingel
@@ -15,12 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-06-13 00:00:00 Z
18
+ date: 2012-07-14 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: yajl-ruby
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
22
  none: false
25
23
  requirements:
26
24
  - - ">="
@@ -29,12 +27,12 @@ dependencies:
29
27
  segments:
30
28
  - 0
31
29
  version: "0"
30
+ requirement: *id001
32
31
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rr
32
+ name: yajl-ruby
36
33
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
34
+ - !ruby/object:Gem::Dependency
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
36
  none: false
39
37
  requirements:
40
38
  - - ">="
@@ -43,12 +41,12 @@ dependencies:
43
41
  segments:
44
42
  - 0
45
43
  version: "0"
44
+ requirement: *id002
46
45
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rake
46
+ name: rr
50
47
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ - !ruby/object:Gem::Dependency
49
+ version_requirements: &id003 !ruby/object:Gem::Requirement
52
50
  none: false
53
51
  requirements:
54
52
  - - ">="
@@ -57,8 +55,10 @@ dependencies:
57
55
  segments:
58
56
  - 0
59
57
  version: "0"
58
+ requirement: *id003
60
59
  type: :development
61
- version_requirements: *id003
60
+ name: rake
61
+ prerelease: false
62
62
  description: Ruby library for Open Exchange Rates API - free / open source hourly-updated currency data for everybody
63
63
  email:
64
64
  - vladocingel@gmail.com
@@ -74,7 +74,9 @@ files:
74
74
  - LICENSE
75
75
  - README.md
76
76
  - Rakefile
77
+ - env.example
77
78
  - lib/open_exchange_rates.rb
79
+ - lib/open_exchange_rates/configuration.rb
78
80
  - lib/open_exchange_rates/parser.rb
79
81
  - lib/open_exchange_rates/rates.rb
80
82
  - lib/open_exchange_rates/response.rb
@@ -122,4 +124,3 @@ test_files:
122
124
  - test/assets/latest.json
123
125
  - test/rates_test.rb
124
126
  - test/test_helper.rb
125
- has_rdoc: