smolbars 0.1.4 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.mdown +11 -1
- data/lib/smolbars/context.rb +24 -3
- data/lib/smolbars/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffed6204efd252089f232757ab1bc4ff88293cf3ee12d03e4ace867e443b8f77
|
4
|
+
data.tar.gz: b9f213c71c01d1bb23c90276816b2a5f5e3360d0f93b81ade1757d19bfdebf6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df6e4cb8f39d64beadfd49f7113dfa32fd53436eaee9e631b68823ce8c7fdcdf2e2e01dcfb05f6ae1d580e9a7d640867340211f33360a4b1780f3a447399503a
|
7
|
+
data.tar.gz: e9a5ba81a5c96092f107d3219695a0145fc1e582f1aacc33e6ff40a1dda1d11cb216f8361baf824dbcba6c91fcf8d7aa5fa774321858a1a5fcaa373caed895d8
|
data/README.mdown
CHANGED
@@ -79,9 +79,19 @@ underlying JS instance
|
|
79
79
|
|
80
80
|
rspec spec/
|
81
81
|
|
82
|
+
### Tests in Docker
|
83
|
+
|
84
|
+
Building an image:
|
85
|
+
|
86
|
+
docker compose run --rm app bundle install
|
87
|
+
|
88
|
+
Running tests:
|
89
|
+
|
90
|
+
docker compose run --rm app bundle exec rspec spec/
|
91
|
+
|
82
92
|
|
83
93
|
[1]: https://github.com/rubyjs/mini_racer "mini_racer"
|
84
94
|
[2]: https://github.com/wycats/handlebars.js "Handlebars JavaScript templating library"
|
85
95
|
[3]: https://github.com/cowboyd/handlebars.rb "Handlebars Ruby library"
|
86
96
|
[4]: https://github.com/cowboyd/therubyracer "The Ruby Racer"
|
87
|
-
[5]: https://github.com/combinaut/minibars "Minibars"
|
97
|
+
[5]: https://github.com/combinaut/minibars "Minibars"
|
data/lib/smolbars/context.rb
CHANGED
@@ -4,8 +4,20 @@ require 'securerandom'
|
|
4
4
|
|
5
5
|
module Smolbars
|
6
6
|
class Context
|
7
|
+
JS_ESCAPE_MAP = {
|
8
|
+
'\\' => '\\\\',
|
9
|
+
"</" => '<\/',
|
10
|
+
"\r\n" => '\n',
|
11
|
+
"\n" => '\n',
|
12
|
+
"\r" => '\n',
|
13
|
+
'"' => '\\"',
|
14
|
+
"'" => "\\'",
|
15
|
+
"`" => "\\`",
|
16
|
+
"$" => "\\$"
|
17
|
+
}.freeze
|
18
|
+
|
7
19
|
def initialize(**kwargs)
|
8
|
-
@js = MiniRacer::Context.new(kwargs)
|
20
|
+
@js = MiniRacer::Context.new(**kwargs)
|
9
21
|
@js.load(Handlebars::Source.bundled_path)
|
10
22
|
end
|
11
23
|
|
@@ -14,7 +26,7 @@ module Smolbars
|
|
14
26
|
# manually escaping them
|
15
27
|
def compile(template)
|
16
28
|
handle = fn_handle
|
17
|
-
invocation = %
|
29
|
+
invocation = %{var #{handle} = Handlebars.compile("#{escape_javascript(template)}");}
|
18
30
|
@js.eval(invocation)
|
19
31
|
::Smolbars::Template.new(self, handle)
|
20
32
|
end
|
@@ -24,7 +36,7 @@ module Smolbars
|
|
24
36
|
end
|
25
37
|
|
26
38
|
def load_pattern(pattern)
|
27
|
-
Dir[pattern].each{ |path| load(path) }
|
39
|
+
Dir[pattern].each { |path| load(path) }
|
28
40
|
end
|
29
41
|
|
30
42
|
def load(path)
|
@@ -36,5 +48,14 @@ module Smolbars
|
|
36
48
|
def fn_handle
|
37
49
|
"js_fn_#{SecureRandom.hex}"
|
38
50
|
end
|
51
|
+
|
52
|
+
def escape_javascript(javascript)
|
53
|
+
javascript = javascript.to_s
|
54
|
+
if javascript.empty?
|
55
|
+
''
|
56
|
+
else
|
57
|
+
javascript.gsub(/(\\|<\/|\r\n|\342\200\250|\342\200\251|[\n\r"']|[`]|[$])/u, JS_ESCAPE_MAP)
|
58
|
+
end
|
59
|
+
end
|
39
60
|
end
|
40
61
|
end
|
data/lib/smolbars/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smolbars
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charles Lowell
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-03-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mini_racer
|
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
requirements: []
|
101
|
-
rubygems_version: 3.
|
101
|
+
rubygems_version: 3.4.7
|
102
102
|
signing_key:
|
103
103
|
specification_version: 4
|
104
104
|
summary: Ruby bindings for the smolbars.js templating library
|