momm 1.0.1 → 2.0.1
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.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/lib/momm.rb +2 -3
- data/lib/momm/bridge.rb +1 -1
- data/lib/momm/calculator.rb +1 -22
- data/lib/momm/feeds/ecb.rb +33 -17
- data/lib/momm/version.rb +1 -1
- data/lib/momm/web.rb +8 -6
- data/momm.gemspec +6 -10
- data/spec/momm/feeds/ecb_spec.rb +1 -1
- data/spec/momm/momm_spec.rb +0 -8
- data/vendor/assets/javascripts/money-on-my-mind.js +2 -2
- metadata +23 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f8c123f9bcdbbb764e3fd54e535b680459832b3
|
4
|
+
data.tar.gz: 00ccc6dd8dcbac9c8fe9c86cae4edbfc19fbefbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34f6a7c4b0efc62474ba01ff124f54468cc84247e542feb3a609f52c0e77d1caf84e9239c3f7134da58b3543a679aacd786743490a0cf344d5d332a5931d1a84
|
7
|
+
data.tar.gz: 400f36abfcfd4e82fc72890ed957ca18ad5e352539f47bfd12cd885120202e632ed506b8a8d1720c4663d7847d4325e6530d8698dbb2c05551808a7b8866cda5
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/jaxi/momm)
|
4
4
|
|
5
|
-
Money on My Mind -
|
5
|
+
Money on My Mind - A pure Ruby gem for currency exchange.
|
6
6
|
|
7
7
|
```
|
8
8
|
__ __ __ __
|
@@ -71,12 +71,10 @@ After the gem is installed, momm provide you a command line tool. The storage en
|
|
71
71
|
|
72
72
|
Momm.exchange_rate 'GBP', 'USD' # By default Today
|
73
73
|
Momm.exchange_rate 'GBP', 'USD', date: Date.today
|
74
|
-
Momm.exchange_rate_from_gbp_to_usd, date: "2014-3-4"
|
75
74
|
|
76
75
|
Momm.exchange 100, 'GBP', 'USD'
|
77
76
|
Momm.exchange 100, 'GBP', 'USD', date: Date.today
|
78
77
|
Momm.exchange_from_gbp_to_usd 100
|
79
|
-
Momm.exchange_from_gbp_to_usd 100, date: "2014-3-4"
|
80
78
|
|
81
79
|
Momm.update! # Fetching the feeds from remote. Only do that if you find any abnormal.
|
82
80
|
```
|
data/lib/momm.rb
CHANGED
@@ -26,8 +26,7 @@ module Momm
|
|
26
26
|
|
27
27
|
# delegate the exchange, :currencies, exchange_rate,
|
28
28
|
# as well as meta programmed methods to module level
|
29
|
-
delegate [:currencies, :exchange, :exchange_rate,
|
30
|
-
:method_missing, :respond_to?, :update! ] => :calculator
|
29
|
+
delegate [:currencies, :exchange, :exchange_rate, :update! ] => :calculator
|
31
30
|
|
32
31
|
delegate [:store, :source ] => :bridge
|
33
32
|
|
@@ -65,4 +64,4 @@ module Momm
|
|
65
64
|
Keep calm bro. We'll calculate rate for you.
|
66
65
|
EOS
|
67
66
|
|
68
|
-
end
|
67
|
+
end
|
data/lib/momm/bridge.rb
CHANGED
data/lib/momm/calculator.rb
CHANGED
@@ -122,26 +122,5 @@ module Momm
|
|
122
122
|
update!
|
123
123
|
get_rate_origin(from, date)
|
124
124
|
end
|
125
|
-
|
126
|
-
# @TODO: Refactoring
|
127
|
-
def method_missing(meth, *args, &block)
|
128
|
-
meth = meth.to_s
|
129
|
-
case
|
130
|
-
when meth.match(/^exchange_rate_from_(\w+)_to_(\w+)/)
|
131
|
-
exchange_rate($1.upcase.to_sym, $2.upcase.to_sym, *args, &block)
|
132
|
-
when meth.match(/^exchange_from_(\w+)_to_(\w+)/)
|
133
|
-
money, *res = args
|
134
|
-
exchange(money, $1.upcase.to_sym, $2.upcase.to_sym, *res, &block)
|
135
|
-
else
|
136
|
-
super
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def respond_to?(meth, include_private = false)
|
141
|
-
meth = meth.to_s
|
142
|
-
meth.match(/^exchange_rate_from_(\w+)_to_(\w+)/) ||
|
143
|
-
meth.match(/^exchange_from_(\w+)_to_(\w+)/) ||
|
144
|
-
super
|
145
|
-
end
|
146
125
|
end
|
147
|
-
end
|
126
|
+
end
|
data/lib/momm/feeds/ecb.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "net/http"
|
2
|
+
require "uri"
|
3
|
+
require "rexml/document"
|
3
4
|
|
4
5
|
module Momm
|
5
6
|
module Feeds
|
6
7
|
class ECB
|
7
8
|
|
8
|
-
FETCHING_URL = "
|
9
|
+
FETCHING_URL = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml".freeze
|
9
10
|
|
10
11
|
#Hard coded for good
|
11
12
|
CURRENCIES = %w{USD JPY BGN CZK DKK GBP HUF LTL PLN RON SEK CHF
|
@@ -24,39 +25,54 @@ module Momm
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
28
|
+
ConnectionError = Class.new(StandardError)
|
27
29
|
# should be a singleton class
|
28
30
|
private_class_method :new
|
29
31
|
|
30
|
-
#
|
32
|
+
# Request the feed and get the response
|
33
|
+
#
|
31
34
|
# == Returns
|
32
|
-
#
|
35
|
+
# A Net::HTTPResponse response
|
33
36
|
#
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
+
def response
|
38
|
+
@response ||= Net::HTTP.start(fetching_url.host, fetching_url.port,
|
39
|
+
:use_ssl => fetching_url.scheme == "https",
|
40
|
+
:open_timeout => 5,
|
41
|
+
:read_timeout => 5) do |http|
|
42
|
+
|
43
|
+
http.request Net::HTTP::Get.new(fetching_url)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Response body in xml format
|
48
|
+
def xml
|
49
|
+
@xml ||= begin
|
50
|
+
raise ConnectionError unless response.is_a? Net::HTTPOK
|
51
|
+
REXML::Document.new response.body
|
52
|
+
end
|
37
53
|
end
|
38
54
|
|
39
|
-
#
|
55
|
+
# turn the xml data to array of currencies
|
40
56
|
#
|
41
57
|
# == Returns
|
42
58
|
# looks like [{date: Date.now, currency: :CNY, rate: 1.23} ...]
|
43
59
|
#
|
44
60
|
def currency_rates
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
61
|
+
daily_currencies = xml.elements["//Cube"].select{ |c| c.is_a? REXML::Element }
|
62
|
+
daily_currencies.map do |daily_currency|
|
63
|
+
date = Date.parse daily_currency.attributes["time"]
|
64
|
+
daily_currency.map do |cube|
|
49
65
|
{
|
50
66
|
date: date,
|
51
|
-
currency: cube["currency"].to_sym,
|
52
|
-
rate: cube["rate"].to_f
|
67
|
+
currency: cube.attributes["currency"].to_sym,
|
68
|
+
rate: cube.attributes["rate"].to_f
|
53
69
|
}
|
54
70
|
end
|
55
71
|
end.flatten
|
56
72
|
end
|
57
73
|
|
58
74
|
def fetching_url
|
59
|
-
FETCHING_URL
|
75
|
+
URI(FETCHING_URL)
|
60
76
|
end
|
61
77
|
|
62
78
|
def currencies
|
@@ -64,4 +80,4 @@ module Momm
|
|
64
80
|
end
|
65
81
|
end
|
66
82
|
end
|
67
|
-
end
|
83
|
+
end
|
data/lib/momm/version.rb
CHANGED
data/lib/momm/web.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
|
1
|
+
require "sinatra/base"
|
2
|
+
require "momm"
|
3
|
+
require "erb"
|
4
|
+
require "json"
|
5
5
|
module Momm
|
6
6
|
class Web < ::Sinatra::Base
|
7
7
|
|
@@ -34,11 +34,13 @@ module Momm
|
|
34
34
|
to = (params[:to] || "GBP").to_sym
|
35
35
|
date = params[:date] || Date.today
|
36
36
|
|
37
|
-
if money && from && to && date
|
38
|
-
Momm.exchange(money, from, to, date: date)
|
37
|
+
rate = if money && from && to && date
|
38
|
+
Momm.exchange(money, from, to, date: date)
|
39
39
|
else
|
40
40
|
"N/A"
|
41
41
|
end
|
42
|
+
|
43
|
+
{rate: rate}.to_json
|
42
44
|
end
|
43
45
|
|
44
46
|
# GET '/currencies'
|
data/momm.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Jingkai He"]
|
10
10
|
spec.email = ["jaxihe@gmail.com"]
|
11
11
|
spec.summary = %q{A Currency Exchange Calculator}
|
12
|
-
spec.description = %q{A
|
12
|
+
spec.description = %q{A currency exchange calculator build in pure Ruby.}
|
13
13
|
spec.homepage = "https://github.com/jaxi/momm"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -18,14 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.
|
22
|
-
spec.
|
23
|
-
|
24
|
-
spec.add_development_dependency "
|
25
|
-
spec.add_development_dependency "
|
26
|
-
spec.add_development_dependency "redis-namespace"
|
27
|
-
spec.add_development_dependency "rack-test"
|
28
|
-
spec.add_development_dependency "rake"
|
29
|
-
spec.add_development_dependency "sinatra"
|
21
|
+
spec.add_development_dependency "dalli", "2.7.6"
|
22
|
+
spec.add_development_dependency "redis-namespace", "1.5.2"
|
23
|
+
spec.add_development_dependency "rack-test", "0.6.3"
|
24
|
+
spec.add_development_dependency "rake", "10.5.0"
|
25
|
+
spec.add_development_dependency "sinatra", "1.4.7"
|
30
26
|
spec.add_development_dependency "rspec", "3.4.0"
|
31
27
|
end
|
data/spec/momm/feeds/ecb_spec.rb
CHANGED
data/spec/momm/momm_spec.rb
CHANGED
@@ -10,14 +10,6 @@ describe Momm do
|
|
10
10
|
expect(Momm).to respond_to :exchange
|
11
11
|
end
|
12
12
|
|
13
|
-
it "should respond to exchange_from_gbp_to_usd" do
|
14
|
-
expect(Momm).to respond_to :exchange_from_gbp_to_usd
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should respond to exchange_rate_from_gbp_to_usd" do
|
18
|
-
expect(Momm).to respond_to :exchange_rate_from_gbp_to_usd
|
19
|
-
end
|
20
|
-
|
21
13
|
it "should respond to update!" do
|
22
14
|
expect(Momm).to respond_to :update!
|
23
15
|
end
|
@@ -15015,7 +15015,7 @@ jQuery(function(){
|
|
15015
15015
|
money: $('.momm-money').val(),
|
15016
15016
|
date: $('.momm-date').val()
|
15017
15017
|
}, function(result){
|
15018
|
-
$('.momm-exchange').text(result);
|
15018
|
+
$('.momm-exchange').text(result.rate);
|
15019
15019
|
});
|
15020
15020
|
};
|
15021
15021
|
|
@@ -15027,4 +15027,4 @@ jQuery(function(){
|
|
15027
15027
|
load_exchanged();
|
15028
15028
|
|
15029
15029
|
$(".mom-ele").on('change', load_exchanged);
|
15030
|
-
});
|
15030
|
+
});
|
metadata
CHANGED
@@ -1,127 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: momm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jingkai He
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: httparty
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.12.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.12.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: json
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: redis
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
13
|
- !ruby/object:Gem::Dependency
|
56
14
|
name: dalli
|
57
15
|
requirement: !ruby/object:Gem::Requirement
|
58
16
|
requirements:
|
59
|
-
- -
|
17
|
+
- - '='
|
60
18
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
19
|
+
version: 2.7.6
|
62
20
|
type: :development
|
63
21
|
prerelease: false
|
64
22
|
version_requirements: !ruby/object:Gem::Requirement
|
65
23
|
requirements:
|
66
|
-
- -
|
24
|
+
- - '='
|
67
25
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
26
|
+
version: 2.7.6
|
69
27
|
- !ruby/object:Gem::Dependency
|
70
28
|
name: redis-namespace
|
71
29
|
requirement: !ruby/object:Gem::Requirement
|
72
30
|
requirements:
|
73
|
-
- -
|
31
|
+
- - '='
|
74
32
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
33
|
+
version: 1.5.2
|
76
34
|
type: :development
|
77
35
|
prerelease: false
|
78
36
|
version_requirements: !ruby/object:Gem::Requirement
|
79
37
|
requirements:
|
80
|
-
- -
|
38
|
+
- - '='
|
81
39
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
40
|
+
version: 1.5.2
|
83
41
|
- !ruby/object:Gem::Dependency
|
84
42
|
name: rack-test
|
85
43
|
requirement: !ruby/object:Gem::Requirement
|
86
44
|
requirements:
|
87
|
-
- -
|
45
|
+
- - '='
|
88
46
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
47
|
+
version: 0.6.3
|
90
48
|
type: :development
|
91
49
|
prerelease: false
|
92
50
|
version_requirements: !ruby/object:Gem::Requirement
|
93
51
|
requirements:
|
94
|
-
- -
|
52
|
+
- - '='
|
95
53
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
54
|
+
version: 0.6.3
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
56
|
name: rake
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
100
58
|
requirements:
|
101
|
-
- -
|
59
|
+
- - '='
|
102
60
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
61
|
+
version: 10.5.0
|
104
62
|
type: :development
|
105
63
|
prerelease: false
|
106
64
|
version_requirements: !ruby/object:Gem::Requirement
|
107
65
|
requirements:
|
108
|
-
- -
|
66
|
+
- - '='
|
109
67
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
68
|
+
version: 10.5.0
|
111
69
|
- !ruby/object:Gem::Dependency
|
112
70
|
name: sinatra
|
113
71
|
requirement: !ruby/object:Gem::Requirement
|
114
72
|
requirements:
|
115
|
-
- -
|
73
|
+
- - '='
|
116
74
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
75
|
+
version: 1.4.7
|
118
76
|
type: :development
|
119
77
|
prerelease: false
|
120
78
|
version_requirements: !ruby/object:Gem::Requirement
|
121
79
|
requirements:
|
122
|
-
- -
|
80
|
+
- - '='
|
123
81
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
82
|
+
version: 1.4.7
|
125
83
|
- !ruby/object:Gem::Dependency
|
126
84
|
name: rspec
|
127
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,7 +94,7 @@ dependencies:
|
|
136
94
|
- - '='
|
137
95
|
- !ruby/object:Gem::Version
|
138
96
|
version: 3.4.0
|
139
|
-
description: A
|
97
|
+
description: A currency exchange calculator build in pure Ruby.
|
140
98
|
email:
|
141
99
|
- jaxihe@gmail.com
|
142
100
|
executables:
|