piggybank 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +15 -0
- data/Rakefile +2 -0
- data/lib/piggybank.rb +49 -0
- data/lib/piggybank/version.rb +3 -0
- data/piggybank.gemspec +24 -0
- metadata +84 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
piggy_bank
|
2
|
+
==========
|
3
|
+
|
4
|
+
Introduction
|
5
|
+
------------
|
6
|
+
|
7
|
+
Based on https://github.com/RubyMoney/eu_central_bank
|
8
|
+
|
9
|
+
Piggybank periodically downloads and stores exchange rates from the European Central Bank so that they can be calculated for a given point in time.
|
10
|
+
|
11
|
+
Dependencies
|
12
|
+
------------
|
13
|
+
|
14
|
+
* nokogiri
|
15
|
+
* money
|
data/Rakefile
ADDED
data/lib/piggybank.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'nokogiri'
|
3
|
+
gem 'money', '>= 3.5.5'
|
4
|
+
require 'money'
|
5
|
+
|
6
|
+
class PiggyBank < Money::Bank::VariableExchange
|
7
|
+
|
8
|
+
CURRENCIES = %w(EUR USD JPY BGN CZK DKK GBP HUF LTL LVL PLN RON SEK CHF NOK HRK RUB TRY AUD BRL CAD CNY HKD IDR INR KRW MXN MYR NZD PHP SGD THB ZAR)
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super
|
12
|
+
use_rates_from(Time.now)
|
13
|
+
end
|
14
|
+
|
15
|
+
def fetch_rates
|
16
|
+
unless Rate.where("created_at > ?", 1.day.ago).exists?
|
17
|
+
doc = Nokogiri::XML(open('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml'))
|
18
|
+
r = Rate.new
|
19
|
+
doc.search('Cube/Cube/Cube').each do |line|
|
20
|
+
r[line.attribute('currency').value.to_sym] = line.attribute('rate').value.to_f
|
21
|
+
end
|
22
|
+
r.save!
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def use_rates_from(datetime)
|
27
|
+
rate = Rate.where("created_at <= ?", datetime).order("created_at DESC").first
|
28
|
+
unless rate.nil?
|
29
|
+
CURRENCIES.each do |currency|
|
30
|
+
add_rate("EUR", currency, rate[currency.to_sym])
|
31
|
+
end
|
32
|
+
else
|
33
|
+
fetch_rates
|
34
|
+
use_rates_from(Time.now)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def exchange_with(from, to_currency)
|
39
|
+
use_rates_from(Time.now)
|
40
|
+
rate = get_rate(from.currency, to_currency)
|
41
|
+
unless rate
|
42
|
+
from_base_rate = get_rate("EUR", from.currency)
|
43
|
+
to_base_rate = get_rate("EUR", to_currency)
|
44
|
+
rate = to_base_rate / from_base_rate
|
45
|
+
end
|
46
|
+
Money.new((from.cents * rate), to_currency)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/piggybank.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "piggybank/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "piggybank"
|
7
|
+
s.version = PiggyBank::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["John Rees"]
|
10
|
+
s.email = ["john@bitsushi.com"]
|
11
|
+
s.homepage = "http://github.com/bitsushi/piggybank"
|
12
|
+
s.summary = %q{Bank for the Money gem with exchange rate history}
|
13
|
+
s.description = %q{Periodically downloads and stores exchange rates so that they can be calculated for a given point in time}
|
14
|
+
|
15
|
+
# s.rubyforge_project = "piggybank"
|
16
|
+
|
17
|
+
s.add_dependency "nokogiri", ">= 1.4.1"
|
18
|
+
s.add_dependency "money", ">= 3.5.5"
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: piggybank
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.4
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- John Rees
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-09 00:00:00 +00:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: nokogiri
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.4.1
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: money
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 3.5.5
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
description: Periodically downloads and stores exchange rates so that they can be calculated for a given point in time
|
39
|
+
email:
|
40
|
+
- john@bitsushi.com
|
41
|
+
executables: []
|
42
|
+
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- lib/piggybank.rb
|
53
|
+
- lib/piggybank/version.rb
|
54
|
+
- piggybank.gemspec
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://github.com/bitsushi/piggybank
|
57
|
+
licenses: []
|
58
|
+
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: "0"
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
requirements: []
|
77
|
+
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 1.5.0
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: Bank for the Money gem with exchange rate history
|
83
|
+
test_files: []
|
84
|
+
|