hyper-component 1.0.alpha1.2 → 1.0.alpha1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/Gemfile +5 -0
  4. data/hyper-component.gemspec +8 -16
  5. data/lib/hyper-component.rb +12 -1
  6. data/lib/hyperstack/component.rb +60 -10
  7. data/lib/hyperstack/component/children.rb +1 -1
  8. data/lib/hyperstack/component/element.rb +93 -21
  9. data/lib/hyperstack/component/event.rb +1 -1
  10. data/lib/hyperstack/component/free_render.rb +21 -0
  11. data/lib/hyperstack/component/isomorphic_helpers.rb +13 -10
  12. data/lib/hyperstack/component/version.rb +1 -1
  13. data/lib/hyperstack/component/while_loading.rb +27 -0
  14. data/lib/hyperstack/ext/component/array.rb +20 -0
  15. data/lib/hyperstack/ext/component/element.rb +22 -8
  16. data/lib/hyperstack/ext/component/enumerable.rb +18 -0
  17. data/lib/hyperstack/ext/component/kernel.rb +7 -0
  18. data/lib/hyperstack/ext/component/string.rb +1 -1
  19. data/lib/hyperstack/ext/component/time.rb +5 -0
  20. data/lib/hyperstack/internal/component.rb +7 -1
  21. data/lib/hyperstack/internal/component/class_methods.rb +68 -7
  22. data/lib/hyperstack/internal/component/haml.rb +3 -12
  23. data/lib/hyperstack/internal/component/instance_methods.rb +38 -1
  24. data/lib/hyperstack/internal/component/props_wrapper.rb +29 -10
  25. data/lib/hyperstack/internal/component/rails/component_mount.rb +12 -0
  26. data/lib/hyperstack/internal/component/rails/controller_helper.rb +20 -1
  27. data/lib/hyperstack/internal/component/rails/railtie.rb +3 -2
  28. data/lib/hyperstack/internal/component/rails/server_rendering/contextual_renderer.rb +5 -1
  29. data/lib/hyperstack/internal/component/rails/server_rendering/hyper_asset_container.rb +4 -2
  30. data/lib/hyperstack/internal/component/react_wrapper.rb +79 -62
  31. data/lib/hyperstack/internal/component/rendering_context.rb +95 -45
  32. data/lib/hyperstack/internal/component/rescue_wrapper.rb +40 -0
  33. data/lib/hyperstack/internal/component/should_component_update.rb +1 -1
  34. data/lib/hyperstack/internal/component/tags.rb +12 -3
  35. data/lib/hyperstack/internal/component/while_loading_wrapper.rb +29 -0
  36. data/lib/react/react-source.rb +2 -2
  37. metadata +56 -86
  38. data/Gemfile.lock +0 -363
@@ -0,0 +1,40 @@
1
+ module Hyperstack
2
+ module Internal
3
+ module Component
4
+ class RescueMetaWrapper
5
+ include Hyperstack::Component
6
+
7
+ param :children_elements
8
+
9
+ render do
10
+ @ChildrenElements.call
11
+ end
12
+ end
13
+
14
+ class RescueWrapper
15
+ class << self
16
+ attr_accessor :after_error_args
17
+ end
18
+
19
+ include Hyperstack::Component
20
+
21
+ param :child
22
+ param :children_elements
23
+
24
+ render do
25
+ RescueMetaWrapper(children_elements: @ChildrenElements)
26
+ end
27
+
28
+ after_error do |error, info|
29
+ args = RescueWrapper.after_error_args || [error, info]
30
+ found, * = @Child.run_callback(:__hyperstack_component_rescue_hook, found, *args)
31
+ unless found
32
+ RescueWrapper.after_error_args = args
33
+ raise error
34
+ end
35
+ @Child.force_update!
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -30,7 +30,7 @@ module Hyperstack
30
30
  if respond_to?(:needs_update?)
31
31
  !!call_needs_update(next_props, next_state)
32
32
  else
33
- (props_changed?(next_props) || native_state_changed?(next_state))
33
+ props_changed?(next_props) || native_state_changed?(next_state)
34
34
  end
35
35
  # rubocop:enable Style/DoubleNegation
36
36
  end
@@ -32,6 +32,14 @@ module Hyperstack
32
32
  const_set tag.upcase, tag
33
33
  end
34
34
 
35
+ const_set "FRAGMENT", (
36
+ Class.new do
37
+ include Hyperstack::Component
38
+ render {}
39
+ Hyperstack::Internal::Component::ReactWrapper.import_native_component(self, `React.Fragment`)
40
+ end
41
+ )
42
+
35
43
  # this is used for haml style (i.e. DIV.foo.bar) class tags which is deprecated
36
44
  def self.html_tag_class_for(tag)
37
45
  downcased_tag = tag.downcase
@@ -85,11 +93,12 @@ module Hyperstack
85
93
 
86
94
  def lookup_const(name)
87
95
  return nil unless name =~ /^[A-Z]/
88
- scopes = self.class.name.to_s.split('::').inject([Module]) do |nesting, next_const|
96
+ return Hyperstack::Internal::Component::Tags::FRAGMENT if name == "FRAGMENT"
97
+ scopes = self.class.name.to_s.split('::').inject([Object]) do |nesting, next_const|
89
98
  nesting + [nesting.last.const_get(next_const)]
90
99
  end.reverse
91
- scope = scopes.detect { |s| s.const_defined?(name) }
92
- scope.const_get(name) if scope
100
+ scope = scopes.detect { |s| s.const_defined?(name, false) }
101
+ scope.const_get(name, false) if scope
93
102
  end
94
103
  end
95
104
  end
@@ -0,0 +1,29 @@
1
+ module Hyperstack
2
+ module Internal
3
+ module Component
4
+ class WhileLoadingWrapper < RescueWrapper
5
+ render do
6
+ if @waiting_on_resources && !quiet?
7
+ RenderingContext.raise_if_not_quiet = false
8
+ else
9
+ @waiting_on_resources = false
10
+ @Child.instance_eval do
11
+ mutate if @__hyperstack_while_loading_waiting_on_resources
12
+ @__hyperstack_while_loading_waiting_on_resources = false
13
+ end
14
+ RenderingContext.raise_if_not_quiet = true
15
+ end
16
+ RescueMetaWrapper(children_elements: @ChildrenElements)
17
+ end
18
+
19
+ before_mount do
20
+ wrapper = self
21
+ @Child.class.rescues RenderingContext::NotQuiet do
22
+ wrapper.instance_variable_set(:@waiting_on_resources, true)
23
+ @__hyperstack_while_loading_waiting_on_resources = true
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -11,7 +11,7 @@ if RUBY_ENGINE == 'opal'
11
11
  else
12
12
  require "hyperstack/internal/component"
13
13
  require "react/rails/asset_variant"
14
- variant = Hyperstack.env.production? ? 'production' : 'development'
15
- react_directory = React::Rails::AssetVariant.new({environment: variant}).react_directory
14
+ variant = Hyperstack.env.production? ? :production : :development
15
+ react_directory = React::Rails::AssetVariant.new({ variant: variant }).react_directory
16
16
  Opal.append_path react_directory.untaint
17
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper-component
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.alpha1.2
4
+ version: 1.0.alpha1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chang
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2018-11-16 00:00:00.000000000 Z
15
+ date: 2021-04-05 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: hyper-state
@@ -20,76 +20,28 @@ dependencies:
20
20
  requirements:
21
21
  - - '='
22
22
  - !ruby/object:Gem::Version
23
- version: 1.0.alpha1.2
23
+ version: 1.0.alpha1.7
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - '='
29
29
  - !ruby/object:Gem::Version
30
- version: 1.0.alpha1.2
30
+ version: 1.0.alpha1.7
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: hyperstack-config
33
33
  requirement: !ruby/object:Gem::Requirement
34
34
  requirements:
35
35
  - - '='
36
36
  - !ruby/object:Gem::Version
37
- version: 1.0.alpha1.2
37
+ version: 1.0.alpha1.7
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  requirements:
42
42
  - - '='
43
43
  - !ruby/object:Gem::Version
44
- version: 1.0.alpha1.2
45
- - !ruby/object:Gem::Dependency
46
- name: libv8
47
- requirement: !ruby/object:Gem::Requirement
48
- requirements:
49
- - - "~>"
50
- - !ruby/object:Gem::Version
51
- version: 6.3.0
52
- type: :runtime
53
- prerelease: false
54
- version_requirements: !ruby/object:Gem::Requirement
55
- requirements:
56
- - - "~>"
57
- - !ruby/object:Gem::Version
58
- version: 6.3.0
59
- - !ruby/object:Gem::Dependency
60
- name: mini_racer
61
- requirement: !ruby/object:Gem::Requirement
62
- requirements:
63
- - - "~>"
64
- - !ruby/object:Gem::Version
65
- version: 0.1.15
66
- type: :runtime
67
- prerelease: false
68
- version_requirements: !ruby/object:Gem::Requirement
69
- requirements:
70
- - - "~>"
71
- - !ruby/object:Gem::Version
72
- version: 0.1.15
73
- - !ruby/object:Gem::Dependency
74
- name: opal
75
- requirement: !ruby/object:Gem::Requirement
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: 0.11.0
80
- - - "<"
81
- - !ruby/object:Gem::Version
82
- version: 0.12.0
83
- type: :runtime
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 0.11.0
90
- - - "<"
91
- - !ruby/object:Gem::Version
92
- version: 0.12.0
44
+ version: 1.0.alpha1.7
93
45
  - !ruby/object:Gem::Dependency
94
46
  name: opal-activesupport
95
47
  requirement: !ruby/object:Gem::Requirement
@@ -128,16 +80,16 @@ dependencies:
128
80
  name: bundler
129
81
  requirement: !ruby/object:Gem::Requirement
130
82
  requirements:
131
- - - "~>"
83
+ - - ">="
132
84
  - !ruby/object:Gem::Version
133
- version: 1.16.0
85
+ version: '0'
134
86
  type: :development
135
87
  prerelease: false
136
88
  version_requirements: !ruby/object:Gem::Requirement
137
89
  requirements:
138
- - - "~>"
90
+ - - ">="
139
91
  - !ruby/object:Gem::Version
140
- version: 1.16.0
92
+ version: '0'
141
93
  - !ruby/object:Gem::Dependency
142
94
  name: chromedriver-helper
143
95
  requirement: !ruby/object:Gem::Requirement
@@ -158,14 +110,14 @@ dependencies:
158
110
  requirements:
159
111
  - - '='
160
112
  - !ruby/object:Gem::Version
161
- version: 1.0.alpha1.2
113
+ version: 1.0.alpha1.7
162
114
  type: :development
163
115
  prerelease: false
164
116
  version_requirements: !ruby/object:Gem::Requirement
165
117
  requirements:
166
118
  - - '='
167
119
  - !ruby/object:Gem::Version
168
- version: 1.0.alpha1.2
120
+ version: 1.0.alpha1.7
169
121
  - !ruby/object:Gem::Dependency
170
122
  name: jquery-rails
171
123
  requirement: !ruby/object:Gem::Requirement
@@ -209,7 +161,7 @@ dependencies:
209
161
  - !ruby/object:Gem::Version
210
162
  version: '0'
211
163
  - !ruby/object:Gem::Dependency
212
- name: nokogiri
164
+ name: mini_racer
213
165
  requirement: !ruby/object:Gem::Requirement
214
166
  requirements:
215
167
  - - ">="
@@ -223,7 +175,7 @@ dependencies:
223
175
  - !ruby/object:Gem::Version
224
176
  version: '0'
225
177
  - !ruby/object:Gem::Dependency
226
- name: opal-jquery
178
+ name: nokogiri
227
179
  requirement: !ruby/object:Gem::Requirement
228
180
  requirements:
229
181
  - - ">="
@@ -237,35 +189,41 @@ dependencies:
237
189
  - !ruby/object:Gem::Version
238
190
  version: '0'
239
191
  - !ruby/object:Gem::Dependency
240
- name: opal-rails
192
+ name: opal-jquery
241
193
  requirement: !ruby/object:Gem::Requirement
242
194
  requirements:
243
- - - "~>"
195
+ - - ">="
244
196
  - !ruby/object:Gem::Version
245
- version: 0.9.4
197
+ version: '0'
246
198
  type: :development
247
199
  prerelease: false
248
200
  version_requirements: !ruby/object:Gem::Requirement
249
201
  requirements:
250
- - - "~>"
202
+ - - ">="
251
203
  - !ruby/object:Gem::Version
252
- version: 0.9.4
204
+ version: '0'
253
205
  - !ruby/object:Gem::Dependency
254
- name: opal-rspec
206
+ name: opal-rails
255
207
  requirement: !ruby/object:Gem::Requirement
256
208
  requirements:
257
209
  - - ">="
258
210
  - !ruby/object:Gem::Version
259
- version: '0'
211
+ version: 0.9.4
212
+ - - "<"
213
+ - !ruby/object:Gem::Version
214
+ version: '2.0'
260
215
  type: :development
261
216
  prerelease: false
262
217
  version_requirements: !ruby/object:Gem::Requirement
263
218
  requirements:
264
219
  - - ">="
265
220
  - !ruby/object:Gem::Version
266
- version: '0'
221
+ version: 0.9.4
222
+ - - "<"
223
+ - !ruby/object:Gem::Version
224
+ version: '2.0'
267
225
  - !ruby/object:Gem::Dependency
268
- name: pry
226
+ name: pry-rescue
269
227
  requirement: !ruby/object:Gem::Requirement
270
228
  requirements:
271
229
  - - ">="
@@ -279,7 +237,7 @@ dependencies:
279
237
  - !ruby/object:Gem::Version
280
238
  version: '0'
281
239
  - !ruby/object:Gem::Dependency
282
- name: pry-rescue
240
+ name: pry-stack_explorer
283
241
  requirement: !ruby/object:Gem::Requirement
284
242
  requirements:
285
243
  - - ">="
@@ -312,14 +270,20 @@ dependencies:
312
270
  requirements:
313
271
  - - ">="
314
272
  - !ruby/object:Gem::Version
315
- version: 4.0.0
273
+ version: 5.0.0
274
+ - - "<"
275
+ - !ruby/object:Gem::Version
276
+ version: '7.0'
316
277
  type: :development
317
278
  prerelease: false
318
279
  version_requirements: !ruby/object:Gem::Requirement
319
280
  requirements:
320
281
  - - ">="
321
282
  - !ruby/object:Gem::Version
322
- version: 4.0.0
283
+ version: 5.0.0
284
+ - - "<"
285
+ - !ruby/object:Gem::Version
286
+ version: '7.0'
323
287
  - !ruby/object:Gem::Dependency
324
288
  name: rails-controller-testing
325
289
  requirement: !ruby/object:Gem::Requirement
@@ -366,30 +330,30 @@ dependencies:
366
330
  name: rubocop
367
331
  requirement: !ruby/object:Gem::Requirement
368
332
  requirements:
369
- - - "~>"
333
+ - - ">="
370
334
  - !ruby/object:Gem::Version
371
- version: 0.51.0
335
+ version: '0'
372
336
  type: :development
373
337
  prerelease: false
374
338
  version_requirements: !ruby/object:Gem::Requirement
375
339
  requirements:
376
- - - "~>"
340
+ - - ">="
377
341
  - !ruby/object:Gem::Version
378
- version: 0.51.0
342
+ version: '0'
379
343
  - !ruby/object:Gem::Dependency
380
344
  name: sqlite3
381
345
  requirement: !ruby/object:Gem::Requirement
382
346
  requirements:
383
- - - ">="
347
+ - - "~>"
384
348
  - !ruby/object:Gem::Version
385
- version: '0'
349
+ version: 1.4.2
386
350
  type: :development
387
351
  prerelease: false
388
352
  version_requirements: !ruby/object:Gem::Requirement
389
353
  requirements:
390
- - - ">="
354
+ - - "~>"
391
355
  - !ruby/object:Gem::Version
392
- version: '0'
356
+ version: 1.4.2
393
357
  - !ruby/object:Gem::Dependency
394
358
  name: timecop
395
359
  requirement: !ruby/object:Gem::Requirement
@@ -416,7 +380,6 @@ files:
416
380
  - ".travis.yml"
417
381
  - CHANGELOG.md
418
382
  - Gemfile
419
- - Gemfile.lock
420
383
  - Rakefile
421
384
  - how-component-name-lookup-works.md
422
385
  - hyper-component.gemspec
@@ -426,6 +389,7 @@ files:
426
389
  - lib/hyperstack/component/children.rb
427
390
  - lib/hyperstack/component/element.rb
428
391
  - lib/hyperstack/component/event.rb
392
+ - lib/hyperstack/component/free_render.rb
429
393
  - lib/hyperstack/component/haml.rb
430
394
  - lib/hyperstack/component/isomorphic_helpers.rb
431
395
  - lib/hyperstack/component/jquery.rb
@@ -433,13 +397,18 @@ files:
433
397
  - lib/hyperstack/component/react_api.rb
434
398
  - lib/hyperstack/component/server.rb
435
399
  - lib/hyperstack/component/version.rb
400
+ - lib/hyperstack/component/while_loading.rb
401
+ - lib/hyperstack/ext/component/array.rb
436
402
  - lib/hyperstack/ext/component/boolean.rb
437
403
  - lib/hyperstack/ext/component/element.rb
404
+ - lib/hyperstack/ext/component/enumerable.rb
438
405
  - lib/hyperstack/ext/component/hash.rb
406
+ - lib/hyperstack/ext/component/kernel.rb
439
407
  - lib/hyperstack/ext/component/number.rb
440
408
  - lib/hyperstack/ext/component/object.rb
441
409
  - lib/hyperstack/ext/component/serializers.rb
442
410
  - lib/hyperstack/ext/component/string.rb
411
+ - lib/hyperstack/ext/component/time.rb
443
412
  - lib/hyperstack/internal/component.rb
444
413
  - lib/hyperstack/internal/component/class_methods.rb
445
414
  - lib/hyperstack/internal/component/haml.rb
@@ -454,15 +423,17 @@ files:
454
423
  - lib/hyperstack/internal/component/rails/server_rendering/hyper_asset_container.rb
455
424
  - lib/hyperstack/internal/component/react_wrapper.rb
456
425
  - lib/hyperstack/internal/component/rendering_context.rb
426
+ - lib/hyperstack/internal/component/rescue_wrapper.rb
457
427
  - lib/hyperstack/internal/component/should_component_update.rb
458
428
  - lib/hyperstack/internal/component/tags.rb
459
429
  - lib/hyperstack/internal/component/top_level_rails_component.rb
460
430
  - lib/hyperstack/internal/component/validator.rb
431
+ - lib/hyperstack/internal/component/while_loading_wrapper.rb
461
432
  - lib/react/react-source-browser.rb
462
433
  - lib/react/react-source-server.rb
463
434
  - lib/react/react-source.rb
464
435
  - unmounting-objects.md
465
- homepage: http://ruby-hyperloop.org
436
+ homepage: http://hyperstack.org
466
437
  licenses:
467
438
  - MIT
468
439
  metadata: {}
@@ -481,8 +452,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
481
452
  - !ruby/object:Gem::Version
482
453
  version: 1.3.1
483
454
  requirements: []
484
- rubyforge_project:
485
- rubygems_version: 2.7.8
455
+ rubygems_version: 3.0.8
486
456
  signing_key:
487
457
  specification_version: 4
488
458
  summary: Opal Ruby wrapper of React.js library.