isomorfeus-react 16.13.6 → 16.13.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -10
  3. data/lib/isomorfeus-react-native.rb +5 -0
  4. data/lib/isomorfeus-react-paper.rb +4 -0
  5. data/lib/isomorfeus-react.rb +9 -7
  6. data/lib/isomorfeus/props/validator.rb +2 -2
  7. data/lib/isomorfeus/{react_config.rb → react/config.rb} +1 -1
  8. data/lib/isomorfeus/react/memcached_component_cache.rb +19 -0
  9. data/lib/isomorfeus/react/redis_component_cache.rb +19 -0
  10. data/lib/isomorfeus/{thread_local_component_cache.rb → react/thread_local_component_cache.rb} +0 -0
  11. data/lib/isomorfeus/top_level.rb +0 -7
  12. data/lib/isomorfeus_react/lucid_app/mixin.rb +8 -2
  13. data/lib/isomorfeus_react/lucid_app/native_component_constructor.rb +18 -7
  14. data/lib/isomorfeus_react/lucid_app/native_lucid_component_constructor.rb +1 -2
  15. data/lib/isomorfeus_react/lucid_component/api.rb +0 -27
  16. data/lib/isomorfeus_react/lucid_component/mixin.rb +8 -2
  17. data/lib/isomorfeus_react/lucid_component/native_component_constructor.rb +4 -4
  18. data/lib/isomorfeus_react/lucid_component/native_lucid_component_constructor.rb +4 -28
  19. data/lib/isomorfeus_react/lucid_component/styles_api.rb +34 -0
  20. data/lib/isomorfeus_react/lucid_func/mixin.rb +8 -2
  21. data/lib/isomorfeus_react/lucid_func/native_component_constructor.rb +3 -4
  22. data/lib/isomorfeus_react/react/function_component/api.rb +7 -6
  23. data/lib/isomorfeus_react/react/function_component/mixin.rb +5 -1
  24. data/lib/isomorfeus_react/react/function_component/native_component_constructor.rb +3 -2
  25. data/lib/isomorfeus_react/react/memo_component/mixin.rb +5 -1
  26. data/lib/isomorfeus_react/react/memo_component/native_component_constructor.rb +2 -3
  27. data/lib/isomorfeus_react_material/lucid_material/app/mixin.rb +1 -0
  28. data/lib/isomorfeus_react_material/lucid_material/app/native_component_constructor.rb +17 -6
  29. data/lib/isomorfeus_react_material/lucid_material/component/mixin.rb +1 -0
  30. data/lib/isomorfeus_react_material/lucid_material/component/native_component_constructor.rb +3 -3
  31. data/lib/isomorfeus_react_material/lucid_material/func/mixin.rb +1 -0
  32. data/lib/isomorfeus_react_material/lucid_material/func/native_component_constructor.rb +3 -4
  33. data/lib/isomorfeus_react_paper/lucid_paper/app/base.rb +9 -0
  34. data/lib/isomorfeus_react_paper/lucid_paper/app/mixin.rb +19 -0
  35. data/lib/isomorfeus_react_paper/lucid_paper/app/native_component_constructor.rb +32 -0
  36. data/lib/isomorfeus_react_paper/lucid_paper/component/base.rb +9 -0
  37. data/lib/isomorfeus_react_paper/lucid_paper/component/mixin.rb +18 -0
  38. data/lib/isomorfeus_react_paper/lucid_paper/component/native_component_constructor.rb +25 -0
  39. data/lib/isomorfeus_react_paper/lucid_paper/func/base.rb +9 -0
  40. data/lib/isomorfeus_react_paper/lucid_paper/func/mixin.rb +14 -0
  41. data/lib/isomorfeus_react_paper/lucid_paper/func/native_component_constructor.rb +71 -0
  42. data/lib/react.rb +159 -97
  43. data/lib/react/component/api.rb +5 -4
  44. data/lib/react/component/features.rb +1 -3
  45. data/lib/react/component/mixin.rb +5 -1
  46. data/lib/react/component/native_component_constructor.rb +4 -28
  47. data/lib/react/component/props.rb +4 -3
  48. data/lib/react/component/resolution.rb +47 -63
  49. data/lib/react/component/state.rb +4 -2
  50. data/lib/react/component/styles.rb +2 -23
  51. data/lib/react/context_wrapper.rb +3 -5
  52. data/lib/react/native_constant_wrapper.rb +0 -1
  53. data/lib/react/version.rb +1 -1
  54. data/lib/react_native/component/elements.rb +203 -0
  55. data/lib/react_native/lucid_app/react_native_component_constructor.rb +51 -0
  56. data/lib/react_native/lucid_component/react_native_component_constructor.rb +37 -0
  57. data/lib/react_native/lucid_func/react_native_component_constructor.rb +82 -0
  58. data/lib/react_native/react.rb +120 -0
  59. metadata +69 -23
  60. data/lib/isomorfeus/vivify_module.rb +0 -43
@@ -0,0 +1,120 @@
1
+ module React
2
+ %x{
3
+ self.prop_dictionary = {
4
+ on_click: 'onPress',
5
+ onClick: 'onPress',
6
+ on_touch: 'onPress',
7
+ onTouch: 'onPress',
8
+ on_change: 'onChangeText',
9
+ onChange: 'onChangeText',
10
+ on_blur: 'onSubmitText',
11
+ onBlur: 'onSubmitText',
12
+ };
13
+
14
+ self.to_native_react_props = function(ruby_style_props) {
15
+ let result = {};
16
+ let keys = ruby_style_props.$$keys;
17
+ let keys_length = keys.length;
18
+ let key = '';
19
+ for (let i = 0; i < keys_length; i++) {
20
+ key = keys[i];
21
+ let value = ruby_style_props.$$smap[key];
22
+ if (key[0] === 'o' && key[1] === 'n' && key[2] === '_') {
23
+ let type = typeof value;
24
+ if (type === "function") {
25
+ let active_c = self.active_component();
26
+ result[self.lower_camelize(key)] = function(event, info) {
27
+ let ruby_event = self.native_to_ruby_event(event);
28
+ #{`active_c.__ruby_instance`.instance_exec(`ruby_event`, `info`, &`value`)};
29
+ }
30
+ } else if (type === "object" && typeof value.$call === "function" ) {
31
+ if (!value.react_event_handler_function) {
32
+ value.react_event_handler_function = function(event, info) {
33
+ let ruby_event = self.native_to_ruby_event(event);
34
+ value.$call(ruby_event, info)
35
+ };
36
+ }
37
+ result[self.lower_camelize(key)] = value.react_event_handler_function;
38
+ } else if (type === "string" ) {
39
+ let active_component = self.active_component();
40
+ let method_ref;
41
+ let method_name = '$' + value;
42
+ if (typeof active_component[method_name] === "function") {
43
+ // got a ruby instance
44
+ if (active_component.native && active_component.native.method_refs && active_component.native.method_refs[value]) { method_ref = active_component.native.method_refs[value]; } // ruby instance with native
45
+ else if (active_component.method_refs && active_component.method_refs[value]) { method_ref = active_component.method_refs[value]; } // ruby function component
46
+ else { method_ref = active_component.$method_ref(value); } // create the ref
47
+ } else if (typeof active_component.__ruby_instance[method_name] === "function") {
48
+ // got a native instance
49
+ if (active_component.method_refs && active_component.method_refs[value]) { method_ref = active_component.method_refs[value]; }
50
+ else { method_ref = active_component.__ruby_instance.$method_ref(value); } // create ref for native
51
+ }
52
+ if (method_ref) {
53
+ if (!method_ref.react_event_handler_function) {
54
+ method_ref.react_event_handler_function = function(event, info) {
55
+ let ruby_event = self.native_to_ruby_event(event);
56
+ method_ref.$call(ruby_event, info)
57
+ };
58
+ }
59
+ result[self.lower_camelize(key)] = method_ref.react_event_handler_function;
60
+ } else {
61
+ let component_name;
62
+ if (active_component.__ruby_instance) { component_name = active_component.__ruby_instance.$to_s(); }
63
+ else { component_name = active_component.$to_s(); }
64
+ #{Isomorfeus.raise_error(message: "Is #{`value`} a valid method of #{`component_name`}? If so then please use: #{`key`}: method_ref(:#{`value`}) within component: #{`component_name`}")}
65
+ }
66
+ } else {
67
+ let active_component = self.active_component();
68
+ let component_name;
69
+ if (active_component.__ruby_instance) { component_name = active_component.__ruby_instance.$to_s(); }
70
+ else { component_name = active_component.$to_s(); }
71
+ #{Isomorfeus.raise_error(message: "Received invalid value for #{`key`} with #{`value`} within component: #{`component_name`}")}
72
+ console.error( + key + " event handler:", value, " within component:", self.active_component());
73
+ }
74
+ } else if (key[0] === 'a' && key.startsWith("aria_")) {
75
+ result[key.replace("_", "-")] = value;
76
+ } else if (key === "style" || key === "theme") {
77
+ if (typeof value.$to_n === "function") { value = value.$to_n() }
78
+ result[key] = value;
79
+ } else {
80
+ result[self.lower_camelize(key)] = value;
81
+ }
82
+ }
83
+ return result;
84
+ };
85
+
86
+ self.render_block_result = function(block_result, component) {
87
+ if (block_result.constructor === String || block_result.constructor === Number) {
88
+ if (component && component === Opal.global.Text) {
89
+ self.render_buffer[self.render_buffer.length - 1].push(block_result);
90
+ } else {
91
+ self.render_buffer[self.render_buffer.length - 1].push(Opal.global.React.createElement(Opal.global.Text, {}, block_result));
92
+ }
93
+ }
94
+ };
95
+
96
+ self.internal_render = function(component, props, string_child, block) {
97
+ const operabu = self.render_buffer;
98
+ let native_props;
99
+ if (props && props !== nil) { native_props = self.to_native_react_props(props); }
100
+ if (string_child) {
101
+ if (component && component === Opal.global.Text) {
102
+ operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props, string_child));
103
+ } else {
104
+ let child = [Opal.global.React.createElement(Opal.global.Text, {}, string_child)];
105
+ operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props, child));
106
+ }
107
+ } else if (block && block !== nil) {
108
+ operabu.push([]);
109
+ // console.log("internal_render pushed", Opal.React.render_buffer, Opal.React.render_buffer.toString());
110
+ let block_result = block.$call();
111
+ if (block_result && block_result !== nil) { Opal.React.render_block_result(block_result, component); }
112
+ // console.log("internal_render popping", Opal.React.render_buffer, Opal.React.render_buffer.toString());
113
+ let children = operabu.pop();
114
+ operabu[operabu.length - 1].push(Opal.global.React.createElement.apply(this, [component, native_props].concat(children)));
115
+ } else {
116
+ operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props));
117
+ }
118
+ };
119
+ }
120
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-react
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.13.6
4
+ version: 16.13.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-08 00:00:00.000000000 Z
11
+ date: 2021-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.6
19
+ version: 1.1.8
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.6
26
+ version: 1.1.8
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: oj
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.10.2
33
+ version: 3.11.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 3.10.2
40
+ version: 3.11.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: opal
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,70 +86,98 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 0.9.11
89
+ version: 0.10.1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 0.9.11
96
+ version: 0.10.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: isomorfeus-redux
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 4.0.22
103
+ version: 4.1.1
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 4.0.22
110
+ version: 4.1.1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: isomorfeus-speednode
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.2.12
117
+ version: 0.3.1
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.2.12
124
+ version: 0.3.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: dalli
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.7.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.7.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: redis
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: 4.2.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 4.2.0
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: zeitwerk
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: 2.2.2
159
+ version: 2.4.2
132
160
  type: :runtime
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
- version: 2.2.2
166
+ version: 2.4.2
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: isomorfeus-puppetmaster
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - "~>"
144
172
  - !ruby/object:Gem::Version
145
- version: 0.3.5
173
+ version: 0.4.0
146
174
  type: :development
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
178
  - - "~>"
151
179
  - !ruby/object:Gem::Version
152
- version: 0.3.5
180
+ version: 0.4.0
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: rake
155
183
  requirement: !ruby/object:Gem::Requirement
@@ -195,15 +223,18 @@ files:
195
223
  - lib/browser/file_list.rb
196
224
  - lib/browser/iterable.rb
197
225
  - lib/isomorfeus-react-material-ui.rb
226
+ - lib/isomorfeus-react-native.rb
227
+ - lib/isomorfeus-react-paper.rb
198
228
  - lib/isomorfeus-react.rb
199
229
  - lib/isomorfeus/props/validate_hash_proxy.rb
200
230
  - lib/isomorfeus/props/validator.rb
201
- - lib/isomorfeus/react_config.rb
231
+ - lib/isomorfeus/react/config.rb
232
+ - lib/isomorfeus/react/memcached_component_cache.rb
233
+ - lib/isomorfeus/react/redis_component_cache.rb
234
+ - lib/isomorfeus/react/thread_local_component_cache.rb
202
235
  - lib/isomorfeus/react_view_helper.rb
203
- - lib/isomorfeus/thread_local_component_cache.rb
204
236
  - lib/isomorfeus/top_level.rb
205
237
  - lib/isomorfeus/top_level_ssr.rb
206
- - lib/isomorfeus/vivify_module.rb
207
238
  - lib/isomorfeus_react/lucid_app/api.rb
208
239
  - lib/isomorfeus_react/lucid_app/base.rb
209
240
  - lib/isomorfeus_react/lucid_app/mixin.rb
@@ -218,6 +249,7 @@ files:
218
249
  - lib/isomorfeus_react/lucid_component/mixin.rb
219
250
  - lib/isomorfeus_react/lucid_component/native_component_constructor.rb
220
251
  - lib/isomorfeus_react/lucid_component/native_lucid_component_constructor.rb
252
+ - lib/isomorfeus_react/lucid_component/styles_api.rb
221
253
  - lib/isomorfeus_react/lucid_func/base.rb
222
254
  - lib/isomorfeus_react/lucid_func/initializer.rb
223
255
  - lib/isomorfeus_react/lucid_func/mixin.rb
@@ -239,6 +271,15 @@ files:
239
271
  - lib/isomorfeus_react_material/lucid_material/func/base.rb
240
272
  - lib/isomorfeus_react_material/lucid_material/func/mixin.rb
241
273
  - lib/isomorfeus_react_material/lucid_material/func/native_component_constructor.rb
274
+ - lib/isomorfeus_react_paper/lucid_paper/app/base.rb
275
+ - lib/isomorfeus_react_paper/lucid_paper/app/mixin.rb
276
+ - lib/isomorfeus_react_paper/lucid_paper/app/native_component_constructor.rb
277
+ - lib/isomorfeus_react_paper/lucid_paper/component/base.rb
278
+ - lib/isomorfeus_react_paper/lucid_paper/component/mixin.rb
279
+ - lib/isomorfeus_react_paper/lucid_paper/component/native_component_constructor.rb
280
+ - lib/isomorfeus_react_paper/lucid_paper/func/base.rb
281
+ - lib/isomorfeus_react_paper/lucid_paper/func/mixin.rb
282
+ - lib/isomorfeus_react_paper/lucid_paper/func/native_component_constructor.rb
242
283
  - lib/lucid_app/context.rb
243
284
  - lib/lucid_prop_declaration/mixin.rb
244
285
  - lib/react.rb
@@ -265,12 +306,17 @@ files:
265
306
  - lib/react/version.rb
266
307
  - lib/react_dom.rb
267
308
  - lib/react_dom_server.rb
309
+ - lib/react_native/component/elements.rb
310
+ - lib/react_native/lucid_app/react_native_component_constructor.rb
311
+ - lib/react_native/lucid_component/react_native_component_constructor.rb
312
+ - lib/react_native/lucid_func/react_native_component_constructor.rb
313
+ - lib/react_native/react.rb
268
314
  homepage: http://isomorfeus.com
269
315
  licenses:
270
316
  - MIT
271
317
  metadata:
272
318
  github_repo: ssh://github.com/isomorfeus/gems
273
- post_install_message:
319
+ post_install_message:
274
320
  rdoc_options: []
275
321
  require_paths:
276
322
  - lib
@@ -285,8 +331,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
285
331
  - !ruby/object:Gem::Version
286
332
  version: '0'
287
333
  requirements: []
288
- rubygems_version: 3.0.6
289
- signing_key:
334
+ rubygems_version: 3.2.15
335
+ signing_key:
290
336
  specification_version: 4
291
337
  summary: React for Opal Ruby.
292
338
  test_files: []
@@ -1,43 +0,0 @@
1
- module Isomorfeus
2
- class VivifyModule < ::Module
3
- # this is required for autoloading support, as the component may not be loaded and so its method is not registered.
4
- # must load it first, done by const_get, and next time the method will be there.
5
- alias _react_component_class_resolution_original_method_missing method_missing
6
-
7
- def method_missing(component_name, *args, &block)
8
- # check for ruby component and render it
9
- # otherwise pass on method missing
10
- # language=JS
11
- %x{
12
- var constant;
13
- var component = null;
14
- var modules = self.$to_s().split("::");
15
- var modules_length = modules.length;
16
- var module;
17
- for (var i = modules_length; i > 0; i--) {
18
- try {
19
- module = modules.slice(0, i).join('::');
20
- constant = self.$const_get(module).$const_get(component_name, false);
21
- if (typeof constant.react_component !== 'undefined') {
22
- component = constant.react_component;
23
- break;
24
- }
25
- } catch(err) { component = null; }
26
- }
27
- if (!component) {
28
- try {
29
- constant = Opal.Object.$const_get(component_name);
30
- if (typeof constant.react_component !== 'undefined') {
31
- component = constant.react_component;
32
- }
33
- } catch(err) { component = null; }
34
- }
35
- if (component) {
36
- return Opal.React.internal_prepare_args_and_render(component, args, block);
37
- } else {
38
- return #{_react_component_class_resolution_original_method_missing(component_name, *args, block)};
39
- }
40
- }
41
- end
42
- end
43
- end