ig_markets 0.25 → 0.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/LICENSE.md +1 -1
- data/ext/mkrf_conf.rb +9 -0
- data/lib/ig_markets/cli/commands/prices_command.rb +4 -4
- data/lib/ig_markets/cli/curses_window.rb +1 -1
- data/lib/ig_markets/dealing_platform/account_methods.rb +1 -1
- data/lib/ig_markets/dealing_platform/working_order_methods.rb +2 -2
- data/lib/ig_markets/errors.rb +10 -0
- data/lib/ig_markets/model/typecasters.rb +5 -3
- data/lib/ig_markets/model.rb +1 -1
- data/lib/ig_markets/version.rb +1 -1
- data/lib/ig_markets/working_order.rb +2 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 593ec96300d193a18f730b26cf9dedb9aec19f54
|
4
|
+
data.tar.gz: fa29e0da14e82bfb9f53c266275d7a176286a124
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11a54058f41f9a7e897be4040590eb35f4d1e18117c1ed2a021dc4040f0f937f930f57dcf6565de534e911c47c84139020519a03b0672ba5a28f34bddf66f97f
|
7
|
+
data.tar.gz: 04def1bdd5817c224bac244e0caf332ae1aed58d951de207b220d061902d38f934b917ea9193a3945ae539d877fce8cc5a1abf2c51bdf7411a5401f950a1c2da
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# IG Markets Changelog
|
2
2
|
|
3
|
+
### 0.26 — January 12, 2017
|
4
|
+
|
5
|
+
- Fully support Ruby 2.4
|
6
|
+
- Added `IGMarkets::Errors::MarketOrdersNotSupported` and `IGMarkets::Errors::TooManyMarketsError`
|
7
|
+
- Fixed incorrect exception messages when trying to set an invalid or disallowed value on an attribute
|
8
|
+
- Fixed the `ig_markets stream` command not finding the `curses` gem
|
9
|
+
- The `curses` gem is now installed automatically on non-Windows platforms
|
10
|
+
|
3
11
|
### 0.25 — December 7, 2016
|
4
12
|
|
5
13
|
- Increased required Ruby version to >= 2.2.2
|
data/LICENSE.md
CHANGED
data/ext/mkrf_conf.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# This script is responsible for installing the curses gem on all platforms except Windows.
|
2
|
+
|
3
|
+
require 'rubygems/command'
|
4
|
+
require 'rubygems/dependency_installer'
|
5
|
+
|
6
|
+
Gem::Command.build_args = ARGV
|
7
|
+
Gem::DependencyInstaller.new.install 'curses', '~> 1.0' unless Gem.win_platform?
|
8
|
+
|
9
|
+
File.write File.join(File.dirname(__FILE__), 'Rakefile'), 'task :default'
|
@@ -39,7 +39,7 @@ END
|
|
39
39
|
def historical_price_result(dealing_platform)
|
40
40
|
market = dealing_platform.markets[options[:epic]]
|
41
41
|
|
42
|
-
raise ArgumentError, 'invalid
|
42
|
+
raise ArgumentError, 'invalid EPIC' unless market
|
43
43
|
|
44
44
|
if options[:number]
|
45
45
|
historical_price_result_from_number market
|
@@ -55,13 +55,13 @@ END
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def historical_price_result_from_date_range(market)
|
58
|
-
|
58
|
+
filtered_options = self.class.filter_options options, [:from, :to]
|
59
59
|
|
60
60
|
[:from, :to].each do |attribute|
|
61
|
-
self.class.parse_date_time
|
61
|
+
self.class.parse_date_time filtered_options, attribute, Time, '%FT%T%z', 'yyyy-mm-ddThh:mm:ss(+|-)zz:zz'
|
62
62
|
end
|
63
63
|
|
64
|
-
market.historical_prices resolution: resolution, from:
|
64
|
+
market.historical_prices resolution: resolution, from: filtered_options[:from], to: filtered_options[:to]
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -46,7 +46,7 @@ module IGMarkets
|
|
46
46
|
options[:type] ||= :all
|
47
47
|
|
48
48
|
unless [:all, :all_deal, :deposit, :withdrawal].include? options[:type]
|
49
|
-
raise ArgumentError, "
|
49
|
+
raise ArgumentError, "invalid transaction type: #{options[:type]}"
|
50
50
|
end
|
51
51
|
|
52
52
|
history_request_complete url: 'history/transactions', url_parameters: history_url_parameters(options),
|
@@ -110,10 +110,10 @@ module IGMarkets
|
|
110
110
|
end
|
111
111
|
|
112
112
|
if limit_distance && limit_level
|
113
|
-
raise ArgumentError, '
|
113
|
+
raise ArgumentError, 'do not specify both limit_distance and limit_level options'
|
114
114
|
end
|
115
115
|
|
116
|
-
raise ArgumentError, '
|
116
|
+
raise ArgumentError, 'do not specify both stop_distance and stop_level options' if stop_distance && stop_level
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
data/lib/ig_markets/errors.rb
CHANGED
@@ -89,6 +89,10 @@ module IGMarkets
|
|
89
89
|
class TooManyEPICSError < IGMarketsError
|
90
90
|
end
|
91
91
|
|
92
|
+
# This error is raised when too many markets are specified for a request.
|
93
|
+
class TooManyMarketsError < IGMarketsError
|
94
|
+
end
|
95
|
+
|
92
96
|
# This error is raised when an invalid page size is specified.
|
93
97
|
class InvalidPageSizeError < IGMarketsError
|
94
98
|
end
|
@@ -222,6 +226,10 @@ module IGMarkets
|
|
222
226
|
class InstrumentNotFoundError < IGMarketsError
|
223
227
|
end
|
224
228
|
|
229
|
+
# This error is raised when market orders are not supported.
|
230
|
+
class MarketOrdersNotSupported < IGMarketsError
|
231
|
+
end
|
232
|
+
|
225
233
|
# This error is raised when an unsupported EPIC was specified.
|
226
234
|
class UnsupportedEPICError < IGMarketsError
|
227
235
|
end
|
@@ -353,12 +361,14 @@ module IGMarkets
|
|
353
361
|
'error.switch.cannot-set-default-account' => Errors::CannotSetDefaultAccountError,
|
354
362
|
'error.switch.invalid-accountId' => Errors::InvalidAccountIDError,
|
355
363
|
'error.trading.otc.instrument-not-found' => Errors::InstrumentNotFoundError,
|
364
|
+
'error.trading.otc.market-orders.not-supported' => Errors::MarketOrdersNotSupported,
|
356
365
|
'error.unsupported.epic' => Errors::UnsupportedEPICError,
|
357
366
|
'error.watchlists.management.cannot-delete-watchlist' => Errors::CannotDeleteWatchlistError,
|
358
367
|
'error.watchlists.management.duplicate-name' => Errors::DuplicateWatchlistNameError,
|
359
368
|
'error.watchlists.management.error' => Errors::WatchlistError,
|
360
369
|
'error.watchlists.management.watchlist-not-found' => Errors::WatchlistNotFoundError,
|
361
370
|
'invalid.input' => Errors::InvalidInputError,
|
371
|
+
'invalid.input.too.many.markets' => Errors::TooManyMarketsError,
|
362
372
|
'invalid.url' => Errors::InvalidURLError,
|
363
373
|
'system.error' => Errors::SystemError,
|
364
374
|
'unauthorised.access.to.equity.exception' => Errors::UnauthorisedAccessToEquityError,
|
@@ -18,14 +18,14 @@ module IGMarkets
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def typecaster_boolean(value, _options,
|
21
|
+
def typecaster_boolean(value, _options, name)
|
22
22
|
return value if [nil, true, false].include? value
|
23
23
|
return value == '1' if %w(0 1).include? value
|
24
24
|
|
25
25
|
raise ArgumentError, "#{self}##{name}: invalid boolean value: #{value}"
|
26
26
|
end
|
27
27
|
|
28
|
-
def typecaster_string(value, options,
|
28
|
+
def typecaster_string(value, options, name)
|
29
29
|
return nil if value.nil?
|
30
30
|
|
31
31
|
if options.key?(:regex) && !options[:regex].match(value.to_s)
|
@@ -41,10 +41,12 @@ module IGMarkets
|
|
41
41
|
value.to_s.to_i
|
42
42
|
end
|
43
43
|
|
44
|
-
def typecaster_float(value, _options,
|
44
|
+
def typecaster_float(value, _options, name)
|
45
45
|
return nil if value.nil? || value == ''
|
46
46
|
|
47
47
|
Float(value)
|
48
|
+
rescue ArgumentError
|
49
|
+
raise ArgumentError, "#{self}##{name}: invalid float value: #{value}"
|
48
50
|
end
|
49
51
|
|
50
52
|
def typecaster_symbol(value, _options, _name)
|
data/lib/ig_markets/model.rb
CHANGED
@@ -188,7 +188,7 @@ module IGMarkets
|
|
188
188
|
value = self.class.send "sanitize_#{name}_value", value
|
189
189
|
|
190
190
|
unless self.class.attribute_value_allowed? name, value
|
191
|
-
raise ArgumentError, "#{self}##{name}: invalid value: #{value.inspect}"
|
191
|
+
raise ArgumentError, "#{self.class}##{name}: invalid value: #{value.inspect}"
|
192
192
|
end
|
193
193
|
|
194
194
|
(@attributes ||= {})[name] = value
|
data/lib/ig_markets/version.rb
CHANGED
@@ -85,10 +85,10 @@ module IGMarkets
|
|
85
85
|
# Markets API.
|
86
86
|
def validate
|
87
87
|
if limit_distance && limit_level
|
88
|
-
raise ArgumentError, '
|
88
|
+
raise ArgumentError, 'do not specify both limit_distance and limit_level'
|
89
89
|
end
|
90
90
|
|
91
|
-
raise ArgumentError, '
|
91
|
+
raise ArgumentError, 'do not specify both stop_distance and stop_level' if stop_distance && stop_level
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
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.26'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Viney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -224,13 +224,15 @@ description:
|
|
224
224
|
email: richard.viney@gmail.com
|
225
225
|
executables:
|
226
226
|
- ig_markets
|
227
|
-
extensions:
|
227
|
+
extensions:
|
228
|
+
- ext/mkrf_conf.rb
|
228
229
|
extra_rdoc_files: []
|
229
230
|
files:
|
230
231
|
- CHANGELOG.md
|
231
232
|
- LICENSE.md
|
232
233
|
- README.md
|
233
234
|
- bin/ig_markets
|
235
|
+
- ext/mkrf_conf.rb
|
234
236
|
- lib/ig_markets.rb
|
235
237
|
- lib/ig_markets/account.rb
|
236
238
|
- lib/ig_markets/activity.rb
|
@@ -330,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
330
332
|
version: '0'
|
331
333
|
requirements: []
|
332
334
|
rubyforge_project:
|
333
|
-
rubygems_version: 2.5.
|
335
|
+
rubygems_version: 2.5.2
|
334
336
|
signing_key:
|
335
337
|
specification_version: 4
|
336
338
|
summary: Library and command-line client for accessing the IG Markets dealing platform.
|