ib-api 972.0 → 972.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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +36 -37
  3. data/README.md +48 -3
  4. data/VERSION +1 -1
  5. data/api.gemspec +1 -1
  6. data/bin/console +4 -8
  7. data/changelog.md +12 -0
  8. data/lib/ib/base_properties.rb +3 -4
  9. data/lib/ib/connection.rb +18 -16
  10. data/lib/ib/logger.rb +1 -1
  11. data/lib/ib/messages/incoming.rb +1 -1
  12. data/lib/ib/messages/incoming/abstract_message.rb +7 -7
  13. data/lib/ib/messages/incoming/account_value.rb +5 -1
  14. data/lib/ib/messages/incoming/contract_data.rb +0 -2
  15. data/lib/ib/messages/incoming/historical_data.rb +25 -5
  16. data/lib/ib/messages/incoming/ticks.rb +21 -60
  17. data/lib/ib/messages/outgoing.rb +4 -2
  18. data/lib/ib/messages/outgoing/abstract_message.rb +3 -3
  19. data/lib/ib/messages/outgoing/bar_requests.rb +4 -5
  20. data/lib/ib/messages/outgoing/request_marketdata.rb +10 -7
  21. data/lib/ib/models.rb +1 -1
  22. data/lib/ib/support.rb +32 -15
  23. data/lib/logging.rb +45 -0
  24. data/lib/models/ib/account.rb +0 -13
  25. data/lib/models/ib/bag.rb +7 -1
  26. data/lib/models/ib/bar.rb +1 -1
  27. data/lib/models/ib/combo_leg.rb +22 -0
  28. data/lib/models/ib/contract.rb +44 -32
  29. data/lib/models/ib/contract_detail.rb +13 -7
  30. data/lib/models/ib/index.rb +1 -1
  31. data/lib/models/ib/option.rb +8 -2
  32. data/lib/models/ib/option_detail.rb +19 -3
  33. data/lib/models/ib/order.rb +5 -0
  34. data/lib/models/ib/spread.rb +168 -0
  35. data/lib/models/ib/stock.rb +9 -3
  36. data/lib/models/ib/underlying.rb +4 -1
  37. data/lib/requires.rb +10 -3
  38. metadata +9 -20
  39. data/example/README.md +0 -76
  40. data/example/account_info +0 -54
  41. data/example/account_positions +0 -30
  42. data/example/account_summary +0 -88
  43. data/example/cancel_orders +0 -74
  44. data/example/fa_accounts +0 -25
  45. data/example/fundamental_data +0 -40
  46. data/example/historic_data_cli +0 -186
  47. data/example/list_orders +0 -45
  48. data/example/portfolio_csv +0 -81
  49. data/example/scanner_data +0 -62
  50. data/example/template +0 -19
  51. data/example/tick_data +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 542bca5318150ae448c4b7578abd64beec70e5b35760eea8abfd22c28f5da1fd
4
- data.tar.gz: cb68b0afa4812eb224936f5269be2f6d6c825ea5f9bd21b25c1c9dfe21b70777
3
+ metadata.gz: fe3f4d98e27f1480eafe5ed066e42410fc97527fef692aba69b02a1db61836de
4
+ data.tar.gz: 8e9e733f6e383313a4c4275d5f95853944c573fb543c78f85280d41988c0e842
5
5
  SHA512:
6
- metadata.gz: 96bac41a8432c7175dcba4fa38548db4af966d370fc8e12570c4cfd28f89284afb3188ad50d1131859861cc40d414515772cece8bed147093de04aaaf3e6b2c5
7
- data.tar.gz: 57c186381a3da9eb7e2169d588ca99440c24993a41905ca9828c4490471a229d1e078739b34f58e666fffb7d4031bba0dfcae4a48e987667ce6d0d65246a66be
6
+ metadata.gz: 306dfc26bb138a25e1f9136a24f590d47ac1f555f94936960287937888e50c107bb7bc6f5c9f802ceb6096218a4c4a22ba363b36bccb47f25c206ea6f71b0772
7
+ data.tar.gz: 4d97ce95ccc74a2c3b6d1d88b0472433b0a9382bc5433d0fd100337d6906a84570d09c363e8282e44259deb0bf8f21cfe80814a904d46e8379938ec8b7f67b9a
data/Gemfile.lock CHANGED
@@ -1,31 +1,31 @@
1
1
  GIT
2
2
  remote: https://github.com/ohler55/ox.git
3
- revision: 67ce6ecb45a0d1354e1f8ed9a155826ba986e21e
3
+ revision: 59c4234fe01fb5de08d49b39ecf5fc7338c1ffdc
4
4
  specs:
5
- ox (2.13.4)
5
+ ox (2.14.4)
6
6
 
7
7
  PATH
8
8
  remote: .
9
9
  specs:
10
- ib-api (972.0)
10
+ ib-api (972.3.1)
11
11
  activemodel
12
12
  activesupport (>= 6.0)
13
13
 
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- activemodel (6.0.3.4)
18
- activesupport (= 6.0.3.4)
19
- activesupport (6.0.3.4)
17
+ activemodel (6.1.3.2)
18
+ activesupport (= 6.1.3.2)
19
+ activesupport (6.1.3.2)
20
20
  concurrent-ruby (~> 1.0, >= 1.0.2)
21
- i18n (>= 0.7, < 2)
22
- minitest (~> 5.1)
23
- tzinfo (~> 1.1)
24
- zeitwerk (~> 2.2, >= 2.2.2)
21
+ i18n (>= 1.6, < 2)
22
+ minitest (>= 5.1)
23
+ tzinfo (~> 2.0)
24
+ zeitwerk (~> 2.3)
25
25
  coderay (1.1.3)
26
- concurrent-ruby (1.1.7)
26
+ concurrent-ruby (1.1.8)
27
27
  diff-lcs (1.4.4)
28
- ffi (1.13.1)
28
+ ffi (1.15.0)
29
29
  formatador (0.2.5)
30
30
  guard (2.16.2)
31
31
  formatador (>= 0.2.4)
@@ -41,56 +41,55 @@ GEM
41
41
  guard (~> 2.1)
42
42
  guard-compat (~> 1.1)
43
43
  rspec (>= 2.99.0, < 4.0)
44
- i18n (1.8.5)
44
+ i18n (1.8.10)
45
45
  concurrent-ruby (~> 1.0)
46
- listen (3.2.1)
46
+ listen (3.5.1)
47
47
  rb-fsevent (~> 0.10, >= 0.10.3)
48
48
  rb-inotify (~> 0.9, >= 0.9.10)
49
49
  lumberjack (1.2.8)
50
50
  method_source (1.0.0)
51
- minitest (5.14.2)
51
+ minitest (5.14.4)
52
52
  nenv (0.3.0)
53
53
  notiffany (0.1.3)
54
54
  nenv (~> 0.1)
55
55
  shellany (~> 0.0)
56
- pry (0.13.1)
56
+ pry (0.14.1)
57
57
  coderay (~> 1.1)
58
58
  method_source (~> 1.0)
59
- rake (13.0.1)
60
- rb-fsevent (0.10.4)
59
+ rake (13.0.3)
60
+ rb-fsevent (0.11.0)
61
61
  rb-inotify (0.10.1)
62
62
  ffi (~> 1.0)
63
- rspec (3.9.0)
64
- rspec-core (~> 3.9.0)
65
- rspec-expectations (~> 3.9.0)
66
- rspec-mocks (~> 3.9.0)
63
+ rspec (3.10.0)
64
+ rspec-core (~> 3.10.0)
65
+ rspec-expectations (~> 3.10.0)
66
+ rspec-mocks (~> 3.10.0)
67
67
  rspec-collection_matchers (1.2.0)
68
68
  rspec-expectations (>= 2.99.0.beta1)
69
- rspec-core (3.9.3)
70
- rspec-support (~> 3.9.3)
71
- rspec-expectations (3.9.2)
69
+ rspec-core (3.10.1)
70
+ rspec-support (~> 3.10.0)
71
+ rspec-expectations (3.10.1)
72
72
  diff-lcs (>= 1.2.0, < 2.0)
73
- rspec-support (~> 3.9.0)
73
+ rspec-support (~> 3.10.0)
74
74
  rspec-its (1.3.0)
75
75
  rspec-core (>= 3.0.0)
76
76
  rspec-expectations (>= 3.0.0)
77
- rspec-mocks (3.9.1)
77
+ rspec-mocks (3.10.2)
78
78
  diff-lcs (>= 1.2.0, < 2.0)
79
- rspec-support (~> 3.9.0)
80
- rspec-support (3.9.3)
79
+ rspec-support (~> 3.10.0)
80
+ rspec-support (3.10.2)
81
81
  shellany (0.0.1)
82
- thor (1.0.1)
83
- thread_safe (0.3.6)
84
- tzinfo (1.2.7)
85
- thread_safe (~> 0.1)
82
+ thor (1.1.0)
83
+ tzinfo (2.0.4)
84
+ concurrent-ruby (~> 1.0)
86
85
  value_semantics (3.6.0)
87
- zeitwerk (2.4.0)
86
+ zeitwerk (2.4.2)
88
87
 
89
88
  PLATFORMS
90
- ruby
89
+ x86_64-linux
91
90
 
92
91
  DEPENDENCIES
93
- bundler (~> 1.17)
92
+ bundler
94
93
  guard
95
94
  guard-rspec
96
95
  ib-api!
@@ -102,4 +101,4 @@ DEPENDENCIES
102
101
  value_semantics
103
102
 
104
103
  BUNDLED WITH
105
- 1.17.3
104
+ 2.2.3
data/README.md CHANGED
@@ -3,6 +3,7 @@ Ruby interface to Interactive Brokers' TWS API
3
3
 
4
4
  Reimplementation of the basic functions of ib-ruby
5
5
 
6
+ __Documentation: [https://ib-ruby.github.io/ib-doc/](https://ib-ruby.github.io/ib-doc/)__ (_work in progress_)
6
7
 
7
8
  ----
8
9
  `ib-ruby` offers a modular access to the TWS-API-Interface of Interactive Brokers.
@@ -11,12 +12,18 @@ Reimplementation of the basic functions of ib-ruby
11
12
 
12
13
  ----
13
14
 
14
- In its plain vanilla usage, it just exchanges messages with the TWS. The user is responsible for any further data processing.
15
+ Install in the usual way
15
16
 
17
+ ```
18
+ $ gem install ib-api
19
+ ```
20
+
21
+ In its plain vanilla usage, it just exchanges messages with the TWS. Any response is stored in the `recieved-Array`.
16
22
 
17
23
  Even then, it needs just a few lines of code to place an order
18
24
 
19
25
  ```ruby
26
+ require 'ib-api'
20
27
  # connect with default parameters
21
28
  ib = IB::Connection.new
22
29
 
@@ -38,10 +45,48 @@ puts ib.recieved[:OrderStatus].to_human
38
45
 
39
46
  # => ["<OrderState: Submitted #17/1528367295 from 2000 filled 0.0/100.0 at 0.0/0.0 why_held >"]
40
47
 
48
+ ```
49
+
50
+ ##### User-specific Actions
51
+ Besides storing any TWS-response in an array, callbacks are implemented.
52
+
53
+ The user subscribes to a certain response and defines the actions in a typically ruby manner. These actions
54
+ can be defined globaly
55
+ ```ruby
56
+ ib = IB::Connection.new do |tws|
57
+ # Subscribe to TWS alerts/errors and order-related messages
58
+ tws.subscribe(:Alert, :OpenOrder, :OrderStatus, :OpenOrderEnd) { |msg| puts msg.to_human }
59
+ end
60
+
61
+ ```
62
+
63
+ or occationally
64
+
65
+ ```ruby
66
+ # first define actions
67
+ a = ib.subscribe(:Alert, :ContractData ) do |msg|
68
+ case msg
69
+ when Messages::Incoming::Alert
70
+ if msg.code == 200 # No security found
71
+ # do someting
72
+ end
73
+ when Messages::Incoming::ContractData # security returned
74
+ # do something
75
+
76
+ end # case
77
+ end
78
+ # perform request
79
+ ib.send_message :RequestContractData, :contract => #{some contract}
80
+
81
+ # wait until the :ContractDataEnd message returned
82
+ ib.wait_for :ContractDataEnd
83
+
84
+ ib.unsubscribe a # release subscriptions
85
+
41
86
  ```
42
87
  ## Minimal TWS-Version
43
88
 
44
- `ib-api` is tested via the _stable ib-Gateway_ (Version 9.72)
89
+ `ib-api` is tested via the _stable IB-Gateway_ (Version 9.72) and should work with any current tws-installation.
45
90
 
46
91
  ## Tests
47
92
 
@@ -58,7 +103,7 @@ You have to edit `spec/spec.yml` and replace the `:account`-Setting with your ow
58
103
 
59
104
  ## Contributing
60
105
 
61
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ib-api. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
106
+ Bug reports and pull requests are welcome. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
62
107
 
63
108
  ## Code of Conduct
64
109
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 972.0
1
+ 972.4
data/api.gemspec CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
36
  spec.require_paths = ["lib"]
37
37
 
38
- spec.add_development_dependency "bundler", "~> 1.17"
38
+ spec.add_development_dependency "bundler"
39
39
  spec.add_development_dependency "rake", "~> 13.0"
40
40
  spec.add_development_dependency "rspec", "~> 3.0"
41
41
  spec.add_dependency 'activesupport', '>= 6.0'
data/bin/console CHANGED
@@ -10,8 +10,6 @@
10
10
  require 'bundler/setup'
11
11
  require 'yaml'
12
12
 
13
- require 'logger'
14
-
15
13
  require 'ib-api'
16
14
 
17
15
  class Array
@@ -47,7 +45,6 @@ read_yml = -> (key) do
47
45
  puts "Namespace is IB ! "
48
46
  puts
49
47
  puts '-'* 45
50
- include LogDev
51
48
  include IB
52
49
  require 'irb'
53
50
  client_id = ARGV[1] || read_yml[:client_id]
@@ -62,16 +59,15 @@ read_yml = -> (key) do
62
59
  end
63
60
 
64
61
  ARGV.clear
65
- logger = default_logger # Logger.new STDOUT
66
62
 
67
63
  ## The Block takes instructions which are executed after initializing all instance-variables
68
64
  ## and prior to the connection-process
69
65
  ## Here we just subscribe to some events
70
66
  C = Connection.new client_id: client_id, port: port do |c| # future use__ , optional_capacities: "+PACEAPI" do |c|
71
67
 
72
- c.subscribe( :ContractData, :BondContractData) { |msg| logger.info { msg.contract.to_human } }
73
- c.subscribe( :Alert, :ContractDataEnd, :ManagedAccounts, :OrderStatus ) {| m| logger.info { m.to_human } }
74
- c.subscribe( :PortfolioValue, :AccountValue, :OrderStatus, :OpenOrderEnd, :ExecutionData ) {| m| logger.info { m.to_human }}
68
+ c.subscribe( :ContractData, :BondContractData) { |msg| c.logger.info { msg.contract.to_human } }
69
+ c.subscribe( :Alert, :ContractDataEnd, :ManagedAccounts, :OrderStatus ) {| m| c.logger.info { m.to_human } }
70
+ c.subscribe( :PortfolioValue, :AccountValue, :OrderStatus, :OpenOrderEnd, :ExecutionData ) {| m| c.logger.info { m.to_human }}
75
71
  # c.subscribe :ManagedAccounts do |msg|
76
72
  # puts "------------------------------- Managed Accounts ----------------------------------"
77
73
  # puts "Detected Accounts: #{msg.accounts.account.join(' -- ')} "
@@ -79,8 +75,8 @@ read_yml = -> (key) do
79
75
  # end
80
76
 
81
77
  c.subscribe( :OpenOrder){ |msg| "Open Order detected and stored: C.received[:OpenOrders] " }
82
- c.logger.level = Logger::INFO
83
78
  end
79
+ C.logger.level = Logger::INFO
84
80
  unless C.received[:OpenOrder].blank?
85
81
  puts "------------------------------- OpenOrders ----------------------------------"
86
82
  puts C.received[:OpenOrder].to_human.join "\n"
data/changelog.md CHANGED
@@ -5,3 +5,15 @@ Changelog
5
5
  |=++++ |=++++++++++++ |
6
6
  | 30.8.2020 | migrating lib-files from ib-ruby-project |
7
7
 
8
+ | 28.11.2020| separating lib/model and lib/models to enable extension with
9
+ ActiveRecord/Rails and OrientDB/ActiveOrient. |
10
+ | | Introducing a Database-Switch in /lib/requires to omit
11
+ loading of model- and messages files. This has to be done
12
+ manually after assigning the database-model framework. |
13
+
14
+ | 1.12.2020 | moving model/ib/spread.rb from `ib-extensions` to `ib-api`.|
15
+ | 1.12.2020 | creating a dummy Contract#verify to guaranty safe operation of spreads |
16
+
17
+ | | Preparation of a Gem-Release |
18
+ | 23.2.2021 | Fixed retrieving of ContractDetail requests of Options with strikes < 1
19
+ | | Gem Release |
@@ -19,11 +19,10 @@ module IB
19
19
 
20
20
  # Comparison support
21
21
  def content_attributes
22
- #HashWithIndifferentAccess[attributes.reject do |(attr, _)|
23
22
  #NoMethodError if a Hash is assigned to an attribute
24
23
  Hash[attributes.reject do |(attr, _)|
25
24
  attr.to_s =~ /(_count)\z/ ||
26
- [:created_at, :updated_at, :type,
25
+ [:created_at, :type, # :updated_at,
27
26
  :id, :order_id, :contract_id].include?(attr.to_sym)
28
27
  end]
29
28
  end
@@ -151,9 +150,9 @@ Remove all Time-Stamps from the list of Attributes
151
150
  end
152
151
 
153
152
  # Timestamps in lightweight models
154
- unless defined?(ActiveRecord::Base) && ancestors.include?(ActiveRecord::Base)
153
+ # unless defined?(ActiveRecord::Base) && ancestors.include?(ActiveRecord::Base)
155
154
  prop :created_at #, :updated_at
156
- end
155
+ # end
157
156
 
158
157
  end # included
159
158
  end # module BaseProperties
data/lib/ib/connection.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require 'thread'
2
2
  #require 'active_support'
3
3
  require 'ib/socket'
4
- require 'ib/logger'
4
+ require 'logger'
5
+ require 'logging'
5
6
  require 'ib/messages'
6
7
 
7
8
  module IB
@@ -18,10 +19,9 @@ module IB
18
19
  ## public data-queue: received, received?, wait_for, clear_received
19
20
  ## misc: reader_running?
20
21
 
21
- include LogDev # provides default_logger
22
+ include Support::Logging # provides default_logger
22
23
 
23
24
  mattr_accessor :current
24
- mattr_accessor :logger ## borrowed from active_support
25
25
  # Please note, we are realizing only the most current TWS protocol versions,
26
26
  # thus improving performance at the expense of backwards compatibility.
27
27
  # Older protocol versions support can be found in older gem versions.
@@ -40,7 +40,7 @@ module IB
40
40
  connect: true, # Connect at initialization
41
41
  received: true, # Keep all received messages in a @received Hash
42
42
  # redis: false, # future plans
43
- logger: default_logger,
43
+ logger: nil,
44
44
  client_id: rand( 1001 .. 9999 ) ,
45
45
  client_version: IB::Messages::CLIENT_VERSION, # lib/ib/server_versions.rb
46
46
  optional_capacities: "", # TWS-Version 974: "+PACEAPI"
@@ -49,17 +49,13 @@ module IB
49
49
  # V 974 release motes
50
50
  # API messages sent at a higher rate than 50/second can now be paced by TWS at the 50/second rate instead of potentially causing a disconnection. This is now done automatically by the RTD Server API and can be done with other API technologies by invoking SetConnectOptions("+PACEAPI") prior to eConnect.
51
51
 
52
-
52
+ self.class.configure_logger logger
53
53
  # convert parameters into instance-variables and assign them
54
- method(__method__).parameters.each do |type, k|
55
- next unless type == :key
56
- case k
57
- when :logger
58
- self.logger = logger
59
- else
54
+ method(__method__).parameters.each do |type, k|
55
+ next unless type == :key ## available: key , keyrest
56
+ next if k.to_s == 'logger'
60
57
  v = eval(k.to_s)
61
58
  instance_variable_set("@#{k}", v) unless v.nil?
62
- end
63
59
  end
64
60
 
65
61
  # A couple of locks to avoid race conditions in JRuby
@@ -79,9 +75,9 @@ module IB
79
75
  yield self if block_given?
80
76
 
81
77
  self.subscribe(:NextValidId) do |msg|
82
- logger.progname = "Connection#connect"
78
+ self.logger.progname = "Connection#connect"
83
79
  self.next_local_id = msg.local_id
84
- logger.info { "Got next valid order id: #{next_local_id}." }
80
+ self.logger.info { "Got next valid order id: #{next_local_id}." }
85
81
  end
86
82
 
87
83
  # Ensure the transmission of NextValidId.
@@ -100,7 +96,7 @@ module IB
100
96
  def update_next_order_id
101
97
  i,finish = 0, false
102
98
  sub = self.subscribe(:NextValidID) { finish = true }
103
- connected? ? self.send_message( :RequestIds ) : open()
99
+ connected? ? self.send_message( :RequestIds ) : open()
104
100
  Timeout::timeout(1, IB::TransmissionError,"Could not get NextValidId" ) do
105
101
  loop { sleep 0.1; break if finish }
106
102
  end
@@ -186,7 +182,13 @@ module IB
186
182
  when what.is_a?(Class) && what < Messages::Incoming::AbstractMessage
187
183
  [what]
188
184
  when what.is_a?(Symbol)
189
- [Messages::Incoming.const_get(what)]
185
+ if Messages::Incoming.const_defined?(what)
186
+ [Messages::Incoming.const_get(what)]
187
+ elsif TechnicalAnalysis::Signals.const_defined?(what)
188
+ [TechnicalAnalysis::Signals.const_get?(what)]
189
+ else
190
+ error "#{what} is no IB::Messages or TechnicalAnalyis::Signals class"
191
+ end
190
192
  when what.is_a?(Regexp)
191
193
  Messages::Incoming::Classes.values.find_all { |klass| klass.to_s =~ what }
192
194
  else
data/lib/ib/logger.rb CHANGED
@@ -18,7 +18,7 @@ module LogDev
18
18
  end
19
19
 
20
20
  # Add universally accessible log method/accessor into Object
21
- def log *args
21
+ def logger *args
22
22
  default_logger.tap do |logger|
23
23
  logger.fatal *args unless args.empty?
24
24
  end
@@ -139,7 +139,7 @@ module IB
139
139
  TickRequestParameters = def_message [81, 0], [ :ticker_id, :int ],
140
140
  [ :min_tick, :decimal],
141
141
  [ :exchange, :string ],
142
- [ :snapshot_prermissions, :int ]
142
+ [ :snapshot_permissions, :int ]
143
143
  # class TickRequestParameters
144
144
  # def load
145
145
  # simple_load
@@ -30,12 +30,12 @@ module IB
30
30
  @created_at = Time.now
31
31
  if source.is_a?(Hash) # Source is a @data Hash
32
32
  @data = source
33
- @buffer =[] # initialize empty buffer, indicates a successfull initializing
33
+ @buffer =[] # initialize empty buffer, indicates a successful initializing
34
34
  else
35
35
  @buffer = source
36
36
  ### DEBUG DEBUG DEBUG RAW STREAM ###############
37
37
  # if uncommented, the raw-input from the tws is included in the logging
38
- # puts "BUFFER :> #{buffer.inspect} "
38
+ ## puts "BUFFER :> #{buffer.inspect} "
39
39
  ### DEBUG DEBUG DEBUG RAW STREAM ###############
40
40
  @data = Hash.new
41
41
  self.load
@@ -43,11 +43,11 @@ module IB
43
43
  end
44
44
 
45
45
  def valid?
46
- @buffer.empty?
46
+ @buffer.empty?
47
47
  end
48
48
 
49
49
  ## more recent messages omit the transmission of a version
50
- ## thus just load the parameter-map
50
+ ## thus just load the parameter-map
51
51
  def simple_load
52
52
  load_map *self.class.data_map
53
53
  rescue IB::Error => e
@@ -87,7 +87,7 @@ module IB
87
87
 
88
88
  when Symbol # Normal map
89
89
  group, name, type, block =
90
- if instruction[2].nil? || instruction[2].is_a?(Proc) # lambda's are Proc's
90
+ if instruction[2].nil? || instruction[2].is_a?(Proc) # lambda's are Proc's
91
91
  [nil] + instruction # No group, [ :name, :type, (:block) ]
92
92
  else
93
93
  instruction # [ :group, :name, :type, (:block)]
@@ -95,14 +95,14 @@ module IB
95
95
  begin
96
96
  data = @buffer.__send__("read_#{type}", &block)
97
97
  rescue IB::LoadError, NoMethodError => e
98
- error "Reading #{self.class}: #{e.class}: #{e.message} --> Instruction: #{name}" , :reader, false
98
+ error "Reading #{self.class}: #{e.class}: #{e.message} --> Instruction: #{name}" , :reader, false
99
99
  end
100
100
  # debug puts data.inspect
101
101
  if group
102
102
  @data[group] ||= {}
103
103
  @data[group][name] = data
104
104
  else
105
- @data[name] = data
105
+ @data[name] = data
106
106
  end
107
107
  else
108
108
  error "Unrecognized instruction #{instruction}"