ig_markets 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
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.