apilayer 0.9.0 → 1.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: 2c90421964d0e4f1e87b8dd237cc9fd9829828d4
4
- data.tar.gz: 0d134f0f06cfa93e4c1aeb7bab7cebf2b48f4d4c
3
+ metadata.gz: 741fe800b4155a1935d910a84c38bcae92be05cf
4
+ data.tar.gz: 6eb86705872f060ee900f3aeb286f92c5abf5e2c
5
5
  SHA512:
6
- metadata.gz: cc9197e568e72415aca957bff9eebcdcac94be67a5e17c5b6d78822808c4828675eadbf1efb1726693fd309d1cbce578cc43746ef5905fce46924a90681cbdc3
7
- data.tar.gz: 5559cc9b38fbdf4f34b92727b58c3d03f6b3222b5ade671a25708596e2f573a1a938c45786af2f77fc3a9871bfb1260a33f7f8bd62bd64b5204b51545fb122d0
6
+ metadata.gz: bca4854b31225c90b787f3d63bed8134a0bc13ab4ef262f4b99ad76f5a898208e91b9439c01329c1b5e06f2b4b2bf264d20a98b880c8240f9acf5b8f704414b0
7
+ data.tar.gz: a37bfb3f5e8923a56ce13cbd99e3c005fe3cc34c38b7b6fdd73c649f6e3575549e062afd6cad651f299ab57648ef63e2e7bf72f681af50b12d5743933bb2e58c
@@ -0,0 +1,64 @@
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
+
3
+ Ruby wrapper for various services of apilayer.
4
+ See http://apilayer.com for more details.
5
+
6
+ === Version 1.0
7
+ For this version, only the API-features that are available to the free accounts are supported. See the documentation of http://currencylayer.com and http://vatlayer.com for more details.
8
+
9
+ === Installation
10
+
11
+ ==== Using Bundler
12
+
13
+ Add apilayer in your <tt>Gemfile</tt>:
14
+
15
+ gem "apilayer"
16
+
17
+ Run the following in your console:
18
+
19
+ $ bundle install
20
+
21
+ === Usage
22
+
23
+ ==== Set up Apilayer
24
+ 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.
25
+
26
+ Then you can use your access_key(s) to configure your Apilayer module like this:
27
+
28
+ Apilayer.configure do |configs|
29
+ configs.vat_key = "my_vatlayer_access_key_123"
30
+ configs.currency_key = "my_currencylayer_access_key_123"
31
+ end
32
+
33
+ Please note that you don't need to assign keys for both services. You only need to assign the key for the service you have signed up for.
34
+
35
+ Once that is done, you are ready to go
36
+
37
+ ==== currencylayer
38
+ After setting the access_key for *currencylayer*, you can use Apilayer::Currency to call *currencylayer*'s API
39
+ Apilayer::Currency.live
40
+ Apilayer::Currency.live("EUR", "GBP", "CHF")
41
+
42
+ Apilayer::Currency.historical("2016-01-01")
43
+ Apilayer::Currency.historical("2016-01-01", "EUR", "GBP", "CHF")
44
+
45
+ ==== vatlayer
46
+
47
+ After setting the access_key for *vatlayer*, you can use Apilayer::Vat to call *vatlayer*'s API
48
+
49
+ Apilayer::Vat.validate("LU26375245")
50
+ Apilayer::Vat.rate(:country_code, "NL")
51
+ Apilayer::Vat.rate(:ip_address, "176.249.153.36")
52
+ Apilayer::Vat.rate_list
53
+ Apilayer::Vat.price(100, :country, "NL")
54
+ Apilayer::Vat.price(100, :ip_address, "176.249.153.36")
55
+
56
+ ==== Re-Configure Apilayer's access_keys
57
+ If you happened to have forgotten to provide an access_key or entered an incorrect one, you can re-configure your Apilayer module by:
58
+
59
+ # Example: reconfigure access_key for vatlayer
60
+ Apilayer::Vatlayer.reset_connection
61
+ Apilayer.configure do |configs|
62
+ configs.vat_key = "my_valid_key_123"
63
+ end
64
+
@@ -1,15 +1,29 @@
1
1
  module Apilayer
2
2
  module ConnectionHelper
3
3
 
4
+ ##
5
+ # Creates a connection for the extended module to an apilayer-service, such as currencylayer and vatlayer.
6
+ # Uses access_key(s) configured with Apilayer module.
7
+ def connection
8
+ @connection ||= ::Faraday.new(:url => 'http://apilayer.net',
9
+ :params => {"access_key" => Apilayer.configs[self.const_get(:APILAYER_CONFIG_KEY)]})
10
+ end
11
+
12
+ ##
13
+ # Resets the connection for the extended module. Used when the user needs to re-enter his/her access_key(s)
4
14
  def reset_connection
5
15
  @connection = nil
6
16
  end
7
17
 
18
+ ##
19
+ # Makes a get-request to apilayer's service and parses the JSON response into a Hash
8
20
  def get_and_parse(url, params={})
9
21
  resp = get_request(url, params)
10
22
  parse_response(resp)
11
23
  end
12
24
 
25
+ ##
26
+ # Makes a get-request to apilayer's service
13
27
  def get_request(url, params={})
14
28
  # calls connection method on the extended module
15
29
  connection.get do |req|
@@ -20,6 +34,9 @@ module Apilayer
20
34
  end
21
35
  end
22
36
 
37
+ ##
38
+ # Parses the JSON response from apilayer into a Hash
39
+ # When errors are returned by apilayer, the 'info' and 'code' from its error will be used to raise an Apilayer::Error
23
40
  def parse_response(resp)
24
41
  body = JSON.parse(resp.body)
25
42
  # According to documentation, currencylayer has a "success" field
@@ -1,14 +1,23 @@
1
+ ##
2
+ # Ruby wrapper for currencylayer. See https://currencylayer.com/documentation for more info
1
3
  module Apilayer
2
4
  module Currency
3
5
  extend ConnectionHelper
4
6
 
5
- CURRENCYLAYER_KEY_MISSING_MSG = "Please configure access_key for currency_layer first!"
7
+ ##
8
+ # Determines which access_key in Apilayer.configs to use
9
+ # in order to to make a connection to currencylayer
10
+ APILAYER_CONFIG_KEY = :currency_key
6
11
 
7
- def self.connection
8
- @connection ||= ::Faraday.new(:url => 'http://apilayer.net',
9
- :params => {"access_key" => Apilayer.configs[:currency_key]})
10
- end
12
+ ### API methods
13
+ #
11
14
 
15
+ ##
16
+ # Api-Method: Calls the /live endpoint to get real-time exchange rates.
17
+ # When no currency-codes are specified, it will return all exchange rates for your source-currency.
18
+ # Example:
19
+ # Apilayer::Currency.live
20
+ # Apilayer::Currency.live("EUR", "GBP", "CHF")
12
21
  def self.live(*currencies)
13
22
  if currencies.any?
14
23
  currencies_str = join_by_commas(currencies)
@@ -19,19 +28,20 @@ module Apilayer
19
28
  end
20
29
  end
21
30
 
31
+ ##
32
+ # Api-Method: Calls the /historical endpoint to get exchange rates for a specific date.
33
+ # When no currency-codes are specified, it will return all exchange rates for your source-currency.
34
+ # Example:
35
+ # Apilayer::Currency.historical("2016-01-01")
36
+ # Apilayer::Currency.historical("2016-01-01", "EUR", "GBP", "CHF")
22
37
  def self.historical(date, *currencies)
23
38
  params = {:date => date}
24
39
  params.merge!(:currencies => join_by_commas(currencies)) if currencies.any?
25
40
  get_and_parse("historical", params)
26
41
  end
27
42
 
28
- =begin
29
- def self.convert(from, to, amount, date=nil)
30
- params = {:from => from, :to => to, :amount => amount}
31
- params.merge!(:date => date) if date
32
- get_and_parse("convert", params)
33
- end
34
- =end
43
+ ##
44
+ # Joins currencies in an array as a comma-separated-string
35
45
  def self.join_by_commas(currencies)
36
46
  currencies.map(&:strip).join(",")
37
47
  end
@@ -1,3 +1,5 @@
1
+ ##
2
+ # Error-class for errors that are returned by apilayer's services
1
3
  module Apilayer
2
4
  class Error < StandardError
3
5
  attr_reader :code
@@ -1,36 +1,63 @@
1
+ ##
2
+ # Ruby wrapper for vatlayer. See https://vatlayer.com/documentation for more info
1
3
  module Apilayer
2
4
  module Vat
3
5
  extend ConnectionHelper
4
6
 
5
7
  COUNTRY_CRITERIA_MISSING_MSG = "You must provide either :country_code or :ip_address"
6
- VATLAYER_KEY_MISSING_MSG = "Please configure access_key for vat_layer first!"
7
8
 
8
- def self.connection
9
- @connection ||= ::Faraday.new(:url => 'http://apilayer.net',
10
- :params => {"access_key" => Apilayer.configs[:vat_key]})
11
- end
9
+ ##
10
+ # Determines which access_key in Apilayer.configs to use
11
+ # in order to make a connection to vatlayer
12
+ APILAYER_CONFIG_KEY = :vat_key
12
13
 
14
+ ##
15
+ # Validates whether a supported criteria has been provided to .rate and .price
13
16
  def self.validate_country_criteria(criteria)
14
17
  unless [:country_code, :ip_address].include? criteria
15
18
  raise Apilayer::Error.new COUNTRY_CRITERIA_MISSING_MSG
16
19
  end
17
20
  end
18
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")
19
29
  def self.validate(vat_number)
20
30
  params = {:vat_number => vat_number}
21
31
  get_and_parse("validate", params)
22
32
  end
23
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")
24
40
  def self.rate(criteria, value)
25
41
  validate_country_criteria(criteria)
26
42
  params = {criteria.to_sym => value}
27
43
  get_and_parse("rate", params)
28
44
  end
29
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
30
51
  def self.rate_list
31
52
  get_and_parse("rate_list")
32
53
  end
33
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")
34
61
  def self.price(price, criteria, value)
35
62
  validate_country_criteria(criteria)
36
63
  params = {:amount => price, criteria.to_sym => value}
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: 0.9.0
4
+ version: 1.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-10 00:00:00.000000000 Z
11
+ date: 2016-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -50,6 +50,26 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 0.9.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '10.1'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.10.1
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '10.1'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.10.1
53
73
  - !ruby/object:Gem::Dependency
54
74
  name: pry
55
75
  requirement: !ruby/object:Gem::Requirement
@@ -110,6 +130,26 @@ dependencies:
110
130
  - - ">="
111
131
  - !ruby/object:Gem::Version
112
132
  version: 3.0.0
133
+ - !ruby/object:Gem::Dependency
134
+ name: simplecov
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '0.11'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 0.11.0
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '0.11'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 0.11.0
113
153
  - !ruby/object:Gem::Dependency
114
154
  name: vcr
115
155
  requirement: !ruby/object:Gem::Requirement
@@ -190,6 +230,6 @@ rubyforge_project:
190
230
  rubygems_version: 2.4.5
191
231
  signing_key:
192
232
  specification_version: 4
193
- summary: Ruby wrapper for various services of apilayer. See https://apilayer.com/
194
- for more details.
233
+ summary: Ruby wrapper for currencylayer and vatlayer from apilayer.com. For more info,
234
+ see http://apilayer.com
195
235
  test_files: []