ib-api icon indicating copy to clipboard operation
ib-api copied to clipboard

Apply rubocop

Open kvokka opened this issue 5 years ago • 2 comments

Project contain tons of hassle which makes reading the code harder, rubocop should heal it

kvokka avatar Oct 08 '20 06:10 kvokka

Hi, I was unable to run the tests after applying the changes. Got

newdevel:~/workspace/ib-api$ bundle exec guard
18:46:25 - INFO - Guard::RSpec is running
18:46:25 - INFO - Guard is now watching at '/home/ubuntu/workspace/ib-api'
18:46:54 - INFO - Running: spec/ib/connect_spec.rb

An error occurred while loading spec_helper.
Failure/Error: self::Classes[message_id] = message_class

FrozenError:
  can't modify frozen Hash
# ./lib/ib/messages/abstract_message.rb:92:in `def_message'
# ./lib/ib/messages/outgoing.rb:20:in `<module:Outgoing>'
# ./lib/ib/messages/outgoing.rb:8:in `<module:Messages>'
# ./lib/ib/messages/outgoing.rb:6:in `<module:IB>'
# ./lib/ib/messages/outgoing.rb:5:in `<top (required)>'
# ./lib/ib/messages.rb:11:in `require'
# ./lib/ib/messages.rb:11:in `<top (required)>'
# ./lib/ib/connection.rb:4:in `require'
# ./lib/ib/connection.rb:4:in `<top (required)>'
# ./lib/requires.rb:8:in `require'
# ./lib/requires.rb:8:in `<top (required)>'
# ./lib/ib-api.rb:6:in `require'
# ./lib/ib-api.rb:6:in `<top (required)>'
# ./spec/spec_helper.rb:7:in `require'
# ./spec/spec_helper.rb:7:in `<top (required)>'

revoked the merge into to master branch.

Lets look together, what went wrong (mail me: topofocus@gmail,com)

topofocus avatar Oct 12 '20 19:10 topofocus

Hi, using the improved random id generation I run in some trouble

newdevel:~/workspace/ib-api/bin$ ./console 

>> IB-Core Interactive Console <<
---------------------------------------------

Namespace is IB ! 

---------------------------------------------
Connected to server, version: 137,
 connection time: 2020-10-15 12:47:44 +0000 local, 2020-10-15T12:47:43+00:00 remote.
< ManagedAccounts: DF167347 - DU167348 - DU167349>
TWS Warning 2107: HMDS data farm connection is inactive but should be available upon demand.ushmds
newdevel:~/workspace/ib-api/bin$ 

the console does not start

First I changed the method name to 'generate', because ib-api at some point tests if a Constant responds to call.

Same result.

When i switched bach to `random 99999' anything works fine again. Then

newdevel:~/workspace/ib-api/lib$ grep -rn random_id .
./ib/connection.rb:44:                   client_id: random_id,
./ib/connection.rb:179:        id = random_id
./ib/connection.rb:416:		def random_id

leads to the solution: random_id is also used to generate id's for the received-array, where messages arriving from the tws are stored.

   def subscribe *args, &block
      @subscribe_lock.synchronize do
        subscriber = args.last.respond_to?(:call) ? args.pop : block
        id = random_id

Then this experiment reveals the problem. Modifiying random_it to

		def random_id
			puts SafeRandIdGenerator.generate
			rand 9999
		end

ans subsequent usage of the console ``'` newdevel:~/workspace/ib-api/bin$ ./console

IB-Core Interactive Console

Namespace is IB !


25967018522 25967018522 25967018522 25967018522 25967018522 25967018522 Connected to server, version: 137, connection time: 2020-10-15 13:03:38 +0000 local, 2020-10-15T13:03:37+00:00 remote. < ManagedAccounts: DF167347 - DU167348 - DU167349> Got next valid order id: 14.


exploits that tws-messages went to only one received-array-entry. 

No wonder, that the application crashes.

topofocus avatar Oct 15 '20 13:10 topofocus