ruby2js 3.5.3 → 4.0.2
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 +5 -665
- data/lib/ruby2js.rb +60 -15
- data/lib/ruby2js/converter.rb +39 -3
- data/lib/ruby2js/converter/args.rb +6 -1
- data/lib/ruby2js/converter/assign.rb +159 -0
- data/lib/ruby2js/converter/begin.rb +7 -2
- data/lib/ruby2js/converter/case.rb +7 -2
- data/lib/ruby2js/converter/class.rb +80 -21
- data/lib/ruby2js/converter/class2.rb +107 -33
- data/lib/ruby2js/converter/def.rb +7 -3
- data/lib/ruby2js/converter/dstr.rb +8 -3
- data/lib/ruby2js/converter/for.rb +1 -1
- data/lib/ruby2js/converter/hash.rb +28 -6
- data/lib/ruby2js/converter/hide.rb +13 -0
- data/lib/ruby2js/converter/if.rb +10 -2
- data/lib/ruby2js/converter/import.rb +19 -4
- data/lib/ruby2js/converter/kwbegin.rb +9 -2
- data/lib/ruby2js/converter/literal.rb +14 -2
- data/lib/ruby2js/converter/logical.rb +1 -1
- data/lib/ruby2js/converter/module.rb +41 -4
- data/lib/ruby2js/converter/next.rb +10 -2
- data/lib/ruby2js/converter/opasgn.rb +8 -0
- data/lib/ruby2js/converter/redo.rb +14 -0
- data/lib/ruby2js/converter/return.rb +2 -1
- data/lib/ruby2js/converter/send.rb +73 -8
- data/lib/ruby2js/converter/vasgn.rb +5 -0
- data/lib/ruby2js/converter/while.rb +1 -1
- data/lib/ruby2js/converter/whilepost.rb +1 -1
- data/lib/ruby2js/converter/xstr.rb +2 -3
- data/lib/ruby2js/demo.rb +53 -0
- data/lib/ruby2js/es2022.rb +5 -0
- data/lib/ruby2js/es2022/strict.rb +3 -0
- data/lib/ruby2js/filter.rb +9 -1
- data/lib/ruby2js/filter/active_functions.rb +44 -0
- data/lib/ruby2js/filter/camelCase.rb +6 -3
- data/lib/ruby2js/filter/cjs.rb +2 -0
- data/lib/ruby2js/filter/esm.rb +118 -26
- data/lib/ruby2js/filter/functions.rb +137 -109
- data/lib/ruby2js/filter/{wunderbar.rb → jsx.rb} +29 -7
- data/lib/ruby2js/filter/node.rb +58 -14
- data/lib/ruby2js/filter/nokogiri.rb +12 -12
- data/lib/ruby2js/filter/react.rb +182 -57
- data/lib/ruby2js/filter/require.rb +102 -11
- data/lib/ruby2js/filter/return.rb +13 -1
- data/lib/ruby2js/filter/stimulus.rb +187 -0
- data/lib/ruby2js/jsx.rb +309 -0
- data/lib/ruby2js/namespace.rb +75 -0
- data/lib/ruby2js/serializer.rb +19 -12
- data/lib/ruby2js/sprockets.rb +40 -0
- data/lib/ruby2js/version.rb +3 -3
- data/ruby2js.gemspec +2 -2
- metadata +23 -13
- data/lib/ruby2js/filter/esm_migration.rb +0 -72
- data/lib/ruby2js/rails.rb +0 -63
@@ -0,0 +1,75 @@
|
|
1
|
+
# Instances of this class keep track of both classes and modules that we have
|
2
|
+
# seen before, as well as the methods and properties that are defined in each.
|
3
|
+
#
|
4
|
+
# Use cases this enables:
|
5
|
+
#
|
6
|
+
# * detection of "open" classes and modules, i.e., redefining a class or
|
7
|
+
# module that was previously declared in order to add or modify methods
|
8
|
+
# or properties.
|
9
|
+
#
|
10
|
+
# * knowing when to prefix method or property access with `this.` and
|
11
|
+
# when to add `.bind(this)` for methods and properties that were defined
|
12
|
+
# outside of this class.
|
13
|
+
#
|
14
|
+
module Ruby2JS
|
15
|
+
class Namespace
|
16
|
+
def initialize
|
17
|
+
@active = [] # current scope
|
18
|
+
@seen = {} # history of all definitions seen previously
|
19
|
+
end
|
20
|
+
|
21
|
+
# convert an AST name which is represented as a set of nested
|
22
|
+
# s(:const, # ...) into an array of symbols that represent
|
23
|
+
# the relative path.
|
24
|
+
def resolve(token, result = [])
|
25
|
+
return [] unless token&.type == :const
|
26
|
+
resolve(token.children.first, result)
|
27
|
+
result.push(token.children.last)
|
28
|
+
end
|
29
|
+
|
30
|
+
# return the active scope as a flat array of symbols
|
31
|
+
def active
|
32
|
+
@active.flatten.compact
|
33
|
+
end
|
34
|
+
|
35
|
+
# enter a new scope, which may be a nested subscope. Mark the new scope
|
36
|
+
# as seen, and return any previous definition that may have been seen
|
37
|
+
# before.
|
38
|
+
def enter(name)
|
39
|
+
@active.push resolve(name)
|
40
|
+
previous = @seen[active]
|
41
|
+
@seen[active] ||= {}
|
42
|
+
previous
|
43
|
+
end
|
44
|
+
|
45
|
+
# return the set of known properties (and methods) for either the current
|
46
|
+
# scope or a named subscope.
|
47
|
+
def getOwnProps(name = nil)
|
48
|
+
@seen[active + resolve(name)]&.dup || {}
|
49
|
+
end
|
50
|
+
|
51
|
+
# add new props (and methods) to the current scope.
|
52
|
+
def defineProps(props, namespace=active)
|
53
|
+
@seen[namespace] ||= {}
|
54
|
+
@seen[namespace].merge! props || {}
|
55
|
+
end
|
56
|
+
|
57
|
+
# find a named scope which may be relative to any point in the ancestry of
|
58
|
+
# the current scope. Return the properties for that scope.
|
59
|
+
def find(name)
|
60
|
+
name = resolve(name)
|
61
|
+
prefix = active
|
62
|
+
while prefix.pop
|
63
|
+
result = @seen[prefix + name]
|
64
|
+
return result if result
|
65
|
+
end
|
66
|
+
{}
|
67
|
+
end
|
68
|
+
|
69
|
+
# leave a given scope. Note that the scope may be compound (e.g., M::N),
|
70
|
+
# and if so, it will pop the entire resolved name.
|
71
|
+
def leave()
|
72
|
+
@active.pop
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/ruby2js/serializer.rb
CHANGED
@@ -42,6 +42,7 @@ module Ruby2JS
|
|
42
42
|
|
43
43
|
class Serializer
|
44
44
|
attr_reader :timestamps
|
45
|
+
attr_accessor :file_name
|
45
46
|
|
46
47
|
def initialize
|
47
48
|
@sep = '; '
|
@@ -56,6 +57,7 @@ module Ruby2JS
|
|
56
57
|
@timestamps = {}
|
57
58
|
|
58
59
|
@ast = nil
|
60
|
+
@file_name = ''
|
59
61
|
end
|
60
62
|
|
61
63
|
def timestamp(file)
|
@@ -301,11 +303,11 @@ module Ruby2JS
|
|
301
303
|
def vlq(*mark)
|
302
304
|
if @mark[0] == mark[0]
|
303
305
|
return if @mark[-3..-1] == mark[-3..-1]
|
304
|
-
@mappings
|
306
|
+
@mappings += ',' unless @mappings == ''
|
305
307
|
end
|
306
308
|
|
307
309
|
while @mark[0] < mark[0]
|
308
|
-
@mappings
|
310
|
+
@mappings += ';'
|
309
311
|
@mark[0] += 1
|
310
312
|
@mark[1] = 0
|
311
313
|
end
|
@@ -320,16 +322,21 @@ module Ruby2JS
|
|
320
322
|
data = diff << 1
|
321
323
|
end
|
322
324
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
325
|
+
if data <= 0b11111
|
326
|
+
# workaround https://github.com/opal/opal/issues/575
|
327
|
+
encoded = BASE64[data]
|
328
|
+
else
|
329
|
+
encoded = ''
|
330
|
+
|
331
|
+
begin
|
332
|
+
digit = data & 0b11111
|
333
|
+
data >>= 5
|
334
|
+
digit |= 0b100000 if data > 0
|
335
|
+
encoded += BASE64[digit]
|
336
|
+
end while data > 0
|
337
|
+
end
|
331
338
|
|
332
|
-
@mappings
|
339
|
+
@mappings += encoded
|
333
340
|
end
|
334
341
|
end
|
335
342
|
|
@@ -363,7 +370,7 @@ module Ruby2JS
|
|
363
370
|
|
364
371
|
@sourcemap = {
|
365
372
|
version: 3,
|
366
|
-
file: @
|
373
|
+
file: @file_name,
|
367
374
|
sources: sources.map(&:name),
|
368
375
|
mappings: @mappings
|
369
376
|
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'sprockets/source_map_utils'
|
3
|
+
require 'ruby2js'
|
4
|
+
require 'ruby2js/version'
|
5
|
+
|
6
|
+
module Ruby2JS
|
7
|
+
module SprocketsTransformer
|
8
|
+
include Sprockets
|
9
|
+
VERSION = '1'
|
10
|
+
|
11
|
+
@@options = {}
|
12
|
+
|
13
|
+
def self.options=(options)
|
14
|
+
@@options = options
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.cache_key
|
18
|
+
@cache_key ||= "#{name}:#{Ruby2JS::VERSION::STRING}:#{VERSION}".freeze
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.call(input)
|
22
|
+
data = input[:data]
|
23
|
+
|
24
|
+
js, map = input[:cache].fetch([self.cache_key, data]) do
|
25
|
+
result = Ruby2JS.convert(data, {**@@options, file: input[:filename]})
|
26
|
+
[result.to_s, result.sourcemap.transform_keys {|key| key.to_s}]
|
27
|
+
end
|
28
|
+
|
29
|
+
map = SourceMapUtils.format_source_map(map, input)
|
30
|
+
map = SourceMapUtils.combine_source_maps(input[:metadata][:map], map)
|
31
|
+
|
32
|
+
{ data: js, map: map }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
Sprockets.register_mime_type 'application/ruby', extensions: ['.rb', '.js.rb']
|
38
|
+
|
39
|
+
Sprockets.register_transformer 'application/ruby', 'application/javascript',
|
40
|
+
Ruby2JS::SprocketsTransformer
|
data/lib/ruby2js/version.rb
CHANGED
data/ruby2js.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
11
11
|
s.require_paths = ["lib".freeze]
|
12
|
-
s.authors = ["Sam Ruby".freeze]
|
12
|
+
s.authors = ["Sam Ruby".freeze, "Jared White".freeze]
|
13
13
|
s.description = " The base package maps Ruby syntax to JavaScript semantics.\n Filters may be provided to add Ruby-specific or framework specific\n behavior.\n".freeze
|
14
14
|
s.email = "rubys@intertwingly.net".freeze
|
15
15
|
s.files = %w(ruby2js.gemspec README.md) + Dir.glob("{lib}/**/*")
|
@@ -19,5 +19,5 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.summary = "Minimal yet extensible Ruby to JavaScript conversion.".freeze
|
20
20
|
|
21
21
|
s.add_dependency('parser')
|
22
|
-
s.add_dependency('regexp_parser')
|
22
|
+
s.add_dependency('regexp_parser', '~> 2.1.1')
|
23
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby2js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Ruby
|
8
|
-
|
8
|
+
- Jared White
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: parser
|
@@ -28,16 +29,16 @@ dependencies:
|
|
28
29
|
name: regexp_parser
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- - "
|
32
|
+
- - "~>"
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
+
version: 2.1.1
|
34
35
|
type: :runtime
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
|
-
- - "
|
39
|
+
- - "~>"
|
39
40
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
+
version: 2.1.1
|
41
42
|
description: |2
|
42
43
|
The base package maps Ruby syntax to JavaScript semantics.
|
43
44
|
Filters may be provided to add Ruby-specific or framework specific
|
@@ -54,6 +55,7 @@ files:
|
|
54
55
|
- lib/ruby2js/converter/arg.rb
|
55
56
|
- lib/ruby2js/converter/args.rb
|
56
57
|
- lib/ruby2js/converter/array.rb
|
58
|
+
- lib/ruby2js/converter/assign.rb
|
57
59
|
- lib/ruby2js/converter/begin.rb
|
58
60
|
- lib/ruby2js/converter/block.rb
|
59
61
|
- lib/ruby2js/converter/blockpass.rb
|
@@ -73,6 +75,7 @@ files:
|
|
73
75
|
- lib/ruby2js/converter/fileline.rb
|
74
76
|
- lib/ruby2js/converter/for.rb
|
75
77
|
- lib/ruby2js/converter/hash.rb
|
78
|
+
- lib/ruby2js/converter/hide.rb
|
76
79
|
- lib/ruby2js/converter/if.rb
|
77
80
|
- lib/ruby2js/converter/import.rb
|
78
81
|
- lib/ruby2js/converter/in.rb
|
@@ -88,6 +91,7 @@ files:
|
|
88
91
|
- lib/ruby2js/converter/nthref.rb
|
89
92
|
- lib/ruby2js/converter/opasgn.rb
|
90
93
|
- lib/ruby2js/converter/prototype.rb
|
94
|
+
- lib/ruby2js/converter/redo.rb
|
91
95
|
- lib/ruby2js/converter/regexp.rb
|
92
96
|
- lib/ruby2js/converter/return.rb
|
93
97
|
- lib/ruby2js/converter/self.rb
|
@@ -105,6 +109,7 @@ files:
|
|
105
109
|
- lib/ruby2js/converter/xnode.rb
|
106
110
|
- lib/ruby2js/converter/xstr.rb
|
107
111
|
- lib/ruby2js/converter/yield.rb
|
112
|
+
- lib/ruby2js/demo.rb
|
108
113
|
- lib/ruby2js/es2015.rb
|
109
114
|
- lib/ruby2js/es2015/strict.rb
|
110
115
|
- lib/ruby2js/es2016.rb
|
@@ -119,14 +124,17 @@ files:
|
|
119
124
|
- lib/ruby2js/es2020/strict.rb
|
120
125
|
- lib/ruby2js/es2021.rb
|
121
126
|
- lib/ruby2js/es2021/strict.rb
|
127
|
+
- lib/ruby2js/es2022.rb
|
128
|
+
- lib/ruby2js/es2022/strict.rb
|
122
129
|
- lib/ruby2js/execjs.rb
|
123
130
|
- lib/ruby2js/filter.rb
|
131
|
+
- lib/ruby2js/filter/active_functions.rb
|
124
132
|
- lib/ruby2js/filter/camelCase.rb
|
125
133
|
- lib/ruby2js/filter/cjs.rb
|
126
134
|
- lib/ruby2js/filter/esm.rb
|
127
|
-
- lib/ruby2js/filter/esm_migration.rb
|
128
135
|
- lib/ruby2js/filter/functions.rb
|
129
136
|
- lib/ruby2js/filter/jquery.rb
|
137
|
+
- lib/ruby2js/filter/jsx.rb
|
130
138
|
- lib/ruby2js/filter/matchAll.rb
|
131
139
|
- lib/ruby2js/filter/minitest-jasmine.rb
|
132
140
|
- lib/ruby2js/filter/node.rb
|
@@ -135,14 +143,16 @@ files:
|
|
135
143
|
- lib/ruby2js/filter/require.rb
|
136
144
|
- lib/ruby2js/filter/return.rb
|
137
145
|
- lib/ruby2js/filter/securerandom.rb
|
146
|
+
- lib/ruby2js/filter/stimulus.rb
|
138
147
|
- lib/ruby2js/filter/tagged_templates.rb
|
139
148
|
- lib/ruby2js/filter/underscore.rb
|
140
149
|
- lib/ruby2js/filter/vue.rb
|
141
|
-
- lib/ruby2js/filter/wunderbar.rb
|
142
150
|
- lib/ruby2js/haml.rb
|
143
|
-
- lib/ruby2js/
|
151
|
+
- lib/ruby2js/jsx.rb
|
152
|
+
- lib/ruby2js/namespace.rb
|
144
153
|
- lib/ruby2js/serializer.rb
|
145
154
|
- lib/ruby2js/sinatra.rb
|
155
|
+
- lib/ruby2js/sprockets.rb
|
146
156
|
- lib/ruby2js/strict.rb
|
147
157
|
- lib/ruby2js/version.rb
|
148
158
|
- ruby2js.gemspec
|
@@ -150,7 +160,7 @@ homepage: http://github.com/rubys/ruby2js
|
|
150
160
|
licenses:
|
151
161
|
- MIT
|
152
162
|
metadata: {}
|
153
|
-
post_install_message:
|
163
|
+
post_install_message:
|
154
164
|
rdoc_options: []
|
155
165
|
require_paths:
|
156
166
|
- lib
|
@@ -165,8 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
175
|
- !ruby/object:Gem::Version
|
166
176
|
version: '0'
|
167
177
|
requirements: []
|
168
|
-
rubygems_version: 3.2
|
169
|
-
signing_key:
|
178
|
+
rubygems_version: 3.1.2
|
179
|
+
signing_key:
|
170
180
|
specification_version: 4
|
171
181
|
summary: Minimal yet extensible Ruby to JavaScript conversion.
|
172
182
|
test_files: []
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'ruby2js'
|
2
|
-
|
3
|
-
module Ruby2JS
|
4
|
-
module Filter
|
5
|
-
module ESMMigration
|
6
|
-
include SEXP
|
7
|
-
|
8
|
-
def initialize(*args)
|
9
|
-
@esm_include = nil
|
10
|
-
super
|
11
|
-
end
|
12
|
-
|
13
|
-
def process(node)
|
14
|
-
return super if @esm_include
|
15
|
-
@esm_include = Set.new
|
16
|
-
@esm_exclude = Set.new
|
17
|
-
@esm_export = nil
|
18
|
-
result = super
|
19
|
-
|
20
|
-
esm_walk(result)
|
21
|
-
|
22
|
-
inventory = (@esm_include - @esm_exclude).to_a.sort
|
23
|
-
|
24
|
-
if inventory.empty? and not @esm_export
|
25
|
-
result
|
26
|
-
else
|
27
|
-
list = inventory.map do |name|
|
28
|
-
if name == "React" and defined? Ruby2JS::Filter::React
|
29
|
-
s(:import, "#{name.downcase}", s(:const, nil, name))
|
30
|
-
elsif not %w(JSON Object).include? name
|
31
|
-
s(:import, "./#{name.downcase}.js", s(:const, nil, name))
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
list.push result
|
36
|
-
|
37
|
-
if @esm_export
|
38
|
-
list.push s(:export, :default, s(:const, nil, @esm_export))
|
39
|
-
end
|
40
|
-
|
41
|
-
s(:begin, *list.compact)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# gather constants
|
46
|
-
def esm_walk(node)
|
47
|
-
# extract ivars and cvars
|
48
|
-
if node.type == :const and node.children.first == nil
|
49
|
-
@esm_include << node.children.last.to_s
|
50
|
-
elsif node.type == :xnode
|
51
|
-
name = node.children.first
|
52
|
-
@esm_include << name unless name.empty? or name =~ /^[a-z]/
|
53
|
-
elsif node.type == :casgn and node.children.first == nil
|
54
|
-
@esm_exclude << node.children[1].to_s
|
55
|
-
elsif node.type == :class and node.children.first.type == :const
|
56
|
-
if node.children.first.children.first == nil
|
57
|
-
name = node.children.first.children.last.to_s
|
58
|
-
@esm_exclude << name
|
59
|
-
@esm_export ||= name
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# recurse
|
64
|
-
node.children.each do |child|
|
65
|
-
esm_walk(child) if Parser::AST::Node === child
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
DEFAULTS.push ESMMigration
|
71
|
-
end
|
72
|
-
end
|
data/lib/ruby2js/rails.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
# Example usage:
|
2
|
-
#
|
3
|
-
# $ echo "gem 'ruby2js', require: 'ruby2js/rails'" >> Gemfile
|
4
|
-
# $ bundle update
|
5
|
-
# $ rails generate controller Say hello
|
6
|
-
# $ echo 'alert "Hello world!"' > app/views/say/hello.js.rb
|
7
|
-
# $ rails server
|
8
|
-
# $ curl http://localhost:3000/say/hello.js
|
9
|
-
#
|
10
|
-
# Using an optional filter:
|
11
|
-
#
|
12
|
-
# $ echo 'require "ruby2js/filter/functions"' > config/initializers/ruby2js.rb
|
13
|
-
#
|
14
|
-
# Asset Pipeline:
|
15
|
-
#
|
16
|
-
# Ruby2JS registers ".rb.js" extension.
|
17
|
-
# You can add "ruby_thing.js.rb" to your app/javascript folder
|
18
|
-
# and '= require ruby_thing' from other js sources.
|
19
|
-
#
|
20
|
-
# (options are not yet supported, but by requiring the appropriate files
|
21
|
-
# as shown above, you can configure proejct wide.)
|
22
|
-
require 'ruby2js'
|
23
|
-
|
24
|
-
module Ruby2JS
|
25
|
-
module Rails
|
26
|
-
class Template
|
27
|
-
cattr_accessor :default_format
|
28
|
-
self.default_format = Mime[:js]
|
29
|
-
def self.call(template, source)
|
30
|
-
"Ruby2JS.convert(#{template.source.inspect}, file: source).to_s"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
ActiveSupport.on_load(:action_view) do
|
35
|
-
ActionView::Template.register_template_handler :rb, Template
|
36
|
-
end
|
37
|
-
|
38
|
-
class SprocketProcessor
|
39
|
-
def initialize(file = nil)
|
40
|
-
@file = file
|
41
|
-
end
|
42
|
-
def render(context , _)
|
43
|
-
context = context.instance_eval { binding } unless context.is_a? Binding
|
44
|
-
Ruby2JS.convert(File.read(@file), binding: context).to_s
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class Engine < ::Rails::Engine
|
49
|
-
engine_name "ruby2js"
|
50
|
-
|
51
|
-
config.app_generators.javascripts true
|
52
|
-
config.app_generators.javascript_engine :rb
|
53
|
-
|
54
|
-
config.assets.configure do |env|
|
55
|
-
env.register_mime_type 'text/ruby', extensions: ['.js.rb', '.rb']
|
56
|
-
env.register_transformer 'text/ruby', 'text/javascript', SprocketProcessor
|
57
|
-
env.register_preprocessor 'text/javascript', SprocketProcessor
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|