ib-api 972.0 → 972.4

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