rupee 0.1.9 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/README.rdoc +3 -3
- data/Rakefile +18 -6
- data/ext/rupee/statistics.c +24 -4
- data/lib/rupee/quote/source.rb +42 -13
- data/lib/rupee/quote.rb +1 -1
- data/lib/rupee/security.rb +9 -2
- data/lib/rupee/version.rb +1 -1
- data/spec/{import → ruby}/quote_spec.rb +24 -0
- metadata +9 -9
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ Homepage:: http://www.brymck.com
|
|
4
4
|
Author:: Bryan McKelvey
|
5
5
|
Copyright:: (c) 2011 Bryan McKelvey
|
6
6
|
License:: MIT
|
7
|
-
Documentation::
|
7
|
+
Documentation:: {brymck.herokuapp.com/rupee/}[http://brymck.herokuapp.com/rupee/]
|
8
8
|
|
9
9
|
/|\
|
10
10
|
/ | \
|
@@ -57,8 +57,8 @@ Fargo using the following (note that you only need to <tt>require</tt> the
|
|
57
57
|
require "rupee/quote"
|
58
58
|
wfc = Rupee::Quote.new("WFC")
|
59
59
|
|
60
|
-
wfc.get :price, :change, :
|
61
|
-
#=> {:price=>24.96, :change=>0.17, :
|
60
|
+
wfc.get :price, :change, :pct_chg
|
61
|
+
#=> {:price=>24.96, :change=>0.17, :pct_chg =>0.686}
|
62
62
|
|
63
63
|
wfc.price
|
64
64
|
#=> 24.96
|
data/Rakefile
CHANGED
@@ -2,18 +2,30 @@ require "bundler/gem_tasks"
|
|
2
2
|
require "rdoc/task"
|
3
3
|
require "sdoc"
|
4
4
|
|
5
|
+
autoload :FileUtils, "fileutils"
|
6
|
+
|
5
7
|
Dir["tasks/**/*.rake"].each do |rake|
|
6
8
|
load File.expand_path(rake)
|
7
9
|
end
|
8
10
|
|
9
11
|
RDoc::Task.new do |rdoc|
|
10
|
-
rdoc.
|
11
|
-
rdoc.
|
12
|
+
rdoc.rdoc_dir = "doc/rdoc"
|
13
|
+
rdoc.title = "Rupee Documentation"
|
14
|
+
|
15
|
+
rdoc.options << "-f" << "sdoc" # format with SDoc
|
16
|
+
rdoc.options << "-T" << "rails" # use the Rails template
|
17
|
+
rdoc.options << "-c" << "utf-8"
|
18
|
+
rdoc.options << "-g" # link to GitHub
|
19
|
+
rdoc.options << "-m" << "README.rdoc" # use README.rdoc as main file
|
20
|
+
rdoc.options << "-v" # verbose output
|
21
|
+
|
12
22
|
rdoc.rdoc_files.include "README.rdoc"
|
13
23
|
rdoc.rdoc_files.include "ext/**/*.{c, h, rb}"
|
14
24
|
rdoc.rdoc_files.include "lib/**/*.rb"
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Copies the documentation files to the path specified in the $RUPEE_DOC environment variable"
|
28
|
+
task :docs do
|
29
|
+
FileUtils.cp_r "doc/rdoc/.", "#{ENV['RUPEE_DOC']}",
|
30
|
+
:remove_destination => true
|
19
31
|
end
|
data/ext/rupee/statistics.c
CHANGED
@@ -125,10 +125,6 @@ std(values, len)
|
|
125
125
|
*
|
126
126
|
* Returns the standard normal cumulative distribution (has a mean of zero and
|
127
127
|
* a standard deviation of one).
|
128
|
-
*
|
129
|
-
* ==== Arguments
|
130
|
-
*
|
131
|
-
* * +z+ - The value for which you want the distribution
|
132
128
|
*/
|
133
129
|
static VALUE
|
134
130
|
rupee_cnd(self, _z)
|
@@ -137,6 +133,10 @@ rupee_cnd(self, _z)
|
|
137
133
|
return rb_float_new(cnd(NUM2DBL(_z)));
|
138
134
|
}
|
139
135
|
|
136
|
+
/* call-seq: correlation(xvalues, yvalues)
|
137
|
+
*
|
138
|
+
* Returns the correlation of the supplied x- and y-values.
|
139
|
+
*/
|
140
140
|
static VALUE
|
141
141
|
rupee_corr(self, _xvals, _yvals)
|
142
142
|
VALUE self, _xvals, _yvals;
|
@@ -150,6 +150,10 @@ rupee_corr(self, _xvals, _yvals)
|
|
150
150
|
return rb_float_new(corr(xvals, yvals, len));
|
151
151
|
}
|
152
152
|
|
153
|
+
/* call-seq: covariance(xvalues, yvalues)
|
154
|
+
*
|
155
|
+
* Returns the covariance of the supplied x- and y-values.
|
156
|
+
*/
|
153
157
|
static VALUE
|
154
158
|
rupee_cov(self, _xvals, _yvals)
|
155
159
|
VALUE self, _xvals, _yvals;
|
@@ -163,6 +167,10 @@ rupee_cov(self, _xvals, _yvals)
|
|
163
167
|
return rb_float_new(cov(xvals, yvals, len));
|
164
168
|
}
|
165
169
|
|
170
|
+
/* call-seq: mean(values)
|
171
|
+
*
|
172
|
+
* Finds the mean of the specified values.
|
173
|
+
*/
|
166
174
|
static VALUE
|
167
175
|
rupee_mean(self, _values)
|
168
176
|
VALUE self, _values;
|
@@ -175,6 +183,10 @@ rupee_mean(self, _values)
|
|
175
183
|
return rb_float_new(mean(values, len));
|
176
184
|
}
|
177
185
|
|
186
|
+
/* call-seq: standard_deviation(values)
|
187
|
+
*
|
188
|
+
* Finds the standard deviation of the specified values.
|
189
|
+
*/
|
178
190
|
static VALUE
|
179
191
|
rupee_std(self, _values)
|
180
192
|
VALUE self, _values;
|
@@ -187,6 +199,10 @@ rupee_std(self, _values)
|
|
187
199
|
return rb_float_new(std(values, len));
|
188
200
|
}
|
189
201
|
|
202
|
+
/* call-seq: sum(values)
|
203
|
+
*
|
204
|
+
* Finds the sum of the specified values.
|
205
|
+
*/
|
190
206
|
static VALUE
|
191
207
|
rupee_sum(self, _values)
|
192
208
|
VALUE self, _values;
|
@@ -199,6 +215,10 @@ rupee_sum(self, _values)
|
|
199
215
|
return rb_float_new(sum(values, len));
|
200
216
|
}
|
201
217
|
|
218
|
+
/* call-seq: variance(values)
|
219
|
+
*
|
220
|
+
* Finds the variance of the specified values.
|
221
|
+
*/
|
202
222
|
static VALUE
|
203
223
|
rupee_var(self, _values)
|
204
224
|
VALUE self, _values;
|
data/lib/rupee/quote/source.rb
CHANGED
@@ -29,21 +29,50 @@ module Rupee
|
|
29
29
|
# Bloomberg
|
30
30
|
@sources[:bloomberg] = Source.new(:bloomberg,
|
31
31
|
"http://www.bloomberg.com/apps/quote?ticker=%s",
|
32
|
-
:price
|
33
|
-
:change
|
34
|
-
:
|
35
|
-
:date
|
36
|
-
:time
|
37
|
-
:bid
|
38
|
-
:ask
|
39
|
-
:open
|
40
|
-
:high
|
41
|
-
:low
|
42
|
-
:volume
|
32
|
+
:price => /(?:PRICE|VALUE): <span class="amount">([0-9.,NA-]{1,})/,
|
33
|
+
:change => /Change<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
34
|
+
:pct_chg => /Change<\/td>\n<td class="value[^>]+>[0-9.,NA-]{1,} \(([0-9NA.,-]{1,})\%/,
|
35
|
+
:date => /"date">(.*?)</,
|
36
|
+
:time => /"time">(.*?)</,
|
37
|
+
:bid => /Bid<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
38
|
+
:ask => /Ask<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
39
|
+
:open => /Open<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
40
|
+
:high => /High<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
41
|
+
:low => /Low<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
42
|
+
:volume => /Volume<\/td>\n<td class="value[^>]+>([0-9.,NA-]{1,})/,
|
43
43
|
:mkt_cap => /Market Cap[^<]+<\/td>\n<td class="value">([0-9.,NA-]{1,})/,
|
44
44
|
:p_e => /Price\/Earnings[^<]+<\/td>\n<td class="value">([0-9.,NA-]{1,})/)
|
45
|
-
|
46
|
-
|
45
|
+
|
46
|
+
# Yahoo! Finance
|
47
|
+
@sources[:yahoo] = Source.new(:yahoo,
|
48
|
+
"http://finance.yahoo.com/q?s=%s",
|
49
|
+
:price => /(?:<\/a> |"yfnc_tabledata1"><big><b>)<span id="yfs_l[19]0_[^>]+>([0-9,.-]{1,})/,
|
50
|
+
:change => /><span id="yfs_c[16]0_.*?(?:\n[\s\w\-]*\n[\s">\(]*?)?([0-9.,-]{1,})/,
|
51
|
+
:pct_chg => /yfs_p[24]0_.*?(?:\n[\s\w\-]*\n[\s">\(]*?)?([0-9.,-]{1,})%\)(?:<\/span>|<\/b><\/span><\/td>)/,
|
52
|
+
:date => /<span id="yfs_market_time">.*?, (.*?20[0-9]{1,2})/,
|
53
|
+
:time => /(?:"time"|"yfnc_tabledata1")><span id="yfs_t[51]0_[^>]+>(.*?)</,
|
54
|
+
:bid => /yfs_b00_[^>]+>([0-9,.-]{1,})/,
|
55
|
+
:ask => /yfs_a00_[^>]+>([0-9,.-]{1,})/,
|
56
|
+
:open => /Open:<\/th><td class="yfnc_tabledata1">([0-9,.-]{1,})/,
|
57
|
+
:high => /yfs_h00_[^>]+>([0-9,.-]{1,})/,
|
58
|
+
:low => /yfs_g00_[^>]+>([0-9,.-]{1,})/,
|
59
|
+
:volume => /yfs_v00_[^>]+>([0-9,.-]{1,})/,
|
60
|
+
:mkt_cap => /yfs_j10_[^>]+>([0-9,.-]{1,}[KMBT]?)/)
|
61
|
+
|
62
|
+
# Google Finance
|
63
|
+
@sources[:google] = Source.new(:google,
|
64
|
+
"http://www.google.com/ig/api?stock=%s",
|
65
|
+
:price => /<last data="([0-9.-]*)"/,
|
66
|
+
:change => /<change data="([0-9.-]*)"/,
|
67
|
+
:pct_chg => /<perc_change data="([0-9.-]*)"/,
|
68
|
+
:date => /<trade_date_utc data="([0-9.-]*)"/,
|
69
|
+
:time => /<trade_date_utc data="([0-9.-]*)"/,
|
70
|
+
:open => /<open data="([0-9.-]*)"/,
|
71
|
+
:high => /<high data="([0-9.-]*)"/,
|
72
|
+
:low => /<low data="([0-9.-]*)"/,
|
73
|
+
:volume => /<volume data="([0-9.-]*)"/,
|
74
|
+
:mkt_cap => /<market_cap data="([0-9.-]*)"/)
|
75
|
+
|
47
76
|
@default_source = :bloomberg
|
48
77
|
end
|
49
78
|
end
|
data/lib/rupee/quote.rb
CHANGED
data/lib/rupee/security.rb
CHANGED
@@ -40,8 +40,15 @@ module Rupee
|
|
40
40
|
# attr_accessor :price
|
41
41
|
# attr_alias :value, :price
|
42
42
|
#
|
43
|
-
# would add both a <tt>value</tt> and a <tt>value=</tt> that are
|
44
|
-
# to their <tt>price</tt> counterparts
|
43
|
+
# would add both a <tt>value</tt> and a <tt>value=</tt> that are
|
44
|
+
# equivalent to their <tt>price</tt> counterparts and would modify the
|
45
|
+
# <tt>@price</tt> instance variable. On the other hand,
|
46
|
+
#
|
47
|
+
# attr :price
|
48
|
+
# attr_alias :value, :price
|
49
|
+
#
|
50
|
+
# would only add <tt>value</tt> method that's equivalent to
|
51
|
+
# <tt>price</tt>.
|
45
52
|
def attr_alias(new_read, old_read)
|
46
53
|
alias_method(new_read, old_read) if method_defined?(old_read)
|
47
54
|
new_write = "#{new_read}="
|
data/lib/rupee/version.rb
CHANGED
@@ -27,5 +27,29 @@ describe Quote do
|
|
27
27
|
@wfc.next_pull.should == orig_pull - freq_change
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
describe "specifying Google Finance as the quote service" do
|
32
|
+
before :each do
|
33
|
+
@goog = Quote.new("GOOG", :source => :google)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have around the same price as Bloomberg" do
|
37
|
+
bb_price = Quote.new("GOOG").price
|
38
|
+
bb_price.should be_a_kind_of Float
|
39
|
+
@goog.price.should be_within(0.05).of bb_price
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "specifying Yahoo! Finance as the quote service" do
|
44
|
+
before :each do
|
45
|
+
@yahoo = Quote.new("YHOO", :source => :yahoo)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should have around the same price as Bloomberg" do
|
49
|
+
bb_price = Quote.new("YHOO").price
|
50
|
+
bb_price.should be_a_kind_of Float
|
51
|
+
@yahoo.price.should be_within(0.05).of bb_price
|
52
|
+
end
|
53
|
+
end
|
30
54
|
end
|
31
55
|
end
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-09-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &70293110 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70293110
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70292860 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70292860
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sdoc
|
38
|
-
requirement: &
|
38
|
+
requirement: &70292600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0.3'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70292600
|
47
47
|
description: ! " rupee aims to provide user-friendly tools for
|
48
48
|
use in\n financial gems and applications.\n"
|
49
49
|
email:
|
@@ -75,11 +75,11 @@ files:
|
|
75
75
|
- lib/rupee/security.rb
|
76
76
|
- lib/rupee/version.rb
|
77
77
|
- rupee.gemspec
|
78
|
-
- spec/import/quote_spec.rb
|
79
78
|
- spec/native/bond_spec.rb
|
80
79
|
- spec/native/future_spec.rb
|
81
80
|
- spec/native/option_spec.rb
|
82
81
|
- spec/native/statistics_spec.rb
|
82
|
+
- spec/ruby/quote_spec.rb
|
83
83
|
- spec/spec_helper.rb
|
84
84
|
- tasks/benchmark.rake
|
85
85
|
- test_rubies
|
@@ -109,8 +109,8 @@ signing_key:
|
|
109
109
|
specification_version: 3
|
110
110
|
summary: Financial tools for Ruby
|
111
111
|
test_files:
|
112
|
-
- spec/import/quote_spec.rb
|
113
112
|
- spec/native/bond_spec.rb
|
114
113
|
- spec/native/future_spec.rb
|
115
114
|
- spec/native/option_spec.rb
|
116
115
|
- spec/native/statistics_spec.rb
|
116
|
+
- spec/ruby/quote_spec.rb
|