rupee 0.2.9.2 → 0.2.9.3
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.
- data/.rspec +1 -0
- data/Rakefile +3 -0
- data/lib/rupee/quote.rb +10 -1
- data/lib/rupee/source/bloomberg.rb +2 -2
- data/lib/rupee/source/yahoo.rb +3 -3
- data/lib/rupee/version.rb +1 -1
- data/rupee.gemspec +7 -8
- data/spec/native/bond_spec.rb +4 -6
- data/spec/native/future_spec.rb +0 -2
- data/spec/native/option_spec.rb +0 -2
- data/spec/native/statistics_spec.rb +0 -2
- data/spec/ruby/business_day_spec.rb +0 -2
- data/spec/ruby/calendar_spec.rb +0 -2
- data/spec/ruby/currency_spec.rb +0 -2
- data/spec/ruby/day_count_spec.rb +0 -2
- data/spec/ruby/fixed_income_spec.rb +0 -2
- data/spec/ruby/generic_spec.rb +0 -2
- data/spec/ruby/quote_spec.rb +30 -3
- data/spec/ruby/source_spec.rb +0 -2
- data/spec/spec_helper.rb +1 -1
- metadata +46 -16
data/.rspec
CHANGED
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
2
3
|
require "rdoc/task"
|
3
4
|
require "sdoc"
|
4
5
|
|
@@ -8,6 +9,8 @@ Dir["tasks/**/*.rake"].each do |rake|
|
|
8
9
|
load File.expand_path(rake)
|
9
10
|
end
|
10
11
|
|
12
|
+
RSpec::Core::RakeTask.new
|
13
|
+
|
11
14
|
RDoc::Task.new do |rdoc|
|
12
15
|
rdoc.rdoc_dir = "doc/rdoc"
|
13
16
|
rdoc.title = "Rupee Documentation"
|
data/lib/rupee/quote.rb
CHANGED
@@ -74,7 +74,16 @@ module Rupee
|
|
74
74
|
when Net::HTTPSuccess
|
75
75
|
@source.params.each do |param, regex|
|
76
76
|
if res.body =~ regex
|
77
|
-
|
77
|
+
full_text, match = $&, $1
|
78
|
+
|
79
|
+
# Special handling for <tt>:change</tt> because quote services
|
80
|
+
# insist on using pretty pictures instead of minus signs
|
81
|
+
if param == :change
|
82
|
+
if (Source::BLOOMBERG || Source::YAHOO) && full_text =~ /down/
|
83
|
+
match = "-#{match}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
@results[param] = parse(match)
|
78
87
|
else
|
79
88
|
@results[param] = nil
|
80
89
|
end
|
@@ -11,8 +11,8 @@ module Rupee
|
|
11
11
|
:bid => /Bid:<\/th>\n\s*<td[^>]*>([0-9.,NA-]{1,})/,
|
12
12
|
:ask => /Ask:<\/th>\n\s*<td[^>]*>([0-9.,NA-]{1,})/,
|
13
13
|
:open => /Open:<\/th>\n\s*<td[^>]*>([0-9.,NA-]{1,})/,
|
14
|
-
:high => /Day's Range:<\/th>\n\s*<td
|
15
|
-
:low => /Day's Range:<\/th>\n\s*<td
|
14
|
+
:high => /(?:Day(?:'s)? Range:<\/th>\n\s*<td[^>]*>[0-9.,NA-]+ - |High - Low:<\/th>\n\s*<td[^>]*>)([0-9.,NA-]+)/,
|
15
|
+
:low => /(?:Day(?:'s)? Range:<\/th>\n\s*<td[^>]*>|High - Low:<\/th>\n\s*<td[^>]*>[0-9.,NA-]+ - )([0-9.,NA-]+)/,
|
16
16
|
:volume => /Volume:<\/th>\n\s*<td class[^>]+>([0-9.,NA-]{1,})/,
|
17
17
|
:mkt_cap => /Market Cap[^<]+<\/th>\n\s*<td[^>]*">([0-9.,NA-]{1,})/,
|
18
18
|
:p_e => /Current P\/E[^<]+<\/th>\n\s*<td[^>]*>([0-9.,NA-]{1,})/)
|
data/lib/rupee/source/yahoo.rb
CHANGED
@@ -2,9 +2,9 @@ module Rupee
|
|
2
2
|
class Source
|
3
3
|
YAHOO = Source.new(:yahoo,
|
4
4
|
"http://finance.yahoo.com/q?s=%s",
|
5
|
-
:price => /
|
6
|
-
:change => /yfs_c(?:6[
|
7
|
-
:pct_chg => /yfs_p(?:4[
|
5
|
+
:price => /yfs_l(?:10|84)_[^>]+>([0-9,.-]+)/,
|
6
|
+
:change => /yfs_c(?:6[034]|10)_[^>]+>(?:<img[^>]+>)\s*([0-9,.-]+)/,
|
7
|
+
:pct_chg => /yfs_p(?:4[034]|20)_[^>]+>\(([0-9,.-]+)%\)/,
|
8
8
|
:date => /<span id="yfs_market_time">.*?, (.*?20[0-9]{1,2})/,
|
9
9
|
:time => /(?:"time"|"yfnc_tabledata1")><span id="yfs_t[51]0_[^>]+>(.*?)</,
|
10
10
|
:bid => /yfs_b00_[^>]+>([0-9,.-]{1,})/,
|
data/lib/rupee/version.rb
CHANGED
data/rupee.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
3
3
|
require "rupee/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
@@ -14,13 +14,9 @@ Gem::Specification.new do |s|
|
|
14
14
|
financial gems and applications.
|
15
15
|
eos
|
16
16
|
|
17
|
-
s.rubyforge_project = "rupee"
|
18
|
-
|
19
17
|
s.files = `git ls-files`.split("\n")
|
20
18
|
s.test_files = `git ls-files -- spec/**/*_spec.rb`.split("\n")
|
21
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map
|
22
|
-
File.basename(f)
|
23
|
-
end
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
24
20
|
s.extensions = "ext/rupee/extconf.rb"
|
25
21
|
s.require_paths = ["lib", "ext"]
|
26
22
|
|
@@ -28,6 +24,9 @@ Gem::Specification.new do |s|
|
|
28
24
|
s.add_development_dependency "rspec", "~> 2.0"
|
29
25
|
s.add_development_dependency "sdoc", "~> 0.3"
|
30
26
|
s.add_development_dependency "autotest"
|
31
|
-
|
32
|
-
|
27
|
+
|
28
|
+
if RUBY_PLATFORM =~ /darwin/
|
29
|
+
s.add_development_dependency "autotest-fsevent"
|
30
|
+
s.add_development_dependency "autotest-growl"
|
31
|
+
end
|
33
32
|
end
|
data/spec/native/bond_spec.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
-
|
3
1
|
# Discrete discounting
|
4
|
-
#
|
5
|
-
#Continous discounting
|
6
|
-
#
|
7
|
-
#
|
2
|
+
# new bond price = 100
|
3
|
+
# Continous discounting
|
4
|
+
# bond yield to maturity = 0.09
|
5
|
+
# new bond price = 104.282
|
8
6
|
|
9
7
|
describe Bond do
|
10
8
|
before :each do
|
data/spec/native/future_spec.rb
CHANGED
data/spec/native/option_spec.rb
CHANGED
data/spec/ruby/calendar_spec.rb
CHANGED
data/spec/ruby/currency_spec.rb
CHANGED
data/spec/ruby/day_count_spec.rb
CHANGED
data/spec/ruby/generic_spec.rb
CHANGED
data/spec/ruby/quote_spec.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
-
|
3
1
|
describe Quote do
|
4
2
|
# Attempts to run the block and submits a pending message if a socket error
|
5
3
|
# occurs, the most common cause of which is that the user isn't connected to
|
@@ -44,6 +42,28 @@ describe Quote do
|
|
44
42
|
@wfc.frequency -= freq_change
|
45
43
|
@wfc.next_pull.should == orig_pull - freq_change
|
46
44
|
end
|
45
|
+
|
46
|
+
it "should be able to detect negative and positive changes" do
|
47
|
+
run_if_connected do
|
48
|
+
eurusd = Quote.new("EURUSD:IND").change
|
49
|
+
usdeur = Quote.new("USDEUR:IND").change
|
50
|
+
eurusd.should be_within(0.01).of -usdeur
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "requesting security types with special treatment in Bloomberg" do
|
56
|
+
it "should grab a change for indices" do
|
57
|
+
run_if_connected do
|
58
|
+
Quote.new("SPX:IND").change.should_not be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should grab a change for ETFs" do
|
63
|
+
run_if_connected do
|
64
|
+
Quote.new("DBA").change.should_not be_nil
|
65
|
+
end
|
66
|
+
end
|
47
67
|
end
|
48
68
|
|
49
69
|
describe "specifying Google Finance as the quote service" do
|
@@ -68,7 +88,6 @@ describe Quote do
|
|
68
88
|
end
|
69
89
|
end
|
70
90
|
end
|
71
|
-
|
72
91
|
end
|
73
92
|
|
74
93
|
describe "specifying Yahoo! Finance as the quote service" do
|
@@ -93,5 +112,13 @@ describe Quote do
|
|
93
112
|
end
|
94
113
|
end
|
95
114
|
end
|
115
|
+
|
116
|
+
it "should be able to detect negative and positive changes" do
|
117
|
+
run_if_connected do
|
118
|
+
eurusd = Quote.new("EURUSD=X", :source => :yahoo).change
|
119
|
+
usdeur = Quote.new("USDEUR=X", :source => :yahoo).change
|
120
|
+
eurusd.should be_within(0.01).of -usdeur
|
121
|
+
end
|
122
|
+
end
|
96
123
|
end
|
97
124
|
end
|
data/spec/ruby/source_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rupee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.9.
|
4
|
+
version: 0.2.9.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '1.0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '2.0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: sdoc
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0.3'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: autotest
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: autotest-fsevent
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: autotest-growl
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,7 +101,12 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
description: ! " rupee aims to provide user-friendly tools for
|
81
111
|
use in\n financial gems and applications.\n"
|
82
112
|
email:
|
@@ -174,8 +204,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
204
|
- !ruby/object:Gem::Version
|
175
205
|
version: '0'
|
176
206
|
requirements: []
|
177
|
-
rubyforge_project:
|
178
|
-
rubygems_version: 1.8.
|
207
|
+
rubyforge_project:
|
208
|
+
rubygems_version: 1.8.21
|
179
209
|
signing_key:
|
180
210
|
specification_version: 3
|
181
211
|
summary: Financial tools for Ruby
|