intrinio-realtime 5.1.0 → 5.3.0

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/intrinio-realtime.rb +40 -12
  3. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aa4f4dd35aeb0249722b61a5781edc9c7f621b0edfffb32b0ee7be771a3e3d2d
4
- data.tar.gz: dcea71654614604c02f3194009386b09857637c6faa463aca3f6c507df625553
3
+ metadata.gz: f696c1e3e3db91f9218efaf3fcb490c54791debf839ff10d564c0d29ced96039
4
+ data.tar.gz: 1531abd465e870b89122bb2c4865a5cabe8ac24703b1cb77f5cd0f0045645158
5
5
  SHA512:
6
- metadata.gz: 5a4180e823e6bd20357105dc3e40ad2753d81a109b5c661c76ac36d989f9de1b266c64188f6796ba5e345d33985bb503aab98a0798e7af3e31093477b4dbd3f2
7
- data.tar.gz: e35bacfcda00abbbf89f369f1a9c8d100f658b29955987d76fadc47ac150a02776b68de2f9b0628378a30b3cb916072ddebce45169516842f1b8f8d2619bfe24
6
+ metadata.gz: 50311b794219b5c7075e358f371723faaefef1bfd0702f28094f715f1f1b030c7102eaf17dcf50beb00a894dcd7c54b9c4e5090937e638fd495785e811143fa5
7
+ data.tar.gz: 348ed82e5ae99575c8989d753229ad9a9aeabb077737690839b0d281e631e9d19262d0638b9325c8fe62566c06dc7a9d10a1be1b13451e67d80fdde3c11f6291
@@ -18,12 +18,14 @@ module Intrinio
18
18
  UTP = "UTP".freeze
19
19
  OTC = "OTC".freeze
20
20
  IEX = "IEX".freeze
21
- PROVIDERS = [REALTIME, MANUAL, DELAYED_SIP, NASDAQ_BASIC].freeze
22
- SUBPROVIDERS = [NO_SUBPROVIDER, CTA_A, CTA_B, UTP, OTC, NASDAQ_BASIC, IEX].freeze
21
+ CBOE_ONE = "CBOE_ONE".freeze
22
+ EQUITIES_EDGE = "EQUITIES_EDGE".freeze
23
+ PROVIDERS = [REALTIME, MANUAL, DELAYED_SIP, NASDAQ_BASIC, IEX, CBOE_ONE, EQUITIES_EDGE].freeze
24
+ SUBPROVIDERS = [NO_SUBPROVIDER, CTA_A, CTA_B, UTP, OTC, NASDAQ_BASIC, IEX, CBOE_ONE, EQUITIES_EDGE].freeze
23
25
  ASK = "Ask".freeze
24
26
  BID = "Bid".freeze
25
27
  CLIENT_INFO_HEADER_KEY = "Client-Information".freeze
26
- CLIENT_INFO_HEADER_VALUE = "IntrinioRealtimeRubySDKv5.0".freeze
28
+ CLIENT_INFO_HEADER_VALUE = "IntrinioRealtimeRubySDKv5.3".freeze
27
29
  MESSAGE_VERSION_HEADER_KEY = "UseNewEquitiesFormat".freeze
28
30
  MESSAGE_VERSION_HEADER_VALUE = "v2".freeze
29
31
 
@@ -79,7 +81,14 @@ module Intrinio
79
81
  end
80
82
 
81
83
  def is_darkpool
82
- @market_center == nil || @market_center == 'D' || @market_center == 'E' || @market_center == "\0" || @market_center.empty?
84
+ case @subprovider
85
+ when CTA_A, CTA_B, UTP, OTC
86
+ @market_center == nil || @market_center == 'D' || @market_center == 'E' || @market_center == "\0" || @market_center.empty?
87
+ when NASDAQ_BASIC
88
+ @market_center == nil || @market_center == 'L' || @market_center == '2' || @market_center == "\0" || @market_center.empty?
89
+ else
90
+ false
91
+ end
83
92
  end
84
93
 
85
94
  def to_s
@@ -159,7 +168,7 @@ module Intrinio
159
168
  unless @provider
160
169
  @provider = REALTIME
161
170
  end
162
- raise "Provider must be 'REALTIME', 'DELAYED_SIP', 'NASDAQ_BASIC', or 'MANUAL'" unless PROVIDERS.include?(@provider)
171
+ raise "Provider must be 'IEX', 'REALTIME', 'DELAYED_SIP', 'NASDAQ_BASIC', 'CBOE_ONE', or 'EQUITIES_EDGE', or 'MANUAL'" unless PROVIDERS.include?(@provider)
163
172
 
164
173
  @ip_address = options[:ip_address]
165
174
  raise "Missing option ip_address while in MANUAL mode." if @provider == MANUAL and (@ip_address.nil? || @ip_address.empty?)
@@ -169,6 +178,11 @@ module Intrinio
169
178
  @trades_only = false
170
179
  end
171
180
 
181
+ @delayed = options[:delayed]
182
+ if @delayed.nil?
183
+ @delayed = false
184
+ end
185
+
172
186
  @thread_quantity = options[:threads]
173
187
  unless @thread_quantity
174
188
  @thread_quantity = 4
@@ -315,6 +329,10 @@ module Intrinio
315
329
  NASDAQ_BASIC
316
330
  when 6
317
331
  IEX
332
+ when 7
333
+ CBOE_ONE
334
+ when 8
335
+ EQUITIES_EDGE
318
336
  else
319
337
  IEX
320
338
  end
@@ -375,7 +393,9 @@ module Intrinio
375
393
  pop = nil
376
394
  data = nil
377
395
  pop = @messages.deq
378
- unless pop.nil?
396
+ if pop.nil? || pop.empty?
397
+ sleep(0.1)
398
+ else
379
399
  begin
380
400
  data = pop.unpack('C*')
381
401
  rescue StandardError => ex
@@ -390,7 +410,6 @@ module Intrinio
390
410
  # From there, check the type and symbol length at index 0 of each chunk to know how many bytes each message has.
391
411
  count.times {start_index = handle_message(data, start_index)}
392
412
  end
393
- if pop.nil? then sleep(0.1) end
394
413
  rescue StandardError => e
395
414
  me.send :error, "Error handling message from queue: #{e} #{pop} : #{data} ; count: #{count} ; start index: #{start_index}"
396
415
  rescue Exception => e
@@ -427,8 +446,11 @@ module Intrinio
427
446
 
428
447
  case @provider
429
448
  when REALTIME then url = "https://realtime-mx.intrinio.com/auth"
449
+ when IEX then url = "https://realtime-mx.intrinio.com/auth"
430
450
  when DELAYED_SIP then url = "https://realtime-delayed-sip.intrinio.com/auth"
431
451
  when NASDAQ_BASIC then url = "https://realtime-nasdaq-basic.intrinio.com/auth"
452
+ when CBOE_ONE then url = "https://cboe-one.intrinio.com/auth"
453
+ when EQUITIES_EDGE then url = "https://equities-edge.intrinio.com/auth"
432
454
  when MANUAL then url = "http://" + @ip_address + "/auth"
433
455
  end
434
456
 
@@ -447,12 +469,18 @@ module Intrinio
447
469
  "#{url}api_key=#{@api_key}"
448
470
  end
449
471
 
450
- def socket_url
472
+ def socket_url
473
+ delayed_part = @delayed ? "&delayed=true" : ""
474
+
451
475
  case @provider
452
- when REALTIME then "wss://realtime-mx.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}"
453
- when DELAYED_SIP then "wss://realtime-delayed-sip.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}"
454
- when NASDAQ_BASIC then "wss://realtime-nasdaq-basic.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}"
455
- when MANUAL then "ws://" + @ip_address + "/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}"
476
+ when REALTIME then "wss://realtime-mx.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
477
+ when IEX then "wss://realtime-mx.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
478
+ when DELAYED_SIP then "wss://realtime-delayed-sip.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
479
+ when NASDAQ_BASIC then "wss://realtime-nasdaq-basic.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
480
+ when CBOE_ONE then "wss://cboe-one.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
481
+ when EQUITIES_EDGE then "wss://equities-edge.intrinio.com/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
482
+ when MANUAL then "ws://" + @ip_address + "/socket/websocket?vsn=1.0.0&token=#{@token}&#{CLIENT_INFO_HEADER_KEY}=#{CLIENT_INFO_HEADER_VALUE}&#{MESSAGE_VERSION_HEADER_KEY}=#{MESSAGE_VERSION_HEADER_VALUE}#{delayed_part}"
483
+ else raise "Unknown provider"
456
484
  end
457
485
  end
458
486
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intrinio-realtime
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Intrinio
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-14 00:00:00.000000000 Z
11
+ date: 2025-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -78,7 +78,7 @@ homepage: https://github.com/intrinio/intrinio-realtime-ruby-sdk
78
78
  licenses:
79
79
  - GPL-3.0
80
80
  metadata: {}
81
- post_install_message:
81
+ post_install_message:
82
82
  rdoc_options: []
83
83
  require_paths:
84
84
  - lib
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubygems_version: 3.1.6
97
- signing_key:
97
+ signing_key:
98
98
  specification_version: 4
99
99
  summary: Intrinio provides real-time stock prices from its Multi-Exchange feed, via
100
100
  a two-way WebSocket connection.