hyper-operation 1.0.alpha1.5 → 1.0.0.lap28

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -7
  3. data/.travis.yml +9 -20
  4. data/CODE_OF_CONDUCT.md +49 -0
  5. data/DOCS-POLICIES.md +582 -0
  6. data/DOCS.md +869 -0
  7. data/Gemfile +1 -5
  8. data/LICENSE.txt +21 -0
  9. data/README.md +77 -0
  10. data/Rakefile +2 -1
  11. data/dciy.toml +3 -0
  12. data/hyper-operation.gemspec +13 -16
  13. data/lib/hyper-operation.rb +5 -8
  14. data/lib/hyper-operation/api.rb +2 -2
  15. data/lib/hyper-operation/boot.rb +2 -3
  16. data/lib/hyper-operation/engine.rb +2 -2
  17. data/lib/hyper-operation/exception.rb +4 -30
  18. data/lib/hyper-operation/filters/acting_user.rb +1 -1
  19. data/lib/hyper-operation/http.rb +2 -2
  20. data/lib/hyper-operation/promise.rb +2 -28
  21. data/lib/hyper-operation/railway.rb +1 -1
  22. data/lib/hyper-operation/railway/dispatcher.rb +4 -8
  23. data/lib/hyper-operation/railway/params_wrapper.rb +2 -2
  24. data/lib/hyper-operation/railway/run.rb +49 -52
  25. data/lib/hyper-operation/railway/validations.rb +3 -10
  26. data/lib/hyper-operation/server_op.rb +19 -45
  27. data/lib/hyper-operation/transport/action_cable.rb +8 -8
  28. data/lib/hyper-operation/transport/client_drivers.rb +53 -94
  29. data/lib/hyper-operation/transport/connection.rb +10 -10
  30. data/lib/hyper-operation/transport/{hyperstack.rb → hyperloop.rb} +14 -19
  31. data/lib/hyper-operation/transport/{hyperstack_controller.rb → hyperloop_controller.rb} +52 -54
  32. data/lib/hyper-operation/transport/policy.rb +45 -41
  33. data/lib/hyper-operation/version.rb +2 -2
  34. data/lib/sources/{hyperstack → hyperloop}/pusher.js +0 -0
  35. metadata +51 -50
  36. data/lib/hyper-operation/transport/policy_diagnostics.rb +0 -106
@@ -1,4 +1,4 @@
1
- module Hyperstack
1
+ module Hyperloop
2
2
  class Operation
3
3
  class Railway
4
4
 
@@ -28,8 +28,6 @@ module Hyperstack
28
28
  rescue Exit => e
29
29
  raise e unless e.state == :failed
30
30
  add_error(param, symbol, message)
31
- # use a bogus exit state which will skip adding
32
- # a validation error (see catch block in process_validations method)
33
31
  raise Exit.new(:abort_from_add_error, e.result)
34
32
  end
35
33
  end
@@ -49,22 +47,17 @@ module Hyperstack
49
47
  when :failed
50
48
  add_validation_error(i, "param validation #{i+1} aborted")
51
49
  end
52
- @state = :abort
50
+ @state = :failed
53
51
  return # break does not work in Opal
54
52
  rescue AccessViolation => e
55
53
  add_validation_error(i, e)
56
- @state = :abort
54
+ @state = :failed
57
55
  @last_result = e
58
56
  return # break does not work in Opal
59
57
  rescue Exception => e
60
58
  add_validation_error(i, e)
61
59
  end
62
60
  end
63
- ensure
64
- if @operation.has_errors?
65
- @last_result ||= ValidationException.new(@operation.instance_variable_get('@errors'))
66
- @state ||= :failed
67
- end
68
61
  end
69
62
  end
70
63
  end
@@ -1,30 +1,26 @@
1
1
  require 'net/http' unless RUBY_ENGINE == 'opal'
2
2
 
3
- module Hyperstack
3
+ module Hyperloop
4
4
  class ServerOp < Operation
5
5
 
6
6
  class << self
7
- include Hyperstack::Component::IsomorphicHelpers
7
+ include React::IsomorphicHelpers
8
8
 
9
9
  if RUBY_ENGINE == 'opal'
10
10
  if on_opal_client?
11
11
  def run(*args)
12
12
  hash = _Railway.params_wrapper.combine_arg_array(args)
13
13
  hash = serialize_params(hash)
14
- Hyperstack::HTTP.post(
15
- "#{`window.HyperstackEnginePath`}/execute_remote",
14
+ Hyperloop::HTTP.post(
15
+ "#{`window.HyperloopEnginePath`}/execute_remote",
16
16
  payload: {json: {operation: name, params: hash}.to_json},
17
- headers: headers.merge('X-CSRF-Token' => Hyperstack::ClientDrivers.opts[:form_authenticity_token])
17
+ headers: {'X-CSRF-Token' => Hyperloop::ClientDrivers.opts[:form_authenticity_token] }
18
18
  )
19
19
  .then do |response|
20
20
  deserialize_response response.json[:response]
21
21
  end
22
22
  .fail do |response|
23
- begin
24
- const_get(response.json[:error_class]).new(response.json[:error])
25
- rescue
26
- Exception.new response.json[:error]
27
- end
23
+ Exception.new response.json[:error]
28
24
  end
29
25
  end
30
26
  elsif on_opal_server?
@@ -44,21 +40,19 @@ module Hyperstack
44
40
  isomorphic_method(:internal_iso_run) do |f, klass_name, op_params|
45
41
  f.send_to_server(klass_name, op_params)
46
42
  f.when_on_server {
47
- Hyperstack::ServerOp.run_from_client(:acting_user, controller, klass_name, *op_params)
43
+ Hyperloop::ServerOp.run_from_client(:acting_user, controller, klass_name, *op_params)
48
44
  }
49
45
  end
50
46
 
51
47
  def descendants_map_cache
52
48
  # calling descendants alone may take 10ms in a complex app, so better cache it
53
- @cached_descendants ||= Hyperstack::ServerOp.descendants.map(&:to_s)
49
+ @cached_descendants ||= Hyperloop::ServerOp.descendants.map(&:to_s)
54
50
  end
55
51
 
56
52
  def run_from_client(security_param, controller, operation, params)
57
53
  if Rails.env.production?
58
54
  # in production everything is eager loaded so ServerOp.descendants is filled and can be used to guard the .constantize
59
- unless Hyperstack::ServerOp.descendants_map_cache.include?(operation)
60
- Hyperstack::InternalPolicy.raise_operation_access_violation(:illegal_remote_op_call, "Operation: #{operation} (in production)")
61
- end
55
+ Hyperloop::InternalPolicy.raise_operation_access_violation unless Hyperloop::ServerOp.descendants_map_cache.include?(operation)
62
56
  # however ...
63
57
  else
64
58
  # ... in development things are autoloaded on demand, thus ServerOp.descendants can be empty or partially filled and above guard
@@ -68,17 +62,15 @@ module Hyperstack
68
62
  begin
69
63
  const = Object.const_get(operation)
70
64
  rescue NameError
71
- Hyperstack::InternalPolicy.raise_operation_access_violation(:illegal_remote_op_call, "Operation: #{operation} (const not found)")
72
- end
73
- unless const < Hyperstack::ServerOp
74
- Hyperstack::InternalPolicy.raise_operation_access_violation(:illegal_remote_op_call, "Operation: #{operation} (not a ServerOp subclass)")
65
+ Hyperloop::InternalPolicy.raise_operation_access_violation
75
66
  end
67
+ Hyperloop::InternalPolicy.raise_operation_access_violation unless const < Hyperloop::ServerOp
76
68
  end
77
69
  operation.constantize.class_eval do
78
70
  if _Railway.params_wrapper.method_defined?(:controller)
79
71
  params[:controller] = controller
80
72
  elsif !_Railway.params_wrapper.method_defined?(security_param)
81
- raise AccessViolation.new(:remote_access_not_allowed)
73
+ raise AccessViolation
82
74
  end
83
75
  run(deserialize_params(params))
84
76
  .then { |r| return { json: { response: serialize_response(r) } } }
@@ -88,27 +80,13 @@ module Hyperstack
88
80
  handle_exception(e, operation, params)
89
81
  end
90
82
 
91
- def status(e)
92
- if e.is_a? AccessViolation
93
- 403
94
- elsif e.is_a? Operation::ValidationException
95
- 400
96
- else
97
- 500
98
- end
99
- end
100
-
101
83
  def handle_exception(e, operation, params)
102
- if e.respond_to? :__hyperstack_on_error
103
- params = params.to_h
104
- message = []
105
- message << Pastel.new.red("HYPERSTACK ERROR during #{operation} #{e.inspect}")
106
- params.each { |param, value| message << " #{param} => #{value.inspect.truncate(120, separator: '...')}" }
107
- message << "\n#{e.details}" if e.respond_to? :details
108
- e.__hyperstack_on_error(operation, params, message.join("\n"))
84
+ if defined? ::Rails
85
+ params.delete(:controller)
86
+ ::Rails.logger.debug "\033[0;31;1mERROR: Hyperloop::ServerOp exception caught when running "\
87
+ "#{operation} with params \"#{params}\": #{e}\033[0;30;21m"
109
88
  end
110
-
111
- { json: { error_class: e.class.to_s, error: e}, status: status(e) }
89
+ { json: { error: e }, status: 500 }
112
90
  end
113
91
 
114
92
 
@@ -122,17 +100,13 @@ module Hyperstack
122
100
  end
123
101
  request.body = {
124
102
  operation: name,
125
- params: Hyperstack::Operation::ParamsWrapper.combine_arg_array(args)
103
+ params: Hyperloop::Operation::ParamsWrapper.combine_arg_array(args)
126
104
  }.to_json
127
105
  promise.resolve http.request(request)
128
106
  rescue Exception => e
129
107
  promise.reject e
130
108
  end
131
109
 
132
- def headers
133
- {}
134
- end
135
-
136
110
  def serialize_params(hash)
137
111
  hash
138
112
  end
@@ -174,7 +148,7 @@ module Hyperstack
174
148
  [operation.instance_exec(*context, &regulation)].flatten.compact.uniq.each do |channel|
175
149
  unless operation.instance_variable_get(:@_dispatched_channels).include?(channel)
176
150
  operation.instance_variable_set(:@_dispatched_channels, operation.instance_variable_get(:@_dispatched_channels) << channel)
177
- Hyperstack.dispatch(channel: Hyperstack::InternalPolicy.channel_to_string(channel), operation: operation.class.name, params: serialized_params)
151
+ Hyperloop.dispatch(channel: Hyperloop::InternalPolicy.channel_to_string(channel), operation: operation.class.name, params: serialized_params)
178
152
  end
179
153
  end
180
154
  end
@@ -3,7 +3,7 @@ module ApplicationCable
3
3
  class Connection < ActionCable::Connection::Base; end
4
4
  end
5
5
 
6
- module Hyperstack
6
+ module Hyperloop
7
7
  class ActionCableChannel < ApplicationCable::Channel
8
8
  class << self
9
9
  def subscriptions
@@ -12,28 +12,28 @@ module Hyperstack
12
12
  end
13
13
 
14
14
  def inc_subscription
15
- self.class.subscriptions[params[:hyperstack_channel]] =
16
- self.class.subscriptions[params[:hyperstack_channel]] + 1
15
+ self.class.subscriptions[params[:hyperloop_channel]] =
16
+ self.class.subscriptions[params[:hyperloop_channel]] + 1
17
17
  end
18
18
 
19
19
  def dec_subscription
20
- self.class.subscriptions[params[:hyperstack_channel]] =
21
- self.class.subscriptions[params[:hyperstack_channel]] - 1
20
+ self.class.subscriptions[params[:hyperloop_channel]] =
21
+ self.class.subscriptions[params[:hyperloop_channel]] - 1
22
22
  end
23
23
 
24
24
  def subscribed
25
25
  session_id = params["client_id"]
26
- authorization = Hyperstack.authorization(params["salt"], params["hyperstack_channel"], session_id)
26
+ authorization = Hyperloop.authorization(params["salt"], params["hyperloop_channel"], session_id)
27
27
  if params["authorization"] == authorization
28
28
  inc_subscription
29
- stream_from "hyperstack-#{params[:hyperstack_channel]}"
29
+ stream_from "hyperloop-#{params[:hyperloop_channel]}"
30
30
  else
31
31
  reject
32
32
  end
33
33
  end
34
34
 
35
35
  def unsubscribed
36
- Hyperstack::Connection.disconnect(params[:hyperstack_channel]) if dec_subscription == 0
36
+ Hyperloop::Connection.disconnect(params[:hyperloop_channel]) if dec_subscription == 0
37
37
  end
38
38
  end
39
39
  end
@@ -1,18 +1,14 @@
1
1
  #### this is going to need some refactoring so that HyperMesh can add its methods in here...
2
2
 
3
- module Hyperstack
3
+ module Hyperloop
4
4
  # Client side handling of synchronization messages
5
5
  # When a synchronization message comes in, the client will sync_dispatch
6
6
  # We use ERB to determine the configuration and implement the appropriate
7
7
  # client interface to sync_change or sync_destroy
8
8
 
9
- def self.anti_csrf_token
10
- ClientDrivers.opts[:form_authenticity_token]
11
- end
12
-
13
9
  class Application
14
- extend Component::IsomorphicHelpers::ClassMethods
15
-
10
+ extend React::IsomorphicHelpers::ClassMethods
11
+
16
12
  if on_opal_client?
17
13
  def self.acting_user_id
18
14
  ClientDrivers.opts[:acting_user_id]
@@ -35,41 +31,22 @@ module Hyperstack
35
31
 
36
32
 
37
33
  if RUBY_ENGINE == 'opal'
38
- # Patch in a dummy copy of Model.load in case we are not using models
39
- # this will be defined properly by hyper-model
40
- module Model
41
- def self.load
42
- Promise.new.tap { |promise| promise.resolve(yield) }
43
- end unless respond_to?(:load)
44
- end
45
-
46
34
  def self.connect(*channels)
47
35
  channels.each do |channel|
48
36
  if channel.is_a? Class
49
37
  IncomingBroadcast.connect_to(channel.name)
50
38
  elsif channel.is_a?(String) || channel.is_a?(Array)
51
39
  IncomingBroadcast.connect_to(*channel)
52
- elsif channel.respond_to?(:id)
53
- Hyperstack::Model.load do
54
- channel.id
55
- end.then do |id|
56
- raise "Hyperstack.connect cannot connect to #{channel.inspect}. "\
57
- "The id is nil. This can be caused by connecting to a model "\
58
- "that is not saved, or that does not exist." unless id
59
- IncomingBroadcast.connect_to(channel.class.name, id)
60
- end
40
+ elsif channel.id
41
+ IncomingBroadcast.connect_to(channel.class.name, channel.id)
61
42
  else
62
- raise "Hyperstack.connect cannot connect to #{channel.inspect}.\n"\
63
- "Channels must be either a class, or a class name,\n"\
64
- "a string in the form 'ClassName-id',\n"\
65
- "an array in the form [class, id] or [class-name, id],\n"\
66
- "or an object that responds to the id method with a non-nil value"
43
+ raise "cannot connect to model before it has been saved"
67
44
  end
68
45
  end
69
46
  end
70
47
 
71
48
  def self.connect_session
72
- connect(['Hyperstack::Session', ClientDrivers.opts[:id].split('-').last])
49
+ connect(['Hyperloop::Session', ClientDrivers.opts[:id].split('-').last])
73
50
  end
74
51
 
75
52
  def self.action_cable_consumer
@@ -84,14 +61,12 @@ module Hyperstack
84
61
 
85
62
  def self.add_connection(channel_name, id = nil)
86
63
  channel_string = "#{channel_name}#{'-'+id.to_s if id}"
87
- return if open_channels.include? channel_string
88
64
  open_channels << channel_string
89
65
  channel_string
90
66
  end
91
67
 
92
68
  def self.connect_to(channel_name, id = nil)
93
69
  channel_string = add_connection(channel_name, id)
94
- return unless channel_string # already connected!
95
70
  if ClientDrivers.opts[:transport] == :pusher
96
71
  channel = "#{ClientDrivers.opts[:channel]}-#{channel_string}"
97
72
  %x{
@@ -99,24 +74,23 @@ module Hyperstack
99
74
  channel.bind('dispatch', #{ClientDrivers.opts[:dispatch]})
100
75
  channel.bind('pusher:subscription_succeeded', #{lambda {ClientDrivers.get_queued_data("connect-to-transport", channel_string)}})
101
76
  }
102
- @pusher_dispatcher_registered = true
103
77
  elsif ClientDrivers.opts[:transport] == :action_cable
104
78
  channel = "#{ClientDrivers.opts[:channel]}-#{channel_string}"
105
- Hyperstack::HTTP.post(ClientDrivers.polling_path('action-cable-auth', channel), headers: { 'X-CSRF-Token' => ClientDrivers.opts[:form_authenticity_token] }).then do |response|
79
+ Hyperloop::HTTP.post(ClientDrivers.polling_path('action-cable-auth', channel), headers: { 'X-CSRF-Token' => ClientDrivers.opts[:form_authenticity_token] }).then do |response|
106
80
  %x{
107
81
  var fix_opal_0110 = 'return';
108
- #{Hyperstack.action_cable_consumer}.subscriptions.create(
82
+ #{Hyperloop.action_cable_consumer}.subscriptions.create(
109
83
  {
110
- channel: "Hyperstack::ActionCableChannel",
84
+ channel: "Hyperloop::ActionCableChannel",
111
85
  client_id: #{ClientDrivers.opts[:id]},
112
- hyperstack_channel: #{channel_string},
86
+ hyperloop_channel: #{channel_string},
113
87
  authorization: #{response.json[:authorization]},
114
88
  salt: #{response.json[:salt]}
115
89
  },
116
90
  {
117
91
  connected: function() {
118
92
  if (#{ClientDrivers.env == 'development'}) { console.log("ActionCable connected to: ", channel_string); }
119
- #{ClientDrivers.complete_connection(channel_string)}
93
+ #{ClientDrivers.get_queued_data("connect-to-transport", channel_string)}
120
94
  },
121
95
  received: function(data) {
122
96
  if (#{ClientDrivers.env == 'development'}) { console.log("ActionCable received: ", data); }
@@ -127,14 +101,14 @@ module Hyperstack
127
101
  }
128
102
  end
129
103
  else
130
- Hyperstack::HTTP.get(ClientDrivers.polling_path(:subscribe, channel_string))
104
+ Hyperloop::HTTP.get(ClientDrivers.polling_path(:subscribe, channel_string))
131
105
  end
132
106
  end
133
107
  end
134
108
  end
135
109
 
136
110
  class ClientDrivers
137
- include Hyperstack::Component::IsomorphicHelpers
111
+ include React::IsomorphicHelpers
138
112
 
139
113
  def self.sync_dispatch(data)
140
114
  # TODO old synchromesh double checked at this point to make sure that this client
@@ -142,7 +116,7 @@ module Hyperstack
142
116
  data[:operation].constantize.dispatch_from_server(data[:params])
143
117
  end
144
118
 
145
- # save the configuration info needed in window.HyperstackOpts
119
+ # save the configuration info needed in window.HyperloopOpts
146
120
 
147
121
  # we keep a list of all channels by session with connections in progress
148
122
  # for each broadcast we check the list, and add the message to a queue for that
@@ -151,51 +125,45 @@ module Hyperstack
151
125
  # will remove the session from the list.
152
126
 
153
127
  prerender_footer do |controller|
154
- unless Hyperstack.transport == :none
155
- if defined?(PusherFake)
156
- path = ::Rails.application.routes.routes.detect do |route|
157
- route.app == Hyperstack::Engine ||
158
- (route.app.respond_to?(:app) && route.app.app == Hyperstack::Engine)
159
- end.path.spec
160
- pusher_fake_js = PusherFake.javascript(
161
- auth: { headers: { 'X-CSRF-Token' => controller.send(:form_authenticity_token) } },
162
- authEndpoint: "#{path}/hyperstack-pusher-auth"
163
- )
164
- end
165
- controller.session.delete 'hyperstack-dummy-init' unless controller.session.id
166
- id = "#{SecureRandom.uuid}-#{controller.session.id}"
167
- auto_connections = Hyperstack::AutoConnect.channels(id, controller.acting_user) rescue []
128
+ next if Hyperloop.transport == :none
129
+ if defined?(PusherFake)
130
+ path = ::Rails.application.routes.routes.detect do |route|
131
+ route.app == Hyperloop::Engine ||
132
+ (route.app.respond_to?(:app) && route.app.app == Hyperloop::Engine)
133
+ end.path.spec
134
+ pusher_fake_js = PusherFake.javascript(
135
+ auth: { headers: { 'X-CSRF-Token' => controller.send(:form_authenticity_token) } },
136
+ authEndpoint: "#{path}/hyperloop-pusher-auth"
137
+ )
168
138
  end
139
+ controller.session.delete 'hyperloop-dummy-init' unless controller.session.id
140
+ id = "#{SecureRandom.uuid}-#{controller.session.id}"
141
+ auto_connections = Hyperloop::AutoConnect.channels(id, controller.acting_user)
169
142
  config_hash = {
170
- transport: Hyperstack.transport,
143
+ transport: Hyperloop.transport,
171
144
  id: id,
172
145
  acting_user_id: (controller.acting_user && controller.acting_user.id),
173
146
  env: ::Rails.env,
174
- client_logging: Hyperstack.client_logging,
147
+ client_logging: Hyperloop.client_logging,
175
148
  pusher_fake_js: pusher_fake_js,
176
- key: Hyperstack.key,
177
- cluster: Hyperstack.cluster,
178
- encrypted: Hyperstack.encrypted,
179
- channel: Hyperstack.channel,
149
+ key: Hyperloop.key,
150
+ cluster: Hyperloop.cluster,
151
+ encrypted: Hyperloop.encrypted,
152
+ channel: Hyperloop.channel,
180
153
  form_authenticity_token: controller.send(:form_authenticity_token),
181
- seconds_between_poll: Hyperstack.seconds_between_poll,
154
+ seconds_between_poll: Hyperloop.seconds_between_poll,
182
155
  auto_connect: auto_connections
183
156
  }
184
157
  path = ::Rails.application.routes.routes.detect do |route|
185
158
  # not sure why the second check is needed. It happens in the test app
186
- route.app == Hyperstack::Engine or (route.app.respond_to?(:app) and route.app.app == Hyperstack::Engine)
187
- end
188
- if path
189
- path = path.path.spec
190
- "<script type='text/javascript'>\n"\
191
- "window.HyperstackEnginePath = '#{path}';\n"\
192
- "window.HyperstackOpts = #{config_hash.to_json}\n"\
193
- "</script>\n"
194
- else
195
- "<script type='text/javascript'>\n"\
196
- "window.HyperstackOpts = #{config_hash.to_json}\n"\
197
- "</script>\n"
159
+ route.app == Hyperloop::Engine or (route.app.respond_to?(:app) and route.app.app == Hyperloop::Engine)
198
160
  end
161
+ raise 'Hyperloop::Engine mount point not found. Check your config/routes.rb file' unless path
162
+ path = path.path.spec
163
+ "<script type='text/javascript'>\n"\
164
+ "window.HyperloopEnginePath = '#{path}';\n"\
165
+ "window.HyperloopOpts = #{config_hash.to_json}\n"\
166
+ "</script>\n"
199
167
  end if RUBY_ENGINE != 'opal'
200
168
 
201
169
  class << self
@@ -213,14 +181,8 @@ module Hyperstack
213
181
  f.when_on_server { ::Rails.env }
214
182
  end
215
183
 
216
- def self.complete_connection(channel, retries = 10)
217
- get_queued_data('connect-to-transport', channel).fail do
218
- after(0.25) { complete_connection(channel, retries - 1) } unless retries.zero?
219
- end
220
- end
221
-
222
184
  def self.get_queued_data(operation, channel = nil, opts = {})
223
- Hyperstack::HTTP.get(polling_path(operation, channel), opts).then do |response|
185
+ Hyperloop::HTTP.get(polling_path(operation, channel), opts).then do |response|
224
186
  response.json.each do |data|
225
187
  `console.log("simple_poller received: ", data)` if ClientDrivers.env == 'development'
226
188
  sync_dispatch(data[1])
@@ -232,11 +194,11 @@ module Hyperstack
232
194
 
233
195
  if @initialized
234
196
  # 1) skip initialization if already initialized
235
- if on_opal_client? && Hyperstack.action_cable_consumer
197
+ if on_opal_client? && Hyperloop.action_cable_consumer
236
198
  # 2) if running action_cable make sure connection is up after pinging the server_up
237
199
  # action cable closes the connection if files change on the server
238
- Hyperstack::HTTP.get("#{`window.HyperstackEnginePath`}/server_up") do
239
- `#{Hyperstack.action_cable_consumer}.connection.open()` if `#{Hyperstack.action_cable_consumer}.connection.disconnected`
200
+ Hyperloop::HTTP.get("#{`window.HyperloopEnginePath`}/server_up") do
201
+ `#{Hyperloop.action_cable_consumer}.connection.open()` if `#{Hyperloop.action_cable_consumer}.connection.disconnected`
240
202
  end
241
203
  end
242
204
  return
@@ -246,12 +208,9 @@ module Hyperstack
246
208
  @opts = {}
247
209
 
248
210
  if on_opal_client?
249
-
250
- @opts = Hash.new(`window.HyperstackOpts`)
251
-
252
- if opts[:transport] != :none && `typeof(window.HyperstackEnginePath) == 'undefined'`
253
- raise "No hyperstack mount point found!\nCheck your Rails routes.rb file";
254
- end
211
+
212
+ @opts = Hash.new(`window.HyperloopOpts`)
213
+
255
214
 
256
215
  if opts[:transport] == :pusher
257
216
 
@@ -271,18 +230,18 @@ module Hyperstack
271
230
  h = {
272
231
  encrypted: #{opts[:encrypted]},
273
232
  cluster: #{opts[:cluster]},
274
- authEndpoint: window.HyperstackEnginePath+'/hyperstack-pusher-auth',
233
+ authEndpoint: window.HyperloopEnginePath+'/hyperloop-pusher-auth',
275
234
  auth: {headers: {'X-CSRF-Token': #{opts[:form_authenticity_token]}}}
276
235
  };
277
236
  pusher_api = new Pusher(#{opts[:key]}, h)
278
237
  }
279
238
  opts[:pusher_api] = pusher_api
280
239
  end
281
- Hyperstack.connect(*opts[:auto_connect])
240
+ Hyperloop.connect(*opts[:auto_connect])
282
241
  elsif opts[:transport] == :action_cable
283
242
  opts[:action_cable_consumer] =
284
243
  `ActionCable.createConsumer.apply(ActionCable, #{[*opts[:action_cable_consumer_url]]})`
285
- Hyperstack.connect(*opts[:auto_connect])
244
+ Hyperloop.connect(*opts[:auto_connect])
286
245
  elsif opts[:transport] == :simple_poller
287
246
  opts[:auto_connect].each { |channel| IncomingBroadcast.add_connection(*channel) }
288
247
  every(opts[:seconds_between_poll]) do
@@ -293,7 +252,7 @@ module Hyperstack
293
252
  end
294
253
 
295
254
  def self.polling_path(to, id = nil)
296
- s = "#{`window.HyperstackEnginePath`}/hyperstack-#{to}/#{opts[:id]}"
255
+ s = "#{`window.HyperloopEnginePath`}/hyperloop-#{to}/#{opts[:id]}"
297
256
  s = "#{s}/#{id}" if id
298
257
  s
299
258
  end