google_currency 1.0.3 → 1.1.0

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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ Google Currency 1.1.0
2
+ =====================
3
+
4
+ Features
5
+ --------
6
+ - Deprecated #get_google_rate, use #get_rate (thanks RMU Alumni)
7
+
8
+ Bugfixes
9
+ ---------
10
+ - Fixed an issue when rates over 1000 did not parse correctly (thanks Brandon
11
+ Anderson)
12
+
1
13
  Google Currency 1.0.3
2
14
  =====================
3
15
 
@@ -5,6 +5,10 @@ require 'json'
5
5
  class Money
6
6
  module Bank
7
7
  class GoogleCurrency < Money::Bank::VariableExchange
8
+
9
+ SERVICE_HOST = "www.google.com"
10
+ SERVICE_PATH = "/ig/calculator"
11
+
8
12
  # @return [Hash] Stores the currently known rates.
9
13
  attr_reader :rates
10
14
 
@@ -58,14 +62,13 @@ class Money
58
62
  # @bank.get_rate(:USD, :EUR) #=> 0.776337241
59
63
  def get_rate(from, to)
60
64
  @mutex.synchronize{
61
- @rates[rate_key_for(from, to)] ||= get_google_rate(from, to)
65
+ @rates[rate_key_for(from, to)] ||= fetch_rate(from, to)
62
66
  }
63
67
  end
64
68
 
65
69
  ##
66
70
  # Returns the requested rate after querying Google.
67
71
  #
68
- #
69
72
  # @param [String, Symbol, Currency] from Currency to convert from
70
73
  # @param [String, Symbol, Currency] to Currency to convert to
71
74
  #
@@ -74,20 +77,60 @@ class Money
74
77
  # @example
75
78
  # @bank = GoogleCurrency.new #=> <Money::Bank::GoogleCurrency...>
76
79
  # @bank.get_google_rate(:USD, :EUR) #=> 0.776337241
80
+ #
81
+ # @deprecated
77
82
  def get_google_rate(from, to)
78
- from = Currency.wrap(from)
79
- to = Currency.wrap(to)
83
+ warn "#get_google_rate is deprecated, please use #get_rate"
84
+ fetch_rate(from, to)
85
+ end
86
+
87
+ private
80
88
 
81
- data = URI.parse("http://www.google.com/ig/calculator?hl=en&q=1#{from.iso_code}%3D%3F#{to.iso_code}").read
89
+ ##
90
+ # Queries for the requested rate and returns it.
91
+ #
92
+ # @param [String, Symbol, Currency] from Currency to convert from
93
+ # @param [String, Symbol, Currency] to Currency to convert to
94
+ #
95
+ # @return [Float] The requested rate.
96
+ def fetch_rate(from, to)
97
+ from, to = Currency.wrap(from), Currency.wrap(to)
98
+
99
+ data = build_uri(from, to).read
100
+ data = fix_response_json_data(data)
101
+
102
+ error = data['error']
103
+ raise UnknownRate unless error == '' || error == '0'
104
+ BigDecimal(data['rhs'].gsub(/[^\d\.]/, ''))
105
+ end
106
+
107
+ ##
108
+ # Build a URI for the given arguments.
109
+ #
110
+ # @param [Currency] from The currency to convert from.
111
+ # @param [Currency] to The currency to convert to.
112
+ #
113
+ # @return [URI::HTTP]
114
+ def build_uri(from, to)
115
+ uri = URI::HTTP.build(
116
+ :host => SERVICE_HOST,
117
+ :path => SERVICE_PATH,
118
+ :query => "hl=en&q=1#{from.iso_code}%3D%3F#{to.iso_code}"
119
+ )
120
+ end
121
+
122
+ ##
123
+ # Takes the invalid JSON returned by Google and fixes it.
124
+ #
125
+ # @param [String] data The JSON string to fix.
126
+ #
127
+ # @return [Hash]
128
+ def fix_response_json_data(data)
82
129
  data.gsub!(/lhs:/, '"lhs":')
83
130
  data.gsub!(/rhs:/, '"rhs":')
84
131
  data.gsub!(/error:/, '"error":')
85
132
  data.gsub!(/icc:/, '"icc":')
86
- data = JSON.parse(data)
87
-
88
- error = data['error']
89
- raise UnknownRate unless error == '' || error == '0'
90
- BigDecimal(data['rhs'].split(' ')[0])
133
+ JSON.parse(data)
91
134
  end
92
135
  end
93
136
  end
metadata CHANGED
@@ -1,95 +1,74 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: google_currency
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 3
9
- version: 1.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ prerelease: !!null
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Shane Emmons
13
9
  - Donald Ball
14
- autorequire:
10
+ autorequire: !!null
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2010-12-15 00:00:00 -05:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2011-02-08 00:00:00.000000000 -05:00
14
+ default_executable: !!null
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
22
17
  name: rspec
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &10381764 !ruby/object:Gem::Requirement
25
19
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- segments:
30
- - 2
31
- - 0
32
- - 0
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
33
23
  version: 2.0.0
34
24
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: yard
38
25
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
26
+ version_requirements: *10381764
27
+ - !ruby/object:Gem::Dependency
28
+ name: yard
29
+ requirement: &10381476 !ruby/object:Gem::Requirement
40
30
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- segments:
45
- - 0
46
- - 5
47
- - 8
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
48
34
  version: 0.5.8
49
35
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: json
53
36
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ version_requirements: *10381476
38
+ - !ruby/object:Gem::Dependency
39
+ name: json
40
+ requirement: &10381176 !ruby/object:Gem::Requirement
55
41
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- segments:
60
- - 1
61
- - 4
62
- - 0
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
63
45
  version: 1.4.0
64
46
  type: :development
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: money
68
47
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
48
+ version_requirements: *10381176
49
+ - !ruby/object:Gem::Dependency
50
+ name: money
51
+ requirement: &10380900 !ruby/object:Gem::Requirement
70
52
  none: false
71
- requirements:
53
+ requirements:
72
54
  - - ~>
73
- - !ruby/object:Gem::Version
74
- segments:
75
- - 3
76
- - 5
77
- version: "3.5"
55
+ - !ruby/object:Gem::Version
56
+ version: '3.5'
78
57
  type: :runtime
79
- version_requirements: *id004
80
- description: GoogleCurrency extends Money::Bank::Base and gives you access to the current Google Currency exchange rates.
81
- email:
58
+ prerelease: false
59
+ version_requirements: *10380900
60
+ description: GoogleCurrency extends Money::Bank::Base and gives you access to the
61
+ current Google Currency exchange rates.
62
+ email:
82
63
  - semmons99+RubyMoney@gmail.com
83
64
  - donald.ball@gmail.com
84
65
  executables: []
85
-
86
66
  extensions: []
87
-
88
- extra_rdoc_files:
67
+ extra_rdoc_files:
89
68
  - LICENSE
90
69
  - README.md
91
70
  - CHANGELOG.md
92
- files:
71
+ files:
93
72
  - lib/money/bank/google_currency.rb
94
73
  - LICENSE
95
74
  - README.md
@@ -97,36 +76,28 @@ files:
97
76
  has_rdoc: true
98
77
  homepage: http://rubymoney.github.com/google_currency
99
78
  licenses: []
100
-
101
- post_install_message:
102
- rdoc_options:
79
+ post_install_message: !!null
80
+ rdoc_options:
103
81
  - --charset=UTF-8
104
- require_paths:
82
+ require_paths:
105
83
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
84
+ required_ruby_version: !ruby/object:Gem::Requirement
107
85
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- segments:
112
- - 0
113
- version: "0"
114
- required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
91
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- segments:
120
- - 1
121
- - 3
122
- - 7
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
123
95
  version: 1.3.7
124
- requirements:
96
+ requirements:
125
97
  - json
126
- rubyforge_project:
127
- rubygems_version: 1.3.7
128
- signing_key:
98
+ rubyforge_project: !!null
99
+ rubygems_version: 1.5.0
100
+ signing_key: !!null
129
101
  specification_version: 3
130
102
  summary: Access the Google Currency exchange rate data.
131
103
  test_files: []
132
-