gstock 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ doc/*
6
+ log/*
7
+ .yardoc
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format doc
2
+ --colour
3
+ --backtrace
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in gstock.gemspec
4
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Steve Agalloco
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,19 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
8
+
9
+ namespace :doc do
10
+ require 'yard'
11
+ YARD::Rake::YardocTask.new do |task|
12
+ task.files = ['LICENSE.mkd', 'lib/**/*.rb']
13
+ task.options = [
14
+ '--protected',
15
+ '--output-dir', 'doc/yard',
16
+ '--markup', 'markdown'
17
+ ]
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ GStock
2
+ ======
3
+
4
+ GStock is a really simple ruby library for retrieving stock quotes from Google's unofficial quote API.
5
+
6
+ Installation
7
+ ------------
8
+ $ (sudo) gem install gstock
9
+
10
+ Usage
11
+ -----
12
+
13
+ require "rubygems"
14
+ require "gstock"
15
+
16
+ # Get a quote
17
+ puts GStock.quote("AAPL").last
18
+
19
+ If an invalid quote is passed in, GStock will respond by raising a GStock::NotFound exception.
20
+
@@ -0,0 +1,37 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "gstock/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "gstock"
7
+ s.version = GStock::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Steve Agalloco"]
10
+ s.email = ["steve.agalloco@gmail.com"]
11
+ s.homepage = "http://rubygems.org/gems/gstock"
12
+ s.description = %q{A simple API wrapper for google finance stock quotes.}
13
+ s.summary = %q{A simple API wrapper for google finance stock quotes.}
14
+
15
+ s.rubyforge_project = "gstock"
16
+
17
+ s.add_development_dependency('bundler', '~> 1.0')
18
+ s.add_development_dependency("maruku", "~> 0.6")
19
+ s.add_development_dependency('rake', '~> 0.8')
20
+ s.add_development_dependency('rspec', '~> 2.4.0')
21
+ s.add_development_dependency('simplecov', '~> 0.3')
22
+ s.add_development_dependency('webmock', '~> 1.6')
23
+ s.add_development_dependency('yard', '~> 0.6')
24
+ s.add_development_dependency('ZenTest', '~> 4.4')
25
+
26
+ s.add_runtime_dependency('typhoeus', '~> 0.2')
27
+ s.add_runtime_dependency('nokogiri', '~> 1.4.4')
28
+ s.add_runtime_dependency('hashie', '~> 0.4.0')
29
+ s.add_runtime_dependency('faraday', '~> 0.5.3')
30
+ s.add_runtime_dependency('faraday_middleware', '~> 0.3.1')
31
+ s.add_runtime_dependency('multi_xml', '~> 0.2.0')
32
+
33
+ s.files = `git ls-files`.split("\n")
34
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
35
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
36
+ s.require_paths = ["lib"]
37
+ end
@@ -0,0 +1,35 @@
1
+ require 'faraday_middleware'
2
+
3
+ module GStock
4
+
5
+ class NotFound < StandardError; end
6
+
7
+ class << self
8
+
9
+ def quote(symbol)
10
+ resp = get('/ig/api', :stock => symbol).xml_api_reply.finance
11
+ resp.each do |key, value|
12
+ resp[key] = value.kind_of?(Hashie::Mash) ? value.data : value
13
+ end
14
+ resp.reject! { |key, value | value.blank? }
15
+ raise NotFound.new if resp.has_value?('UNKNOWN EXCHANGE')
16
+ resp
17
+ end
18
+
19
+ def get(url, params={})
20
+ response = connection.get do |req|
21
+ req.url url, params
22
+ end
23
+ response.body
24
+ end
25
+
26
+ def connection
27
+ @conn ||= Faraday::Connection.new(:url => 'http://www.google.com') do |builder|
28
+ builder.adapter :typhoeus
29
+ builder.use Faraday::Response::ParseXml
30
+ builder.use Faraday::Response::Mashify
31
+ end
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ module GStock
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe GStock do
4
+
5
+ it 'should return data for valid symbols' do
6
+ quote = GStock.quote('YHOO')
7
+ quote.should be_kind_of(Hashie::Mash)
8
+ quote.company.should == 'Yahoo! Inc.'
9
+ quote.currency.should == 'USD'
10
+ quote.exchange.should == 'Nasdaq'
11
+ end
12
+
13
+ it 'should not return empty data values' do
14
+ quote = GStock.quote('YHOO')
15
+ quote.values.each do |value|
16
+ value.should_not be_nil
17
+ end
18
+ end
19
+
20
+ it 'should raise an error when a symbol isn\'t found' do
21
+ lambda do
22
+ GStock.quote('123ABC')
23
+ end.should raise_error GStock::NotFound
24
+ end
25
+
26
+ end
@@ -0,0 +1,13 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_group 'GStock', 'lib/gstock'
4
+ add_group 'Specs', 'spec'
5
+ end
6
+
7
+ require File.expand_path('../../lib/gstock', __FILE__)
8
+
9
+ require 'rspec'
10
+ require 'webmock/rspec'
11
+ RSpec.configure do |config|
12
+ config.include WebMock::API
13
+ end
metadata ADDED
@@ -0,0 +1,294 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gstock
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Steve Agalloco
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-20 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: bundler
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 15
30
+ segments:
31
+ - 1
32
+ - 0
33
+ version: "1.0"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: maruku
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 7
45
+ segments:
46
+ - 0
47
+ - 6
48
+ version: "0.6"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rake
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 27
60
+ segments:
61
+ - 0
62
+ - 8
63
+ version: "0.8"
64
+ type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: rspec
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 31
75
+ segments:
76
+ - 2
77
+ - 4
78
+ - 0
79
+ version: 2.4.0
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: simplecov
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ hash: 13
91
+ segments:
92
+ - 0
93
+ - 3
94
+ version: "0.3"
95
+ type: :development
96
+ version_requirements: *id005
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ prerelease: false
100
+ requirement: &id006 !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ~>
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 1
108
+ - 6
109
+ version: "1.6"
110
+ type: :development
111
+ version_requirements: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ name: yard
114
+ prerelease: false
115
+ requirement: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ hash: 7
121
+ segments:
122
+ - 0
123
+ - 6
124
+ version: "0.6"
125
+ type: :development
126
+ version_requirements: *id007
127
+ - !ruby/object:Gem::Dependency
128
+ name: ZenTest
129
+ prerelease: false
130
+ requirement: &id008 !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ~>
134
+ - !ruby/object:Gem::Version
135
+ hash: 19
136
+ segments:
137
+ - 4
138
+ - 4
139
+ version: "4.4"
140
+ type: :development
141
+ version_requirements: *id008
142
+ - !ruby/object:Gem::Dependency
143
+ name: typhoeus
144
+ prerelease: false
145
+ requirement: &id009 !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ~>
149
+ - !ruby/object:Gem::Version
150
+ hash: 15
151
+ segments:
152
+ - 0
153
+ - 2
154
+ version: "0.2"
155
+ type: :runtime
156
+ version_requirements: *id009
157
+ - !ruby/object:Gem::Dependency
158
+ name: nokogiri
159
+ prerelease: false
160
+ requirement: &id010 !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ hash: 15
166
+ segments:
167
+ - 1
168
+ - 4
169
+ - 4
170
+ version: 1.4.4
171
+ type: :runtime
172
+ version_requirements: *id010
173
+ - !ruby/object:Gem::Dependency
174
+ name: hashie
175
+ prerelease: false
176
+ requirement: &id011 !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ hash: 15
182
+ segments:
183
+ - 0
184
+ - 4
185
+ - 0
186
+ version: 0.4.0
187
+ type: :runtime
188
+ version_requirements: *id011
189
+ - !ruby/object:Gem::Dependency
190
+ name: faraday
191
+ prerelease: false
192
+ requirement: &id012 !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ hash: 13
198
+ segments:
199
+ - 0
200
+ - 5
201
+ - 3
202
+ version: 0.5.3
203
+ type: :runtime
204
+ version_requirements: *id012
205
+ - !ruby/object:Gem::Dependency
206
+ name: faraday_middleware
207
+ prerelease: false
208
+ requirement: &id013 !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ hash: 17
214
+ segments:
215
+ - 0
216
+ - 3
217
+ - 1
218
+ version: 0.3.1
219
+ type: :runtime
220
+ version_requirements: *id013
221
+ - !ruby/object:Gem::Dependency
222
+ name: multi_xml
223
+ prerelease: false
224
+ requirement: &id014 !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ~>
228
+ - !ruby/object:Gem::Version
229
+ hash: 23
230
+ segments:
231
+ - 0
232
+ - 2
233
+ - 0
234
+ version: 0.2.0
235
+ type: :runtime
236
+ version_requirements: *id014
237
+ description: A simple API wrapper for google finance stock quotes.
238
+ email:
239
+ - steve.agalloco@gmail.com
240
+ executables: []
241
+
242
+ extensions: []
243
+
244
+ extra_rdoc_files: []
245
+
246
+ files:
247
+ - .gitignore
248
+ - .rspec
249
+ - Gemfile
250
+ - LICENSE.mkd
251
+ - Rakefile
252
+ - Readme.mkd
253
+ - gstock.gemspec
254
+ - lib/gstock.rb
255
+ - lib/gstock/version.rb
256
+ - spec/gstock_spec.rb
257
+ - spec/spec_helper.rb
258
+ has_rdoc: true
259
+ homepage: http://rubygems.org/gems/gstock
260
+ licenses: []
261
+
262
+ post_install_message:
263
+ rdoc_options: []
264
+
265
+ require_paths:
266
+ - lib
267
+ required_ruby_version: !ruby/object:Gem::Requirement
268
+ none: false
269
+ requirements:
270
+ - - ">="
271
+ - !ruby/object:Gem::Version
272
+ hash: 3
273
+ segments:
274
+ - 0
275
+ version: "0"
276
+ required_rubygems_version: !ruby/object:Gem::Requirement
277
+ none: false
278
+ requirements:
279
+ - - ">="
280
+ - !ruby/object:Gem::Version
281
+ hash: 3
282
+ segments:
283
+ - 0
284
+ version: "0"
285
+ requirements: []
286
+
287
+ rubyforge_project: gstock
288
+ rubygems_version: 1.3.7
289
+ signing_key:
290
+ specification_version: 3
291
+ summary: A simple API wrapper for google finance stock quotes.
292
+ test_files:
293
+ - spec/gstock_spec.rb
294
+ - spec/spec_helper.rb