isomorfeus-react 16.13.10 → 16.13.11

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 (39) 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 +6 -4
  6. data/lib/isomorfeus/props/validator.rb +2 -2
  7. data/lib/isomorfeus/{react_config.rb → react/config.rb} +0 -0
  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_react/lucid_app/mixin.rb +1 -0
  12. data/lib/isomorfeus_react/lucid_app/native_component_constructor.rb +0 -1
  13. data/lib/isomorfeus_react/lucid_component/api.rb +0 -27
  14. data/lib/isomorfeus_react/lucid_component/mixin.rb +1 -0
  15. data/lib/isomorfeus_react/lucid_component/styles_api.rb +34 -0
  16. data/lib/isomorfeus_react/lucid_func/mixin.rb +1 -0
  17. data/lib/isomorfeus_react/react/function_component/api.rb +7 -6
  18. data/lib/isomorfeus_react_material/lucid_material/app/mixin.rb +1 -0
  19. data/lib/isomorfeus_react_material/lucid_material/app/native_component_constructor.rb +0 -1
  20. data/lib/isomorfeus_react_material/lucid_material/component/mixin.rb +1 -0
  21. data/lib/isomorfeus_react_material/lucid_material/func/mixin.rb +1 -0
  22. data/lib/isomorfeus_react_paper/lucid_paper/app/base.rb +9 -0
  23. data/lib/isomorfeus_react_paper/lucid_paper/app/mixin.rb +19 -0
  24. data/lib/isomorfeus_react_paper/lucid_paper/app/native_component_constructor.rb +32 -0
  25. data/lib/isomorfeus_react_paper/lucid_paper/component/base.rb +9 -0
  26. data/lib/isomorfeus_react_paper/lucid_paper/component/mixin.rb +18 -0
  27. data/lib/isomorfeus_react_paper/lucid_paper/component/native_component_constructor.rb +25 -0
  28. data/lib/isomorfeus_react_paper/lucid_paper/func/base.rb +9 -0
  29. data/lib/isomorfeus_react_paper/lucid_paper/func/mixin.rb +14 -0
  30. data/lib/isomorfeus_react_paper/lucid_paper/func/native_component_constructor.rb +71 -0
  31. data/lib/react.rb +6 -5
  32. data/lib/react/component/api.rb +5 -4
  33. data/lib/react/version.rb +1 -1
  34. data/lib/react_native/component/elements.rb +203 -0
  35. data/lib/react_native/lucid_app/react_native_component_constructor.rb +51 -0
  36. data/lib/react_native/lucid_component/react_native_component_constructor.rb +37 -0
  37. data/lib/react_native/lucid_func/react_native_component_constructor.rb +82 -0
  38. data/lib/react_native/react.rb +120 -0
  39. metadata +69 -22
@@ -0,0 +1,82 @@
1
+ module LucidFunc
2
+ module ReactNativeComponentConstructor
3
+ def self.extended(base)
4
+ component_name = base.to_s
5
+ %x{
6
+ base.store_updates = true;
7
+ base.equality_checker = null;
8
+ base.instance_init = function(initial) {
9
+ let ruby_state = { instance: #{base.new(`{}`)} };
10
+ ruby_state.instance.__ruby_instance = ruby_state.instance;
11
+ ruby_state.instance.data_access = function() { return this.props.store; }
12
+ ruby_state.instance.data_access.bind(ruby_state.instance);
13
+ return ruby_state;
14
+ }
15
+ base.instance_reducer = function(state, action) { return state; }
16
+ base.react_component = Opal.global.React.memo(function(props) {
17
+ const og = Opal.global;
18
+ const oper = Opal.React;
19
+ oper.render_buffer.push([]);
20
+ // console.log("function pushed", oper.render_buffer, oper.render_buffer.toString());
21
+ // Lucid functionality
22
+ let classes = null;
23
+ let store;
24
+ if (base.store_updates) { store = og.React.useContext(og.LucidApplicationContext); }
25
+ let theme = og.ReactJSS.useTheme();
26
+ if (base.jss_styles) {
27
+ if (!base.use_styles || (Opal.Isomorfeus.development === true)) {
28
+ let styles;
29
+ if (typeof base.jss_styles === 'function') { styles = base.jss_styles(theme); }
30
+ else { styles = base.jss_styles; }
31
+ base.use_styles = og.ReactJSS.createUseStyles(styles);
32
+ }
33
+ classes = base.use_styles();
34
+ }
35
+ // prepare Ruby instance
36
+ const [__ruby_state, __ruby_dispatch] = og.React.useReducer(base.instance_reducer, null, base.instance_init);
37
+ const __ruby_instance = __ruby_state.instance;
38
+ __ruby_instance.props = Object.assign({}, props);
39
+ __ruby_instance.props.store = store;
40
+ __ruby_instance.props.theme = theme;
41
+ __ruby_instance.props.classes = classes;
42
+ oper.active_components.push(__ruby_instance);
43
+ oper.active_redux_components.push(__ruby_instance);
44
+ let block_result = #{`__ruby_instance`.instance_exec(&`base.render_block`)};
45
+ if (block_result && block_result !== nil) { oper.render_block_result(block_result); }
46
+ oper.active_redux_components.pop();
47
+ oper.active_components.pop();
48
+ // console.log("function popping", oper.render_buffer, oper.render_buffer.toString());
49
+ let result = oper.render_buffer.pop();
50
+ if (result.length === 1) { return result[0]; }
51
+ return result;
52
+ }, base.equality_checker);
53
+ base.react_component.displayName = #{component_name};
54
+ }
55
+
56
+ base_module = base.to_s.deconstantize
57
+ if base_module != ''
58
+ base_module.constantize.define_singleton_method(base.to_s.demodulize) do |*args, &block|
59
+ `Opal.React.internal_prepare_args_and_render(#{base}.react_component, args, block)`
60
+ end
61
+ else
62
+ Object.define_method(base.to_s) do |*args, &block|
63
+ `Opal.React.internal_prepare_args_and_render(#{base}.react_component, args, block)`
64
+ end
65
+ end
66
+
67
+ def props_are_equal?(&block)
68
+ %x{
69
+ base.equality_checker = function (prev_props, next_props) {
70
+ var prev_ruby_props = Opal.React.Component.Props.$new({props: prev_props});
71
+ var next_ruby_props = Opal.React.Component.Props.$new({props: next_props});
72
+ return #{block.call(`prev_ruby_props`, `next_ruby_props`)};
73
+ }
74
+ }
75
+ end
76
+
77
+ def render(&block)
78
+ `base.render_block = #{block}`
79
+ end
80
+ end
81
+ end
82
+ end
@@ -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.10
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-16 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.23
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.23
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,12 +223,16 @@ 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
238
  - lib/isomorfeus_react/lucid_app/api.rb
@@ -217,6 +249,7 @@ files:
217
249
  - lib/isomorfeus_react/lucid_component/mixin.rb
218
250
  - lib/isomorfeus_react/lucid_component/native_component_constructor.rb
219
251
  - lib/isomorfeus_react/lucid_component/native_lucid_component_constructor.rb
252
+ - lib/isomorfeus_react/lucid_component/styles_api.rb
220
253
  - lib/isomorfeus_react/lucid_func/base.rb
221
254
  - lib/isomorfeus_react/lucid_func/initializer.rb
222
255
  - lib/isomorfeus_react/lucid_func/mixin.rb
@@ -238,6 +271,15 @@ files:
238
271
  - lib/isomorfeus_react_material/lucid_material/func/base.rb
239
272
  - lib/isomorfeus_react_material/lucid_material/func/mixin.rb
240
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
241
283
  - lib/lucid_app/context.rb
242
284
  - lib/lucid_prop_declaration/mixin.rb
243
285
  - lib/react.rb
@@ -264,12 +306,17 @@ files:
264
306
  - lib/react/version.rb
265
307
  - lib/react_dom.rb
266
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
267
314
  homepage: http://isomorfeus.com
268
315
  licenses:
269
316
  - MIT
270
317
  metadata:
271
318
  github_repo: ssh://github.com/isomorfeus/gems
272
- post_install_message:
319
+ post_install_message:
273
320
  rdoc_options: []
274
321
  require_paths:
275
322
  - lib
@@ -284,8 +331,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
284
331
  - !ruby/object:Gem::Version
285
332
  version: '0'
286
333
  requirements: []
287
- rubygems_version: 3.0.6
288
- signing_key:
334
+ rubygems_version: 3.2.15
335
+ signing_key:
289
336
  specification_version: 4
290
337
  summary: React for Opal Ruby.
291
338
  test_files: []