dolarblue 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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