ig_markets 0.1 → 0.2

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/README.md +32 -16
  4. data/bin/ig_markets +29 -0
  5. data/lib/ig_markets.rb +15 -0
  6. data/lib/ig_markets/account_activity.rb +1 -1
  7. data/lib/ig_markets/account_transaction.rb +1 -1
  8. data/lib/ig_markets/application.rb +2 -2
  9. data/lib/ig_markets/cli/account_command.rb +40 -0
  10. data/lib/ig_markets/cli/activities_command.rb +33 -0
  11. data/lib/ig_markets/cli/confirmation_command.rb +32 -0
  12. data/lib/ig_markets/cli/main.rb +39 -0
  13. data/lib/ig_markets/cli/orders_command.rb +28 -0
  14. data/lib/ig_markets/cli/positions_command.rb +20 -0
  15. data/lib/ig_markets/cli/search_command.rb +30 -0
  16. data/lib/ig_markets/cli/sentiment_command.rb +35 -0
  17. data/lib/ig_markets/cli/sprints_command.rb +28 -0
  18. data/lib/ig_markets/cli/transactions_command.rb +56 -0
  19. data/lib/ig_markets/cli/watchlists_command.rb +34 -0
  20. data/lib/ig_markets/deal_confirmation.rb +4 -4
  21. data/lib/ig_markets/dealing_platform/position_methods.rb +3 -3
  22. data/lib/ig_markets/dealing_platform/sprint_market_position_methods.rb +1 -1
  23. data/lib/ig_markets/dealing_platform/watchlist_methods.rb +1 -3
  24. data/lib/ig_markets/dealing_platform/working_order_methods.rb +10 -10
  25. data/lib/ig_markets/format.rb +36 -0
  26. data/lib/ig_markets/historical_price_result.rb +1 -1
  27. data/lib/ig_markets/instrument.rb +2 -2
  28. data/lib/ig_markets/market.rb +10 -10
  29. data/lib/ig_markets/model.rb +23 -60
  30. data/lib/ig_markets/model/typecasters.rb +78 -0
  31. data/lib/ig_markets/payload_formatter.rb +19 -6
  32. data/lib/ig_markets/position.rb +7 -21
  33. data/lib/ig_markets/request_failed_error.rb +1 -1
  34. data/lib/ig_markets/sprint_market_position.rb +18 -3
  35. data/lib/ig_markets/version.rb +1 -1
  36. data/lib/ig_markets/working_order.rb +11 -11
  37. metadata +39 -64
  38. data/.codeclimate.yml +0 -15
  39. data/.gitignore +0 -9
  40. data/.rspec +0 -2
  41. data/.rubocop.yml +0 -2
  42. data/.travis.yml +0 -10
  43. data/.yardopts +0 -4
  44. data/Gemfile +0 -2
  45. data/ig_markets.gemspec +0 -28
  46. data/spec/factories/ig_markets/account.rb +0 -14
  47. data/spec/factories/ig_markets/account_activity.rb +0 -21
  48. data/spec/factories/ig_markets/account_balance.rb +0 -8
  49. data/spec/factories/ig_markets/account_transaction.rb +0 -15
  50. data/spec/factories/ig_markets/application.rb +0 -21
  51. data/spec/factories/ig_markets/client_sentiment.rb +0 -7
  52. data/spec/factories/ig_markets/deal_confirmation.rb +0 -20
  53. data/spec/factories/ig_markets/historical_price_result.rb +0 -7
  54. data/spec/factories/ig_markets/historical_price_result_data_allowance.rb +0 -7
  55. data/spec/factories/ig_markets/historical_price_result_price.rb +0 -7
  56. data/spec/factories/ig_markets/historical_price_result_snapshot.rb +0 -10
  57. data/spec/factories/ig_markets/instrument.rb +0 -32
  58. data/spec/factories/ig_markets/instrument_currency.rb +0 -9
  59. data/spec/factories/ig_markets/instrument_expiry_details.rb +0 -6
  60. data/spec/factories/ig_markets/instrument_margin_deposit_band.rb +0 -8
  61. data/spec/factories/ig_markets/instrument_opening_hours.rb +0 -6
  62. data/spec/factories/ig_markets/instrument_rollover_details.rb +0 -6
  63. data/spec/factories/ig_markets/instrument_slippage_factor.rb +0 -6
  64. data/spec/factories/ig_markets/market.rb +0 -7
  65. data/spec/factories/ig_markets/market_dealing_rules.rb +0 -11
  66. data/spec/factories/ig_markets/market_dealing_rules_rule_details.rb +0 -6
  67. data/spec/factories/ig_markets/market_hierarchy_result.rb +0 -6
  68. data/spec/factories/ig_markets/market_hierarchy_result_hierarchy_node.rb +0 -6
  69. data/spec/factories/ig_markets/market_overview.rb +0 -22
  70. data/spec/factories/ig_markets/market_snapshot.rb +0 -17
  71. data/spec/factories/ig_markets/position.rb +0 -19
  72. data/spec/factories/ig_markets/sprint_market_position.rb +0 -16
  73. data/spec/factories/ig_markets/watchlist.rb +0 -9
  74. data/spec/factories/ig_markets/working_order.rb +0 -21
  75. data/spec/ig_markets/account_transaction_spec.rb +0 -30
  76. data/spec/ig_markets/dealing_platform/account_methods_spec.rb +0 -58
  77. data/spec/ig_markets/dealing_platform/client_sentiment_methods_spec.rb +0 -29
  78. data/spec/ig_markets/dealing_platform/market_methods_spec.rb +0 -80
  79. data/spec/ig_markets/dealing_platform/position_methods_spec.rb +0 -137
  80. data/spec/ig_markets/dealing_platform/sprint_market_position_methods_spec.rb +0 -39
  81. data/spec/ig_markets/dealing_platform/watchlist_methods_spec.rb +0 -89
  82. data/spec/ig_markets/dealing_platform/working_order_methods_spec.rb +0 -120
  83. data/spec/ig_markets/dealing_platform_spec.rb +0 -40
  84. data/spec/ig_markets/model_spec.rb +0 -127
  85. data/spec/ig_markets/password_encryptor_spec.rb +0 -23
  86. data/spec/ig_markets/payload_formatter_spec.rb +0 -19
  87. data/spec/ig_markets/position_spec.rb +0 -37
  88. data/spec/ig_markets/response_parser_spec.rb +0 -13
  89. data/spec/ig_markets/session_spec.rb +0 -134
  90. data/spec/spec_helper.rb +0 -14
  91. data/spec/support/factory_girl.rb +0 -7
  92. data/spec/support/random_test_order.rb +0 -3
@@ -0,0 +1,78 @@
1
+ module IGMarkets
2
+ # Implement typecaster methods for Model.
3
+ class Model
4
+ class << self
5
+ private
6
+
7
+ def typecaster_for(type)
8
+ if [Boolean, String, Fixnum, Float, Symbol, Date, Time].include? type
9
+ method "typecaster_#{type.to_s.gsub(/\AIGMarkets::/, '').downcase}"
10
+ elsif type.respond_to? :from
11
+ -> (value, _options) { type.from value }
12
+ end
13
+ end
14
+
15
+ def typecaster_boolean(value, _options)
16
+ return value if [nil, true, false].include? value
17
+
18
+ raise ArgumentError, "#{self}: invalid boolean value: #{value}"
19
+ end
20
+
21
+ def typecaster_string(value, options)
22
+ return nil if value.nil?
23
+
24
+ if options.key? :regex
25
+ raise ArgumentError, "#{self}: invalid string value: #{value}" unless options[:regex].match value.to_s
26
+ end
27
+
28
+ value.to_s
29
+ end
30
+
31
+ def typecaster_fixnum(value, _options)
32
+ return nil if value.nil?
33
+
34
+ value.to_s.to_i
35
+ end
36
+
37
+ def typecaster_float(value, _options)
38
+ return nil if value.nil?
39
+
40
+ Float(value)
41
+ end
42
+
43
+ def typecaster_symbol(value, _options)
44
+ return nil if value.nil?
45
+
46
+ value.to_s.downcase.to_sym
47
+ end
48
+
49
+ def typecaster_date(value, options)
50
+ raise ArgumentError, "#{self}: invalid or missing date format" unless options[:format].is_a? String
51
+
52
+ if value.is_a? String
53
+ begin
54
+ Date.strptime value, options[:format]
55
+ rescue ArgumentError
56
+ raise ArgumentError, "#{self}: failed parsing date '#{value}' with format '#{options[:format]}'"
57
+ end
58
+ else
59
+ value
60
+ end
61
+ end
62
+
63
+ def typecaster_time(value, options)
64
+ raise ArgumentError, "#{self}: invalid or missing time format" unless options[:format].is_a? String
65
+
66
+ if value.is_a?(String) || value.is_a?(Fixnum)
67
+ begin
68
+ Time.strptime "#{value}#{options[:time_zone]}", "#{options[:format]}#{'%z' if options[:time_zone]}"
69
+ rescue ArgumentError
70
+ raise ArgumentError, "#{self}: failed parsing time '#{value}' with format '#{options[:format]}'"
71
+ end
72
+ else
73
+ value
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -5,8 +5,8 @@ module IGMarkets
5
5
 
6
6
  # Takes a {Model} and returns its attributes in a hash ready to be passed as a payload to the IG Markets API.
7
7
  # Attribute names will be converted to use camel case rather than snake case, `Symbol` attributes will be converted
8
- # to strings and will be uppercased, and `DateTime` attributes will be converted to strings using their ':format'
9
- # option.
8
+ # to strings and will be uppercased, and both `Date` and `Time` attributes will be converted to strings using their
9
+ # ':format' option.
10
10
  #
11
11
  # @param [Model] model The model instance to convert attributes for.
12
12
  #
@@ -17,13 +17,26 @@ module IGMarkets
17
17
 
18
18
  next if value.nil?
19
19
 
20
- value = value.to_s.upcase if options[:type] == Symbol
21
- value = value.strftime(options.fetch(:format)) if options[:type] == DateTime
22
-
23
- formatted[snake_case_to_camel_case(name)] = value
20
+ formatted[snake_case_to_camel_case(name)] = format_value value, options
24
21
  end
25
22
  end
26
23
 
24
+ # Formats an individual value, see {#format} for details.
25
+ #
26
+ # @param value The attribute value to format.
27
+ # @param options The options hash for the attribute.
28
+ #
29
+ # @return [String]
30
+ def format_value(value, options)
31
+ return value.to_s.upcase if options[:type] == Symbol
32
+
33
+ value = value.utc if options[:type] == Time
34
+
35
+ return value.strftime(options.fetch(:format)) if [Date, Time].include? options[:type]
36
+
37
+ value
38
+ end
39
+
27
40
  # Takes a string or symbol that uses snake case and converts it to a camel case symbol.
28
41
  #
29
42
  # @param [String, Symbol] value The string or symbol to convert to camel case.
@@ -4,14 +4,14 @@ module IGMarkets
4
4
  class Position < Model
5
5
  attribute :contract_size, Float
6
6
  attribute :controlled_risk, Boolean
7
- attribute :created_date, DateTime, format: '%Y/%m/%d %H:%M:%S:%L'
8
- attribute :created_date_utc, DateTime, format: '%Y-%m-%dT%H:%M:%S'
7
+ attribute :created_date, Time, format: '%Y/%m/%d %T:%L', time_zone: '+0000'
8
+ attribute :created_date_utc, Time, format: '%FT%T', time_zone: '+0000'
9
9
  attribute :currency, String, regex: Regex::CURRENCY
10
10
  attribute :deal_id
11
11
  attribute :direction, Symbol, allowed_values: [:buy, :sell]
12
12
  attribute :level, Float
13
13
  attribute :limit_level, Float
14
- attribute :size, Fixnum
14
+ attribute :size, Float
15
15
  attribute :stop_level, Float
16
16
  attribute :trailing_step, Float
17
17
  attribute :trailing_stop_distance, Fixnum
@@ -42,37 +42,23 @@ module IGMarkets
42
42
  end
43
43
 
44
44
  # Returns this position's current profit or loss, denominated in its {#currency}, and based on the current market
45
- # state as stored in {#market}. {#formatted_profit_loss} can be used to get a human-readable representation of this
46
- # value.
45
+ # state as stored in {#market}.
47
46
  #
48
47
  # @return [Float]
49
48
  def profit_loss
50
49
  price_delta * size * market.lot_size * market.scaling_factor
51
50
  end
52
51
 
53
- # Returns a human-readable string describing this position's current profit or loss, denominated in its {#currency},
54
- # and based on the current market state as stored in {#market}. Some examples of the format of the return value:
55
- #
56
- # - `"USD -130.40"`
57
- # - `"AUD 539.10"`
58
- # - `"JPY 3560"`
59
- #
60
- # @return [String]
61
- def formatted_profit_loss
62
- format_string = (currency == 'JPY' ? '%.0f' : '%.2f')
63
- "#{currency} #{format format_string, profit_loss}"
64
- end
65
-
66
52
  # Returns this position's {#size} as a string prefixed with a `+` if {#direction} is `:buy`, or a `-` if
67
53
  # {#direction} is `:sell`.
68
54
  #
69
55
  # @return [String]
70
56
  def formatted_size
71
- "#{{ buy: '+', sell: '-' }.fetch(direction)}#{size}"
57
+ "#{{ buy: '+', sell: '-' }.fetch(direction)}#{format '%g', size}"
72
58
  end
73
59
 
74
60
  # Closes this position. If called with no options then this position will be fully closed at current market prices,
75
- # partial closes and greater control over the close conditions can be achieved with the relevant options.
61
+ # partial closes and greater control over the close conditions can be achieved by using the relevant options.
76
62
  #
77
63
  # @param [Hash] options The options for the position close.
78
64
  # @option options [Float] :level Required if and only if `:order_type` is `:limit` or `:quote`.
@@ -151,7 +137,7 @@ module IGMarkets
151
137
  attribute :level, Float
152
138
  attribute :order_type, Symbol, allowed_values: [:limit, :market, :quote]
153
139
  attribute :quote_id
154
- attribute :size, Fixnum
140
+ attribute :size, Float
155
141
  attribute :time_in_force, Symbol, allowed_values: [:execute_and_eliminate, :fill_or_kill]
156
142
 
157
143
  # Runs a series of validations on this model's attributes to check whether it is ready to be sent to the IG
@@ -15,7 +15,7 @@ module IGMarkets
15
15
  @error = error.to_s
16
16
  @http_code = http_code ? http_code.to_i : nil
17
17
 
18
- super "#<#{self.class.name} error: @error#{http_code ? ", http_code: #{http_code}" : ''}"
18
+ super "#<#{self.class.name} error: #{@error}#{http_code ? ", http_code: #{http_code}" : ''}>"
19
19
  end
20
20
  end
21
21
  end
@@ -1,17 +1,32 @@
1
1
  module IGMarkets
2
2
  # Contains details on a sprint market position. Returned by {DealingPlatform::SprintMarketPositionMethods#all}.
3
3
  class SprintMarketPosition < Model
4
- attribute :created_date, DateTime, format: '%Y/%m/%d %H:%M:%S:%L'
4
+ attribute :created_date, Time, format: '%Y/%m/%d %T:%L', time_zone: '+1000'
5
5
  attribute :currency, String, regex: Regex::CURRENCY
6
6
  attribute :deal_id
7
7
  attribute :description
8
8
  attribute :direction, Symbol, allowed_values: [:buy, :sell]
9
9
  attribute :epic, String, regex: Regex::EPIC
10
- attribute :expiry_time, DateTime, format: '%Y/%m/%d %H:%M:%S:%L'
10
+ attribute :expiry_time, Time, format: '%Y/%m/%d %T:%L', time_zone: '+1000'
11
11
  attribute :instrument_name
12
12
  attribute :market_status, Symbol, allowed_values: Market::Snapshot.allowed_values(:market_status)
13
13
  attribute :payout_amount, Float
14
- attribute :size, Fixnum
14
+ attribute :size, Float
15
15
  attribute :strike_level, Float
16
+
17
+ # Returns the number of seconds till when this sprint market position expires. This will be a negative number if
18
+ # this sprint market position has expired.
19
+ #
20
+ # @return [Fixnum]
21
+ def seconds_till_expiry
22
+ (expiry_time - Time.now).to_i
23
+ end
24
+
25
+ # Returns whether this sprint market position has expired.
26
+ #
27
+ # @return [Boolean]
28
+ def expired?
29
+ expiry_time < Time.now
30
+ end
16
31
  end
17
32
  end
@@ -1,4 +1,4 @@
1
1
  module IGMarkets
2
2
  # The version of this gem.
3
- VERSION = '0.1'.freeze
3
+ VERSION = '0.2'.freeze
4
4
  end
@@ -2,15 +2,15 @@ module IGMarkets
2
2
  # Contains details on a working order. Returned by {DealingPlatform::WorkingOrderMethods#all} and
3
3
  # {DealingPlatform::WorkingOrderMethods#[]}.
4
4
  class WorkingOrder < Model
5
- attribute :created_date, DateTime, format: '%Y/%m/%d %H:%M:%S:%L'
6
- attribute :created_date_utc, DateTime, format: '%Y-%m-%dT%H:%M:%S'
5
+ attribute :created_date, Time, format: '%Y/%m/%d %T:%L'
6
+ attribute :created_date_utc, Time, format: '%FT%T', time_zone: '+0000'
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, DateTime, format: '%Y/%m/%d %H:%M'
13
- attribute :good_till_date_iso, DateTime, format: '%Y-%m-%dT%H:%M'
12
+ attribute :good_till_date, Time, format: '%Y/%m/%d %R', time_zone: '+0000'
13
+ attribute :good_till_date_iso, Time, format: '%FT%R', time_zone: '+0000'
14
14
  attribute :guaranteed_stop, Boolean
15
15
  attribute :limit_distance, Fixnum
16
16
  attribute :order_level, Float
@@ -34,10 +34,10 @@ module IGMarkets
34
34
  #
35
35
  # @param [Hash] new_attributes The attributes of this working order to update. See
36
36
  # {DealingPlatform::WorkingOrderMethods#create} for a description of the attributes.
37
- # @option new_attributes [DateTime] :good_till_date
37
+ # @option new_attributes [Time] :good_till_date
38
38
  # @option new_attributes [Float] :level
39
- # @option new_attributes [Float] :limit_distance
40
- # @option new_attributes [Float] :stop_distance
39
+ # @option new_attributes [Fixnum] :limit_distance
40
+ # @option new_attributes [Fixnum] :stop_distance
41
41
  # @option new_attributes [:good_till_cancelled, :good_till_date] :time_in_force
42
42
  # @option new_attributes [:limit, :stop] :type
43
43
  #
@@ -55,12 +55,12 @@ module IGMarkets
55
55
 
56
56
  # Internal model used by {#update}.
57
57
  class WorkingOrderUpdateAttributes < Model
58
- attribute :good_till_date, DateTime, format: '%Y/%m/%d %H:%M'
59
- attribute :limit_distance, Float
58
+ attribute :good_till_date, Time, format: '%Y/%m/%d %R'
60
59
  attribute :level, Float
61
- attribute :type, Symbol, allowed_values: [:limit, :stop]
62
- attribute :stop_distance, Float
60
+ attribute :limit_distance, Fixnum
61
+ attribute :stop_distance, Fixnum
63
62
  attribute :time_in_force, Symbol, allowed_values: [:good_till_cancelled, :good_till_date]
63
+ attribute :type, Symbol, allowed_values: [:limit, :stop]
64
64
  end
65
65
 
66
66
  private_constant :WorkingOrderUpdateAttributes
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.1'
4
+ version: '0.2'
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-08 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.19'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.19'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: codeclimate-test-reporter
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -136,32 +150,33 @@ dependencies:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0.8'
139
- description: Ruby client for the IG Markets dealing platform.
153
+ description:
140
154
  email: richard.viney@gmail.com
141
- executables: []
155
+ executables:
156
+ - ig_markets
142
157
  extensions: []
143
158
  extra_rdoc_files: []
144
159
  files:
145
- - ".codeclimate.yml"
146
- - ".gitignore"
147
- - ".rspec"
148
- - ".rubocop.yml"
149
- - ".travis.yml"
150
- - ".yardopts"
151
- - Gemfile
152
- - LICENSE.md
153
- - README.md
154
- - ig_markets.gemspec
155
- - lib/ig_markets.rb
160
+ - bin/ig_markets
156
161
  - lib/ig_markets/account.rb
157
162
  - lib/ig_markets/account_activity.rb
158
163
  - lib/ig_markets/account_transaction.rb
159
164
  - lib/ig_markets/api_versions.rb
160
165
  - lib/ig_markets/application.rb
161
166
  - lib/ig_markets/boolean.rb
167
+ - lib/ig_markets/cli/account_command.rb
168
+ - lib/ig_markets/cli/activities_command.rb
169
+ - lib/ig_markets/cli/confirmation_command.rb
170
+ - lib/ig_markets/cli/main.rb
171
+ - lib/ig_markets/cli/orders_command.rb
172
+ - lib/ig_markets/cli/positions_command.rb
173
+ - lib/ig_markets/cli/search_command.rb
174
+ - lib/ig_markets/cli/sentiment_command.rb
175
+ - lib/ig_markets/cli/sprints_command.rb
176
+ - lib/ig_markets/cli/transactions_command.rb
177
+ - lib/ig_markets/cli/watchlists_command.rb
162
178
  - lib/ig_markets/client_sentiment.rb
163
179
  - lib/ig_markets/deal_confirmation.rb
164
- - lib/ig_markets/dealing_platform.rb
165
180
  - lib/ig_markets/dealing_platform/account_methods.rb
166
181
  - lib/ig_markets/dealing_platform/client_sentiment_methods.rb
167
182
  - lib/ig_markets/dealing_platform/market_methods.rb
@@ -169,11 +184,14 @@ files:
169
184
  - lib/ig_markets/dealing_platform/sprint_market_position_methods.rb
170
185
  - lib/ig_markets/dealing_platform/watchlist_methods.rb
171
186
  - lib/ig_markets/dealing_platform/working_order_methods.rb
187
+ - lib/ig_markets/dealing_platform.rb
188
+ - lib/ig_markets/format.rb
172
189
  - lib/ig_markets/historical_price_result.rb
173
190
  - lib/ig_markets/instrument.rb
174
191
  - lib/ig_markets/market.rb
175
192
  - lib/ig_markets/market_hierarchy_result.rb
176
193
  - lib/ig_markets/market_overview.rb
194
+ - lib/ig_markets/model/typecasters.rb
177
195
  - lib/ig_markets/model.rb
178
196
  - lib/ig_markets/password_encryptor.rb
179
197
  - lib/ig_markets/payload_formatter.rb
@@ -186,53 +204,10 @@ files:
186
204
  - lib/ig_markets/version.rb
187
205
  - lib/ig_markets/watchlist.rb
188
206
  - lib/ig_markets/working_order.rb
189
- - spec/factories/ig_markets/account.rb
190
- - spec/factories/ig_markets/account_activity.rb
191
- - spec/factories/ig_markets/account_balance.rb
192
- - spec/factories/ig_markets/account_transaction.rb
193
- - spec/factories/ig_markets/application.rb
194
- - spec/factories/ig_markets/client_sentiment.rb
195
- - spec/factories/ig_markets/deal_confirmation.rb
196
- - spec/factories/ig_markets/historical_price_result.rb
197
- - spec/factories/ig_markets/historical_price_result_data_allowance.rb
198
- - spec/factories/ig_markets/historical_price_result_price.rb
199
- - spec/factories/ig_markets/historical_price_result_snapshot.rb
200
- - spec/factories/ig_markets/instrument.rb
201
- - spec/factories/ig_markets/instrument_currency.rb
202
- - spec/factories/ig_markets/instrument_expiry_details.rb
203
- - spec/factories/ig_markets/instrument_margin_deposit_band.rb
204
- - spec/factories/ig_markets/instrument_opening_hours.rb
205
- - spec/factories/ig_markets/instrument_rollover_details.rb
206
- - spec/factories/ig_markets/instrument_slippage_factor.rb
207
- - spec/factories/ig_markets/market.rb
208
- - spec/factories/ig_markets/market_dealing_rules.rb
209
- - spec/factories/ig_markets/market_dealing_rules_rule_details.rb
210
- - spec/factories/ig_markets/market_hierarchy_result.rb
211
- - spec/factories/ig_markets/market_hierarchy_result_hierarchy_node.rb
212
- - spec/factories/ig_markets/market_overview.rb
213
- - spec/factories/ig_markets/market_snapshot.rb
214
- - spec/factories/ig_markets/position.rb
215
- - spec/factories/ig_markets/sprint_market_position.rb
216
- - spec/factories/ig_markets/watchlist.rb
217
- - spec/factories/ig_markets/working_order.rb
218
- - spec/ig_markets/account_transaction_spec.rb
219
- - spec/ig_markets/dealing_platform/account_methods_spec.rb
220
- - spec/ig_markets/dealing_platform/client_sentiment_methods_spec.rb
221
- - spec/ig_markets/dealing_platform/market_methods_spec.rb
222
- - spec/ig_markets/dealing_platform/position_methods_spec.rb
223
- - spec/ig_markets/dealing_platform/sprint_market_position_methods_spec.rb
224
- - spec/ig_markets/dealing_platform/watchlist_methods_spec.rb
225
- - spec/ig_markets/dealing_platform/working_order_methods_spec.rb
226
- - spec/ig_markets/dealing_platform_spec.rb
227
- - spec/ig_markets/model_spec.rb
228
- - spec/ig_markets/password_encryptor_spec.rb
229
- - spec/ig_markets/payload_formatter_spec.rb
230
- - spec/ig_markets/position_spec.rb
231
- - spec/ig_markets/response_parser_spec.rb
232
- - spec/ig_markets/session_spec.rb
233
- - spec/spec_helper.rb
234
- - spec/support/factory_girl.rb
235
- - spec/support/random_test_order.rb
207
+ - lib/ig_markets.rb
208
+ - CHANGELOG.md
209
+ - LICENSE.md
210
+ - README.md
236
211
  homepage: https://github.com/rviney/ig_markets
237
212
  licenses:
238
213
  - MIT
@@ -253,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
228
  version: '0'
254
229
  requirements: []
255
230
  rubyforge_project:
256
- rubygems_version: 2.5.1
231
+ rubygems_version: 2.0.14
257
232
  signing_key:
258
233
  specification_version: 4
259
234
  summary: Ruby client for the IG Markets dealing platform.