tradier 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: 30124d867ad0669164caf1168411031587a96c7c
4
- data.tar.gz: 024088bd9a7dd623407140d98c419769c5cd4a57
3
+ metadata.gz: 449b7877390ee6691113e738fc3ebf638eecc09f
4
+ data.tar.gz: ec4c89c64ee72eb5665e92b7f4144a0353076075
5
5
  SHA512:
6
- metadata.gz: 8d798c61ab95763abd04eb597b134353984a8728c12537bc6266deb651c20e8c943cc23236576567e07bad9ed4af6361ea7a6ecd43ad83a99251c30b9e5d6bd5
7
- data.tar.gz: d515ae754f0f045109be9a6715c710b3f3b6fe2324bcde5e9f83ecb44fd589e11f92d86d4d6184000900af1f068c84ed674cd5813f83a47314300c61a1ae116d
6
+ metadata.gz: c7c24a2ca8b67075d6b5b2bea0aef327c0b044bee2bae19a61bbc5057821abcd390a79799630d2af8535cade2db7b82b2fada66244660bff99b11121aec2f612
7
+ data.tar.gz: 9610f12009bb0a19f1f01c78c0718d3e95278a1b131f29c9a0403e4081a7bd172798ca85099eaa26139acb778c3975997fb4fbfdcc632ab781fba09c206e02c1
@@ -108,6 +108,9 @@ module Tradier
108
108
  # Request a specific account's events.
109
109
  # @param [String] account_number An account number (optional).
110
110
  # @return [Array<Tradier::Event>] An array of [Tradier::Event] objects for a given account.
111
+ # @overload events(account_number, options)
112
+ # @option options [Integer] :limit Indicate the number of events to return for pagination.
113
+ # @option options [Integer] ;offset Indicate the offset of results to return for pagination.
111
114
  # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
112
115
  def events(account_number=nil, options={})
113
116
  if account_number
@@ -116,6 +119,7 @@ module Tradier
116
119
  object_from_response(Tradier::API::Utils::Account, :get, '/user/history', options).body
117
120
  end
118
121
  end
122
+ alias :history :events
119
123
 
120
124
  end
121
125
  end
@@ -112,6 +112,34 @@ module Tradier
112
112
  object_from_response(Tradier::EventSession, :post, '/markets/events/session', options)
113
113
  end
114
114
 
115
+ # @see https://developer.tradier.com/documentation/markets/get-search
116
+ # @rate_limited Yes
117
+ # @authentication Requires user context
118
+ # Search for a stock symbol using a keyword lookup.
119
+ # @param [String] q The company/index name to search for.
120
+ # @overload search(q, options)
121
+ # @option options [Boolean] :indexes Indicate whether or not to include indexes in results.
122
+ # @return [Array<Tradier::Security>] An array of search results.
123
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
124
+ def search(q, options={})
125
+ options.merge!('q' => q)
126
+ object_from_response(Tradier::API::Utils::Search, :get, '/markets/search', options).body
127
+ end
128
+
129
+ # @see https://developer.tradier.com/documentation/markets/get-lookup
130
+ # @rate_limited Yes
131
+ # @authentication Requires user context
132
+ # Lookup a symbol.
133
+ # @param [String] q The company/index name to search for.
134
+ # @overload lookup(q, options)
135
+ # @option options [Boolean] :indexes Indicate whether or not to include indexes in results.
136
+ # @return [Array<Tradier::Security>] An array of lookup results.
137
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
138
+ def lookup(q, options={})
139
+ options.merge!('q' => q)
140
+ object_from_response(Tradier::API::Utils::Search, :get, '/markets/lookup', options).body
141
+ end
142
+
115
143
  private
116
144
 
117
145
  def normalized_symbols(symbols)
@@ -9,6 +9,7 @@ require 'tradier/order'
9
9
  require 'tradier/position'
10
10
  require 'tradier/profile'
11
11
  require 'tradier/quote'
12
+ require 'tradier/security'
12
13
  require 'tradier/timesales'
13
14
  require 'tradier/watchlist'
14
15
  require 'tradier/event'
@@ -23,6 +24,7 @@ require 'tradier/api/utils/option_quote'
23
24
  require 'tradier/api/utils/order'
24
25
  require 'tradier/api/utils/position'
25
26
  require 'tradier/api/utils/quote'
27
+ require 'tradier/api/utils/search'
26
28
  require 'tradier/api/utils/strike'
27
29
  require 'tradier/api/utils/timesales'
28
30
  require 'tradier/api/utils/watchlist'
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Search < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Security, [:securities, :security])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ require 'tradier/base'
2
+
3
+ module Tradier
4
+ class Security < Tradier::Base
5
+ attr_reader :symbol, :exchange, :description, :type
6
+
7
+ def ==(quote)
8
+ self.symbol == quote.symbol
9
+ end
10
+
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Tradier
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,114 @@
1
+ {
2
+ "securities": {
3
+ "security": [
4
+ {
5
+ "symbol": "AAPL",
6
+ "exchange": "XNAS",
7
+ "type": "stock",
8
+ "description": "Apple Inc"
9
+ },
10
+ {
11
+ "symbol": "AA",
12
+ "exchange": "XNYS",
13
+ "type": "stock",
14
+ "description": "Alcoa Inc"
15
+ },
16
+ {
17
+ "symbol": "AAL",
18
+ "exchange": "XNAS",
19
+ "type": "stock",
20
+ "description": "American Airlines Group Inc"
21
+ },
22
+ {
23
+ "symbol": "AAN",
24
+ "exchange": "XNYS",
25
+ "type": "stock",
26
+ "description": "Aaron's Inc"
27
+ },
28
+ {
29
+ "symbol": "AAP",
30
+ "exchange": "XNYS",
31
+ "type": "stock",
32
+ "description": "Advance Auto Parts Inc"
33
+ },
34
+ {
35
+ "symbol": "AAXJ",
36
+ "exchange": "XNAS",
37
+ "type": "etf",
38
+ "description": "iShares MSCI All Country Asia ex Japan Index Fund"
39
+ },
40
+ {
41
+ "symbol": "AAVL",
42
+ "exchange": "XNAS",
43
+ "type": "stock",
44
+ "description": "Avalanche Biotechnologies Inc"
45
+ },
46
+ {
47
+ "symbol": "AAOI",
48
+ "exchange": "XNAS",
49
+ "type": "stock",
50
+ "description": "Applied Optoelectronics Inc"
51
+ },
52
+ {
53
+ "symbol": "AAWW",
54
+ "exchange": "XNAS",
55
+ "type": "stock",
56
+ "description": "Atlas Air Worldwide Holdings Inc"
57
+ },
58
+ {
59
+ "symbol": "AAON",
60
+ "exchange": "XNAS",
61
+ "type": "stock",
62
+ "description": "AAON Inc"
63
+ },
64
+ {
65
+ "symbol": "AAT",
66
+ "exchange": "XNYS",
67
+ "type": "stock",
68
+ "description": "American Assets Trust Inc"
69
+ },
70
+ {
71
+ "symbol": "AAME",
72
+ "exchange": "XNAS",
73
+ "type": "stock",
74
+ "description": "Atlantic American Corp"
75
+ },
76
+ {
77
+ "symbol": "AADR",
78
+ "exchange": "ARCX",
79
+ "type": "etf",
80
+ "description": "WCM BNY Mellon Focused Growth ADR ETF"
81
+ },
82
+ {
83
+ "symbol": "AAIT",
84
+ "exchange": "XNAS",
85
+ "type": "etf",
86
+ "description": "iShares MSCI All Country Asia Information Technology Index Fund"
87
+ },
88
+ {
89
+ "symbol": "AAMC",
90
+ "exchange": "XASE",
91
+ "type": "stock",
92
+ "description": "Altisource Asset Management Corp Com"
93
+ },
94
+ {
95
+ "symbol": "AAp",
96
+ "exchange": "XASE",
97
+ "type": "stock",
98
+ "description": "Alcoa Inc. $3.75 Preferred Stock"
99
+ },
100
+ {
101
+ "symbol": "AAU",
102
+ "exchange": "XASE",
103
+ "type": "stock",
104
+ "description": "Almaden Minerals, Ltd. Ordinary Shares (Canada)"
105
+ },
106
+ {
107
+ "symbol": "AAV",
108
+ "exchange": "XNYS",
109
+ "type": "stock",
110
+ "description": "Advantage Oil & Gas Ltd Ordinary Shares"
111
+ }
112
+ ]
113
+ }
114
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "securities": {
3
+ "security": [
4
+ {
5
+ "symbol": "AAPL",
6
+ "exchange": "XNAS",
7
+ "type": "stock",
8
+ "description": "Apple Inc"
9
+ },
10
+ {
11
+ "symbol": "AMAT",
12
+ "exchange": "XNAS",
13
+ "type": "stock",
14
+ "description": "Applied Materials Inc"
15
+ },
16
+ {
17
+ "symbol": "AMCC",
18
+ "exchange": "XNAS",
19
+ "type": "stock",
20
+ "description": "Applied Micro Circuits Corp"
21
+ },
22
+ {
23
+ "symbol": "AREX",
24
+ "exchange": "XNAS",
25
+ "type": "stock",
26
+ "description": "Approach Resources Inc"
27
+ },
28
+ {
29
+ "symbol": "AAOI",
30
+ "exchange": "XNAS",
31
+ "type": "stock",
32
+ "description": "Applied Optoelectronics Inc"
33
+ },
34
+ {
35
+ "symbol": "AIT",
36
+ "exchange": "XNYS",
37
+ "type": "stock",
38
+ "description": "Applied Industrial Technologies Inc"
39
+ },
40
+ {
41
+ "symbol": "AGTC",
42
+ "exchange": "XNAS",
43
+ "type": "stock",
44
+ "description": "Applied Genetic Technologies Corp"
45
+ },
46
+ {
47
+ "symbol": "ARCI",
48
+ "exchange": "XNAS",
49
+ "type": "stock",
50
+ "description": "Appliance Recycling Centers Of America Inc"
51
+ }
52
+ ]
53
+ }
54
+ }
@@ -190,6 +190,16 @@ describe Tradier::API::Accounts do
190
190
  expect(events.first).to be_a Tradier::Account
191
191
  end
192
192
  end
193
+ context 'with pagination' do
194
+ before do
195
+ stub_get("/v1/accounts/123456789/history?limit=12&offset=2").
196
+ to_return(:body => fixture("account_history.json"), :headers => {:content_type => "application/json; charset=utf-8"})
197
+ end
198
+ it "requests the correct resource" do
199
+ @client.events("123456789", :limit => 12, :offset => 2)
200
+ expect(a_get("/v1/accounts/123456789/history?limit=12&offset=2")).to have_been_made
201
+ end
202
+ end
193
203
  end
194
204
 
195
205
  end
@@ -255,4 +255,42 @@ describe Tradier::API::Markets do
255
255
  expect(session).to be_a Tradier::EventSession
256
256
  end
257
257
  end
258
+
259
+ describe '#search' do
260
+ before do
261
+ stub_get("/v1/markets/search").
262
+ with(:query => { :q => 'App'}).
263
+ to_return(:body => fixture("search.json"), :headers => {:content_type => "application/json; charset=utf-8"})
264
+ end
265
+
266
+ it "requests the correct resource" do
267
+ @client.search('App')
268
+ expect(a_get("/v1/markets/search?q=App")).to have_been_made
269
+ end
270
+
271
+ it "returns an array of Tradier::Security objects" do
272
+ results = @client.search('App')
273
+ expect(results).to be_an Array
274
+ expect(results.first).to be_a Tradier::Security
275
+ end
276
+ end
277
+
278
+ describe '#lookup' do
279
+ before do
280
+ stub_get("/v1/markets/lookup").
281
+ with(:query => { :q => 'AA'}).
282
+ to_return(:body => fixture("lookup.json"), :headers => {:content_type => "application/json; charset=utf-8"})
283
+ end
284
+
285
+ it "requests the correct resource" do
286
+ @client.lookup('AA')
287
+ expect(a_get("/v1/markets/lookup?q=AA")).to have_been_made
288
+ end
289
+
290
+ it "returns an array of Tradier::Security objects" do
291
+ results = @client.lookup('AA')
292
+ expect(results).to be_an Array
293
+ expect(results.first).to be_a Tradier::Security
294
+ end
295
+ end
258
296
  end
@@ -116,8 +116,8 @@ describe Tradier::Client do
116
116
  subject.stub(:connection).and_raise(Faraday::Error::ClientError.new("Oops"))
117
117
  expect{subject.send(:request, :get, "/path")}.to raise_error Tradier::Error::ClientError
118
118
  end
119
- it "catches MultiJson::DecodeError errors" do
120
- subject.stub(:connection).and_raise(MultiJson::DecodeError.new("unexpected token", [], "<!DOCTYPE html>"))
119
+ it "catches MultiJson::ParseError errors" do
120
+ subject.stub(:connection).and_raise(MultiJson::ParseError.build(ArgumentError.new, "<!DOCTYPE html>"))
121
121
  expect{subject.send(:request, :get, "/path")}.to raise_error Tradier::Error::DecodeError
122
122
  end
123
123
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tradier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Agalloco
@@ -9,62 +9,62 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-03 00:00:00.000000000 Z
12
+ date: 2014-09-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0.8'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0.8'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: faraday_middleware
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: celluloid
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: bundler
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ~>
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '1'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ~>
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '1'
70
70
  description: Rubygem for interacting with the Tradier API.
@@ -75,7 +75,7 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - .yardopts
78
+ - ".yardopts"
79
79
  - LICENSE.md
80
80
  - README.md
81
81
  - Rakefile
@@ -97,6 +97,7 @@ files:
97
97
  - lib/tradier/api/utils/order.rb
98
98
  - lib/tradier/api/utils/position.rb
99
99
  - lib/tradier/api/utils/quote.rb
100
+ - lib/tradier/api/utils/search.rb
100
101
  - lib/tradier/api/utils/strike.rb
101
102
  - lib/tradier/api/utils/timesales.rb
102
103
  - lib/tradier/api/utils/watchlist.rb
@@ -137,6 +138,7 @@ files:
137
138
  - lib/tradier/quote.rb
138
139
  - lib/tradier/response/parse_json.rb
139
140
  - lib/tradier/response/raise_error.rb
141
+ - lib/tradier/security.rb
140
142
  - lib/tradier/symbol.rb
141
143
  - lib/tradier/timesales.rb
142
144
  - lib/tradier/version.rb
@@ -153,6 +155,7 @@ files:
153
155
  - spec/fixtures/expirations.json
154
156
  - spec/fixtures/expirations_with_strikes.json
155
157
  - spec/fixtures/history.json
158
+ - spec/fixtures/lookup.json
156
159
  - spec/fixtures/option_quote.json
157
160
  - spec/fixtures/option_quotes.json
158
161
  - spec/fixtures/order.json
@@ -160,6 +163,7 @@ files:
160
163
  - spec/fixtures/placed_order.json
161
164
  - spec/fixtures/quote.json
162
165
  - spec/fixtures/quotes.json
166
+ - spec/fixtures/search.json
163
167
  - spec/fixtures/session.json
164
168
  - spec/fixtures/strikes.json
165
169
  - spec/fixtures/timesales.json
@@ -208,12 +212,12 @@ require_paths:
208
212
  - lib
209
213
  required_ruby_version: !ruby/object:Gem::Requirement
210
214
  requirements:
211
- - - '>='
215
+ - - ">="
212
216
  - !ruby/object:Gem::Version
213
217
  version: '0'
214
218
  required_rubygems_version: !ruby/object:Gem::Requirement
215
219
  requirements:
216
- - - '>='
220
+ - - ">="
217
221
  - !ruby/object:Gem::Version
218
222
  version: '0'
219
223
  requirements: []
@@ -234,6 +238,7 @@ test_files:
234
238
  - spec/fixtures/expirations.json
235
239
  - spec/fixtures/expirations_with_strikes.json
236
240
  - spec/fixtures/history.json
241
+ - spec/fixtures/lookup.json
237
242
  - spec/fixtures/option_quote.json
238
243
  - spec/fixtures/option_quotes.json
239
244
  - spec/fixtures/order.json
@@ -241,6 +246,7 @@ test_files:
241
246
  - spec/fixtures/placed_order.json
242
247
  - spec/fixtures/quote.json
243
248
  - spec/fixtures/quotes.json
249
+ - spec/fixtures/search.json
244
250
  - spec/fixtures/session.json
245
251
  - spec/fixtures/strikes.json
246
252
  - spec/fixtures/timesales.json