isomorfeus-transport 1.0.0.delta10 → 1.0.0.delta11

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed706a7d3a6e989f81f3a9b6cf323f541e859386253c25ddde04a7cdb0730833
4
- data.tar.gz: c11e5f191fd9370a8ca4b52b4e39d38667cfeffa9ddaa5eceee10d87c37c75d2
3
+ metadata.gz: f637a7069fc7b858050852ba8f7cd080a4cf7d4159ea2e9fc4d8a9cb494ff1b1
4
+ data.tar.gz: a2ae36795c32e9cd07120506fee28efdcc454fee98d81d666f717cfea29503d7
5
5
  SHA512:
6
- metadata.gz: 959a440dca5596a3b7cf12370e11e4503c7c9a0dab61b492d4e352b0132117def173145bade30a4f6c3c73a4b8e7a57c9a0cdebbdba5514beefc1c11249fb893
7
- data.tar.gz: cfe2b33058e68434b4e1e2993ba1f5950e32b45810dc550ae00e24b6fd88ab705e314a066826bea0d9a915f8c560f355ccd4c43a21320be81a8319294df7cfbc
6
+ metadata.gz: e98bb7ab2ba2ce0323e625344f2af8ade9c3a1429dd7cc0b5657b3aed6f52f39bde20a9a930b955343eceb0f1407f8e4838196fec7500b489fad5ffad0cd1550
7
+ data.tar.gz: '039b561818a90dc85a0f2accf58b0b007d322441a102c88b7ea17120eb726fd36c4fc1fe2e0f8393c2e9badfa2e7823fbda9f4de97afdf37efe2ce886a81c6db'
@@ -2,7 +2,12 @@ module Isomorfeus
2
2
  # available settings
3
3
 
4
4
  if RUBY_ENGINE == 'opal'
5
+ def self.add_transport_init_class_name(init_class_name)
6
+ transport_init_class_names << init_class_name
7
+ end
8
+
5
9
  add_client_option(:api_websocket_path)
10
+ add_client_option(:transport_init_class_names, [])
6
11
  else
7
12
  class << self
8
13
  attr_accessor :api_websocket_path
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Transport
3
- VERSION = '1.0.0.delta10'
3
+ VERSION = '1.0.0.delta11'
4
4
  end
5
5
  end
@@ -37,6 +37,10 @@ module Isomorfeus
37
37
  @native_websocket.JS[:onmessage] = `function(event) { block.$call(event); }`
38
38
  end
39
39
 
40
+ def on_open(&block)
41
+ @native_websocket.JS[:onopen] = `function(event) { block.$call(event); }`
42
+ end
43
+
40
44
  def send(data)
41
45
  case ready_state
42
46
  when OPEN then @native_websocket.JS.send(data)
@@ -8,14 +8,19 @@ module Isomorfeus
8
8
  `setTimeout(#{block.to_n}, ms)`
9
9
  end
10
10
 
11
- def init!
11
+ def init
12
12
  @requests_in_progress = { requests: {}, agent_ids: {} }
13
13
  @socket = nil
14
- connect if Isomorfeus.on_browser?
14
+ promise_connect if Isomorfeus.on_browser?
15
+ true
15
16
  end
16
17
 
17
- def connect
18
- return if @socket && @socket.ready_state < 2
18
+ def promise_connect
19
+ promise = Promise.new
20
+ if @socket && @socket.ready_state < 2
21
+ promise.resolve(true)
22
+ return promise
23
+ end
19
24
  if Isomorfeus.on_browser?
20
25
  window_protocol = `window.location.protocol`
21
26
  ws_protocol = window_protocol == 'https:' ? 'wss:' : 'ws:'
@@ -34,7 +39,19 @@ module Isomorfeus
34
39
  json_hash = `Opal.Hash.$new(JSON.parse(event.data))`
35
40
  Isomorfeus::Transport::ClientProcessor.process(json_hash)
36
41
  end
37
- true
42
+ @socket.on_open do |event|
43
+ init_promises = []
44
+ Isomorfeus.transport_init_class_names.each do |constant|
45
+ result = constant.constantize.send(:init)
46
+ init_promises << result if result.class == Promise
47
+ end
48
+ if init_promises.size > 0
49
+ Promise.when(*init_promises).then { promise.resolve(true) }
50
+ else
51
+ promise.resolve(true)
52
+ end
53
+ end
54
+ promise
38
55
  end
39
56
 
40
57
  def disconnect
@@ -44,8 +61,15 @@ module Isomorfeus
44
61
 
45
62
  def promise_send_path(*path, &block)
46
63
  request = {}
47
- path.inject(request) do |memo, key|
48
- memo[key] = {}
64
+ inject_path = path[0...-1]
65
+ last_inject_path_el = inject_path.last
66
+ last_path_el = path.last
67
+ inject_path.inject(request) do |memo, key|
68
+ if key == last_inject_path_el
69
+ memo[key] = last_path_el
70
+ else
71
+ memo[key] = {}
72
+ end
49
73
  end
50
74
  Isomorfeus::Transport.promise_send_request(request, &block)
51
75
  end
@@ -1,6 +1,7 @@
1
1
  require 'opal'
2
2
  require 'opal-autoloader'
3
3
  require 'opal-activesupport'
4
+ require 'isomorfeus-react'
4
5
  if RUBY_ENGINE == 'opal'
5
6
  require 'json'
6
7
  require 'isomorfeus/config'
@@ -14,7 +15,7 @@ if RUBY_ENGINE == 'opal'
14
15
  require 'lucid_channel/mixin'
15
16
  require 'lucid_channel/base'
16
17
  Opal::Autoloader.add_load_path('channels')
17
- Isomorfeus::Transport.init!
18
+ Isomorfeus.add_client_init_class_name('Isomorfeus::Transport')
18
19
  else
19
20
  require 'base64'
20
21
  require 'digest'
@@ -6,7 +6,7 @@ module LucidHandler
6
6
  base.instance_exec do
7
7
  def on_request(&block)
8
8
  define_method :process_request do |*args|
9
- block.call(*args)
9
+ instance_exec(*args, &block)
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-transport
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.delta10
4
+ version: 1.0.0.delta11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-10 00:00:00.000000000 Z
11
+ date: 2019-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 4.0.9
75
+ version: 4.0.11
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 4.0.9
82
+ version: 4.0.11
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: isomorfeus-react
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 16.9.0
89
+ version: 16.9.2
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 16.9.0
96
+ version: 16.9.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: websocket-driver
99
99
  requirement: !ruby/object:Gem::Requirement