humid 0.0.3 → 0.0.4
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 +4 -4
- data/README.md +11 -5
- data/lib/humid.rb +30 -13
- data/lib/humid/version.rb +1 -1
- data/spec/render_spec.rb +32 -7
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 64ab68e5648b4211e7d39b272da5f94e1aaf3bfcdf625db30ee5f6c72a7dc529
|
|
4
|
+
data.tar.gz: 251e41301a91ea534547caa84b76ffef68b463299fd012c39b2b26e4626b6d13
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f97030ff349d70d7b4605969953194c34b8012dc12f477aa8c5f6f1ccdfee88be2ccb5c495fc880378be03c381ed88e11c8453abd1d8a92ad3621aad34a0b553
|
|
7
|
+
data.tar.gz: 23f59abc3c56fe9d11b6084e89b0c02a3b11c4e12175bcab6ea4a641630616950b6943a9948c64be270173461f383a540fd570fdb69fd439cfcd7007d6e542ea
|
data/README.md
CHANGED
|
@@ -46,13 +46,19 @@ Humid.configure do |config|
|
|
|
46
46
|
config.logger = Rails.logger
|
|
47
47
|
|
|
48
48
|
# context_options. Options passed to mini_racer. Defaults to
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
# empty.
|
|
50
|
+
# config.context_options = {}
|
|
51
|
+
config.context_options = {
|
|
52
|
+
timeout: 1000,
|
|
53
|
+
ensure_gc_after_idle: 2000
|
|
54
|
+
}
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
#
|
|
57
|
+
# Common development options
|
|
58
|
+
# You may need to use single_threaded mode with Spring
|
|
59
|
+
# MiniRacer::Platform.set_flags! :single_threaded
|
|
60
|
+
#
|
|
61
|
+
# If you're using Puma in single mode:
|
|
56
62
|
# Humid.create_context
|
|
57
63
|
```
|
|
58
64
|
|
data/lib/humid.rb
CHANGED
|
@@ -11,6 +11,9 @@ module Humid
|
|
|
11
11
|
extend self
|
|
12
12
|
include ActiveSupport::Configurable
|
|
13
13
|
|
|
14
|
+
class RenderError < StandardError
|
|
15
|
+
end
|
|
16
|
+
|
|
14
17
|
config_accessor :server_rendering_file do
|
|
15
18
|
"server_rendering.js"
|
|
16
19
|
end
|
|
@@ -24,10 +27,7 @@ module Humid
|
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
config_accessor :context_options do
|
|
27
|
-
{
|
|
28
|
-
timeout: 1000,
|
|
29
|
-
ensure_gc_after_idle: 2000
|
|
30
|
-
}
|
|
30
|
+
{}
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def remove_functions
|
|
@@ -54,16 +54,30 @@ module Humid
|
|
|
54
54
|
JS
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
def
|
|
58
|
-
if
|
|
57
|
+
def handle_stale_files
|
|
58
|
+
if Webpacker.compiler.stale?
|
|
59
59
|
Webpacker.compiler.compile
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
public_path = Webpacker.config.public_path
|
|
63
|
+
server_rendering_file = config.server_rendering_file
|
|
64
|
+
source_path = public_path.join(Webpacker.manifest.lookup(server_rendering_file)[1..-1])
|
|
65
|
+
filename = File.basename(source_path.to_s)
|
|
66
|
+
|
|
67
|
+
if @@current_filename != filename
|
|
60
68
|
dispose
|
|
61
69
|
create_context
|
|
62
|
-
else
|
|
63
|
-
@@context
|
|
64
70
|
end
|
|
65
71
|
end
|
|
66
72
|
|
|
73
|
+
def context
|
|
74
|
+
if @@context && Webpacker.env.development?
|
|
75
|
+
handle_stale_files
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
@@context
|
|
79
|
+
end
|
|
80
|
+
|
|
67
81
|
def dispose
|
|
68
82
|
if @@context
|
|
69
83
|
@@context.dispose
|
|
@@ -89,20 +103,23 @@ module Humid
|
|
|
89
103
|
|
|
90
104
|
source_path = public_path.join(Webpacker.manifest.lookup(server_rendering_file)[1..-1])
|
|
91
105
|
map_path = public_path.join(Webpacker.manifest.lookup(server_rendering_map)[1..-1])
|
|
92
|
-
|
|
93
|
-
filename = File.basename(source_path.to_s)
|
|
94
|
-
ctx.eval(File.read(source_path), filename: filename)
|
|
95
|
-
|
|
96
106
|
if config.use_source_map
|
|
97
107
|
ctx.attach("readSourceMap", proc { File.read(map_path) })
|
|
98
108
|
end
|
|
99
109
|
|
|
110
|
+
filename = File.basename(source_path.to_s)
|
|
111
|
+
@@current_filename = filename
|
|
112
|
+
ctx.eval(File.read(source_path), filename: filename)
|
|
113
|
+
|
|
100
114
|
@@context = ctx
|
|
101
115
|
end
|
|
102
116
|
|
|
103
117
|
def render(*args)
|
|
104
118
|
ActiveSupport::Notifications.instrument("render.humid") do
|
|
105
|
-
|
|
119
|
+
context.call("__renderer", *args)
|
|
120
|
+
rescue MiniRacer::RuntimeError => e
|
|
121
|
+
message = ([e.message] + e.backtrace.filter {|x| x.starts_with? "JavaScript"}).join("\n")
|
|
122
|
+
raise Humid::RenderError.new(message)
|
|
106
123
|
end
|
|
107
124
|
end
|
|
108
125
|
end
|
data/lib/humid/version.rb
CHANGED
data/spec/render_spec.rb
CHANGED
|
@@ -79,8 +79,8 @@ RSpec.describe "Humid" do
|
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
context "when the
|
|
83
|
-
it "compiles the JS" do
|
|
82
|
+
context "when the env is development" do
|
|
83
|
+
it "compiles the JS when stale" do
|
|
84
84
|
allow(Webpacker).to receive_message_chain("env.development?") { true }
|
|
85
85
|
allow(Webpacker).to receive_message_chain("compiler.stale?") { true }
|
|
86
86
|
allow(Webpacker).to receive_message_chain("compiler.compile")
|
|
@@ -91,12 +91,36 @@ RSpec.describe "Humid" do
|
|
|
91
91
|
expect(prev_context).to be_kind_of(MiniRacer::Context)
|
|
92
92
|
|
|
93
93
|
allow(Webpacker).to receive_message_chain("compiler.stale?") { true }
|
|
94
|
+
# This simulates a changing file
|
|
95
|
+
allow(Humid.config).to receive("server_rendering_file") { "simple_changed.js" }
|
|
94
96
|
|
|
95
97
|
next_context = Humid.context
|
|
96
98
|
|
|
97
99
|
expect(prev_context).to_not eql(next_context)
|
|
98
100
|
expect(next_context).to be_kind_of(MiniRacer::Context)
|
|
99
101
|
end
|
|
102
|
+
|
|
103
|
+
it "creates a new context when webpack-devserver already handled JS staleness" do
|
|
104
|
+
allow(Webpacker).to receive_message_chain("env.development?") { true }
|
|
105
|
+
allow(Webpacker).to receive_message_chain("compiler.stale?") { true }
|
|
106
|
+
allow(Webpacker).to receive_message_chain("compiler.compile")
|
|
107
|
+
allow(Humid.config).to receive("server_rendering_file") { "simple.js" }
|
|
108
|
+
|
|
109
|
+
Humid.create_context
|
|
110
|
+
prev_context = Humid.context
|
|
111
|
+
expect(Humid.render).to eql("hello")
|
|
112
|
+
expect(prev_context).to be_kind_of(MiniRacer::Context)
|
|
113
|
+
|
|
114
|
+
allow(Webpacker).to receive_message_chain("compiler.stale?") { false }
|
|
115
|
+
# This simulates a changing file
|
|
116
|
+
allow(Humid.config).to receive("server_rendering_file") { "simple_changed.js" }
|
|
117
|
+
|
|
118
|
+
next_context = Humid.context
|
|
119
|
+
|
|
120
|
+
expect(prev_context).to_not eql(next_context)
|
|
121
|
+
expect(next_context).to be_kind_of(MiniRacer::Context)
|
|
122
|
+
expect(Humid.render).to eql("hello changed")
|
|
123
|
+
end
|
|
100
124
|
end
|
|
101
125
|
end
|
|
102
126
|
|
|
@@ -126,11 +150,12 @@ RSpec.describe "Humid" do
|
|
|
126
150
|
expect {
|
|
127
151
|
Humid.render
|
|
128
152
|
}.to raise_error { |error|
|
|
129
|
-
expect(error).to be_a(
|
|
130
|
-
|
|
131
|
-
expect(
|
|
132
|
-
expect(
|
|
133
|
-
expect(
|
|
153
|
+
expect(error).to be_a(Humid::RenderError)
|
|
154
|
+
message = error.message.split("\n")
|
|
155
|
+
expect(message[0]).to eql("Error: ^^ Look! These stack traces map to the actual source code :)")
|
|
156
|
+
expect(message[1]).to eql("JavaScript at throwSomeError (/webpack:/app/javascript/packs/components/error-causing-component.js:2:1)")
|
|
157
|
+
expect(message[2]).to eql("JavaScript at ErrorCausingComponent (/webpack:/app/javascript/packs/components/error-causing-component.js:8:1)")
|
|
158
|
+
expect(message[3]).to eql("JavaScript at /webpack:/app/javascript/packs/reporting.js:18:1")
|
|
134
159
|
}
|
|
135
160
|
end
|
|
136
161
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: humid
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Johny Ho
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-07-
|
|
11
|
+
date: 2021-07-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: webpacker
|