ruby2js 3.6.1 → 4.0.0

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -7
  3. data/lib/ruby2js.rb +32 -9
  4. data/lib/ruby2js/converter.rb +8 -2
  5. data/lib/ruby2js/converter/assign.rb +159 -0
  6. data/lib/ruby2js/converter/begin.rb +7 -2
  7. data/lib/ruby2js/converter/case.rb +7 -2
  8. data/lib/ruby2js/converter/class.rb +77 -21
  9. data/lib/ruby2js/converter/class2.rb +39 -11
  10. data/lib/ruby2js/converter/def.rb +6 -2
  11. data/lib/ruby2js/converter/dstr.rb +8 -3
  12. data/lib/ruby2js/converter/hash.rb +9 -5
  13. data/lib/ruby2js/converter/hide.rb +13 -0
  14. data/lib/ruby2js/converter/if.rb +10 -2
  15. data/lib/ruby2js/converter/import.rb +18 -3
  16. data/lib/ruby2js/converter/kwbegin.rb +9 -2
  17. data/lib/ruby2js/converter/literal.rb +2 -2
  18. data/lib/ruby2js/converter/module.rb +37 -5
  19. data/lib/ruby2js/converter/opasgn.rb +8 -0
  20. data/lib/ruby2js/converter/send.rb +41 -2
  21. data/lib/ruby2js/converter/vasgn.rb +5 -0
  22. data/lib/ruby2js/demo.rb +53 -0
  23. data/lib/ruby2js/es2022.rb +5 -0
  24. data/lib/ruby2js/es2022/strict.rb +3 -0
  25. data/lib/ruby2js/filter.rb +9 -1
  26. data/lib/ruby2js/filter/active_functions.rb +1 -0
  27. data/lib/ruby2js/filter/cjs.rb +2 -0
  28. data/lib/ruby2js/filter/esm.rb +44 -10
  29. data/lib/ruby2js/filter/functions.rb +84 -95
  30. data/lib/ruby2js/filter/{wunderbar.rb → jsx.rb} +29 -7
  31. data/lib/ruby2js/filter/react.rb +191 -56
  32. data/lib/ruby2js/filter/require.rb +100 -5
  33. data/lib/ruby2js/filter/return.rb +13 -1
  34. data/lib/ruby2js/filter/stimulus.rb +185 -0
  35. data/lib/ruby2js/jsx.rb +291 -0
  36. data/lib/ruby2js/namespace.rb +75 -0
  37. data/lib/ruby2js/version.rb +3 -3
  38. metadata +12 -4
@@ -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
@@ -1,8 +1,8 @@
1
1
  module Ruby2JS
2
2
  module VERSION #:nodoc:
3
- MAJOR = 3
4
- MINOR = 6
5
- TINY = 1
3
+ MAJOR = 4
4
+ MINOR = 0
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2js
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.1
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-01 00:00:00.000000000 Z
12
+ date: 2021-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parser
@@ -55,6 +55,7 @@ files:
55
55
  - lib/ruby2js/converter/arg.rb
56
56
  - lib/ruby2js/converter/args.rb
57
57
  - lib/ruby2js/converter/array.rb
58
+ - lib/ruby2js/converter/assign.rb
58
59
  - lib/ruby2js/converter/begin.rb
59
60
  - lib/ruby2js/converter/block.rb
60
61
  - lib/ruby2js/converter/blockpass.rb
@@ -74,6 +75,7 @@ files:
74
75
  - lib/ruby2js/converter/fileline.rb
75
76
  - lib/ruby2js/converter/for.rb
76
77
  - lib/ruby2js/converter/hash.rb
78
+ - lib/ruby2js/converter/hide.rb
77
79
  - lib/ruby2js/converter/if.rb
78
80
  - lib/ruby2js/converter/import.rb
79
81
  - lib/ruby2js/converter/in.rb
@@ -106,6 +108,7 @@ files:
106
108
  - lib/ruby2js/converter/xnode.rb
107
109
  - lib/ruby2js/converter/xstr.rb
108
110
  - lib/ruby2js/converter/yield.rb
111
+ - lib/ruby2js/demo.rb
109
112
  - lib/ruby2js/es2015.rb
110
113
  - lib/ruby2js/es2015/strict.rb
111
114
  - lib/ruby2js/es2016.rb
@@ -120,6 +123,8 @@ files:
120
123
  - lib/ruby2js/es2020/strict.rb
121
124
  - lib/ruby2js/es2021.rb
122
125
  - lib/ruby2js/es2021/strict.rb
126
+ - lib/ruby2js/es2022.rb
127
+ - lib/ruby2js/es2022/strict.rb
123
128
  - lib/ruby2js/execjs.rb
124
129
  - lib/ruby2js/filter.rb
125
130
  - lib/ruby2js/filter/active_functions.rb
@@ -128,6 +133,7 @@ files:
128
133
  - lib/ruby2js/filter/esm.rb
129
134
  - lib/ruby2js/filter/functions.rb
130
135
  - lib/ruby2js/filter/jquery.rb
136
+ - lib/ruby2js/filter/jsx.rb
131
137
  - lib/ruby2js/filter/matchAll.rb
132
138
  - lib/ruby2js/filter/minitest-jasmine.rb
133
139
  - lib/ruby2js/filter/node.rb
@@ -136,11 +142,13 @@ files:
136
142
  - lib/ruby2js/filter/require.rb
137
143
  - lib/ruby2js/filter/return.rb
138
144
  - lib/ruby2js/filter/securerandom.rb
145
+ - lib/ruby2js/filter/stimulus.rb
139
146
  - lib/ruby2js/filter/tagged_templates.rb
140
147
  - lib/ruby2js/filter/underscore.rb
141
148
  - lib/ruby2js/filter/vue.rb
142
- - lib/ruby2js/filter/wunderbar.rb
143
149
  - lib/ruby2js/haml.rb
150
+ - lib/ruby2js/jsx.rb
151
+ - lib/ruby2js/namespace.rb
144
152
  - lib/ruby2js/rails.rb
145
153
  - lib/ruby2js/serializer.rb
146
154
  - lib/ruby2js/sinatra.rb
@@ -166,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
174
  - !ruby/object:Gem::Version
167
175
  version: '0'
168
176
  requirements: []
169
- rubygems_version: 3.1.4
177
+ rubygems_version: 3.1.2
170
178
  signing_key:
171
179
  specification_version: 4
172
180
  summary: Minimal yet extensible Ruby to JavaScript conversion.