Module: Hyperstack
- Defined in:
- lib/hyperstack/boot.rb,
lib/hyperstack/env.rb,
lib/hyperstack/context.rb,
lib/hyperstack/imports.rb,
lib/hyperstack/on_error.rb,
lib/hyperstack/rail_tie.rb,
lib/hyperstack/hotloader.rb,
lib/hyperstack/on_client.rb,
lib/hyperstack/autoloader.rb,
lib/hyperstack/js_imports.rb,
lib/hyperstack/client_stubs.rb,
lib/hyperstack/client_readers.rb,
lib/hyperstack/config/version.rb,
lib/hyperstack/hotloader/stub.rb,
lib/hyperstack/config_settings.rb,
lib/hyperstack/hotloader/server.rb,
lib/hyperstack/hotloader/socket.rb,
lib/hyperstack/deprecation_warning.rb,
lib/hyperstack/hotloader/css_reloader.rb,
lib/hyperstack/hotloader/add_error_boundry.rb,
lib/hyperstack/environment/test/hyperstack_env.rb,
lib/hyperstack/environment/staging/hyperstack_env.rb,
lib/hyperstack/environment/production/hyperstack_env.rb,
lib/hyperstack/environment/development/hyperstack_env.rb
Overview
insure that stubs for Hyperstack::Hotloader.record and window.Hyperstack.hotloader are defined importing ‘hyperstack/hotloader’ will define/redefine these
Defined Under Namespace
Modules: Config, Context
Classes: Application, Autoloader, Engine, Hotloader, Operation, Railtie
Class Method Summary
collapse
-
.cancel_import(value) ⇒ Object
-
.cancel_webpack_imports ⇒ Object
-
.client_guard(render_on_server, render_on_client) ⇒ Object
-
.client_reader(*args) ⇒ Object
-
.client_reader_hash ⇒ Object
-
.client_readers ⇒ Object
-
.configuration {|_self| ... } ⇒ Object
-
.define_setting(name, default = nil, &block) ⇒ Object
-
.deprecation_warning(name, message) ⇒ Object
-
.env ⇒ Object
-
.generate_directive(directive, to, file, render_on_server, render_on_client) ⇒ Object
-
.generate_require_tree(path, render_on_server, render_on_client) ⇒ Object
-
.generate_requires(mode, sys, file) ⇒ Object
-
.handle_webpack ⇒ Object
-
.import(*args) ⇒ Object
-
.import_list ⇒ Object
-
.import_tree(*args) ⇒ Object
-
.imports(*args) ⇒ Object
-
.initialized_blocks ⇒ Object
-
.js_import(value, client_only: nil, server_only: nil, defines:) ⇒ Object
-
.on_client? ⇒ Boolean
-
.on_config_initialized(&block) ⇒ Object
-
.on_config_reset(&block) ⇒ Object
-
.on_error(err, reason, details) ⇒ Object
-
.reset_blocks ⇒ Object
Class Method Details
.cancel_import(value) ⇒ Object
22
23
24
25
26
27
28
29
30
|
# File 'lib/hyperstack/imports.rb', line 22
def cancel_import(value)
return unless value
current_spec = import_list.detect { |old_value, *_rest| value == old_value }
if current_spec
current_spec[1] = true
else
import_list << [value, true, true, true, false]
end
end
|
.cancel_webpack_imports ⇒ Object
32
33
34
35
|
# File 'lib/hyperstack/imports.rb', line 32
def cancel_webpack_imports
import_list.collect { |name, _c, _co, _so, _t, js_import, *_rest| js_import && name }
.each { |name| cancel_import name }
end
|
.client_guard(render_on_server, render_on_client) ⇒ Object
92
93
94
95
96
97
98
|
# File 'lib/hyperstack/imports.rb', line 92
def client_guard(render_on_server, render_on_client)
if !render_on_server
'# CLIENT ONLY'
elsif !render_on_client
'# SERVER ONLY'
end
end
|
.client_reader(*args) ⇒ Object
12
13
14
15
16
17
|
# File 'lib/hyperstack/client_readers.rb', line 12
def client_reader(*args)
client_readers += [*args]
client_reader_hash
end
|
.client_reader_hash ⇒ Object
8
9
10
|
# File 'lib/hyperstack/client_readers.rb', line 8
def client_reader_hash
@client_readers_hash ||= {}
end
|
.client_readers ⇒ Object
4
5
6
|
# File 'lib/hyperstack/client_readers.rb', line 4
def client_readers
@client_readers ||= []
end
|
.configuration {|_self| ... } ⇒ Object
12
13
14
15
16
|
# File 'lib/hyperstack/config_settings.rb', line 12
def configuration
reset_blocks.each(&:call)
yield self
initialized_blocks.each(&:call)
end
|
.define_setting(name, default = nil, &block) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/hyperstack/config_settings.rb', line 18
def define_setting(name, default = nil, &block)
class_variable_set("@@#{name}", default)
define_class_method "#{name}=" do |value|
class_variable_set("@@#{name}", value)
block.call value if block
value
end
define_class_method name do
class_variable_get("@@#{name}")
end
end
|
.deprecation_warning(name, message) ⇒ Object
2
3
4
5
6
7
8
9
|
# File 'lib/hyperstack/deprecation_warning.rb', line 2
def self.deprecation_warning(name, message)
return if env.production?
@deprecation_messages ||= []
message = "Warning: Deprecated feature used in #{name}. #{message}"
return if @deprecation_messages.include? message
@deprecation_messages << message
`console.warn.apply(console, [message])`
end
|
2
3
4
5
6
7
8
9
|
# File 'lib/hyperstack/env.rb', line 2
def self.env
@environment ||= begin
env = Rails.env if defined? Rails
env ||= ENV['RACK_ENV']
env = 'development' unless %w[development production test staging].include? env
ActiveSupport::StringInquirer.new(env)
end
end
|
.generate_directive(directive, to, file, render_on_server, render_on_client) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/hyperstack/imports.rb', line 66
def generate_directive(directive, to, file, render_on_server, render_on_client)
gem_path = File.expand_path('../', file).split('/')
comp_path = Rails.root.join('app', 'hyperstack', to).to_s.split('/')
while comp_path.first == gem_path.first do
gem_path.shift
comp_path.shift
end
r = "#{directive} '#{(['.'] + ['..'] * gem_path.length + comp_path).join('/')}' #{client_guard(render_on_server, render_on_client)}"
puts " #{r}"
"puts \"#{r}\"; #{r}"
end
|
.generate_require_tree(path, render_on_server, render_on_client) ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/hyperstack/imports.rb', line 78
def generate_require_tree(path, render_on_server, render_on_client)
base_name = Rails.root.join('app', path).to_s+'/'
Dir.glob(Rails.root.join('app', path, '**', '*')).sort.collect do |fname|
fname = fname.gsub(/^#{base_name}/, '')
fname = fname.gsub(/\.erb$/, '')
if fname =~ /(\.js$)|(\.rb$)/
fname = fname.gsub(/(\.js$)|(\.rb$)/, '')
r = "require '#{fname}' #{client_guard(render_on_server, render_on_client)}"
puts " #{r}"
"puts \"#{r}\"; #{r}"
end
end.compact.join("\n")
end
|
.generate_requires(mode, sys, file) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/hyperstack/imports.rb', line 47
def generate_requires(mode, sys, file)
handle_webpack
import_list.collect do |value, cancelled, render_on_server, render_on_client, kind|
next if cancelled
next if (sys && kind == :tree) || (!sys && kind != :tree)
next if mode == :client && !render_on_client
next if mode == :server && !render_on_server
if kind == :tree
generate_require_tree(value, render_on_server, render_on_client)
elsif kind == :gem
r = "require '#{value}' #{client_guard(render_on_server, render_on_client)}"
puts " #{r}"
"puts \"#{r}\"; #{r}"
else
generate_directive(:require, value, file, render_on_server, render_on_client)
end
end.compact.join("\n")
end
|
.handle_webpack ⇒ Object
37
38
39
40
41
42
43
44
45
|
# File 'lib/hyperstack/imports.rb', line 37
def handle_webpack
return unless defined? Webpacker
client_only_manifest = Webpacker.manifest.lookup("client_only.js")
client_and_server_manifest = Webpacker.manifest.lookup("client_and_server.js")
return unless client_only_manifest || client_and_server_manifest
cancel_webpack_imports
import client_only_manifest.split("/").last, client_only: true, at_head: true if client_only_manifest
import client_and_server_manifest.split("/").last, at_head: true if client_and_server_manifest
end
|
.import(*args) ⇒ Object
8
9
10
11
12
13
14
|
# File 'lib/hyperstack/imports.rb', line 8
def import(value, gem: nil, cancelled: nil, client_only: nil, server_only: nil, tree: nil, js_import: nil, at_head: nil)
return if import_list.detect { |current_value, *_rest| value == current_value }
new_element = [
value, cancelled, !client_only, !server_only, (tree ? :tree : :gem), js_import
]
import_list.send(at_head ? :unshift : :push, new_element)
end
|
.import_list ⇒ Object
4
5
6
|
# File 'lib/hyperstack/imports.rb', line 4
def import_list
@import_list ||= []
end
|
.import_tree(*args) ⇒ Object
18
19
20
|
# File 'lib/hyperstack/imports.rb', line 18
def import_tree(value, cancelled: nil, client_only: nil, server_only: nil)
import(value, cancelled: cancelled, client_only: client_only, server_only: server_only, tree: true)
end
|
.imports(*args) ⇒ Object
16
17
18
19
20
21
22
|
# File 'lib/hyperstack/imports.rb', line 16
def import(value, gem: nil, cancelled: nil, client_only: nil, server_only: nil, tree: nil, js_import: nil, at_head: nil)
return if import_list.detect { |current_value, *_rest| value == current_value }
new_element = [
value, cancelled, !client_only, !server_only, (tree ? :tree : :gem), js_import
]
import_list.send(at_head ? :unshift : :push, new_element)
end
|
.initialized_blocks ⇒ Object
4
5
6
|
# File 'lib/hyperstack/config_settings.rb', line 4
def initialized_blocks
@initialized_blocks ||= []
end
|
.js_import(value, client_only: nil, server_only: nil, defines:) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# File 'lib/hyperstack/js_imports.rb', line 3
def js_import(value, client_only: nil, server_only: nil, defines:)
defines = [*defines]
if RUBY_ENGINE != 'opal'
import(value, client_only: client_only, server_only: server_only, js_import: true)
else
on_server = `typeof Opal.global.document === 'undefined'`
return if (server_only && !on_server) || (client_only && on_server)
defines.each do |name|
next unless `Opal.global[#{name}] === undefined`
raise "The package #{name} was not found. Add it to the webpack "\
"#{client_only ? 'client_only.js' : 'client_and_server.js'} manifest."
end
end
end
|
.on_client? ⇒ Boolean
2
3
4
|
# File 'lib/hyperstack/on_client.rb', line 2
def self.on_client?
!(`typeof Opal.global.document === 'undefined'`) if RUBY_ENGINE == 'opal'
end
|
.on_config_initialized(&block) ⇒ Object
37
38
39
|
# File 'lib/hyperstack/config_settings.rb', line 37
def on_config_initialized &block
initialized_blocks << block
end
|
.on_config_reset(&block) ⇒ Object
33
34
35
|
# File 'lib/hyperstack/config_settings.rb', line 33
def on_config_reset &block
reset_blocks << block
end
|
.on_error(err, reason, details) ⇒ Object
2
3
4
|
# File 'lib/hyperstack/on_error.rb', line 2
def self.on_error(err, reason, details)
end
|
.reset_blocks ⇒ Object
8
9
10
|
# File 'lib/hyperstack/config_settings.rb', line 8
def reset_blocks
@reset_blocks ||= []
end
|