apilayer 1.5.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b78b1270c33ed6f9b1a8879031dcb80fa82bee9b
4
- data.tar.gz: b1349cc942a471919e688af35cf447a60d955296
3
+ metadata.gz: ece8c553f9af332d873b2c0577caf0ae7f899fab
4
+ data.tar.gz: 0fb25263dfad5bf7d1444f47d88b022cb173b216
5
5
  SHA512:
6
- metadata.gz: 2a247fd53c936004185f43a3e67b3bef676718ca6df248d33032f50d5a4a44e6f1fa8a1657e2f0400179230d2a31a20887ec6c8bd2716d2b95454df3586787de
7
- data.tar.gz: dd6fc9340d265b22c5542717496e67b9fff07339f602704bfe8a55358b3016403a393c7c9bc698c5fe19ad9ea8a538adcb6544b8df294db9ef7dba9b6db7e323
6
+ metadata.gz: bd5b9cd11fb91ca457ffbf67d21e4140504da160dcf1091ddfb0df5b035cbb098a934b75ad630d053ffccce7f9be2d5771af4d69ff4b2af0775e34902f7a6537
7
+ data.tar.gz: 7d955d30a368d56a418666651727c5f3c7d084c4aa4ce5d3ad5402b71059d6c2c26ca29aca896a49a1109e496eab086a6c3bb4a0b069905d829a4c77b11e24c6
data/README.rdoc CHANGED
@@ -1,17 +1,26 @@
1
1
  == apilayer {<img src="https://secure.travis-ci.org/actfong/apilayer.png"/>}[http://travis-ci.org/actfong/apilayer] {<img src="https://codeclimate.com/github/actfong/apilayer.png"/>}[https://codeclimate.com/github/actfong/apilayer] {<img src="https://badge.fury.io/rb/apilayer.svg" alt="Gem Version" />}[https://badge.fury.io/rb/apilayer]
2
2
 
3
- Ruby wrapper for various services of apilayer.
3
+ With the release of version 2.0, the apilayer gem now act as a dependency for the *currency_layer* and *vat_layer* gems.
4
+
5
+ Please see https://github.com/actfong/currency_layer and https://github.com/actfong/vat_layer
6
+
7
+ *apilayer* provides a common-interface to configure and create connections to apilayer.net
4
8
  See http://apilayer.com for more details.
5
9
 
10
+ === Version 2.0
11
+ Removed all code related to currencylayer (Apilayer::Currency) and vatlayer (Apilayer::Vat).
12
+ Now act as a dependency to currency_layer and vat_layer gems.
13
+ ConnectionHelper contains all code related to configuring and creating connections to apilayer.net
14
+
6
15
  === Version 1.5
7
- Improved reconfiguration-mechanism in Apilayer.
8
- Added HTTPS-option in Apilayer module.
9
- With this release, all paid-features of vatlayer and currencylayer are fully covered.
16
+ - Improved reconfiguration-mechanism in Apilayer.
17
+ - Added HTTPS-option in Apilayer module.
18
+ - With this release, all paid-features of vatlayer and currencylayer are fully covered.
10
19
 
11
20
  === Version 1.2 - 1.4
12
- Added .change and .list to Apilayer::Currency
13
- Added .timeframe to Apilayer::Currency
14
- Added .convert to Apilayer::Currency
21
+ - Added .change and .list to Apilayer::Currency
22
+ - Added .timeframe to Apilayer::Currency
23
+ - Added .convert to Apilayer::Currency
15
24
 
16
25
  === Version 1.1
17
26
  - Major change to how .live and .historical in Apilayer::Currency are invoked.
@@ -30,78 +39,5 @@ Run the following in your console:
30
39
 
31
40
  $ bundle install
32
41
 
33
- === Usage
34
-
35
- ==== Set up Apilayer
36
- Once you sign up for a service of *apilayer*, you will receive an access_key. Please pay attention that different services of apilayer (such as *vatlayer* and *currencylayer*) have different access keys.
37
-
38
- Then you can use your access_key(s) to configure your Apilayer module like this:
39
-
40
- Apilayer.configure do |configs|
41
- configs.vat_key = "my_vatlayer_access_key_123"
42
- configs.currency_key = "my_currencylayer_access_key_123"
43
- configs.vat_https = false
44
- configs.currency_https = true
45
- end
46
-
47
- Please note that you only need to set the access keys and https connections that you need.
48
- If unset, these values are just nil.
49
-
50
- You can always review you configurations with:
51
-
52
- Apilayer.configs
53
-
54
- Once your configurations are set, you are ready to go
55
-
56
- ==== currencylayer
57
- After setting the access_key for *currencylayer*, you can use Apilayer::Currency to call *currencylayer*'s API
58
- Apilayer::Currency.list
59
-
60
- Apilayer::Currency.live
61
- Apilayer::Currency.live(:currencies => %w[GBP, CHF])
62
- Apilayer::Currency.live(:source => "EUR") # source-currency is USD by default
63
- Apilayer::Currency.live(:source => "EUR", :currencies => %w[GBP, CHF])
64
-
65
- Apilayer::Currency.historical("2016-01-01")
66
- Apilayer::Currency.historical("2016-01-01", :currencies => %w[GBP CHF])
67
- Apilayer::Currency.historical(:source => "EUR") # source-currency is USD by default
68
- Apilayer::Currency.historical("2016-01-01", :currencies => %w[GBP CHF], :source => "EUR")
69
-
70
- Apilayer::Currency.convert("EUR", "CHF", 100) # convert 100 EUR to CHF
71
- Apilayer::Currency.convert("EUR", "CHF", 100, "2015-06-01") # based on specific date
72
-
73
- Apilayer::Currency.timeframe("2016-01-01", "2016-06-01")
74
- Apilayer::Currency.timeframe("2016-01-01", "2016-06-01", :currencies => %w[GBP CHF])
75
- Apilayer::Currency.timeframe("2016-01-01", "2016-06-01", :source => "EUR")
76
- Apilayer::Currency.timeframe("2016-01-01", "2016-06-01", :currencies => %w[GBP CHF], :source => "EUR")
77
-
78
- Apilayer::Currency.change
79
- Apilayer::Currency.change("2016-01-01", "2016-03-01")
80
- Apilayer::Currency.change("2016-01-01", "2016-03-01", :source => "EUR")
81
- Apilayer::Currency.change("2016-01-01", "2016-03-01", :currencies => %w[GBP CHF])
82
- Apilayer::Currency.change("2016-01-01", "2016-03-01", :source => "EUR", :currencies => %w[GBP CHF])
83
- Apilayer::Currency.change(nil, nil, {:source => "EUR"})
84
- Apilayer::Currency.change(nil, nil, {:currencies => %w[GBP CHF]})
85
- Apilayer::Currency.change(nil, nil, {:source => "EUR", :currencies => %w[GBP CHF]})
86
-
87
- ==== vatlayer
88
- After setting the access_key for *vatlayer*, you can use Apilayer::Vat to call *vatlayer*'s API
89
-
90
- Apilayer::Vat.validate("LU26375245")
91
- Apilayer::Vat.rate(:country_code, "NL")
92
- Apilayer::Vat.rate(:ip_address, "176.249.153.36")
93
- Apilayer::Vat.rate_list
94
- Apilayer::Vat.price(100, :country, "NL")
95
- Apilayer::Vat.price(100, :ip_address, "176.249.153.36")
96
-
97
- ==== Re-Configure Apilayer
98
- If you happened to have forgotten to set or entered an incorrect value, you can re-configure your Apilayer module by:
99
42
 
100
- # Example: reconfigure https for vatlayer
101
- Apilayer.configure do |configs|
102
- configs.vat_https = true
103
- end
104
43
 
105
- The action above will not affect the other Apilayer configurations you have set previously.
106
- When you try to connect to Apilayer again, it will create a new connection based on the values you provided.
107
-
data/lib/apilayer.rb CHANGED
@@ -2,39 +2,5 @@ require 'rubygems'
2
2
  require "faraday"
3
3
  require "json"
4
4
 
5
- module Apilayer
6
- class << self
7
- attr_writer :configs
8
- end
9
-
10
- def self.init_configs
11
- keys = Struct.new(:currency_key, :vat_key, :currency_https, :vat_https)
12
- keys.new
13
- end
14
-
15
- def self.configs
16
- @configs ||= init_configs
17
- end
18
-
19
- def self.reset!
20
- @configs = init_configs
21
- end
22
-
23
- def self.configure
24
- reset_observers_connections
25
- yield(configs)
26
- end
27
- end
28
-
29
5
  require "apilayer/connection_helper"
30
- require "apilayer/currency"
31
- require "apilayer/vat"
32
-
33
- module Apilayer
34
- OBSERVERS = [Apilayer::Currency, Apilayer::Vat]
35
- def self.reset_observers_connections
36
- OBSERVERS.each(&:reset_connection)
37
- end
38
- end
39
-
40
6
  require "apilayer/error"
@@ -1,18 +1,36 @@
1
1
  module Apilayer
2
2
  module ConnectionHelper
3
3
 
4
+ def init_configs
5
+ keys = Struct.new(:access_key, :https)
6
+ keys.new
7
+ end
8
+
9
+ def configs
10
+ @configs ||= init_configs
11
+ end
12
+
13
+ def reset_configs!
14
+ @configs = init_configs
15
+ end
16
+
17
+ def configure(&block)
18
+ self.reset_connection
19
+ yield(configs)
20
+ end
21
+
4
22
  ##
5
23
  # Creates a connection for the extended module to an apilayer-service, such as currencylayer and vatlayer.
6
24
  # Uses access_key(s) configured with Apilayer module.
7
25
  def connection
8
26
  @connection ||= ::Faraday.new(
9
27
  :url => "#{protocol}://apilayer.net",
10
- :params => {"access_key" => Apilayer.configs[self.const_get(:APILAYER_CONFIG_KEY)]}
28
+ :params => {"access_key" => self.configs[:access_key]}
11
29
  )
12
30
  end
13
31
 
14
32
  def protocol
15
- Apilayer.configs[self.const_get(:APILAYER_SECURE)] ? "https" : "http"
33
+ self.configs[:https] ? "https" : "http"
16
34
  end
17
35
  ##
18
36
  # Resets the connection for the extended module. Used when the user needs to re-enter his/her access_key(s)
@@ -29,10 +47,10 @@ module Apilayer
29
47
 
30
48
  ##
31
49
  # Makes a get-request to apilayer's service
32
- def get_request(url, params={})
50
+ def get_request(slug, params={})
33
51
  # calls connection method on the extended module
34
52
  connection.get do |req|
35
- req.url "api/#{url}"
53
+ req.url "api/#{slug}"
36
54
  params.each_pair do |k,v|
37
55
  req.params[k] = v
38
56
  end
@@ -44,10 +62,6 @@ module Apilayer
44
62
  # When errors are returned by apilayer, the 'info' and 'code' from its error will be used to raise an Apilayer::Error
45
63
  def parse_response(resp)
46
64
  body = JSON.parse(resp.body)
47
- # According to documentation, currencylayer has a "success" field
48
- # while vatlayer has a "valid" field to indicate whether the request was succesful or not.
49
- # However, for both layers, an unsuccesful request would contain an "error" field.
50
- # That's why the presence of "error" is chosen to determine whether we should raise an error or not.
51
65
  if body['error']
52
66
  raise Apilayer::Error.new(
53
67
  body['error']['info'],
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apilayer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Fong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-31 00:00:00.000000000 Z
11
+ date: 2016-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -190,7 +190,7 @@ dependencies:
190
190
  - - ">="
191
191
  - !ruby/object:Gem::Version
192
192
  version: 2.0.1
193
- description: Ruby wrapper for currencylayer and vatlayer from apilayer.com. See https://apilayer.com/
193
+ description: Acts as a dependency for the currency_layer and vat_layer gems. See https://apilayer.com/
194
194
  for more details.
195
195
  email:
196
196
  - actfong@gmail.com
@@ -204,9 +204,7 @@ files:
204
204
  - Rakefile
205
205
  - lib/apilayer.rb
206
206
  - lib/apilayer/connection_helper.rb
207
- - lib/apilayer/currency.rb
208
207
  - lib/apilayer/error.rb
209
- - lib/apilayer/vat.rb
210
208
  homepage: https://github.com/actfong/apilayer
211
209
  licenses:
212
210
  - MIT
@@ -230,6 +228,6 @@ rubyforge_project:
230
228
  rubygems_version: 2.4.5
231
229
  signing_key:
232
230
  specification_version: 4
233
- summary: Ruby wrapper for currencylayer and vatlayer from apilayer.com. See https://apilayer.com/
231
+ summary: Acts as a dependency for the currency_layer and vat_layer gems. See https://apilayer.com/
234
232
  for more details.
235
233
  test_files: []
@@ -1,158 +0,0 @@
1
- ##
2
- # Ruby wrapper for currencylayer. See https://currencylayer.com/documentation for more info
3
- module Apilayer
4
- module Currency
5
- extend ConnectionHelper
6
-
7
- ##
8
- # The following constants determine which values in Apilayer.configs to be used
9
- # in order to to make a connection to currencylayer
10
- APILAYER_CONFIG_KEY = :currency_key
11
- APILAYER_SECURE = :currency_https
12
-
13
- INVALID_OPTIONS_MSG = "You have provided an invalid option. Allowed options are :currencies and :source"
14
- INVALID_TIMEFRAME_MSG = "start_date and end_date must be either provided together or left out together."
15
- LIVE_SLUG = "live"
16
- HISTORICAL_SLUG = "historical"
17
- CONVERT_SLUG = "convert"
18
- TIMEFRAME_SLUG = "timeframe"
19
- CHANGE_SLUG = "change"
20
- LIST_SLUG = "list"
21
-
22
- ## Validations
23
- #
24
- def self.validate_options(options)
25
- options.keys.each do |key|
26
- unless [:currencies, :source].include? key
27
- raise Apilayer::Error.new(INVALID_OPTIONS_MSG)
28
- end
29
- end
30
- end
31
-
32
- def self.validate_timeframe_completeness(start_date,end_date)
33
- if [start_date,end_date].compact.size == 1
34
- raise Apilayer::Error.new(INVALID_TIMEFRAME_MSG)
35
- end
36
- end
37
- ### API methods
38
- #
39
-
40
- ##
41
- # Api-Method: Calls the /list endpoint to display all supported currencies
42
- def self.list
43
- get_and_parse LIST_SLUG
44
- end
45
-
46
- ##
47
- # Api-Method: Calls the /live endpoint to get real-time exchange rates.
48
- # When no currency-codes are specified, it will return all exchange rates for your source-currency.
49
- # Examples:
50
- # Apilayer::Currency.live
51
- # Apilayer::Currency.live(:currencies => %w[GBP, CHF])
52
- # Apilayer::Currency.live(:source => "EUR")
53
- # Apilayer::Currency.live(:source => "EUR", :currencies => %w[GBP, CHF])
54
- def self.live(opts={})
55
- validate_options(opts)
56
-
57
- if opts.empty?
58
- get_and_parse LIVE_SLUG
59
- else
60
- get_and_parse_with_options(LIVE_SLUG, opts)
61
- end
62
- end
63
-
64
- ##
65
- # Api-Method: Calls the /historical endpoint to get exchange rates for a specific date.
66
- # When no currency-codes are specified, it will return all exchange rates for your source-currency.
67
- # Examples:
68
- # Apilayer::Currency.historical("2016-01-01")
69
- # Apilayer::Currency.historical("2016-01-01", :currencies => %w[GBP CHF])
70
- # Apilayer::Currency.historical(:source => "EUR")
71
- # Apilayer::Currency.historical("2016-01-01", :currencies => %w[GBP CHF], :source => "EUR")
72
- def self.historical(date, opts={})
73
- validate_options(opts)
74
- params = {:date => date}
75
-
76
- if opts.empty?
77
- get_and_parse(HISTORICAL_SLUG, params)
78
- else
79
- get_and_parse_with_options(HISTORICAL_SLUG, opts, params)
80
- end
81
- end
82
-
83
- ##
84
- # Api-Method: Calls the /convert endpoint, requires :from, :to and :amount
85
- # When :date hasn't been passed, the latest available exchange rates will be used for your conversion.
86
- # Examples:
87
- # Apilayer::Currency.convert("EUR", "CHF", 100)
88
- # Apilayer::Currency.convert("EUR", "CHF", 100, "2015-03-01")
89
- def self.convert(from, to, amount, date=nil)
90
- params = {:from => from, :to => to, :amount => amount}
91
- params.merge!(:date => date) if date
92
- get_and_parse(CONVERT_SLUG, params)
93
- end
94
-
95
- ##
96
- # Api-Method: Calls the /timeframe endpoint. Requires :start_date and :end_date
97
- # If :currencies hasn't been provided as an option, it will return all exchange-rates for that period of your source-currency
98
- # :source can be provided as option to change the source-currency, which is USD by default
99
- # The difference between start_date and end_date can be maximum 365 days
100
- # Examples:
101
- # Apilayer::Currency.timeframe("2016-01-01", "2016-03-01")
102
- # Apilayer::Currency.timeframe("2016-01-01", "2016-03-01", :currencies => %w[GBP CHF])
103
- # Apilayer::Currency.timeframe("2016-01-01", "2016-03-01", :currencies => %w[GBP CHF], :source => "EUR")
104
- def self.timeframe(start_date, end_date, opts={})
105
- validate_options(opts)
106
- params = {:start_date => start_date, :end_date => end_date}
107
- get_and_parse_with_options(TIMEFRAME_SLUG, opts, params)
108
- end
109
-
110
- ##
111
- # Api-Method: Calls the /change endpoint.
112
- # start_date and end_date are optional, but can't provide one without the other
113
- # :currencies and :source are optional
114
- # Examples:
115
- # Apilayer::Currency.change
116
- # Apilayer::Currency.change("2016-01-01", "2016-03-01")
117
- # Apilayer::Currency.change("2016-01-01", "2016-03-01", :source => "EUR")
118
- # Apilayer::Currency.change("2016-01-01", "2016-03-01", :currencies => %w[GBP CHF])
119
- # Apilayer::Currency.change("2016-01-01", "2016-03-01", :source => "EUR", :currencies => %w[GBP CHF])
120
- # Apilayer::Currency.change(nil, nil, {:source => "EUR"})
121
- # Apilayer::Currency.change(nil, nil, {:currencies => %w[GBP CHF]})
122
- # Apilayer::Currency.change(nil, nil, {:source => "EUR", :currencies => %w[GBP CHF]})
123
- def self.change(start_date=nil, end_date=nil, opts={})
124
- validate_options(opts)
125
- validate_timeframe_completeness(start_date,end_date)
126
- params = {:start_date => start_date,
127
- :end_date => end_date
128
- }.reject{ |k,v| v.nil? }
129
- get_and_parse_with_options(CHANGE_SLUG, opts, params)
130
- end
131
-
132
- ##
133
- #
134
- def self.get_and_parse_with_options(slug, opts, params={})
135
- params = add_options_to_params(opts, params)
136
- get_and_parse(slug, params)
137
- end
138
-
139
- ##
140
- # Adds currencies and source to query string if they have been provided with options-hash
141
- def self.add_options_to_params(opts, params)
142
- if opts[:currencies] && opts[:currencies].any?
143
- params[:currencies] = join_by_commas(opts[:currencies])
144
- end
145
- if opts[:source]
146
- params[:source] = opts[:source]
147
- end
148
- params
149
- end
150
-
151
- ##
152
- # Joins currencies in an array as a comma-separated-string
153
- def self.join_by_commas(currencies)
154
- currencies.map(&:strip).join(",")
155
- end
156
-
157
- end
158
- end
data/lib/apilayer/vat.rb DELETED
@@ -1,68 +0,0 @@
1
- ##
2
- # Ruby wrapper for vatlayer. See https://vatlayer.com/documentation for more info
3
- module Apilayer
4
- module Vat
5
- extend ConnectionHelper
6
-
7
- COUNTRY_CRITERIA_MISSING_MSG = "You must provide either :country_code or :ip_address"
8
-
9
- ##
10
- # The following constants determine which values in Apilayer.configs to be used
11
- # in order to make a connection to vatlayer
12
- APILAYER_CONFIG_KEY = :vat_key
13
- APILAYER_SECURE = :vat_https
14
- ##
15
- # Validates whether a supported criteria has been provided to .rate and .price
16
- def self.validate_country_criteria(criteria)
17
- unless [:country_code, :ip_address].include? criteria
18
- raise Apilayer::Error.new COUNTRY_CRITERIA_MISSING_MSG
19
- end
20
- end
21
-
22
- ### API methods
23
- #
24
-
25
- ##
26
- # Api-Method: Calls the /validate endpoint to validate a given VAT-number.
27
- # Example:
28
- # Apilayer::Vat.validate("LU26375245")
29
- def self.validate(vat_number)
30
- params = {:vat_number => vat_number}
31
- get_and_parse("validate", params)
32
- end
33
-
34
- ##
35
- # Api-Method: Calls the /rate endpoint to get the VAT-rate of a given country,
36
- # based on country-code or ip-address.
37
- # Example:
38
- # Apilayer::Vat.rate(:country_code, "NL")
39
- # Apilayer::Vat.rate(:ip_address, "176.249.153.36")
40
- def self.rate(criteria, value)
41
- validate_country_criteria(criteria)
42
- params = {criteria.to_sym => value}
43
- get_and_parse("rate", params)
44
- end
45
-
46
- ##
47
- # Api-Method: Calls the /rate_list endpoint to get the standard and reduced VAT-rates
48
- # for all EU countries.
49
- # Example:
50
- # Apilayer::Vat.rate_list
51
- def self.rate_list
52
- get_and_parse("rate_list")
53
- end
54
-
55
- ##
56
- # Api-Method: Calls the /price endpoint to get price including and excluding VAT
57
- # for a given price and country. It also returns the VAT rate for that country
58
- # Example:
59
- # Apilayer::Vat.price(100, :country, "NL")
60
- # Apilayer::Vat.price(100, :ip_address, "176.249.153.36")
61
- def self.price(price, criteria, value)
62
- validate_country_criteria(criteria)
63
- params = {:amount => price, criteria.to_sym => value}
64
- get_and_parse("price", params)
65
- end
66
-
67
- end
68
- end