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
data/.codeclimate.yml DELETED
@@ -1,15 +0,0 @@
1
- engines:
2
- duplication:
3
- enabled: true
4
- config:
5
- languages:
6
- - ruby
7
- fixme:
8
- enabled: true
9
- rubocop:
10
- enabled: true
11
- ratings:
12
- paths:
13
- - "**.rb"
14
- exclude_paths:
15
- - spec/**/*
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /*.gem
2
- *.rbc
3
- /.bundle
4
- /.yardoc
5
- /coverage
6
- /doc
7
- /Gemfile.lock
8
- /tmp
9
- /vendor
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --require spec_helper
data/.rubocop.yml DELETED
@@ -1,2 +0,0 @@
1
- Metrics/LineLength:
2
- Max: 120
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0
4
- - 2.1
5
- - 2.2
6
- - 2.3.0
7
- script: bundle exec rspec
8
- addons:
9
- code_climate:
10
- repo_token: 9c6f0528b1bec40e8d0426f750c9402dab6e763f7a12b7fcae343f57ccb20a33
data/.yardopts DELETED
@@ -1,4 +0,0 @@
1
- --markup markdown
2
- --markup-provider redcarpet
3
- --no-private
4
- --title "IG Markets Gem"
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/ig_markets.gemspec DELETED
@@ -1,28 +0,0 @@
1
- $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
- require 'ig_markets/version'
3
-
4
- Gem::Specification.new do |s|
5
- s.name = 'ig_markets'
6
- s.version = IGMarkets::VERSION
7
- s.platform = Gem::Platform::RUBY
8
- s.license = 'MIT'
9
- s.summary = 'Ruby client for the IG Markets dealing platform.'
10
- s.description = 'Ruby client for the IG Markets dealing platform.'
11
- s.homepage = 'https://github.com/rviney/ig_markets'
12
- s.author = 'Richard Viney'
13
- s.email = 'richard.viney@gmail.com'
14
- s.files = `git ls-files`.split("\n")
15
-
16
- s.required_ruby_version = '>= 2.0'
17
-
18
- s.add_runtime_dependency 'rest-client', '~> 1.8'
19
-
20
- s.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
21
- s.add_development_dependency 'factory_girl', '~> 4.7'
22
- s.add_development_dependency 'github-markup', '~> 1.4'
23
- s.add_development_dependency 'redcarpet', '~> 3.3'
24
- s.add_development_dependency 'rspec', '~> 3.4'
25
- s.add_development_dependency 'rspec-mocks', '~> 3.4'
26
- s.add_development_dependency 'rubocop', '~> 0.39'
27
- s.add_development_dependency 'yard', '~> 0.8'
28
- end
@@ -1,14 +0,0 @@
1
- FactoryGirl.define do
2
- factory :account, class: IGMarkets::Account do
3
- account_alias 'alias'
4
- account_id 'A1234'
5
- account_name 'CFD'
6
- account_type 'CFD'
7
- balance { build :account_balance }
8
- can_transfer_from true
9
- can_transfer_to true
10
- currency 'USD'
11
- preferred true
12
- status 'ENABLED'
13
- end
14
- end
@@ -1,21 +0,0 @@
1
- FactoryGirl.define do
2
- factory :account_activity, class: IGMarkets::AccountActivity do
3
- action_status 'ACCEPT'
4
- activity 'S&L'
5
- activity_history_id '443487452'
6
- channel 'Charts'
7
- currency '$'
8
- date '20/12/15'
9
- deal_id 'DIAAAAA4HDKPQEQ'
10
- epic 'CS.D.NZDUSD.CFD.IP'
11
- level '0.664'
12
- limit '0.6649'
13
- market_name 'Spot FX NZD/USD'
14
- period '-'
15
- result 'Result'
16
- size '+1'
17
- stop '-'
18
- stop_type '-'
19
- time '07:00'
20
- end
21
- end
@@ -1,8 +0,0 @@
1
- FactoryGirl.define do
2
- factory :account_balance, class: IGMarkets::Account::Balance do
3
- available 5000.0
4
- balance 5000.0
5
- deposit 0.0
6
- profit_loss 0.0
7
- end
8
- end
@@ -1,15 +0,0 @@
1
- FactoryGirl.define do
2
- factory :account_transaction, class: IGMarkets::AccountTransaction do
3
- cash_transaction false
4
- close_level '0.8'
5
- currency 'US'
6
- date '23/06/15'
7
- instrument_name 'instrument'
8
- open_level '0.8'
9
- period '-'
10
- profit_and_loss '0.0'
11
- reference 'reference'
12
- size '+1'
13
- transaction_type 'DEAL'
14
- end
15
- end
@@ -1,21 +0,0 @@
1
- FactoryGirl.define do
2
- factory :application, class: IGMarkets::Application do
3
- id 1234
4
- client_id '8761232322'
5
- name 'TestAccount'
6
- tier 'B2C'
7
- api_key 'api_key'
8
- status 'ENABLED'
9
- allowance_application_overall 60.0
10
- allowance_account_trading 100.0
11
- allowance_account_overall 30.0
12
- allowance_account_historical_data 1000.0
13
- concurrent_subscriptions_limit 40
14
- created_date 1_433_116_800_000
15
- allow_equities false
16
- allow_quote_orders false
17
- restricted_to_self true
18
- terms_accepted_date 1_433_116_800_000
19
- fast_markets_settlement_price_enabled false
20
- end
21
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :client_sentiment, class: IGMarkets::ClientSentiment do
3
- long_position_percentage 60.0
4
- market_id 'EURUSD'
5
- short_position_percentage 40.0
6
- end
7
- end
@@ -1,20 +0,0 @@
1
- FactoryGirl.define do
2
- factory :deal_confirmation, class: IGMarkets::DealConfirmation do
3
- affected_deals []
4
- deal_id 'id'
5
- deal_reference 'reference'
6
- deal_status 'ACCEPTED'
7
- direction 'BUY'
8
- epic 'CS.D.EURUSD.CFD.IP'
9
- expiry '20-DEC-40'
10
- guaranteed_stop false
11
- level 100.0
12
- limit_distance 10.0
13
- limit_level 110.0
14
- reason 'SUCCESS'
15
- size 1
16
- stop_distance 10.0
17
- stop_level 90.0
18
- trailing_stop false
19
- end
20
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :historical_price_result, class: IGMarkets::HistoricalPriceResult do
3
- allowance { build :historical_price_result_data_allowance }
4
- instrument_type :currencies
5
- prices { [build(:historical_price_result_snapshot)] }
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :historical_price_result_data_allowance, class: IGMarkets::HistoricalPriceResult::DataAllowance do
3
- allowance_expiry 1000
4
- remaining_allowance 4990
5
- total_allowance 5000
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :historical_price_result_price, class: IGMarkets::HistoricalPriceResult::Price do
3
- ask 101.0
4
- bid 99.0
5
- last_traded nil
6
- end
7
- end
@@ -1,10 +0,0 @@
1
- FactoryGirl.define do
2
- factory :historical_price_result_snapshot, class: IGMarkets::HistoricalPriceResult::Snapshot do
3
- close_price { build :historical_price_result_price }
4
- high_price { build :historical_price_result_price }
5
- last_traded_volume 100
6
- low_price { build :historical_price_result_price }
7
- open_price { build :historical_price_result_price }
8
- snapshot_time '2015/06/16 00:00:00'
9
- end
10
- end
@@ -1,32 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument, class: IGMarkets::Instrument do
3
- chart_code 'code'
4
- contract_size '+1'
5
- controlled_risk_allowed false
6
- country 'US'
7
- currencies { [build(:instrument_currency)] }
8
- epic 'ABCDEF'
9
- expiry '20-DEC-40'
10
- expiry_details { build :instrument_expiry_details }
11
- force_open_allowed false
12
- lot_size 1000.0
13
- margin_deposit_bands { [build(:instrument_margin_deposit_band)] }
14
- margin_factor 0.01
15
- margin_factor_unit 'PERCENTAGE'
16
- market_id 'market'
17
- name 'instrument'
18
- news_code 'news_code'
19
- one_pip_means ''
20
- opening_hours { { market_times: [build(:instrument_opening_hours)] } }
21
- rollover_details { build :instrument_rollover_details }
22
- slippage_factor { build :instrument_slippage_factor }
23
- special_info %w(info_0 info_1)
24
- sprint_markets_maximum_expiry_time 100.0
25
- sprint_markets_minimum_expiry_time 10.0
26
- stops_limits_allowed true
27
- streaming_prices_available true
28
- type 'SHARES'
29
- unit 'SHARES'
30
- value_of_one_pip 'pip'
31
- end
32
- end
@@ -1,9 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument_currency, class: IGMarkets::Instrument::Currency do
3
- base_exchange_rate 1.5
4
- code 'USD'
5
- exchange_rate '1.5'
6
- is_default false
7
- symbol 'USD'
8
- end
9
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument_expiry_details, class: IGMarkets::Instrument::ExpiryDetails do
3
- last_dealing_date '2015/01/20 12:13:14'
4
- settlement_info 'info'
5
- end
6
- end
@@ -1,8 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument_margin_deposit_band, class: IGMarkets::Instrument::MarginDepositBand do
3
- currency 'USD'
4
- margin 0.01
5
- max 0.01
6
- min 0.01
7
- end
8
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument_opening_hours, class: IGMarkets::Instrument::OpeningHours do
3
- close_time '5pm'
4
- open_time '8am'
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument_rollover_details, class: IGMarkets::Instrument::RolloverDetails do
3
- last_rollover_time ''
4
- rollover_info ''
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :instrument_slippage_factor, class: IGMarkets::Instrument::SlippageFactor do
3
- unit 'USD'
4
- value 1
5
- end
6
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market, class: IGMarkets::Market do
3
- dealing_rules { build :market_dealing_rules }
4
- instrument
5
- snapshot { build :market_snapshot }
6
- end
7
- end
@@ -1,11 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market_dealing_rules, class: IGMarkets::Market::DealingRules do
3
- market_order_preference 'AVAILABLE_DEFAULT_ON'
4
- trailing_stops_preference 'AVAILABLE'
5
- max_stop_or_limit_distance { build :market_dealing_rules_rule_details }
6
- min_controlled_risk_stop_distance { build :market_dealing_rules_rule_details }
7
- min_deal_size { build :market_dealing_rules_rule_details }
8
- min_normal_stop_or_limit_distance { build :market_dealing_rules_rule_details }
9
- min_step_distance { build :market_dealing_rules_rule_details }
10
- end
11
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market_dealing_rules_rule_details, class: IGMarkets::Market::DealingRules::RuleDetails do
3
- unit 'POINTS'
4
- value 1.0
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market_hierarchy_result, class: IGMarkets::MarketHierarchyResult do
3
- markets { [build(:market_overview)] }
4
- nodes { [build(:market_hierarchy_result_hierarchy_node)] }
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market_hierarchy_result_hierarchy_node, class: IGMarkets::MarketHierarchyResult::HierarchyNode do
3
- id '174882'
4
- name 'Indices'
5
- end
6
- end
@@ -1,22 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market_overview, class: IGMarkets::MarketOverview do
3
- bid 100
4
- delay_time 0.0
5
- epic 'CS.D.EURUSD.CFD.IP'
6
- exchange_id nil
7
- expiry '-'
8
- high 110.0
9
- instrument_name 'Spot FX EUR/USD'
10
- instrument_type 'CURRENCIES'
11
- lot_size 10.0
12
- low 90.0
13
- market_status 'TRADEABLE'
14
- net_change 5
15
- offer 99
16
- percentage_change 5
17
- scaling_factor 10.0
18
- streaming_prices_available true
19
- update_time '01:09:48'
20
- update_time_utc '04:09:48'
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- FactoryGirl.define do
2
- factory :market_snapshot, class: IGMarkets::Market::Snapshot do
3
- bid 100.0
4
- binary_odds 0.5
5
- controlled_risk_extra_spread 0.01
6
- decimal_places_factor 1
7
- delay_time 1
8
- high 110.0
9
- low 90.0
10
- market_status 'TRADEABLE'
11
- net_change 10.0
12
- offer 99.0
13
- percentage_change 10
14
- scaling_factor 100
15
- update_time '22:10:40'
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- FactoryGirl.define do
2
- factory :position, class: IGMarkets::Position do
3
- contract_size 1000.0
4
- controlled_risk false
5
- created_date '2015/08/17 10:27:28:000'
6
- created_date_utc '2015-07-24T09:12:37'
7
- currency 'USD'
8
- deal_id 'DIAAAAA8JKPFTVA'
9
- direction 'BUY'
10
- level 100.0
11
- limit_level 110.0
12
- size 1
13
- stop_level 90.0
14
- trailing_step nil
15
- trailing_stop_distance nil
16
-
17
- market { build :market_overview }
18
- end
19
- end