lbank 1.0.0 → 2.0.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.
- checksums.yaml +5 -5
- data/.github/workflows/main.yml +19 -0
- data/.github/workflows/publish.yml +21 -0
- data/.ruby-version +1 -1
- data/Gemfile +1 -0
- data/README.md +4 -2
- data/lbank.gemspec +6 -3
- data/lib/lbank/errors.rb +4 -0
- data/lib/lbank/version.rb +1 -1
- data/lib/lbank.rb +21 -7
- data/spec/lbank_spec.rb +14 -15
- metadata +46 -11
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 105dd10eb94b5ae8f077e82c6bb9b40391982beae9552453b074c4711162fd31
|
|
4
|
+
data.tar.gz: 6ddfdc8992576c21265e3d483b5772e886f59bc1fe85317d2ea189f27baee901
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 34f984ba0a8daffc9e4a85cb0a9103b52b9fb5e0ba4c909707fee3a79a640d1656e0ce24a08ff4efd5a1dafa99c30f2f5510fe86bf9bd8f1165696631b257bd7
|
|
7
|
+
data.tar.gz: bdfb9de226b979fa473d3b91f03b51a064eaf08c4ce3f0fd295a06bca525cb9882e959eefedd94b146c7d5f4f8e0561b70559c9f000793011bbd16d877e8225c
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: Build
|
|
2
|
+
on: [push,pull_request]
|
|
3
|
+
jobs:
|
|
4
|
+
build:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
strategy:
|
|
7
|
+
matrix:
|
|
8
|
+
ruby-version:
|
|
9
|
+
- 3.0
|
|
10
|
+
- 3.4
|
|
11
|
+
- 4.0
|
|
12
|
+
name: Ruby ${{ matrix.ruby-version }} sample
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v7
|
|
15
|
+
- uses: ruby/setup-ruby@v1
|
|
16
|
+
with:
|
|
17
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
18
|
+
- run: bundle install
|
|
19
|
+
- run: bundle exec rake spec
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Publish gem to rubygems
|
|
2
|
+
on:
|
|
3
|
+
release:
|
|
4
|
+
types: [published]
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
steps:
|
|
9
|
+
- uses: actions/checkout@v7
|
|
10
|
+
- uses: ruby/setup-ruby@v1
|
|
11
|
+
|
|
12
|
+
# setup .gem/credentials
|
|
13
|
+
- run: mkdir -p ~/.gem
|
|
14
|
+
- env:
|
|
15
|
+
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
|
16
|
+
run: >-
|
|
17
|
+
echo -e "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}" > ~/.gem/credentials
|
|
18
|
+
- run: chmod 0600 ~/.gem/credentials
|
|
19
|
+
|
|
20
|
+
- run: gem build lbank.gemspec --output=release.gem
|
|
21
|
+
- run: gem push release.gem
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
3.3.5
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Lbank
|
|
2
2
|
|
|
3
|
-
[](https://rubygems.org/gems/lbank)
|
|
4
|
+
[](https://github.com/laurynas/lbank/actions)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
6
|
|
|
5
|
-
Fetches currency rates from Lithuanian Central Bank website
|
|
7
|
+
Fetches currency rates from Lithuanian Central Bank website https://lb.lt.
|
|
6
8
|
Does currency conversion.
|
|
7
9
|
Supports historic currency rates.
|
|
8
10
|
|
data/lbank.gemspec
CHANGED
|
@@ -14,11 +14,14 @@ Gem::Specification.new do |gem|
|
|
|
14
14
|
gem.name = 'lbank'
|
|
15
15
|
gem.require_paths = ['lib']
|
|
16
16
|
gem.version = Lbank::VERSION
|
|
17
|
+
gem.required_ruby_version = '>= 3.0'
|
|
17
18
|
|
|
18
|
-
gem.add_dependency 'faraday'
|
|
19
|
-
gem.add_dependency '
|
|
20
|
-
gem.add_dependency '
|
|
19
|
+
gem.add_dependency 'faraday', '>= 2.0', '< 3'
|
|
20
|
+
gem.add_dependency 'faraday-xml'
|
|
21
|
+
gem.add_dependency 'faraday-net_http'
|
|
22
|
+
gem.add_dependency 'tzinfo'
|
|
21
23
|
gem.add_dependency 'multi_xml'
|
|
24
|
+
gem.add_dependency 'rexml'
|
|
22
25
|
|
|
23
26
|
gem.add_development_dependency 'rspec', '~> 3.5'
|
|
24
27
|
gem.add_development_dependency 'rspec-its', '~> 1.2'
|
data/lib/lbank/errors.rb
ADDED
data/lib/lbank/version.rb
CHANGED
data/lib/lbank.rb
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
require 'lbank/version'
|
|
2
2
|
require 'lbank/memory_cache'
|
|
3
|
-
require '
|
|
3
|
+
require 'lbank/errors'
|
|
4
|
+
require 'date'
|
|
5
|
+
require 'tzinfo'
|
|
4
6
|
require 'faraday'
|
|
5
|
-
require '
|
|
7
|
+
require 'faraday/net_http'
|
|
8
|
+
require 'faraday/xml'
|
|
6
9
|
require 'bigdecimal'
|
|
7
10
|
|
|
8
11
|
module Lbank
|
|
@@ -23,12 +26,14 @@ module Lbank
|
|
|
23
26
|
end
|
|
24
27
|
|
|
25
28
|
def currency_rates(time = nil)
|
|
26
|
-
time
|
|
27
|
-
bank_time = time.to_time.in_time_zone(TIMEZONE)
|
|
28
|
-
date = bank_time.strftime('%Y-%m-%d')
|
|
29
|
+
date = bank_date(time || Time.now)
|
|
29
30
|
|
|
30
31
|
cache.fetch(cache_key(date)) do
|
|
31
32
|
response = connection.post(URL, tp: RATE_TYPE, dt: date)
|
|
33
|
+
error = response.body['FxRates']['OprlErr']
|
|
34
|
+
|
|
35
|
+
raise ResponseError.new(error['Desc']) if error
|
|
36
|
+
|
|
32
37
|
fx_rates = response.body['FxRates']['FxRate']
|
|
33
38
|
|
|
34
39
|
rates = { fx_rates[0]['CcyAmt'][0]['Ccy'] => 1 }
|
|
@@ -41,8 +46,8 @@ module Lbank
|
|
|
41
46
|
end
|
|
42
47
|
end
|
|
43
48
|
|
|
44
|
-
def convert_currency(amount, from_currency, to_currency,
|
|
45
|
-
rates = currency_rates(
|
|
49
|
+
def convert_currency(amount, from_currency, to_currency, time = nil)
|
|
50
|
+
rates = currency_rates(time)
|
|
46
51
|
from_rate = rates[from_currency.to_s]
|
|
47
52
|
to_rate = rates[to_currency.to_s]
|
|
48
53
|
|
|
@@ -53,6 +58,15 @@ module Lbank
|
|
|
53
58
|
"lbank-#{date}"
|
|
54
59
|
end
|
|
55
60
|
|
|
61
|
+
def bank_date(time)
|
|
62
|
+
if time.is_a?(Date) && !time.is_a?(DateTime)
|
|
63
|
+
time.strftime('%Y-%m-%d')
|
|
64
|
+
else
|
|
65
|
+
local_time = TZInfo::Timezone.get(TIMEZONE).utc_to_local(time.to_time.utc)
|
|
66
|
+
local_time.strftime('%Y-%m-%d')
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
56
70
|
def connection
|
|
57
71
|
@connection ||= Faraday.new do |builder|
|
|
58
72
|
builder.request :url_encoded
|
data/spec/lbank_spec.rb
CHANGED
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Lbank do
|
|
4
|
+
let(:date) { Date.new(2012, 8, 4) }
|
|
5
|
+
|
|
4
6
|
describe '#currency_rates' do
|
|
5
|
-
subject { described_class.currency_rates }
|
|
7
|
+
subject { described_class.currency_rates(date) }
|
|
6
8
|
|
|
7
9
|
its(['USD']) { is_expected.to be > 0 }
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
describe '#convert_currency' do
|
|
11
|
-
it 'converts currency' do
|
|
12
|
-
expect(subject.convert_currency(10, 'USD', 'EUR')).to be > 0
|
|
13
|
-
expect(subject.convert_currency(10, 'EUR', 'LTL')).to eq 34.528
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
context 'when invalid time' do
|
|
12
|
+
let(:date) { Time.now + 7 * 24 * 60 * 60 }
|
|
16
13
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
it 'raises error' do
|
|
15
|
+
expect { subject }.to raise_error(Lbank::ResponseError, /No data/)
|
|
16
|
+
end
|
|
20
17
|
end
|
|
21
18
|
end
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
describe '#convert_currency' do
|
|
21
|
+
it 'converts currency' do
|
|
22
|
+
expect(subject.convert_currency(10, 'EUR', 'LTL', date).round(2)).to eq 34.53
|
|
23
|
+
expect(subject.convert_currency(1, 'USD', 'EUR', date).round(2)).to eq 0.82
|
|
24
|
+
expect(subject.convert_currency(100, 'RUB', 'USD', date).round(2)).to eq 3.08
|
|
25
|
+
end
|
|
27
26
|
end
|
|
28
27
|
end
|
metadata
CHANGED
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lbank
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Laurynas Butkus
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-06-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '2.0'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '3'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '2.0'
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3'
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: faraday-xml
|
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
|
16
36
|
requirements:
|
|
17
37
|
- - ">="
|
|
@@ -25,7 +45,7 @@ dependencies:
|
|
|
25
45
|
- !ruby/object:Gem::Version
|
|
26
46
|
version: '0'
|
|
27
47
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
48
|
+
name: faraday-net_http
|
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
|
30
50
|
requirements:
|
|
31
51
|
- - ">="
|
|
@@ -39,7 +59,7 @@ dependencies:
|
|
|
39
59
|
- !ruby/object:Gem::Version
|
|
40
60
|
version: '0'
|
|
41
61
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
62
|
+
name: tzinfo
|
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
|
44
64
|
requirements:
|
|
45
65
|
- - ">="
|
|
@@ -66,6 +86,20 @@ dependencies:
|
|
|
66
86
|
- - ">="
|
|
67
87
|
- !ruby/object:Gem::Version
|
|
68
88
|
version: '0'
|
|
89
|
+
- !ruby/object:Gem::Dependency
|
|
90
|
+
name: rexml
|
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
96
|
+
type: :runtime
|
|
97
|
+
prerelease: false
|
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
69
103
|
- !ruby/object:Gem::Dependency
|
|
70
104
|
name: rspec
|
|
71
105
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -101,16 +135,18 @@ executables: []
|
|
|
101
135
|
extensions: []
|
|
102
136
|
extra_rdoc_files: []
|
|
103
137
|
files:
|
|
138
|
+
- ".github/workflows/main.yml"
|
|
139
|
+
- ".github/workflows/publish.yml"
|
|
104
140
|
- ".gitignore"
|
|
105
141
|
- ".rspec"
|
|
106
142
|
- ".ruby-version"
|
|
107
|
-
- ".travis.yml"
|
|
108
143
|
- Gemfile
|
|
109
144
|
- LICENSE
|
|
110
145
|
- README.md
|
|
111
146
|
- Rakefile
|
|
112
147
|
- lbank.gemspec
|
|
113
148
|
- lib/lbank.rb
|
|
149
|
+
- lib/lbank/errors.rb
|
|
114
150
|
- lib/lbank/memory_cache.rb
|
|
115
151
|
- lib/lbank/version.rb
|
|
116
152
|
- spec/lbank_spec.rb
|
|
@@ -118,7 +154,7 @@ files:
|
|
|
118
154
|
homepage: https://github.com/laurynas/lbank
|
|
119
155
|
licenses: []
|
|
120
156
|
metadata: {}
|
|
121
|
-
post_install_message:
|
|
157
|
+
post_install_message:
|
|
122
158
|
rdoc_options: []
|
|
123
159
|
require_paths:
|
|
124
160
|
- lib
|
|
@@ -126,16 +162,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
126
162
|
requirements:
|
|
127
163
|
- - ">="
|
|
128
164
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: '0'
|
|
165
|
+
version: '3.0'
|
|
130
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
167
|
requirements:
|
|
132
168
|
- - ">="
|
|
133
169
|
- !ruby/object:Gem::Version
|
|
134
170
|
version: '0'
|
|
135
171
|
requirements: []
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
signing_key:
|
|
172
|
+
rubygems_version: 3.5.16
|
|
173
|
+
signing_key:
|
|
139
174
|
specification_version: 4
|
|
140
175
|
summary: Fetches currency rates from Lithuanian Central Bank website. Does currency
|
|
141
176
|
conversion. Supports historic currency rates.
|