dolarblue 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1cbb622c30b3231b15718679c1a52cb01a218ef2
4
- data.tar.gz: 3a53a71be05412121055ea332c969c71129e5b20
3
+ metadata.gz: 05b7c9859ba4b1c5081f33dd8595dc3b3c869dc7
4
+ data.tar.gz: 2e95fc8add7d2965c59d0fe596b2e521c8372be7
5
5
  SHA512:
6
- metadata.gz: b5857781bc52a75bf4bb5f087a5c609e28cb5c8fe2d1d0f78c998f0ce8e5f57ecc13ec629022c4e181ef76f60ba0c1411232f3c640dec85c61370bef077ac234
7
- data.tar.gz: 384d51da5d47da674b16f0c8f66d13346a3d5457f5affbc81d44697991befccbeb5fda1bd05d54ff47085fd8b15fa64776ea0d3439e36c184310ae00b42703bf
6
+ metadata.gz: c8344dfa4f5719517033033efdef333a54c6328bcc62fcd5d60aee5dd4c7d57823695596d0fbb6ee9f532b3196d561a424a7e9c7312ae61fef95bb34ea570d3c
7
+ data.tar.gz: 9da662bc43b017e650f8dd48e97f1ec0a7bf411774806dbc5183b92dbf6448f5fd174a0311a5c9a59d5ae98443a7b3b47e20b759c30690fe7c8a9b4d27275f5b
data/.gitignore CHANGED
@@ -13,4 +13,4 @@ spec/reports
13
13
  test/tmp
14
14
  test/version_tmp
15
15
  tmp
16
- spec/cassettes/Dolarblue
16
+ spec/cassettes/Dolarblue*
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.1.0
@@ -3,6 +3,7 @@ language: ruby
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
+ - 2.1.0
6
7
  - jruby-1.7.9
7
8
  - rbx-2.2.1
8
9
 
@@ -1,7 +1,16 @@
1
1
  ## [In git](https://github.com/elgalu/dolarblue/compare/v0.4.0...HEAD)
2
2
 
3
+ ### New Features
4
+ * n/a
5
+
6
+ ### Bug Fixes
3
7
  * n/a
4
8
 
9
+ ### Chores
10
+ * Added more specs for increased coverage. (Leo Gallucci)
11
+ * Simplified and improved vcr cassettes usage. (Leo Gallucci)
12
+ * Added specs to test the CLI and went back to successful 100% coverage. (Leo Gallucci)
13
+
5
14
  ## [v0.4.0](https://github.com/elgalu/dolarblue/tree/v0.4.0)
6
15
 
7
16
  ### New Features
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dolarblue (0.4.0)
4
+ dolarblue (0.4.1.dev)
5
5
  configatron (>= 3.0.0.rc2)
6
6
  nokogiri (>= 1.6.1)
7
7
 
@@ -23,40 +23,34 @@ GEM
23
23
  crack (0.4.1)
24
24
  safe_yaml (~> 0.9.0)
25
25
  debug_inspector (0.0.2)
26
- debugger (1.6.3)
26
+ debugger (1.6.5)
27
27
  columnize (>= 0.3.1)
28
28
  debugger-linecache (~> 1.2.0)
29
- debugger-ruby_core_source (~> 1.2.4)
29
+ debugger-ruby_core_source (~> 1.3.1)
30
30
  debugger-linecache (1.2.0)
31
- debugger-ruby_core_source (1.2.4)
31
+ debugger-ruby_core_source (1.3.1)
32
32
  diff-lcs (1.2.5)
33
33
  docile (1.1.1)
34
- ffi (1.9.3-java)
35
34
  method_source (0.8.2)
36
35
  mime-types (2.0)
37
36
  mini_portile (0.5.2)
38
- multi_json (1.8.2)
37
+ multi_json (1.8.3)
39
38
  nokogiri (1.6.1)
40
39
  mini_portile (~> 0.5.0)
41
40
  pry (0.9.12.4)
42
41
  coderay (~> 1.0)
43
42
  method_source (~> 0.8)
44
43
  slop (~> 3.4)
45
- pry (0.9.12.4-java)
46
- coderay (~> 1.0)
47
- method_source (~> 0.8)
48
- slop (~> 3.4)
49
- spoon (~> 0.0)
50
44
  pry-debugger (0.2.2)
51
45
  debugger (~> 1.3)
52
46
  pry (~> 0.9.10)
53
- pry-doc (0.4.6)
47
+ pry-doc (0.5.1)
54
48
  pry (>= 0.9)
55
49
  yard (>= 0.8)
56
50
  pry-stack_explorer (0.4.9.1)
57
51
  binding_of_caller (>= 0.7)
58
52
  pry (>= 0.9.11)
59
- rake (10.1.0)
53
+ rake (10.1.1)
60
54
  redcarpet (3.0.0)
61
55
  rest-client (1.6.7)
62
56
  mime-types (>= 1.16)
@@ -76,8 +70,6 @@ GEM
76
70
  simplecov-html (~> 0.8.0)
77
71
  simplecov-html (0.8.0)
78
72
  slop (3.4.7)
79
- spoon (0.0.4)
80
- ffi
81
73
  term-ansicolor (1.2.2)
82
74
  tins (~> 0.8)
83
75
  thor (0.18.1)
@@ -89,7 +81,6 @@ GEM
89
81
  yard (0.8.7.3)
90
82
 
91
83
  PLATFORMS
92
- java
93
84
  ruby
94
85
 
95
86
  DEPENDENCIES
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'dolarblue'
3
+
4
+ while true
5
+ $stdout.puts Dolarblue.get_cardblue_output
6
+ sleep 60*5 # every 5 minutes
7
+ end
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'dolarblue'
3
3
 
4
- puts Dolarblue.get_output
4
+ $stdout.puts Dolarblue.get_output
@@ -12,5 +12,13 @@ class Dolarblue
12
12
  def get_output
13
13
  new.update!.output
14
14
  end
15
+
16
+ # Returns all the dollar card exchange 'Blue' vs 'Card' info
17
+ # suitable for user printing analysis
18
+ #
19
+ # @return [String] with all dollar exchange 'Blue' vs 'Card' values
20
+ def get_cardblue_output
21
+ new.update!(false).cardblue_output
22
+ end
15
23
  end
16
24
  end
@@ -18,25 +18,25 @@ class Dolarblue
18
18
  @blue = Blue.new
19
19
  @official = Official.new
20
20
  @card = Card.new
21
- @output = nil
22
21
  self
23
22
  end
24
23
 
25
24
  # Connect to the source and retrieve dollar exchange values
26
25
  #
26
+ # @param log [Boolean] weather to show log standard outputs or not
27
+ #
27
28
  # @return (see #initialize)
28
- def update!
29
- @output = ''
29
+ def update!(log=true)
30
30
  base_url = @config.base_url
31
31
  fail ArgumentError, "Need base_url configuration to know where to web-scrape from. Current value: #{base_url}" if base_url.empty?
32
32
 
33
- log "Obtaining latest AR$ vs US$ exchange values..."
33
+ log "Obtaining latest AR$ vs US$ exchange values..." if log
34
34
  html_file = open(base_url)
35
35
 
36
- log "Parsing values..."
36
+ log "Parsing values..." if log
37
37
  parse_values Nokogiri::HTML(html_file)
38
38
 
39
- log "\nDone: #{Time.now.localtime}\n"
39
+ log "\nDone: #{Time.now.localtime}\n" if log
40
40
  self
41
41
  end
42
42
 
@@ -61,7 +61,6 @@ class Dolarblue
61
61
  # @return [String] the output with dollar exchange information
62
62
  def output
63
63
  <<-OUTPUT
64
- #{@output}
65
64
  #{@official.output}
66
65
  #{@card.output}
67
66
  #{@blue.output}
@@ -74,6 +73,27 @@ Information source:
74
73
  OUTPUT
75
74
  end
76
75
 
76
+ # Output string to be used by the binary `cardblue`
77
+ #
78
+ # @return [String] the output with card/dollar exchange info
79
+ def cardblue_output
80
+ n = 27
81
+ bol_discount = 0.97
82
+ card_delay_add = 1.01
83
+ payo_discount = 0.967
84
+ net_ticket = 375
85
+ sell_ticket = 396.2
86
+
87
+ real = (@blue.sell * bol_discount).round(2)
88
+ profit = n * (real * net_ticket * payo_discount - @card.sell * card_delay_add * sell_ticket)
89
+ now = Time.now.localtime.strftime("%H:%M:%S")
90
+
91
+ <<-OUTPUT
92
+ Card[#{@card.sell_output}] Blue[#{@blue.sell_output}] Gap[#{gap_card_percent}%] #{now}
93
+ #{profit.round(0)}=#{n}*(#{real}*#{net_ticket}*#{payo_discount}-#{@card.sell}*#{card_delay_add}*#{sell_ticket})
94
+ OUTPUT
95
+ end
96
+
77
97
  private
78
98
 
79
99
  # Parse dollar related values using the XPath configured
@@ -88,15 +108,10 @@ Information source:
88
108
  end
89
109
 
90
110
  # Poor man's logger to keep user updated with http get activity
91
- # while allowing to buffer the string while in RSpec test mode
92
111
  #
93
112
  # @param msg [String] the message to print or buffer
94
113
  def log(msg)
95
- if defined?(RSpec)
96
- @output << msg
97
- else
98
- print msg
99
- end
114
+ $stdout.print msg
100
115
  end
101
116
 
102
117
  end
@@ -1,3 +1,3 @@
1
1
  class Dolarblue
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,22 +1,60 @@
1
1
  require 'spec_helper'
2
2
 
3
- vcr_options = { allow_playback_repeats: true }
3
+ CLI_MATCHERS = [
4
+ /^Obtaining latest/,
5
+ /Parsing values/,
6
+ /^Done: \d+/
7
+ ]
8
+
9
+ values = %q{\d+\.\d+\s+\/\s+\d+\.\d+}
10
+ start = '- '
11
+ OUTPUT_MATCHERS = [
12
+ /^#{start}Dollar Official.*#{values}$/,
13
+ /^#{start}Dollar Card.*n\/a\s+\/\s+\d+\.\d+$/,
14
+ /^#{start}Dollar Blue.*#{values}$/,
15
+ /^#{start}Gap card/,
16
+ /^#{start}Gap official/,
17
+ /^Information source:$/
18
+ ]
19
+
20
+ describe Dolarblue do
21
+ before(:each) do
22
+ # Save and capture standard output
23
+ @saved_stdout = $stdout
24
+ $stdout = StringIO.new
25
+ end
26
+
27
+ after(:each) do
28
+ # Restore standard output
29
+ $stdout = @saved_stdout
30
+ end
31
+
32
+ context 'CLI' do
33
+ let(:path) { File.expand_path('../../bin/dolarblue', __FILE__) }
34
+
35
+ it 'should print out status information about querying base_url and parsing data' do
36
+ (CLI_MATCHERS).each do |regex|
37
+ $stdout.should_receive(:print).with(regex)
38
+ end
39
+ load path
40
+ end
41
+
42
+ it 'should puts all the dollar exchange values' do
43
+ load path
44
+ (OUTPUT_MATCHERS).each do |regex|
45
+ expect($stdout.string).to match(regex)
46
+ end
47
+ end
48
+ end
4
49
 
5
- describe Dolarblue, vcr: vcr_options do
6
50
  context 'Class Methods' do
7
51
  subject { Dolarblue }
8
52
 
9
- it 'should return all the dollar exchange Blue/Official/Card values and percentiles suitable for user printing' do
10
- # expect(subject.get_output).to match(/Dollar Blue.*\d+\.\d+.*^Information source/)
11
- expect(subject.get_output).to match(/Obtaining/)
12
- expect(subject.get_output).to match(/Done/)
13
- values = %q{\d+\.\d+\s+\/\s+\d+\.\d+}
14
- expect(subject.get_output).to match(/Official.*#{values}/)
15
- expect(subject.get_output).to match(/Card.*n\/a\s+\/\s+\d+\.\d+/)
16
- expect(subject.get_output).to match(/Blue.*#{values}/)
17
- expect(subject.get_output).to match(/Gap card/)
18
- expect(subject.get_output).to match(/Gap official/)
19
- expect(subject.get_output).to match(/Information source/)
53
+ it 'should return all the dollar exchange Blue/Official/Card values and percentiles' do
54
+ OUTPUT_MATCHERS.each do |regex|
55
+ expect(subject.get_output).to match(regex)
56
+ end
20
57
  end
21
58
  end
59
+
22
60
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dolarblue::Inflector do
4
+
5
+ subject { Dolarblue::Inflector }
6
+
7
+ it 'demodulizes simple 1-level unnested classes' do
8
+ expect(subject.demodulize('Account')).to eq('Account')
9
+ expect(subject.demodulize('Inflections')).to eq('Inflections')
10
+ end
11
+
12
+ it 'demodulizes larger 3-levels nested classes' do
13
+ expect(subject.demodulize('MyApplication::Billing::Account')).to eq('Account')
14
+ end
15
+
16
+ it 'demodulizes 2-levels nested classes' do
17
+ expect(subject.demodulize('Dolarblue::Card')).to eq('Card')
18
+ end
19
+
20
+ it 'demodulizes larger 4-levels nested classes' do
21
+ expect(subject.demodulize('ActiveRecord::CoreExtensions::String::Inflections')).to eq('Inflections')
22
+ end
23
+
24
+ it 'demodulizes empty unnested string' do
25
+ expect(subject.demodulize('')).to eq('')
26
+ end
27
+
28
+ end
@@ -11,14 +11,6 @@ end
11
11
 
12
12
  require 'dolarblue'
13
13
 
14
- require 'vcr' # gem 'vcr'
15
-
16
- VCR.configure do |c|
17
- c.cassette_library_dir = 'spec/cassettes'
18
- c.hook_into :webmock
19
- c.configure_rspec_metadata!
20
- end
21
-
22
14
  # Require this file using `require "spec_helper"` within each of your specs
23
15
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
24
16
  RSpec.configure do |config|
@@ -30,3 +22,18 @@ RSpec.configure do |config|
30
22
  c.syntax = :expect # disable `should` syntax http://goo.gl/BGxqP
31
23
  end
32
24
  end
25
+
26
+ require 'vcr' # gem 'vcr'
27
+
28
+ VCR.configure do |c|
29
+ c.cassette_library_dir = 'spec/cassettes'
30
+ c.hook_into :webmock
31
+ c.default_cassette_options = { allow_playback_repeats: true, record: :new_episodes }
32
+ c.configure_rspec_metadata!
33
+ end
34
+
35
+ # VCR + Rspec integration
36
+ RSpec.configure do |config|
37
+ config.before(:suite) { VCR.insert_cassette 'Dolarblue' }
38
+ config.after(:suite) { VCR.eject_cassette }
39
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dolarblue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leo Gallucci
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-16 00:00:00.000000000 Z
11
+ date: 2014-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: configatron
@@ -151,6 +151,7 @@ description: Query Argentine Peso vs US$ exchange values with particular interes
151
151
  email:
152
152
  - elgalu3@gmail.com
153
153
  executables:
154
+ - cardblue
154
155
  - dolarblue
155
156
  extensions: []
156
157
  extra_rdoc_files: []
@@ -167,6 +168,7 @@ files:
167
168
  - LICENSE.md
168
169
  - README.md
169
170
  - Rakefile
171
+ - bin/cardblue
170
172
  - bin/dolarblue
171
173
  - config/xpaths.yml
172
174
  - dolarblue.gemspec
@@ -179,9 +181,9 @@ files:
179
181
  - lib/dolarblue/official.rb
180
182
  - lib/dolarblue/version.rb
181
183
  - lib/dolarblue/xchange.rb
182
- - spec/blue_spec.rb
183
184
  - spec/cassettes/.keep
184
185
  - spec/dolarblue_spec.rb
186
+ - spec/inflector_spec.rb
185
187
  - spec/spec_helper.rb
186
188
  homepage: https://github.com/elgalu/dolarblue
187
189
  licenses:
@@ -203,13 +205,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
205
  version: 1.8.25
204
206
  requirements: []
205
207
  rubyforge_project:
206
- rubygems_version: 2.1.11
208
+ rubygems_version: 2.2.0
207
209
  signing_key:
208
210
  specification_version: 4
209
211
  summary: Query Argentine Peso vs US$ exchange values with particular interest in official
210
212
  vs. street (blue) reference prices.
211
213
  test_files:
212
- - spec/blue_spec.rb
213
214
  - spec/cassettes/.keep
214
215
  - spec/dolarblue_spec.rb
216
+ - spec/inflector_spec.rb
215
217
  - spec/spec_helper.rb
218
+ has_rdoc:
@@ -1,5 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dolarblue::Blue do
4
- #TODO
5
- end