ruby2js 2.0.14 → 2.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ruby2js/converter/args.rb +1 -1
- data/lib/ruby2js/converter/array.rb +2 -2
- data/lib/ruby2js/converter/begin.rb +1 -1
- data/lib/ruby2js/converter/class.rb +10 -9
- data/lib/ruby2js/converter/cvar.rb +1 -0
- data/lib/ruby2js/converter/ivar.rb +3 -3
- data/lib/ruby2js/converter/return.rb +2 -2
- data/lib/ruby2js/converter/send.rb +6 -8
- data/lib/ruby2js/converter/vasgn.rb +1 -1
- data/lib/ruby2js/converter/xstr.rb +1 -1
- data/lib/ruby2js/converter.rb +9 -3
- data/lib/ruby2js/filter/angularrb.rb +6 -5
- data/lib/ruby2js/filter/functions.rb +2 -2
- data/lib/ruby2js/filter/jquery.rb +24 -19
- data/lib/ruby2js/filter/minitest-jasmine.rb +14 -9
- data/lib/ruby2js/filter/react.rb +38 -30
- data/lib/ruby2js/filter/require.rb +6 -1
- data/lib/ruby2js/serializer.rb +5 -3
- data/lib/ruby2js/version.rb +1 -1
- data/lib/ruby2js.rb +2 -4
- data/ruby2js.gemspec +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 656fbf21438b096f37a606de1a6d3bf19a55bb5b
|
4
|
+
data.tar.gz: 1251eeab90080384e8d97257184129a77859a69e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddfbded6bfafa9e257f1ab8dc3a309f12381e2a0edf7e76cca328d7d0ebf279f3a02775cac1c22ad5762094efa30cc3a49be03620e8aa8cf79ffccfe4ae54d6e
|
7
|
+
data.tar.gz: 45116a4d10458125e78b3589ca25e51c5e1b115ffe6202b649d70fbd59bac5a6bf06cee8b155f7a41c8d05d6c3f85d4174ec360ede27ecaae9c2658664458bde
|
@@ -22,9 +22,9 @@ module Ruby2JS
|
|
22
22
|
end
|
23
23
|
else
|
24
24
|
if items.length <= 1
|
25
|
-
put '['; parse_all
|
25
|
+
put '['; parse_all(*items, join: ', '); put ']'
|
26
26
|
else
|
27
|
-
compact { puts '['; parse_all
|
27
|
+
compact { puts '['; parse_all(*items, join: ",#{@ws}"); sput ']' }
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -75,8 +75,8 @@ module Ruby2JS
|
|
75
75
|
|
76
76
|
elsif m.type == :send and m.children.first == nil
|
77
77
|
if m.children[1] == :attr_accessor
|
78
|
-
m.children[2..-1].map do |
|
79
|
-
var =
|
78
|
+
m.children[2..-1].map do |child_sym|
|
79
|
+
var = child_sym.children.first
|
80
80
|
s(:prop, s(:attr, name, :prototype), var =>
|
81
81
|
{enumerable: s(:true), configurable: s(:true),
|
82
82
|
get: s(:block, s(:send, nil, :proc), s(:args),
|
@@ -85,8 +85,8 @@ module Ruby2JS
|
|
85
85
|
s(:ivasgn, :"@#{var}", s(:lvar, var)))})
|
86
86
|
end
|
87
87
|
elsif m.children[1] == :attr_reader
|
88
|
-
m.children[2..-1].map do |
|
89
|
-
var =
|
88
|
+
m.children[2..-1].map do |child_sym|
|
89
|
+
var = child_sym.children.first
|
90
90
|
s(:prop, s(:attr, name, :prototype), var =>
|
91
91
|
{get: s(:block, s(:send, nil, :proc), s(:args),
|
92
92
|
s(:return, s(:ivar, :"@#{var}"))),
|
@@ -94,8 +94,8 @@ module Ruby2JS
|
|
94
94
|
configurable: s(:true)})
|
95
95
|
end
|
96
96
|
elsif m.children[1] == :attr_writer
|
97
|
-
m.children[2..-1].map do |
|
98
|
-
var =
|
97
|
+
m.children[2..-1].map do |child_sym|
|
98
|
+
var = child_sym.children.first
|
99
99
|
s(:prop, s(:attr, name, :prototype), var =>
|
100
100
|
{set: s(:block, s(:send, nil, :proc), s(:args, s(:arg, var)),
|
101
101
|
s(:ivasgn, :"@#{var}", s(:lvar, var))),
|
@@ -244,9 +244,10 @@ module Ruby2JS
|
|
244
244
|
*descriptor.map { |key, value| s(:pair, s(:sym, key), value) }))
|
245
245
|
else
|
246
246
|
parse s(:send, s(:const, nil, :Object), :defineProperties,
|
247
|
-
obj, s(:hash, *props.map {|
|
248
|
-
s(:pair, s(:sym,
|
249
|
-
s(:
|
247
|
+
obj, s(:hash, *props.map {|hprop, hdescriptor|
|
248
|
+
s(:pair, s(:sym, hprop),
|
249
|
+
s(:hash, *hdescriptor.map {|key, value|
|
250
|
+
s(:pair, s(:sym, key), value) }))}))
|
250
251
|
end
|
251
252
|
elsif @ast.type == :method
|
252
253
|
parse s(:send, *args)
|
@@ -14,10 +14,10 @@ module Ruby2JS
|
|
14
14
|
handle :hostvalue do |value|
|
15
15
|
case value
|
16
16
|
when Hash
|
17
|
-
parse s(:hash, *value.map {|key,
|
18
|
-
s(:hostvalue,
|
17
|
+
parse s(:hash, *value.map {|key, hvalue| s(:pair, s(:hostvalue, key),
|
18
|
+
s(:hostvalue, hvalue))})
|
19
19
|
when Array
|
20
|
-
parse s(:array, *value.map {|
|
20
|
+
parse s(:array, *value.map {|hvalue| s(:hostvalue, hvalue)})
|
21
21
|
when String
|
22
22
|
parse s(:str, value)
|
23
23
|
when Integer
|
@@ -44,8 +44,8 @@ module Ruby2JS
|
|
44
44
|
|
45
45
|
node = node.children[2] ? s(:autoreturn, node.children[2]) : nil
|
46
46
|
|
47
|
-
conditions.each do |condition,
|
48
|
-
node = s(:if, condition,
|
47
|
+
conditions.each do |condition, cstatements|
|
48
|
+
node = s(:if, condition, cstatements, node)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
block.push node
|
@@ -16,8 +16,6 @@ module Ruby2JS
|
|
16
16
|
handle :send, :sendw, :attr, :call do |receiver, method, *args|
|
17
17
|
ast = @ast
|
18
18
|
|
19
|
-
width = ((ast.type == :sendw && !@nl.empty?) ? 0 : @width)
|
20
|
-
|
21
19
|
# strip '!' and '?' decorations
|
22
20
|
method = method.to_s[0..-2] if method =~ /\w[!?]$/
|
23
21
|
|
@@ -38,7 +36,7 @@ module Ruby2JS
|
|
38
36
|
t2,m2,*args2 = receiver.children.first.children
|
39
37
|
if not t2 and [:lambda, :proc].include? m2 and args2.length == 0
|
40
38
|
(@state == :statement ? group(receiver) : parse(receiver))
|
41
|
-
put '('; parse_all
|
39
|
+
put '('; parse_all(*args, join: ', '); put ')'
|
42
40
|
return
|
43
41
|
end
|
44
42
|
end
|
@@ -68,10 +66,10 @@ module Ruby2JS
|
|
68
66
|
parse s(:not, receiver)
|
69
67
|
|
70
68
|
elsif method == :[]
|
71
|
-
parse receiver; put '['; parse_all
|
69
|
+
parse receiver; put '['; parse_all(*args, join: ', '); put ']'
|
72
70
|
|
73
71
|
elsif method == :[]=
|
74
|
-
parse receiver; put '['; parse_all
|
72
|
+
parse receiver; put '['; parse_all(*args[0..-2], join: ', '); put '] = '
|
75
73
|
parse args[-1]
|
76
74
|
|
77
75
|
elsif [:-@, :+@, :~, '~'].include? method
|
@@ -133,7 +131,7 @@ module Ruby2JS
|
|
133
131
|
|
134
132
|
put "new "; parse receiver
|
135
133
|
if ast.is_method?
|
136
|
-
put '('; parse_all
|
134
|
+
put '('; parse_all(*args, join: ', '); put ')'
|
137
135
|
end
|
138
136
|
elsif args.length == 1 and args.first.type == :send
|
139
137
|
# accommodation for JavaScript like new syntax w/argument list
|
@@ -179,9 +177,9 @@ module Ruby2JS
|
|
179
177
|
put "#{ '.' if receiver && method}#{ method }"
|
180
178
|
|
181
179
|
if args.length <= 1
|
182
|
-
put "("; parse_all
|
180
|
+
put "("; parse_all(*args, join: ', '); put ')'
|
183
181
|
else
|
184
|
-
compact { puts "("; parse_all
|
182
|
+
compact { puts "("; parse_all(*args, join: ",#@ws"); sput ')' }
|
185
183
|
end
|
186
184
|
end
|
187
185
|
end
|
data/lib/ruby2js/converter.rb
CHANGED
@@ -37,10 +37,15 @@ module Ruby2JS
|
|
37
37
|
@@handlers.each do |name|
|
38
38
|
@handlers[name] = method("on_#{name}")
|
39
39
|
end
|
40
|
-
end
|
41
40
|
|
42
|
-
|
43
|
-
@
|
41
|
+
@state = nil
|
42
|
+
@block_this = nil
|
43
|
+
@block_depth = nil
|
44
|
+
@prop = nil
|
45
|
+
@instance_method = nil
|
46
|
+
@prototype = nil
|
47
|
+
@class_parent = nil
|
48
|
+
@class_name = nil
|
44
49
|
end
|
45
50
|
|
46
51
|
def width=(width)
|
@@ -117,6 +122,7 @@ module Ruby2JS
|
|
117
122
|
handler.call(*ast.children)
|
118
123
|
ensure
|
119
124
|
@ast = oldast
|
125
|
+
@state = oldstate
|
120
126
|
end
|
121
127
|
|
122
128
|
def parse_all(*args)
|
@@ -39,6 +39,7 @@ module Ruby2JS
|
|
39
39
|
@ngAppUses = []
|
40
40
|
@ngClassUses = []
|
41
41
|
@ngClassOmit = []
|
42
|
+
@ngScope = nil
|
42
43
|
super
|
43
44
|
end
|
44
45
|
|
@@ -74,7 +75,7 @@ module Ruby2JS
|
|
74
75
|
|
75
76
|
# convert use calls into dependencies
|
76
77
|
depends = @ngAppUses.map {|sym| s(:sym, sym)} + extract_uses(block)
|
77
|
-
depends = depends.map {|
|
78
|
+
depends = depends.map {|dnode| dnode.children.first.to_s}.uniq.sort.
|
78
79
|
map {|sym| s(:str, sym)}
|
79
80
|
|
80
81
|
ngApp, @ngApp, @ngChildren = @ngApp, nil, nil
|
@@ -129,7 +130,7 @@ module Ruby2JS
|
|
129
130
|
|
130
131
|
@ngClassUses -= @ngClassOmit + [name.children.last]
|
131
132
|
args = @ngClassUses.map {|sym| s(:arg, sym)} + uses
|
132
|
-
args = args.map {|
|
133
|
+
args = args.map {|anode| anode.children.first.to_sym}.uniq.sort.
|
133
134
|
map {|sym| s(:arg, sym)}
|
134
135
|
@ngClassUses, @ngClassOmit = [], []
|
135
136
|
|
@@ -249,7 +250,7 @@ module Ruby2JS
|
|
249
250
|
@ngClassUses -= @ngClassOmit
|
250
251
|
args = node.children[1].children
|
251
252
|
args += @ngClassUses.map {|sym| s(:arg, sym)} + extract_uses(block)
|
252
|
-
args = args.map {|
|
253
|
+
args = args.map {|anode| anode.children.first.to_sym}.uniq.sort.
|
253
254
|
map {|sym| s(:arg, sym)}
|
254
255
|
|
255
256
|
node.updated :block, [target, s(:args, *args), s(:begin, *block)]
|
@@ -322,7 +323,7 @@ module Ruby2JS
|
|
322
323
|
@ngClassUses.delete call.children[2].children[0]
|
323
324
|
args = process_all(node.children[1].children)
|
324
325
|
args += @ngClassUses.map {|sym| s(:arg, sym)} + extract_uses(block)
|
325
|
-
args = args.map {|
|
326
|
+
args = args.map {|anode| anode.children.first.to_sym}.uniq.sort.
|
326
327
|
map {|sym| s(:arg, sym)}
|
327
328
|
|
328
329
|
# construct a function
|
@@ -578,7 +579,7 @@ module Ruby2JS
|
|
578
579
|
def extract_uses(block)
|
579
580
|
# find the block
|
580
581
|
while block.length == 1 and block.first and block.first.type == :begin
|
581
|
-
block.push
|
582
|
+
block.push(*block.shift.children)
|
582
583
|
end
|
583
584
|
|
584
585
|
# find use class method calls
|
@@ -174,8 +174,6 @@ module Ruby2JS
|
|
174
174
|
|
175
175
|
|
176
176
|
elsif method == :[]
|
177
|
-
index = args.first
|
178
|
-
|
179
177
|
# resolve negative literal indexes
|
180
178
|
i = proc do |index|
|
181
179
|
if index.type == :int and index.children.first < 0
|
@@ -186,6 +184,8 @@ module Ruby2JS
|
|
186
184
|
end
|
187
185
|
end
|
188
186
|
|
187
|
+
index = args.first
|
188
|
+
|
189
189
|
if not index
|
190
190
|
super
|
191
191
|
|
@@ -65,6 +65,11 @@ module Ruby2JS
|
|
65
65
|
module JQuery
|
66
66
|
include SEXP
|
67
67
|
|
68
|
+
def initialize(*args)
|
69
|
+
@react = nil
|
70
|
+
super
|
71
|
+
end
|
72
|
+
|
68
73
|
# map $$ to $
|
69
74
|
def on_gvar(node)
|
70
75
|
if node.children[0] == :$$
|
@@ -109,32 +114,32 @@ module Ruby2JS
|
|
109
114
|
domprops = %w(checked disabled readonly readOnly required)
|
110
115
|
|
111
116
|
stopProps = false
|
112
|
-
rewrite_tilda = proc do |
|
117
|
+
rewrite_tilda = proc do |tnode|
|
113
118
|
# Example conversion:
|
114
119
|
# before:
|
115
120
|
# (send (send (send (send nil :a) :b) :c) :~)
|
116
121
|
# after:
|
117
122
|
# (send (send (send nil "$" (send nil :a)) :b) :c)
|
118
|
-
if
|
119
|
-
stopProps = true if
|
120
|
-
if
|
123
|
+
if tnode.type == :send and tnode.children[0]
|
124
|
+
stopProps = true if tnode.children[1] == :[]
|
125
|
+
if tnode.children[1] == :~ and tnode.children[0].children[1] == :~
|
121
126
|
# consecutive tildes
|
122
|
-
if
|
123
|
-
result =
|
127
|
+
if tnode.children[0].children[0].children[1] == :~
|
128
|
+
result = tnode.children[0].children[0].children[0]
|
124
129
|
else
|
125
|
-
result = s(:attr,
|
130
|
+
result = s(:attr, tnode.children[0].children[0], :~)
|
126
131
|
end
|
127
132
|
s(:attr, s(:attr, process(result), :~), :~)
|
128
133
|
else
|
129
134
|
# possible getter/setter
|
130
|
-
method =
|
135
|
+
method = tnode.children[1]
|
131
136
|
method = method.to_s.chomp('=') if method =~ /=$/
|
132
137
|
method = :each! if method == :each
|
133
|
-
rewrite = [rewrite_tilda[
|
134
|
-
method, *
|
135
|
-
if stopProps or props.include?
|
136
|
-
rewrite[1] =
|
137
|
-
|
138
|
+
rewrite = [rewrite_tilda[tnode.children[0]],
|
139
|
+
method, *tnode.children[2..-1]]
|
140
|
+
if stopProps or props.include? tnode.children[1]
|
141
|
+
rewrite[1] = tnode.children[1]
|
142
|
+
tnode.updated nil, rewrite
|
138
143
|
elsif domprops.include? method.to_s
|
139
144
|
method = :readOnly if method.to_s == 'readonly'
|
140
145
|
s(:send, rewrite[0], :prop, s(:sym, method), *rewrite[2..-1])
|
@@ -142,16 +147,16 @@ module Ruby2JS
|
|
142
147
|
s(:send, *rewrite)
|
143
148
|
end
|
144
149
|
end
|
145
|
-
elsif
|
150
|
+
elsif tnode.type == :block
|
146
151
|
# method call with a block parameter
|
147
|
-
|
148
|
-
*
|
149
|
-
elsif
|
152
|
+
tnode.updated nil, [rewrite_tilda[tnode.children[0]],
|
153
|
+
*tnode.children[1..-1]]
|
154
|
+
elsif tnode.type == :array
|
150
155
|
# innermost expression is an array
|
151
|
-
s(:send, nil, '$', *
|
156
|
+
s(:send, nil, '$', *tnode)
|
152
157
|
else
|
153
158
|
# innermost expression is a scalar
|
154
|
-
s(:send, nil, '$',
|
159
|
+
s(:send, nil, '$', tnode)
|
155
160
|
end
|
156
161
|
end
|
157
162
|
|
@@ -5,6 +5,11 @@ module Ruby2JS
|
|
5
5
|
module MiniTestJasmine
|
6
6
|
include SEXP
|
7
7
|
|
8
|
+
def initialize(*args)
|
9
|
+
@jasmine_describe = nil
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
8
13
|
RELOPS = [:<, :<=, :==, :>=, :>].
|
9
14
|
map {|sym| Parser::AST::Node.new :sym, [sym]}
|
10
15
|
|
@@ -17,17 +22,17 @@ module Ruby2JS
|
|
17
22
|
body = body.first.children
|
18
23
|
end
|
19
24
|
|
20
|
-
body = body.map do |
|
21
|
-
if
|
25
|
+
body = body.map do |bnode|
|
26
|
+
if bnode.type == :def and bnode.children.first =~ /^test_/
|
22
27
|
s(:block, s(:send, nil, :it, s(:str,
|
23
|
-
|
24
|
-
s(:args),
|
25
|
-
elsif
|
26
|
-
s(:block, s(:send, nil, :before), s(:args),
|
27
|
-
elsif
|
28
|
-
s(:block, s(:send, nil, :after), s(:args),
|
28
|
+
bnode.children.first.to_s.sub(/^test_/, '').gsub('_', ' '))),
|
29
|
+
s(:args), bnode.children.last)
|
30
|
+
elsif bnode.type == :def and bnode.children.first == :setup
|
31
|
+
s(:block, s(:send, nil, :before), s(:args), bnode.children.last)
|
32
|
+
elsif bnode.type == :def and bnode.children.first == :teardown
|
33
|
+
s(:block, s(:send, nil, :after), s(:args), bnode.children.last)
|
29
34
|
else
|
30
|
-
|
35
|
+
bnode
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
data/lib/ruby2js/filter/react.rb
CHANGED
@@ -63,6 +63,14 @@ module Ruby2JS
|
|
63
63
|
ReactAttrMap = Hash[ReactAttrs.map {|name| [name.downcase, name]}]
|
64
64
|
ReactAttrMap['for'] = 'htmlFor'
|
65
65
|
|
66
|
+
def initialize(*args)
|
67
|
+
@react = nil
|
68
|
+
@reactApply = nil
|
69
|
+
@reactBlock = nil
|
70
|
+
@reactClass = nil
|
71
|
+
super
|
72
|
+
end
|
73
|
+
|
66
74
|
def options=(options)
|
67
75
|
super
|
68
76
|
@react = true if options[:react]
|
@@ -105,7 +113,7 @@ module Ruby2JS
|
|
105
113
|
# collect static properties/functions
|
106
114
|
statics = []
|
107
115
|
body.select {|child| child.type == :defs}.each do |child|
|
108
|
-
|
116
|
+
_parent, mname, args, *block = child.children
|
109
117
|
if child.is_method?
|
110
118
|
statics << s(:pair, s(:sym, mname), process(child.updated(:block,
|
111
119
|
[s(:send, nil, :proc), args, s(:autoreturn, *block)])))
|
@@ -181,8 +189,8 @@ module Ruby2JS
|
|
181
189
|
end
|
182
190
|
|
183
191
|
# build a hash for state
|
184
|
-
state = s(:hash, *assigns.map {|
|
185
|
-
|
192
|
+
state = s(:hash, *assigns.map {|anode| s(:pair, s(:str,
|
193
|
+
anode.children.first.to_s[1..-1]), anode.children.last)})
|
186
194
|
|
187
195
|
# modify block to build and/or return state
|
188
196
|
if block.empty?
|
@@ -567,53 +575,53 @@ module Ruby2JS
|
|
567
575
|
end
|
568
576
|
end
|
569
577
|
|
570
|
-
rewrite_tilda = proc do |
|
578
|
+
rewrite_tilda = proc do |tnode|
|
571
579
|
# Example conversion:
|
572
580
|
# before:
|
573
581
|
# (send (send nil :a) :text) :~)
|
574
582
|
# after:
|
575
583
|
# (send (gvar :$a))), :text)
|
576
|
-
if
|
577
|
-
if
|
584
|
+
if tnode.type == :send and tnode.children[0]
|
585
|
+
if tnode.children[1] == :~ and tnode.children[0].children[1] == :~
|
578
586
|
# consecutive tildes
|
579
|
-
if
|
580
|
-
result =
|
587
|
+
if tnode.children[0].children[0].children[1] == :~
|
588
|
+
result = tnode.children[0].children[0].children[0]
|
581
589
|
else
|
582
|
-
result = s(:attr,
|
590
|
+
result = s(:attr, tnode.children[0].children[0], '~')
|
583
591
|
end
|
584
592
|
s(:attr, s(:attr, process(result), '~'), '~')
|
585
593
|
else
|
586
594
|
# possible getter/setter
|
587
|
-
method =
|
595
|
+
method = tnode.children[1]
|
588
596
|
method = method.to_s.chomp('=') if method =~ /=$/
|
589
|
-
rewrite = [rewrite_tilda[
|
590
|
-
method, *
|
591
|
-
rewrite[1] =
|
592
|
-
|
597
|
+
rewrite = [rewrite_tilda[tnode.children[0]],
|
598
|
+
method, *tnode.children[2..-1]]
|
599
|
+
rewrite[1] = tnode.children[1]
|
600
|
+
tnode.updated nil, rewrite
|
593
601
|
end
|
594
|
-
elsif
|
602
|
+
elsif tnode.children.first == nil and Symbol === tnode.children[1]
|
595
603
|
# innermost expression is a scalar
|
596
|
-
s(:gvar, "$#{
|
597
|
-
elsif
|
598
|
-
s(:gvar, "$#{
|
599
|
-
elsif
|
600
|
-
if
|
604
|
+
s(:gvar, "$#{tnode.children[1]}")
|
605
|
+
elsif tnode.type == :lvar
|
606
|
+
s(:gvar, "$#{tnode.children[0]}")
|
607
|
+
elsif tnode.type == :str
|
608
|
+
if tnode.children.first =~ /^#[-\w]+$/
|
601
609
|
s(:send, s(:attr, nil, :document), :getElementById,
|
602
|
-
s(:str,
|
603
|
-
elsif
|
610
|
+
s(:str, tnode.children.first[1..-1].gsub('_', '-')))
|
611
|
+
elsif tnode.children.first =~ /^(\.[-\w]+)+$/
|
604
612
|
s(:send, s(:send, s(:attr, nil, :document),
|
605
613
|
:getElementsByClassName, s(:str,
|
606
|
-
|
614
|
+
tnode.children.first[1..-1].gsub('.', ' ').gsub('_', '-'))),
|
607
615
|
:[], s(:int, 0))
|
608
|
-
elsif
|
616
|
+
elsif tnode.children.first =~ /^[-\w]+$/
|
609
617
|
s(:send, s(:send, s(:attr, nil, :document),
|
610
618
|
:getElementsByTagName, s(:str,
|
611
|
-
|
619
|
+
tnode.children.first.gsub('_', '-'))), :[], s(:int, 0))
|
612
620
|
else
|
613
|
-
s(:send, s(:attr, nil, :document), :querySelector,
|
621
|
+
s(:send, s(:attr, nil, :document), :querySelector, tnode)
|
614
622
|
end
|
615
623
|
else
|
616
|
-
s(:send, s(:attr, nil, :document), :querySelector,
|
624
|
+
s(:send, s(:attr, nil, :document), :querySelector, tnode)
|
617
625
|
end
|
618
626
|
end
|
619
627
|
|
@@ -644,7 +652,7 @@ module Ruby2JS
|
|
644
652
|
end
|
645
653
|
|
646
654
|
# if a hash argument is already passed, merge in id value
|
647
|
-
hash = children.find_index {|
|
655
|
+
hash = children.find_index {|cnode| cnode.type == :hash}
|
648
656
|
if hash
|
649
657
|
children[hash] = s(:hash, pair, *children[hash].children)
|
650
658
|
else
|
@@ -882,14 +890,14 @@ module Ruby2JS
|
|
882
890
|
node.children[1].type == :block
|
883
891
|
return if node.type == :defs
|
884
892
|
|
885
|
-
child = node.children.first
|
886
|
-
|
887
893
|
base = @reactIvars[:asgn].dup if [:if, :case].include? node.type
|
888
894
|
|
889
895
|
node.children.each do |child|
|
890
896
|
react_walk(child) if Parser::AST::Node === child
|
891
897
|
end
|
892
898
|
|
899
|
+
child = node.children.first
|
900
|
+
|
893
901
|
case node.type
|
894
902
|
when :if, :case
|
895
903
|
@reactIvars[:cond] += @reactIvars[:asgn] - base
|
@@ -5,12 +5,17 @@ module Ruby2JS
|
|
5
5
|
module Require
|
6
6
|
include SEXP
|
7
7
|
|
8
|
-
@@valid_path = /\A[-\
|
8
|
+
@@valid_path = /\A[-\w.]+\Z/
|
9
9
|
|
10
10
|
def self.valid_path=(valid_path)
|
11
11
|
@@valid_path = valid_path
|
12
12
|
end
|
13
13
|
|
14
|
+
def initialize(*args)
|
15
|
+
@require_expr = nil
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
14
19
|
def on_send(node)
|
15
20
|
if
|
16
21
|
not @require_expr and # only statements
|
data/lib/ruby2js/serializer.rb
CHANGED
@@ -52,6 +52,8 @@ module Ruby2JS
|
|
52
52
|
@lines = [Line.new]
|
53
53
|
@line = @lines.last
|
54
54
|
@timestamps = {}
|
55
|
+
|
56
|
+
@ast = nil
|
55
57
|
end
|
56
58
|
|
57
59
|
def timestamp(file)
|
@@ -222,7 +224,7 @@ module Ruby2JS
|
|
222
224
|
# survey what we have to work with, keeping track of a possible
|
223
225
|
# split of the last argument or value
|
224
226
|
work = []
|
225
|
-
|
227
|
+
len = 0
|
226
228
|
trail = split = nil
|
227
229
|
slice = @lines[mark.first..-1]
|
228
230
|
reindent(slice)
|
@@ -250,7 +252,7 @@ module Ruby2JS
|
|
250
252
|
if slice[split[2]].indent < slice[split[2]+1].indent
|
251
253
|
# collapse all but the last argument (typically a hash or function)
|
252
254
|
close = slice.pop
|
253
|
-
slice[-1].push
|
255
|
+
slice[-1].push(*close)
|
254
256
|
@lines[mark.first] = Line.new(*work[0..split[1]-1])
|
255
257
|
@lines[mark.first+1..-1] = slice[split[2]+1..-1]
|
256
258
|
@line = @lines.last
|
@@ -260,7 +262,7 @@ module Ruby2JS
|
|
260
262
|
|
261
263
|
# return the output as a string
|
262
264
|
def to_s
|
263
|
-
return @str if @str
|
265
|
+
return @str if (@str ||= nil)
|
264
266
|
respace
|
265
267
|
@lines.map(&:to_s).join(@nl)
|
266
268
|
end
|
data/lib/ruby2js/version.rb
CHANGED
data/lib/ruby2js.rb
CHANGED
@@ -24,6 +24,7 @@ module Ruby2JS
|
|
24
24
|
|
25
25
|
def initialize(comments)
|
26
26
|
@comments = comments
|
27
|
+
@ast = nil
|
27
28
|
end
|
28
29
|
|
29
30
|
def options=(options)
|
@@ -130,10 +131,7 @@ module Ruby2JS
|
|
130
131
|
end
|
131
132
|
|
132
133
|
def self.parse(source, file=nil)
|
133
|
-
|
134
|
-
buffer = Parser::Source::Buffer.new(file || '__SOURCE__')
|
135
|
-
buffer.raw_source = source.encode('utf-8')
|
136
|
-
Parser::CurrentRuby.new.parse_with_comments(buffer)
|
134
|
+
Parser::CurrentRuby.parse_with_comments(source.encode('utf-8'))
|
137
135
|
rescue Parser::SyntaxError => e
|
138
136
|
split = source[0..e.diagnostic.location.begin_pos].split("\n")
|
139
137
|
line, col = split.length, split.last.length
|
data/ruby2js.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: ruby2js 2.0.
|
2
|
+
# stub: ruby2js 2.0.15 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "ruby2js"
|
6
|
-
s.version = "2.0.
|
6
|
+
s.version = "2.0.15"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["Sam Ruby"]
|
11
|
-
s.date = "2016-
|
11
|
+
s.date = "2016-07-30"
|
12
12
|
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"
|
13
13
|
s.email = "rubys@intertwingly.net"
|
14
14
|
s.files = ["README.md", "lib/ruby2js", "lib/ruby2js.rb", "lib/ruby2js/cgi.rb", "lib/ruby2js/converter", "lib/ruby2js/converter.rb", "lib/ruby2js/converter/arg.rb", "lib/ruby2js/converter/args.rb", "lib/ruby2js/converter/array.rb", "lib/ruby2js/converter/begin.rb", "lib/ruby2js/converter/block.rb", "lib/ruby2js/converter/blockpass.rb", "lib/ruby2js/converter/boolean.rb", "lib/ruby2js/converter/break.rb", "lib/ruby2js/converter/case.rb", "lib/ruby2js/converter/casgn.rb", "lib/ruby2js/converter/class.rb", "lib/ruby2js/converter/const.rb", "lib/ruby2js/converter/cvar.rb", "lib/ruby2js/converter/cvasgn.rb", "lib/ruby2js/converter/def.rb", "lib/ruby2js/converter/defined.rb", "lib/ruby2js/converter/defs.rb", "lib/ruby2js/converter/dstr.rb", "lib/ruby2js/converter/for.rb", "lib/ruby2js/converter/hash.rb", "lib/ruby2js/converter/if.rb", "lib/ruby2js/converter/in.rb", "lib/ruby2js/converter/ivar.rb", "lib/ruby2js/converter/ivasgn.rb", "lib/ruby2js/converter/kwbegin.rb", "lib/ruby2js/converter/literal.rb", "lib/ruby2js/converter/logical.rb", "lib/ruby2js/converter/masgn.rb", "lib/ruby2js/converter/module.rb", "lib/ruby2js/converter/next.rb", "lib/ruby2js/converter/nil.rb", "lib/ruby2js/converter/nthref.rb", "lib/ruby2js/converter/opasgn.rb", "lib/ruby2js/converter/prototype.rb", "lib/ruby2js/converter/regexp.rb", "lib/ruby2js/converter/return.rb", "lib/ruby2js/converter/self.rb", "lib/ruby2js/converter/send.rb", "lib/ruby2js/converter/super.rb", "lib/ruby2js/converter/sym.rb", "lib/ruby2js/converter/undef.rb", "lib/ruby2js/converter/until.rb", "lib/ruby2js/converter/untilpost.rb", "lib/ruby2js/converter/var.rb", "lib/ruby2js/converter/vasgn.rb", "lib/ruby2js/converter/while.rb", "lib/ruby2js/converter/whilepost.rb", "lib/ruby2js/converter/xstr.rb", "lib/ruby2js/execjs.rb", "lib/ruby2js/filter", "lib/ruby2js/filter/angular-resource.rb", "lib/ruby2js/filter/angular-route.rb", "lib/ruby2js/filter/angularrb.rb", "lib/ruby2js/filter/camelCase.rb", "lib/ruby2js/filter/functions.rb", "lib/ruby2js/filter/jquery.rb", "lib/ruby2js/filter/minitest-jasmine.rb", "lib/ruby2js/filter/react.rb", "lib/ruby2js/filter/require.rb", "lib/ruby2js/filter/return.rb", "lib/ruby2js/filter/rubyjs.rb", "lib/ruby2js/filter/strict.rb", "lib/ruby2js/filter/underscore.rb", "lib/ruby2js/rails.rb", "lib/ruby2js/serializer.rb", "lib/ruby2js/sinatra.rb", "lib/ruby2js/version.rb", "ruby2js.gemspec"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby2js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Ruby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|