bloomberg_currency 1.0.0 → 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.
- checksums.yaml +5 -5
- data/.gitignore +1 -1
- data/.rubocop.yml +9 -1
- data/.rubocop_todo.yml +19 -1
- data/.ruby_version +1 -0
- data/.travis.yml +3 -3
- data/bloomberg_currency.gemspec +4 -1
- data/lib/bloomberg_currency.rb +1 -0
- data/lib/bloomberg_currency/api.rb +7 -0
- data/lib/bloomberg_currency/api/site.rb +52 -19
- data/lib/bloomberg_currency/quote.rb +1 -0
- data/lib/bloomberg_currency/quote_detail.rb +1 -1
- data/lib/bloomberg_currency/version.rb +1 -1
- metadata +57 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d93abee4c1b84e8d2f7f697463b6c980f3bb11c1444c726b438ad486fd7b7f4a
|
4
|
+
data.tar.gz: e3643047ac9eb1addbe921c7bd34a7875895de1f2b34df26ba29b08c2fa99049
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17d85ed4ce21f18931f73453fd73c366b67695fb211e20197daa7159df590a852511fe3e09bceb8b0f7165359a45aede0dd090635671eba4d11f08c221b4a667
|
7
|
+
data.tar.gz: edf076ecd3c68af199a69f1275012193b606c15efba3dece0a9c275abe19dbfe160135f0f6cb1c3db6b24ddb41e3724f14aa864de2fff1439ec1c65721dba7e3
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -5,10 +5,18 @@ AllCops:
|
|
5
5
|
- '**/Rakefile'
|
6
6
|
- '**/config.ru'
|
7
7
|
Exclude:
|
8
|
+
- bloomberg_currency.gemspec
|
8
9
|
- 'db/**/*'
|
9
10
|
- 'config/**/*'
|
10
11
|
- 'script/**/*'
|
12
|
+
- 'spec/**/*'
|
11
13
|
- !ruby/regexp /old_and_unused\.rb$/
|
12
14
|
|
13
15
|
Metrics/LineLength:
|
14
|
-
Max: 120
|
16
|
+
Max: 120
|
17
|
+
|
18
|
+
Metrics/MethodLength:
|
19
|
+
Max: 12
|
20
|
+
|
21
|
+
Metrics/AbcSize:
|
22
|
+
Max: 18
|
data/.rubocop_todo.yml
CHANGED
@@ -1,7 +1,25 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2018-01-17 08:55:47 -0500 using RuboCop version 0.49.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 1
|
10
|
+
# Cop supports --auto-correct.
|
11
|
+
Layout/EmptyLineAfterMagicComment:
|
12
|
+
Exclude:
|
13
|
+
- 'Gemfile'
|
14
|
+
|
15
|
+
# Offense count: 1
|
16
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
17
|
+
Metrics/BlockLength:
|
18
|
+
Max: 28
|
19
|
+
|
20
|
+
# Offense count: 1
|
21
|
+
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
22
|
+
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
23
|
+
Style/FileName:
|
24
|
+
Exclude:
|
25
|
+
- 'Gemfile'
|
data/.ruby_version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.6.5
|
data/.travis.yml
CHANGED
data/bloomberg_currency.gemspec
CHANGED
@@ -34,12 +34,15 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.require_paths = ['lib']
|
35
35
|
|
36
36
|
spec.add_development_dependency 'bundler', '~> 1.13'
|
37
|
-
spec.add_development_dependency 'rake', '
|
37
|
+
spec.add_development_dependency 'rake', '>= 12.3.3'
|
38
38
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
39
39
|
spec.add_development_dependency 'simplecov', '~> 0.11'
|
40
40
|
spec.add_development_dependency 'rubocop', '~> 0.49.0'
|
41
41
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.0'
|
42
42
|
spec.add_development_dependency 'pry-byebug', '~> 3.5.1'
|
43
|
+
spec.add_development_dependency 'vcr', '~> 6.0.0'
|
44
|
+
spec.add_development_dependency 'webmock', '~> 3.5.0'
|
43
45
|
|
44
46
|
spec.add_runtime_dependency 'nokogiri', '~> 1.6', '>= 1.6.8'
|
47
|
+
spec.add_runtime_dependency 'faraday', '~> 0.9.2'
|
45
48
|
end
|
data/lib/bloomberg_currency.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'faraday'
|
4
4
|
require 'nokogiri'
|
5
5
|
require 'bigdecimal'
|
6
6
|
|
@@ -21,8 +21,14 @@ module BC
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def load_site(currency_one, currency_two)
|
24
|
-
|
25
|
-
|
24
|
+
url = "#{BC::API::Host::URL}#{currency_one}#{currency_two}:CUR"
|
25
|
+
headers = {
|
26
|
+
'user-agent' => BC::API::USER_AGENT,
|
27
|
+
'referer' => 'https://www.google.com/'
|
28
|
+
}
|
29
|
+
file = Faraday.get(url, nil, headers)
|
30
|
+
|
31
|
+
Nokogiri::HTML(file.body)
|
26
32
|
end
|
27
33
|
|
28
34
|
def parse(document)
|
@@ -32,30 +38,57 @@ module BC
|
|
32
38
|
end
|
33
39
|
|
34
40
|
def parse_quote(document)
|
35
|
-
price_container = document.xpath("//
|
36
|
-
detailed_quote_container = document.xpath("//div[contains(@class, '
|
37
|
-
|
38
|
-
|
39
|
-
price_datetime_element = price_container.xpath("//div[@class='price-datetime']")
|
40
|
-
|
41
|
+
price_container = document.xpath("//section[contains(@class, 'quotePageSnapshot')]")
|
42
|
+
detailed_quote_container = document.xpath("//div[contains(@class, 'details__')]")
|
43
|
+
price_element = price_container.xpath("//span[starts-with(@class, 'priceText__')]")
|
44
|
+
price_datetime_element = price_container.xpath("//div[contains(@class, 'time__')]")
|
41
45
|
price = price_element.text.strip.tr(',', '').to_f
|
42
|
-
datetime =
|
46
|
+
datetime = calculate_datetime(price_datetime_element.children.first.text.strip)
|
43
47
|
details_hash = quote_details(detailed_quote_container)
|
44
48
|
|
45
49
|
{ price: price, datetime: datetime, detail: BC::QuoteDetail.new(details_hash), available: true }
|
46
50
|
end
|
47
51
|
|
48
52
|
def quote_details(container)
|
49
|
-
|
50
|
-
|
51
|
-
)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
open_price = extract_value_from_detail(container, 'openprice')
|
54
|
+
previous_close = extract_value_from_detail(container, 'previousclosingpriceonetradingdayago')
|
55
|
+
total_return_ytd = extract_value_from_detail(container, 'totalreturnytd')
|
56
|
+
range_one_day = extract_values_for_range(container, 'rangeoneday')
|
57
|
+
range_52_weeks = extract_values_for_range(container, 'range52weeks')
|
58
|
+
|
59
|
+
{
|
60
|
+
open: open_price,
|
61
|
+
day_range: range_one_day,
|
62
|
+
previous_close: previous_close,
|
63
|
+
range_52_wks: range_52_weeks,
|
64
|
+
ytd_return: total_return_ytd
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
def extract_value_from_detail(container, section)
|
69
|
+
container
|
70
|
+
.xpath("//section[contains(@class, '#{section}')]")
|
71
|
+
.children[1].text
|
72
|
+
end
|
73
|
+
|
74
|
+
def extract_values_for_range(container, section)
|
75
|
+
container
|
76
|
+
.xpath("//section[contains(@class, '#{section}')]")
|
77
|
+
.children[1]
|
78
|
+
.children[0]
|
79
|
+
.children
|
80
|
+
.map(&:text)
|
81
|
+
.join('-')
|
82
|
+
end
|
83
|
+
|
84
|
+
def calculate_datetime(datetime_str)
|
85
|
+
if datetime_str.index(':')
|
86
|
+
DateTime.strptime(datetime_str, 'As of %H:%M %p %z %m/%d/%Y').to_s
|
87
|
+
else
|
88
|
+
DateTime.strptime(datetime_str, 'As of %m/%d/%Y').to_date.to_s
|
57
89
|
end
|
58
|
-
|
90
|
+
rescue
|
91
|
+
''
|
59
92
|
end
|
60
93
|
end
|
61
94
|
end
|
@@ -9,7 +9,7 @@ module BC
|
|
9
9
|
@open = process_float(attributes[:open])
|
10
10
|
@day_range = process_range(attributes[:day_range])
|
11
11
|
@previous_close = process_float(attributes[:previous_close])
|
12
|
-
@last_52_weeks_range = process_range(attributes[:
|
12
|
+
@last_52_weeks_range = process_range(attributes[:range_52_wks])
|
13
13
|
@ytd_return = process_float(attributes[:ytd_return])
|
14
14
|
end
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bloomberg_currency
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Jimenez Velez
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,22 +84,22 @@ dependencies:
|
|
84
84
|
name: codeclimate-test-reporter
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '1.0'
|
90
87
|
- - ">="
|
91
88
|
- !ruby/object:Gem::Version
|
92
89
|
version: 1.0.0
|
90
|
+
- - "~>"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '1.0'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- - "~>"
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: '1.0'
|
100
97
|
- - ">="
|
101
98
|
- !ruby/object:Gem::Version
|
102
99
|
version: 1.0.0
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.0'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: pry-byebug
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,6 +114,34 @@ dependencies:
|
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 3.5.1
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: vcr
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 6.0.0
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 6.0.0
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: webmock
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 3.5.0
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 3.5.0
|
117
145
|
- !ruby/object:Gem::Dependency
|
118
146
|
name: nokogiri
|
119
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,6 +162,20 @@ dependencies:
|
|
134
162
|
- - ">="
|
135
163
|
- !ruby/object:Gem::Version
|
136
164
|
version: 1.6.8
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: faraday
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: 0.9.2
|
172
|
+
type: :runtime
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: 0.9.2
|
137
179
|
description: Provides an easy to use API to get currency rates data from the Bloomberg
|
138
180
|
website
|
139
181
|
email:
|
@@ -142,11 +184,11 @@ executables: []
|
|
142
184
|
extensions: []
|
143
185
|
extra_rdoc_files: []
|
144
186
|
files:
|
145
|
-
- ".byebug_history"
|
146
187
|
- ".gitignore"
|
147
188
|
- ".rspec"
|
148
189
|
- ".rubocop.yml"
|
149
190
|
- ".rubocop_todo.yml"
|
191
|
+
- ".ruby_version"
|
150
192
|
- ".simplecov"
|
151
193
|
- ".travis.yml"
|
152
194
|
- CODE_OF_CONDUCT.md
|
@@ -158,6 +200,7 @@ files:
|
|
158
200
|
- bin/setup
|
159
201
|
- bloomberg_currency.gemspec
|
160
202
|
- lib/bloomberg_currency.rb
|
203
|
+
- lib/bloomberg_currency/api.rb
|
161
204
|
- lib/bloomberg_currency/api/host.rb
|
162
205
|
- lib/bloomberg_currency/api/site.rb
|
163
206
|
- lib/bloomberg_currency/quote.rb
|
@@ -183,8 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
226
|
- !ruby/object:Gem::Version
|
184
227
|
version: '0'
|
185
228
|
requirements: []
|
186
|
-
|
187
|
-
rubygems_version: 2.6.11
|
229
|
+
rubygems_version: 3.0.3
|
188
230
|
signing_key:
|
189
231
|
specification_version: 4
|
190
232
|
summary: Bloomberg Currency helps you pull currency rates data from the Bloomberg
|