dolarblue 0.3.0 → 0.4.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: 8da81e799823976c526474269b44fcd2e35bcf26
4
- data.tar.gz: 852536ad4e2e7f309fddf1d294e3ab2e0a267d0d
3
+ metadata.gz: 1cbb622c30b3231b15718679c1a52cb01a218ef2
4
+ data.tar.gz: 3a53a71be05412121055ea332c969c71129e5b20
5
5
  SHA512:
6
- metadata.gz: 596dc122f503f536a36df0a072c9dbe73100cbd9e9279d1937ae5ec71c95acbd7c5c83df42dcf6bcdd8bb4790c2afc6f104cb70e7a1e902ce2e6ad7503d2a989
7
- data.tar.gz: c9edd133e76cd181f60e9a7d4018a9a038cb2dafcdc6ac0d1881487fa152f7562256b3d1feae72212c171126e9f9611e9839ea3b75c6ebeb272874d01ba471f0
6
+ metadata.gz: b5857781bc52a75bf4bb5f087a5c609e28cb5c8fe2d1d0f78c998f0ce8e5f57ecc13ec629022c4e181ef76f60ba0c1411232f3c640dec85c61370bef077ac234
7
+ data.tar.gz: 384d51da5d47da674b16f0c8f66d13346a3d5457f5affbc81d44697991befccbeb5fda1bd05d54ff47085fd8b15fa64776ea0d3439e36c184310ae00b42703bf
data/.gitignore CHANGED
@@ -3,11 +3,9 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
10
- doc/
11
9
  lib/bundler/man
12
10
  pkg
13
11
  rdoc
@@ -15,3 +13,4 @@ spec/reports
15
13
  test/tmp
16
14
  test/version_tmp
17
15
  tmp
16
+ spec/cassettes/Dolarblue
data/.rspec CHANGED
@@ -1,4 +1,4 @@
1
1
  --format documentation
2
2
  --color
3
3
  --order random
4
-
4
+ --fail-fast
@@ -0,0 +1,2 @@
1
+ dolarblue
2
+
@@ -1 +1 @@
1
- 1.9.2-p320
1
+ 2.0.0
@@ -1,8 +1,13 @@
1
1
  language: ruby
2
- before_install:
3
- - gem --version
2
+
4
3
  rvm:
5
- - 1.9.2
6
4
  - 1.9.3
7
5
  - 2.0.0
8
- script: 'bundle exec rake'
6
+ - jruby-1.7.9
7
+ - rbx-2.2.1
8
+
9
+ install:
10
+ - travis_retry bundle install
11
+
12
+ script:
13
+ - bundle exec rake
@@ -1,13 +1,18 @@
1
- ## [In git](https://github.com/elgalu/dolarblue/compare/v0.3.0...HEAD)
1
+ ## [In git](https://github.com/elgalu/dolarblue/compare/v0.4.0...HEAD)
2
2
 
3
- ### New Features
4
3
  * n/a
5
4
 
5
+ ## [v0.4.0](https://github.com/elgalu/dolarblue/tree/v0.4.0)
6
+
7
+ ### New Features
8
+ * Changed information source from twitter to ambito.com. (Leo Gallucci)
9
+
6
10
  ### Bug Fixes
7
- * n/a
11
+ * Twitter anonymous access was discontinued so to avoid the user having to install their API token i moved to web-scraping. (Leo Gallucci)
8
12
 
9
13
  ### Chores
10
- * n/a
14
+ * Complete refactor of the app. (Leo Gallucci)
15
+ * Updated RSpec to use new syntax `expect` and remove `should` [expectation syntax](http://goo.gl/BGxqP). (Leo Gallucci)
11
16
 
12
17
  ## [v0.3.0](https://github.com/elgalu/dolarblue/tree/v0.3.0)
13
18
 
data/Gemfile CHANGED
@@ -2,3 +2,23 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in dolarblue.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'pry' # core replacement for irb
8
+ gem 'pry-doc' # gives MRI core documentation and source code
9
+ end
10
+
11
+ unless %w(jruby rbx).include? RUBY_ENGINE
12
+ group :test do
13
+ # Coverage reports only for MRI
14
+ gem 'simplecov', '>= 0.8.2'
15
+ gem 'coveralls', '>= 0.7.0'
16
+ end
17
+
18
+ group :development do
19
+ gem 'redcarpet', '>= 3' # redcarpet doesn't currently works with jruby nor rbx. kramdown is a possible alternative
20
+ gem 'yard', '>= 0.8.7.3' # no need to generate yard docs from jruby nor rbx
21
+ gem 'pry-stack_explorer' # adds command `show-stack`
22
+ gem 'pry-debugger' # adds commands `continue, step, next, finish`
23
+ end
24
+ end
@@ -0,0 +1,110 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ dolarblue (0.4.0)
5
+ configatron (>= 3.0.0.rc2)
6
+ nokogiri (>= 1.6.1)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.3.5)
12
+ binding_of_caller (0.7.2)
13
+ debug_inspector (>= 0.0.1)
14
+ coderay (1.1.0)
15
+ columnize (0.3.6)
16
+ configatron (3.0.0.rc2)
17
+ coveralls (0.7.0)
18
+ multi_json (~> 1.3)
19
+ rest-client
20
+ simplecov (>= 0.7)
21
+ term-ansicolor
22
+ thor
23
+ crack (0.4.1)
24
+ safe_yaml (~> 0.9.0)
25
+ debug_inspector (0.0.2)
26
+ debugger (1.6.3)
27
+ columnize (>= 0.3.1)
28
+ debugger-linecache (~> 1.2.0)
29
+ debugger-ruby_core_source (~> 1.2.4)
30
+ debugger-linecache (1.2.0)
31
+ debugger-ruby_core_source (1.2.4)
32
+ diff-lcs (1.2.5)
33
+ docile (1.1.1)
34
+ ffi (1.9.3-java)
35
+ method_source (0.8.2)
36
+ mime-types (2.0)
37
+ mini_portile (0.5.2)
38
+ multi_json (1.8.2)
39
+ nokogiri (1.6.1)
40
+ mini_portile (~> 0.5.0)
41
+ pry (0.9.12.4)
42
+ coderay (~> 1.0)
43
+ method_source (~> 0.8)
44
+ 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
+ pry-debugger (0.2.2)
51
+ debugger (~> 1.3)
52
+ pry (~> 0.9.10)
53
+ pry-doc (0.4.6)
54
+ pry (>= 0.9)
55
+ yard (>= 0.8)
56
+ pry-stack_explorer (0.4.9.1)
57
+ binding_of_caller (>= 0.7)
58
+ pry (>= 0.9.11)
59
+ rake (10.1.0)
60
+ redcarpet (3.0.0)
61
+ rest-client (1.6.7)
62
+ mime-types (>= 1.16)
63
+ rspec (2.14.1)
64
+ rspec-core (~> 2.14.0)
65
+ rspec-expectations (~> 2.14.0)
66
+ rspec-mocks (~> 2.14.0)
67
+ rspec-core (2.14.7)
68
+ rspec-expectations (2.14.4)
69
+ diff-lcs (>= 1.1.3, < 2.0)
70
+ rspec-mocks (2.14.4)
71
+ rubygems-tasks (0.2.4)
72
+ safe_yaml (0.9.7)
73
+ simplecov (0.8.2)
74
+ docile (~> 1.1.0)
75
+ multi_json
76
+ simplecov-html (~> 0.8.0)
77
+ simplecov-html (0.8.0)
78
+ slop (3.4.7)
79
+ spoon (0.0.4)
80
+ ffi
81
+ term-ansicolor (1.2.2)
82
+ tins (~> 0.8)
83
+ thor (0.18.1)
84
+ tins (0.13.1)
85
+ vcr (2.8.0)
86
+ webmock (1.16.1)
87
+ addressable (>= 2.2.7)
88
+ crack (>= 0.3.2)
89
+ yard (0.8.7.3)
90
+
91
+ PLATFORMS
92
+ java
93
+ ruby
94
+
95
+ DEPENDENCIES
96
+ bundler (>= 1.3.5)
97
+ coveralls (>= 0.7.0)
98
+ dolarblue!
99
+ pry
100
+ pry-debugger
101
+ pry-doc
102
+ pry-stack_explorer
103
+ rake
104
+ redcarpet (>= 3)
105
+ rspec (~> 2.14, >= 2.14.1)
106
+ rubygems-tasks (~> 0.2, >= 0.2.4)
107
+ simplecov (>= 0.8.2)
108
+ vcr (~> 2.8, >= 2.8.0)
109
+ webmock (~> 1.16, >= 1.16.1)
110
+ yard (>= 0.8.7.3)
data/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  [![Dependency Status][DS img]][Dependency Status]
6
6
  [![Code Climate][CC img]][Code Climate]
7
7
  [![Coverage Status][CS img]][Coverage Status]
8
+ [![githalytics.com alpha](https://cruel-carlota.pagodabox.com/4a6a5549e2d3b59f3b59b12ab0ab70e9 "githalytics.com")](http://githalytics.com/elgalu/dolarblue)
8
9
 
9
10
  ## Description
10
11
 
@@ -26,18 +27,18 @@ Query latest values
26
27
 
27
28
  Sample result:
28
29
 
29
- Obtaining latest AR$ vs US$ exchange values...Done.
30
+ Obtaining latest AR$ vs US$ exchange values...Parsing values...
31
+ Done: 2013-12-15 19:20:41 -0300
30
32
 
31
- - Official.......: 5.02 / 5.10 (Updated 2 hours ago)
32
- - Dolar "Tarjeta": n/a / 6.12 (Updated 2 hours ago)
33
- - Blue...........: 8.44 / 8.75 (Updated 2 hours and 33 minutes ago)
34
- - Gap "tarjeta"..: 43%
35
- - Gap (official).: 72%
33
+ - Dollar Official....: 6.25 / 6.30
34
+ - Dollar Card........: n/a / 8.50
35
+ - Dollar Blue........: 9.55 / 9.60
36
36
 
37
- Information sources:
38
- Official.......: https://twitter.com/cotizacionhoyar/status/314454371796660225
39
- Blue...........: https://twitter.com/DolarBlue/status/314445874556190720
37
+ - Gap card.......blue: 13%
38
+ - Gap official...blue: 52%
40
39
 
40
+ Information source:
41
+ http://ambito.com/economia/mercados/monedas/dolar/
41
42
 
42
43
  ## Contributing
43
44
 
@@ -57,8 +58,8 @@ Released under the MIT License. See the [LICENSE][] file for further details.
57
58
  [RubyGems][] | [Documentation][] | [Source][] | [Bugtracker][] | [Build Status][] | [Dependency Status][] | [Code Climate][]
58
59
 
59
60
 
60
- [bundle install]: http://gembundler.com/man/bundle-install.1.html
61
- [Gemfile]: http://gembundler.com/man/gemfile.5.html
61
+ [bundle install]: http://gembundler.com/v1.3/man/bundle-install.1.html
62
+ [Gemfile]: http://gembundler.com/v1.3/gemfile.html
62
63
  [LICENSE]: LICENSE.md
63
64
  [Change Log]: CHANGELOG.md
64
65
 
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
- require "bundler/gem_tasks"
2
- require 'rspec/core/rake_task'
1
+ require 'rubygems/tasks'
2
+ Gem::Tasks.new
3
3
 
4
+ require 'rspec/core/rake_task'
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
7
  task :default => :spec
@@ -0,0 +1,17 @@
1
+ base_url: 'http://ambito.com/economia/mercados/monedas/dolar/'
2
+
3
+ blue:
4
+ buy:
5
+ xpath: '//*[@id="contenido"]/div[1]/div[2]/div/div/div[2]/big'
6
+ sell:
7
+ xpath: '//*[@id="contenido"]/div[1]/div[2]/div/div/div[3]/big'
8
+
9
+ official:
10
+ buy:
11
+ xpath: '//*[@id="contenido"]/div[1]/div[1]/div/div/div[2]/big'
12
+ sell:
13
+ xpath: '//*[@id="contenido"]/div[1]/div[1]/div/div/div[3]/big'
14
+
15
+ card:
16
+ sell:
17
+ xpath: '//*[@id="contenido"]/div[4]/div/div/div[2]/big'
@@ -5,34 +5,38 @@ require 'dolarblue/version'
5
5
  Gem::Specification.new do |spec|
6
6
 
7
7
  spec.platform = Gem::Platform::RUBY
8
- spec.name = "dolarblue"
8
+ spec.name = 'dolarblue'
9
9
  spec.version = Dolarblue::VERSION
10
10
  spec.summary = %q{Query Argentine Peso vs US$ exchange values with particular interest in official vs. street (blue) reference prices.}
11
11
  spec.description = spec.summary
12
12
 
13
- spec.required_ruby_version = '>= 1.9.2'
14
- spec.required_rubygems_version = '>= 1.3.6'
13
+ spec.required_ruby_version = '>= 1.9.3'
14
+ spec.required_rubygems_version = '>= 1.8.25'
15
15
 
16
16
  spec.license = 'MIT'
17
17
 
18
- spec.authors = ["Leo Gallucci"]
19
- spec.email = ["elgalu3@gmail.com"]
20
- spec.homepage = "https://github.com/elgalu/dolarblue"
18
+ spec.authors = ['Leo Gallucci']
19
+ spec.email = ['elgalu3@gmail.com']
20
+ spec.homepage = 'https://github.com/elgalu/dolarblue'
21
21
 
22
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
23
23
  spec.files = `git ls-files`.split($/)
24
24
  spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
25
25
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
26
 
27
- spec.add_runtime_dependency "twitter_anonymous_client", ">= 1.0.2.0"
28
- spec.add_runtime_dependency "time_ago_in_words", ">= 0.1.0"
27
+ spec.add_runtime_dependency 'configatron', '>= 3.0.0.rc2'
28
+ spec.add_runtime_dependency 'nokogiri', '>= 1.6.1'
29
29
 
30
- spec.add_development_dependency "bundler", ">= 1.3"
31
- spec.add_development_dependency "rake"
32
- spec.add_development_dependency "rspec", "~> 2.13"
33
- spec.add_development_dependency "redcarpet", ">= 2.2.2"
34
- spec.add_development_dependency "yard", ">= 0.8.5.2"
35
- spec.add_development_dependency "simplecov", ">= 0.7.1"
36
- spec.add_development_dependency 'coveralls', '>= 0.6.2'
30
+ if RUBY_ENGINE == 'rbx'
31
+ spec.add_runtime_dependency 'rubysl'
32
+ spec.add_runtime_dependency 'racc' # Solves https://github.com/rubinius/rubinius/issues/2632#issuecomment-26954565
33
+ end
34
+
35
+ spec.add_development_dependency 'bundler', '>= 1.3.5'
36
+ spec.add_development_dependency 'rake'
37
+ spec.add_development_dependency 'rspec', '~> 2.14', '>= 2.14.1'
38
+ spec.add_development_dependency 'vcr', '~> 2.8', '>= 2.8.0'
39
+ spec.add_development_dependency 'webmock', '~> 1.16', '>= 1.16.1'
40
+ spec.add_development_dependency 'rubygems-tasks', '~> 0.2', '>= 0.2.4'
37
41
 
38
42
  end
@@ -1,11 +1,16 @@
1
1
  require 'dolarblue/version'
2
2
  require 'dolarblue/configuration'
3
- require 'dolarblue/class_methods'
4
3
  require 'dolarblue/instance_methods'
5
- require 'dolarblue/exchange'
6
4
 
7
5
  # Main class used as builder and also as Dolarblue namespace
8
6
  class Dolarblue
9
- extend ClassMethods
10
- include InstanceMethods
7
+ class << self
8
+ # Returns all the dollar exchange 'Blue' vs 'Official' values and percentiles
9
+ # suitable for user printing
10
+ #
11
+ # @return [String] with all dollar exchange 'Blue' vs 'Official' values
12
+ def get_output
13
+ new.update!.output
14
+ end
15
+ end
11
16
  end
@@ -0,0 +1,7 @@
1
+ require 'dolarblue/xchange'
2
+
3
+ class Dolarblue
4
+ # Class used to hold sell/buy values functionality for dollar "Blue"
5
+ class Blue < XChange
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ require 'dolarblue/xchange'
2
+
3
+ class Dolarblue
4
+ # Class used to hold sell/buy values functionality for dollar "Official"
5
+ class Card < XChange
6
+ # Override extract_values since dollar "tarjeta" only has a sell value
7
+ #
8
+ # @param doc [Nokogiri::HTML] the html document to extract values from
9
+ def extract_values(doc)
10
+ @sell = extract_val(doc, 'sell')
11
+ end
12
+
13
+ # Override buy_output since dollar "tarjeta" only has a sell value
14
+ #
15
+ # @return [String] formatted output buy exchange value, in this case n/a for not available
16
+ def buy_output
17
+ 'n/a'
18
+ end
19
+ end
20
+ end
@@ -1,4 +1,6 @@
1
- require 'singleton'
1
+ require 'configatron/core' # gem 'configatron'
2
+ require 'singleton' # stdlib
3
+ require 'yaml' # stdlib
2
4
 
3
5
  class Dolarblue
4
6
 
@@ -6,57 +8,24 @@ class Dolarblue
6
8
  class Configuration
7
9
  include Singleton
8
10
 
9
- # Default gap factor between the official sale value vs. the buy value
10
- # Usually 1.5%
11
+ # Give memoized defaults for locked configuration options found in /config/xpaths.yml file
11
12
  #
12
- # @return [Float] the percentile between 0..1
13
- def buy_sell_official_factor
14
- Float(0.985)
15
- end
16
-
17
- # Default gap factor between the blue sale value vs. the buy value
18
- # Usually 4.5%
19
- #
20
- # @return [Float] the percentile between 0..1
21
- def buy_sell_blue_factor
22
- Float(0.965)
23
- end
24
-
25
- # Twitter screen name for the `blue` dollar value
13
+ # @example Usage
14
+ # conf = Configuration.instance.defaults
15
+ # conf.base_url #=> "http://ambito.com/economia/mercados/monedas/dolar/"
16
+ # conf.blue.buy.xpath #=> "//*[@id=\"contenido\"]/div[1]/div[2]/div/div/div[2]/big"
26
17
  #
27
- # @return [String] the twitter screen name for the `blue` dollar value
28
- def blue_screen_name
29
- 'DolarBlue'
30
- end
18
+ # @return [Configatron::Store] the magic configuration instance with hash and dot '.' indifferent access
19
+ def defaults
20
+ return @config if @config
31
21
 
32
- # Regular expression to be used to match the Tweet text for `blue` value
33
- # In order to extract the integer value from $1 and the decimal value from $2
34
- #
35
- # @return [Regexp] the regular expression to be used to match the Tweet text for `blue` value
36
- def blue_regexp
37
- /\$(\d+)[\.,](\d+)/
38
- end
22
+ @config = Configatron::Store.new
23
+ file_path = File.expand_path('../../../config/xpaths.yml', __FILE__)
24
+ hash_config = YAML::load_file(file_path)
39
25
 
40
- # Twitter screen name for the official (legal) dollar value
41
- #
42
- # @return [String] the twitter screen name for the official (legal) dollar value
43
- def official_screen_name
44
- 'cotizacionhoyar'
45
- end
46
-
47
- # Regular expression to be used to match the Tweet text for official value
48
- # In order to extract the integer value from $1 and the decimal value from $2
49
- #
50
- # @return [Regexp] the regular expression to be used to match the Tweet text for official value
51
- def official_regexp
52
- /[Dd]olar: (\d+)[\.,](\d+)/
53
- end
54
-
55
- # Dollar "tarjeta" AR fee on top of official value
56
- #
57
- # @return [Float] the dollar "tarjeta" AR fee to be applied, e.g. 1.2 for an extra 20% charge
58
- def card_fee
59
- 1.2
26
+ @config.configure_from_hash(hash_config)
27
+ @config.lock!
28
+ @config
60
29
  end
61
30
  end
62
31