ig_markets 0.3 → 0.4
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +28 -19
- data/bin/ig_markets +1 -29
- data/lib/ig_markets/cli/account_command.rb +3 -26
- data/lib/ig_markets/cli/activities_command.rb +13 -15
- data/lib/ig_markets/cli/config_file.rb +37 -0
- data/lib/ig_markets/cli/confirmation_command.rb +5 -21
- data/lib/ig_markets/cli/main.rb +79 -20
- data/lib/ig_markets/cli/orders_command.rb +81 -13
- data/lib/ig_markets/cli/output.rb +115 -0
- data/lib/ig_markets/cli/positions_command.rb +100 -9
- data/lib/ig_markets/cli/search_command.rb +5 -19
- data/lib/ig_markets/cli/sentiment_command.rb +8 -19
- data/lib/ig_markets/cli/sprints_command.rb +42 -14
- data/lib/ig_markets/cli/transactions_command.rb +17 -16
- data/lib/ig_markets/cli/watchlists_command.rb +55 -16
- data/lib/ig_markets/dealing_platform/account_methods.rb +17 -8
- data/lib/ig_markets/dealing_platform/position_methods.rb +17 -9
- data/lib/ig_markets/dealing_platform/working_order_methods.rb +7 -15
- data/lib/ig_markets/model/typecasters.rb +14 -5
- data/lib/ig_markets/model.rb +2 -1
- data/lib/ig_markets/password_encryptor.rb +10 -1
- data/lib/ig_markets/position.rb +2 -2
- data/lib/ig_markets/session.rb +14 -11
- data/lib/ig_markets/version.rb +1 -1
- data/lib/ig_markets/working_order.rb +6 -5
- data/lib/ig_markets.rb +6 -4
- metadata +11 -9
data/lib/ig_markets/position.rb
CHANGED
@@ -4,8 +4,8 @@ module IGMarkets
|
|
4
4
|
class Position < Model
|
5
5
|
attribute :contract_size, Float
|
6
6
|
attribute :controlled_risk, Boolean
|
7
|
-
attribute :created_date, Time, format: '%Y/%m/%d %T:%L'
|
8
|
-
attribute :created_date_utc, Time, format: '%FT%T'
|
7
|
+
attribute :created_date, Time, format: '%Y/%m/%d %T:%L'
|
8
|
+
attribute :created_date_utc, Time, format: '%FT%T'
|
9
9
|
attribute :currency, String, regex: Regex::CURRENCY
|
10
10
|
attribute :deal_id
|
11
11
|
attribute :direction, Symbol, allowed_values: [:buy, :sell]
|
data/lib/ig_markets/session.rb
CHANGED
@@ -104,10 +104,7 @@ module IGMarkets
|
|
104
104
|
|
105
105
|
private
|
106
106
|
|
107
|
-
HOST_URLS = {
|
108
|
-
demo: 'https://demo-api.ig.com/gateway/deal/',
|
109
|
-
production: 'https://api.ig.com/gateway/deal/'
|
110
|
-
}.freeze
|
107
|
+
HOST_URLS = { demo: 'https://demo-api.ig.com/gateway/deal/', production: 'https://api.ig.com/gateway/deal/' }.freeze
|
111
108
|
|
112
109
|
def validate_authentication
|
113
110
|
%i(username password api_key).each do |attribute|
|
@@ -120,10 +117,7 @@ module IGMarkets
|
|
120
117
|
def password_encryptor
|
121
118
|
result = get 'session/encryptionKey', API_V1
|
122
119
|
|
123
|
-
PasswordEncryptor.new.
|
124
|
-
encryptor.encoded_public_key = result.fetch :encryption_key
|
125
|
-
encryptor.time_stamp = result.fetch :time_stamp
|
126
|
-
end
|
120
|
+
PasswordEncryptor.new result.fetch(:encryption_key), result.fetch(:time_stamp)
|
127
121
|
end
|
128
122
|
|
129
123
|
def request(options)
|
@@ -162,16 +156,25 @@ module IGMarkets
|
|
162
156
|
|
163
157
|
RestClient::Request.execute options
|
164
158
|
rescue RestClient::Exception => exception
|
165
|
-
|
159
|
+
raise RequestFailedError, exception.message unless exception.response
|
160
|
+
|
161
|
+
return exception.response unless !options[:retry] && client_token_invalid?(exception.response)
|
166
162
|
|
167
|
-
|
163
|
+
sign_in
|
164
|
+
execute_request options.merge(retry: true)
|
168
165
|
rescue SocketError => socket_error
|
169
166
|
raise RequestFailedError, socket_error
|
170
167
|
end
|
171
168
|
|
169
|
+
def client_token_invalid?(response)
|
170
|
+
ResponseParser.parse(JSON.parse(response.body))[:error_code] == 'error.security.client-token-invalid'
|
171
|
+
rescue JSON::ParserError
|
172
|
+
false
|
173
|
+
end
|
174
|
+
|
172
175
|
def process_response(response)
|
173
176
|
result = begin
|
174
|
-
ResponseParser.parse JSON.parse(response.body
|
177
|
+
ResponseParser.parse JSON.parse(response.body)
|
175
178
|
rescue JSON::ParserError
|
176
179
|
{}
|
177
180
|
end
|
data/lib/ig_markets/version.rb
CHANGED
@@ -3,14 +3,14 @@ module IGMarkets
|
|
3
3
|
# {DealingPlatform::WorkingOrderMethods#[]}.
|
4
4
|
class WorkingOrder < Model
|
5
5
|
attribute :created_date, Time, format: '%Y/%m/%d %T:%L'
|
6
|
-
attribute :created_date_utc, Time, format: '%FT%T'
|
6
|
+
attribute :created_date_utc, Time, format: '%FT%T'
|
7
7
|
attribute :currency_code, String, regex: Regex::CURRENCY
|
8
8
|
attribute :deal_id
|
9
9
|
attribute :direction, Symbol, allowed_values: [:buy, :sell]
|
10
10
|
attribute :dma, Boolean
|
11
11
|
attribute :epic, String, regex: Regex::EPIC
|
12
|
-
attribute :good_till_date, Time, format: '%Y/%m/%d %R'
|
13
|
-
attribute :good_till_date_iso, Time, format: '%FT%R'
|
12
|
+
attribute :good_till_date, Time, format: '%Y/%m/%d %R'
|
13
|
+
attribute :good_till_date_iso, Time, format: '%FT%R'
|
14
14
|
attribute :guaranteed_stop, Boolean
|
15
15
|
attribute :limit_distance, Fixnum
|
16
16
|
attribute :order_level, Float
|
@@ -38,7 +38,6 @@ module IGMarkets
|
|
38
38
|
# @option new_attributes [Float] :level
|
39
39
|
# @option new_attributes [Fixnum] :limit_distance
|
40
40
|
# @option new_attributes [Fixnum] :stop_distance
|
41
|
-
# @option new_attributes [:good_till_cancelled, :good_till_date] :time_in_force
|
42
41
|
# @option new_attributes [:limit, :stop] :type
|
43
42
|
#
|
44
43
|
# @return [String] The deal reference of the update operation. Use {DealingPlatform#deal_confirmation} to check
|
@@ -48,6 +47,8 @@ module IGMarkets
|
|
48
47
|
stop_distance: stop_distance, time_in_force: time_in_force, type: order_type
|
49
48
|
}.merge new_attributes
|
50
49
|
|
50
|
+
new_attributes[:time_in_force] = new_attributes[:good_till_date] ? :good_till_date : :good_till_cancelled
|
51
|
+
|
51
52
|
payload = PayloadFormatter.format WorkingOrderUpdateAttributes.new new_attributes
|
52
53
|
|
53
54
|
@dealing_platform.session.put("workingorders/otc/#{deal_id}", payload, API_V1).fetch(:deal_reference)
|
@@ -55,7 +56,7 @@ module IGMarkets
|
|
55
56
|
|
56
57
|
# Internal model used by {#update}.
|
57
58
|
class WorkingOrderUpdateAttributes < Model
|
58
|
-
attribute :good_till_date, Time, format: '%Y/%m/%d %R'
|
59
|
+
attribute :good_till_date, Time, format: '%Y/%m/%d %R:%S'
|
59
60
|
attribute :level, Float
|
60
61
|
attribute :limit_distance, Fixnum
|
61
62
|
attribute :stop_distance, Fixnum
|
data/lib/ig_markets.rb
CHANGED
@@ -13,17 +13,19 @@ require 'ig_markets/account_activity'
|
|
13
13
|
require 'ig_markets/account_transaction'
|
14
14
|
require 'ig_markets/api_versions'
|
15
15
|
require 'ig_markets/application'
|
16
|
+
require 'ig_markets/cli/orders_command'
|
17
|
+
require 'ig_markets/cli/positions_command'
|
18
|
+
require 'ig_markets/cli/sprints_command'
|
19
|
+
require 'ig_markets/cli/watchlists_command'
|
16
20
|
require 'ig_markets/cli/main'
|
17
21
|
require 'ig_markets/cli/account_command'
|
18
22
|
require 'ig_markets/cli/activities_command'
|
23
|
+
require 'ig_markets/cli/config_file'
|
19
24
|
require 'ig_markets/cli/confirmation_command'
|
20
|
-
require 'ig_markets/cli/
|
21
|
-
require 'ig_markets/cli/positions_command'
|
25
|
+
require 'ig_markets/cli/output'
|
22
26
|
require 'ig_markets/cli/search_command'
|
23
27
|
require 'ig_markets/cli/sentiment_command'
|
24
|
-
require 'ig_markets/cli/sprints_command'
|
25
28
|
require 'ig_markets/cli/transactions_command'
|
26
|
-
require 'ig_markets/cli/watchlists_command'
|
27
29
|
require 'ig_markets/client_sentiment'
|
28
30
|
require 'ig_markets/deal_confirmation'
|
29
31
|
require 'ig_markets/dealing_platform'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ig_markets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.4'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Viney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -157,7 +157,11 @@ executables:
|
|
157
157
|
extensions: []
|
158
158
|
extra_rdoc_files: []
|
159
159
|
files:
|
160
|
+
- CHANGELOG.md
|
161
|
+
- LICENSE.md
|
162
|
+
- README.md
|
160
163
|
- bin/ig_markets
|
164
|
+
- lib/ig_markets.rb
|
161
165
|
- lib/ig_markets/account.rb
|
162
166
|
- lib/ig_markets/account_activity.rb
|
163
167
|
- lib/ig_markets/account_transaction.rb
|
@@ -166,9 +170,11 @@ files:
|
|
166
170
|
- lib/ig_markets/boolean.rb
|
167
171
|
- lib/ig_markets/cli/account_command.rb
|
168
172
|
- lib/ig_markets/cli/activities_command.rb
|
173
|
+
- lib/ig_markets/cli/config_file.rb
|
169
174
|
- lib/ig_markets/cli/confirmation_command.rb
|
170
175
|
- lib/ig_markets/cli/main.rb
|
171
176
|
- lib/ig_markets/cli/orders_command.rb
|
177
|
+
- lib/ig_markets/cli/output.rb
|
172
178
|
- lib/ig_markets/cli/positions_command.rb
|
173
179
|
- lib/ig_markets/cli/search_command.rb
|
174
180
|
- lib/ig_markets/cli/sentiment_command.rb
|
@@ -177,6 +183,7 @@ files:
|
|
177
183
|
- lib/ig_markets/cli/watchlists_command.rb
|
178
184
|
- lib/ig_markets/client_sentiment.rb
|
179
185
|
- lib/ig_markets/deal_confirmation.rb
|
186
|
+
- lib/ig_markets/dealing_platform.rb
|
180
187
|
- lib/ig_markets/dealing_platform/account_methods.rb
|
181
188
|
- lib/ig_markets/dealing_platform/client_sentiment_methods.rb
|
182
189
|
- lib/ig_markets/dealing_platform/market_methods.rb
|
@@ -184,15 +191,14 @@ files:
|
|
184
191
|
- lib/ig_markets/dealing_platform/sprint_market_position_methods.rb
|
185
192
|
- lib/ig_markets/dealing_platform/watchlist_methods.rb
|
186
193
|
- lib/ig_markets/dealing_platform/working_order_methods.rb
|
187
|
-
- lib/ig_markets/dealing_platform.rb
|
188
194
|
- lib/ig_markets/format.rb
|
189
195
|
- lib/ig_markets/historical_price_result.rb
|
190
196
|
- lib/ig_markets/instrument.rb
|
191
197
|
- lib/ig_markets/market.rb
|
192
198
|
- lib/ig_markets/market_hierarchy_result.rb
|
193
199
|
- lib/ig_markets/market_overview.rb
|
194
|
-
- lib/ig_markets/model/typecasters.rb
|
195
200
|
- lib/ig_markets/model.rb
|
201
|
+
- lib/ig_markets/model/typecasters.rb
|
196
202
|
- lib/ig_markets/password_encryptor.rb
|
197
203
|
- lib/ig_markets/payload_formatter.rb
|
198
204
|
- lib/ig_markets/position.rb
|
@@ -204,10 +210,6 @@ files:
|
|
204
210
|
- lib/ig_markets/version.rb
|
205
211
|
- lib/ig_markets/watchlist.rb
|
206
212
|
- lib/ig_markets/working_order.rb
|
207
|
-
- lib/ig_markets.rb
|
208
|
-
- CHANGELOG.md
|
209
|
-
- LICENSE.md
|
210
|
-
- README.md
|
211
213
|
homepage: https://github.com/rviney/ig_markets
|
212
214
|
licenses:
|
213
215
|
- MIT
|
@@ -228,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
230
|
version: '0'
|
229
231
|
requirements: []
|
230
232
|
rubyforge_project:
|
231
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.5.1
|
232
234
|
signing_key:
|
233
235
|
specification_version: 4
|
234
236
|
summary: Ruby client for the IG Markets dealing platform.
|