isomorfeus-transport 1.0.0.delta10 → 1.0.0.delta11

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