hyper-component 0.99.6 → 1.0.alpha1

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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/Gemfile +4 -3
  4. data/Gemfile.lock +51 -36
  5. data/{misc/how-component-name-lookup-works.md → how-component-name-lookup-works.md} +1 -1
  6. data/hyper-component.gemspec +9 -8
  7. data/lib/hyper-component.rb +31 -43
  8. data/lib/hyperstack/component.rb +145 -0
  9. data/lib/hyperstack/component/auto-import.rb +44 -0
  10. data/lib/hyperstack/component/children.rb +40 -0
  11. data/lib/hyperstack/component/element.rb +129 -0
  12. data/lib/hyperstack/component/event.rb +78 -0
  13. data/lib/hyperstack/component/haml.rb +18 -0
  14. data/lib/hyperstack/component/isomorphic_helpers.rb +235 -0
  15. data/lib/hyperstack/component/jquery.rb +2 -0
  16. data/lib/hyperstack/component/native_library.rb +92 -0
  17. data/lib/hyperstack/component/react_api.rb +142 -0
  18. data/lib/hyperstack/component/server.rb +21 -0
  19. data/lib/hyperstack/component/version.rb +5 -0
  20. data/lib/hyperstack/ext/component/boolean.rb +14 -0
  21. data/lib/{react/ext/opal-jquery → hyperstack/ext/component}/element.rb +17 -12
  22. data/lib/{react/ext → hyperstack/ext/component}/hash.rb +0 -0
  23. data/lib/{react/to_key.rb → hyperstack/ext/component/number.rb} +0 -12
  24. data/lib/hyperstack/ext/component/object.rb +32 -0
  25. data/lib/{reactive-ruby → hyperstack/ext/component}/serializers.rb +0 -0
  26. data/lib/{react/ext → hyperstack/ext/component}/string.rb +0 -0
  27. data/lib/hyperstack/internal/component.rb +16 -0
  28. data/lib/hyperstack/internal/component/class_methods.rb +212 -0
  29. data/lib/hyperstack/internal/component/haml.rb +56 -0
  30. data/lib/hyperstack/internal/component/instance_methods.rb +92 -0
  31. data/lib/hyperstack/internal/component/props_wrapper.rb +125 -0
  32. data/lib/hyperstack/internal/component/rails.rb +11 -0
  33. data/lib/hyperstack/internal/component/rails/component_loader.rb +49 -0
  34. data/lib/hyperstack/internal/component/rails/component_mount.rb +52 -0
  35. data/lib/{reactive-ruby → hyperstack/internal/component}/rails/controller_helper.rb +0 -0
  36. data/lib/hyperstack/internal/component/rails/railtie.rb +24 -0
  37. data/lib/hyperstack/internal/component/rails/server_rendering/contextual_renderer.rb +52 -0
  38. data/lib/hyperstack/internal/component/rails/server_rendering/hyper_asset_container.rb +52 -0
  39. data/lib/hyperstack/internal/component/react_wrapper.rb +308 -0
  40. data/lib/hyperstack/internal/component/rendering_context.rb +165 -0
  41. data/lib/hyperstack/internal/component/should_component_update.rb +101 -0
  42. data/lib/hyperstack/internal/component/tags.rb +109 -0
  43. data/lib/hyperstack/internal/component/top_level_rails_component.rb +83 -0
  44. data/lib/hyperstack/internal/component/validator.rb +149 -0
  45. data/lib/react/react-source.rb +2 -2
  46. data/unmounting-objects.md +78 -0
  47. metadata +73 -85
  48. data/DOCS.md +0 -1515
  49. data/LICENSE +0 -19
  50. data/README.md +0 -49
  51. data/lib/hyper-component/jquery.rb +0 -2
  52. data/lib/rails-helpers/top_level_rails_component.rb +0 -79
  53. data/lib/react/api.rb +0 -272
  54. data/lib/react/callbacks.rb +0 -42
  55. data/lib/react/children.rb +0 -38
  56. data/lib/react/component.rb +0 -189
  57. data/lib/react/component/api.rb +0 -70
  58. data/lib/react/component/base.rb +0 -13
  59. data/lib/react/component/class_methods.rb +0 -175
  60. data/lib/react/component/dsl_instance_methods.rb +0 -23
  61. data/lib/react/component/params.rb +0 -6
  62. data/lib/react/component/props_wrapper.rb +0 -90
  63. data/lib/react/component/should_component_update.rb +0 -99
  64. data/lib/react/component/tags.rb +0 -116
  65. data/lib/react/config.rb +0 -5
  66. data/lib/react/element.rb +0 -167
  67. data/lib/react/event.rb +0 -76
  68. data/lib/react/native_library.rb +0 -87
  69. data/lib/react/object.rb +0 -15
  70. data/lib/react/ref_callback.rb +0 -31
  71. data/lib/react/rendering_context.rb +0 -149
  72. data/lib/react/server.rb +0 -19
  73. data/lib/react/state_wrapper.rb +0 -23
  74. data/lib/react/test.rb +0 -16
  75. data/lib/react/test/dsl.rb +0 -17
  76. data/lib/react/test/matchers/render_html_matcher.rb +0 -56
  77. data/lib/react/test/rspec.rb +0 -15
  78. data/lib/react/test/session.rb +0 -37
  79. data/lib/react/test/utils.rb +0 -71
  80. data/lib/react/top_level.rb +0 -110
  81. data/lib/react/top_level_render.rb +0 -30
  82. data/lib/react/validator.rb +0 -132
  83. data/lib/reactive-ruby/component_loader.rb +0 -43
  84. data/lib/reactive-ruby/isomorphic_helpers.rb +0 -233
  85. data/lib/reactive-ruby/rails.rb +0 -8
  86. data/lib/reactive-ruby/rails/component_mount.rb +0 -48
  87. data/lib/reactive-ruby/rails/railtie.rb +0 -20
  88. data/lib/reactive-ruby/server_rendering/contextual_renderer.rb +0 -46
  89. data/lib/reactive-ruby/server_rendering/hyper_asset_container.rb +0 -46
  90. data/lib/reactive-ruby/version.rb +0 -5
  91. data/lib/reactrb/auto-import.rb +0 -27
  92. data/misc/generators/reactive_ruby/test_app/templates/assets/javascripts/components.rb +0 -3
  93. data/misc/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js +0 -5
  94. data/misc/generators/reactive_ruby/test_app/templates/assets/javascripts/test_application.rb +0 -2
  95. data/misc/generators/reactive_ruby/test_app/templates/boot.rb.erb +0 -6
  96. data/misc/generators/reactive_ruby/test_app/templates/script/rails +0 -5
  97. data/misc/generators/reactive_ruby/test_app/templates/test_application.rb.erb +0 -13
  98. data/misc/generators/reactive_ruby/test_app/templates/views/components/hello_world.rb +0 -11
  99. data/misc/generators/reactive_ruby/test_app/templates/views/components/todo.rb +0 -14
  100. data/misc/generators/reactive_ruby/test_app/templates/views/layouts/test_layout.html.erb +0 -0
  101. data/misc/generators/reactive_ruby/test_app/test_app_generator.rb +0 -121
  102. data/misc/hyperloop-logo-small-pink.png +0 -0
  103. data/misc/logo1.png +0 -0
  104. data/misc/logo2.png +0 -0
  105. data/misc/logo3.png +0 -0
  106. data/path_release_steps.md +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65b78c8ba3d9ce408f7c5b1675a7e0840bdbaebb0d274dcc4f44c59379fd91e9
4
- data.tar.gz: a216f84309f2f80f1532528bd805e4693e5fbea667cd55fef082916313419e11
3
+ metadata.gz: 8f4d73fa137be90a6669fde5e74f3398c33503882a6af53bbcdcedca1ecfcba4
4
+ data.tar.gz: b2b61ace1614403cc7f682465571d1ae389f716ea84e2aa0edb76b7a34f6f344
5
5
  SHA512:
6
- metadata.gz: 9cbd1e8b45a0074a42227790018fe5ea707187ca67a8c81ee77fc8799bcec37c3e742d15b38bd4dd8caf4f812fe17683fb73dc2812079a402b7593a97808d4f2
7
- data.tar.gz: ffcae57c7ee360d0f72f790acc3b6eb3be8c26b14a6ab1ea4e9fff3621c0e867ece5d07f3e54d12fab5b419fdf5f29b28b4468c6044e20faedf6b610c92e07f1
6
+ metadata.gz: f0e0166388bd05c172e2925b5179ebc6717b5a25c036eebb81db2d6afb8c2bac50a8ece0cec4755aa0b972957fab466917b7bbcb51603c2b5139e8b0e71ffed1
7
+ data.tar.gz: 7ad7cf61f431a260ad32f6ce40bf0687339e36c186e9358987de7d034fb974caa94bd23aa301c1512348aad06ed95b5fd994a406071b676244bdb62441204230
@@ -32,7 +32,7 @@ Whitespace conventions:
32
32
  ### Deprecated
33
33
 
34
34
  - Current ref callback behavior is deprecated. Require `"react/ref_callback"` to get the updated behavior. (#188)
35
- - `React.render_to_string` & `React.render_to_static_markup` is deprecated, use `React::Server.render_to_string` & `React::Server.render_to_static_markup` instead. (#186)
35
+ - `Hyperstack::Component::ReactAPI.render_to_string` & `Hyperstack::Component::ReactAPI.render_to_static_markup` is deprecated, use `React::Server.render_to_string` & `React::Server.render_to_static_markup` instead. (#186)
36
36
  - `react/react-source` is deprecated, use `react/react-source-browser` or `react/react-source-server` instead. For most usecase, `react/react-source-browser` is sufficient. If you are using the built-in server side rendering feature, the actual `ReactDOMServer` is already provided by the `react-rails` gem. Therefore, unless you are building a custom server side rendering mechanism, it's not suggested to use `react/react-source-server` in browser code. (#186)
37
37
 
38
38
  ### Removed
@@ -57,8 +57,8 @@ Whitespace conventions:
57
57
 
58
58
  ### Deprecated
59
59
 
60
- - Current `React.render` behavior is deprecated. Require `"react/top_level_render"` to get the updated behavior. (#187)
61
- - `React.is_valid_element` is deprecated in favor of `React.is_valid_element?`.
60
+ - Current `Hyperstack::Component::ReactAPI.render` behavior is deprecated. Require `"react/top_level_render"` to get the updated behavior. (#187)
61
+ - `React.is_valid_element` is deprecated in favor of `Hyperstack::Component::ReactAPI.is_valid_element?`.
62
62
  - `expect(component).to render('<div />')` is now deprecated in favor of `expect(component).to render_static_html('<div />')`, which is much clearer.
63
63
 
64
64
  ### Fixed
data/Gemfile CHANGED
@@ -1,7 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
  #gem "opal-jquery", git: "https://github.com/opal/opal-jquery.git", branch: "master"
3
- gem 'hyper-spec', path: '../hyper-spec'
4
- gem 'hyperloop-config', path: '../hyperloop-config'
5
- gem 'hyper-store', path: '../hyper-store'
3
+ gem 'hyper-spec', path: '../hyper-spec'
4
+ gem 'hyperstack-config', path: '../hyperstack-config'
5
+ gem 'hyper-store', path: '../hyper-store'
6
+ gem 'hyper-state', path: '../hyper-state'
6
7
  #gem 'puma', '~> 3.11.0' # As of adding, version 3.12.0 isn't working so we are locking
7
8
  gemspec
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: ../hyper-spec
3
3
  specs:
4
- hyper-spec (0.99.6)
4
+ hyper-spec (1.0.rc1)
5
5
  capybara
6
6
  chromedriver-helper (= 1.2.0)
7
- libv8 (~> 6.7.0)
7
+ libv8 (~> 6.3.0)
8
8
  method_source
9
- mini_racer (~> 0.2.4)
9
+ mini_racer (~> 0.1.15)
10
10
  opal (>= 0.11.0, < 0.12.0)
11
11
  parser (>= 2.3.3.1)
12
12
  pry
@@ -14,34 +14,44 @@ PATH
14
14
  selenium-webdriver
15
15
  timecop (~> 0.8.1)
16
16
  uglifier
17
- unparser (~> 0.3.0)
17
+ unparser
18
18
  webdrivers
19
19
 
20
+ PATH
21
+ remote: ../hyper-state
22
+ specs:
23
+ hyper-state (1.0.rc1)
24
+ hyperstack-config (= 1.0.rc1)
25
+ opal (>= 0.11.0, < 0.12.0)
26
+
20
27
  PATH
21
28
  remote: ../hyper-store
22
29
  specs:
23
- hyper-store (0.99.6)
24
- hyperloop-config (= 0.99.6)
30
+ hyper-store (1.0.rc1)
31
+ hyper-state (= 1.0.rc1)
32
+ hyperstack-config (= 1.0.rc1)
25
33
  opal (>= 0.11.0, < 0.12.0)
26
34
 
27
35
  PATH
28
- remote: ../hyperloop-config
36
+ remote: ../hyperstack-config
29
37
  specs:
30
- hyperloop-config (0.99.6)
31
- libv8 (~> 6.7.0)
32
- mini_racer (~> 0.2.4)
38
+ hyperstack-config (1.0.rc1)
39
+ libv8 (~> 6.3.0)
40
+ listen (~> 3.0)
41
+ mini_racer (~> 0.1.15)
33
42
  opal (>= 0.11.0, < 0.12.0)
34
43
  opal-browser (~> 0.2.0)
35
44
  uglifier
45
+ websocket
36
46
 
37
47
  PATH
38
48
  remote: .
39
49
  specs:
40
- hyper-component (0.99.6)
41
- hyper-store (= 0.99.6)
42
- hyperloop-config (= 0.99.6)
43
- libv8 (~> 6.7.0)
44
- mini_racer (~> 0.2.4)
50
+ hyper-component (1.0.rc1)
51
+ hyper-state (= 1.0.rc1)
52
+ hyperstack-config (= 1.0.rc1)
53
+ libv8 (~> 6.3.0)
54
+ mini_racer (~> 0.1.15)
45
55
  opal (>= 0.11.0, < 0.12.0)
46
56
  opal-activesupport (~> 0.3.1)
47
57
  react-rails (>= 2.4.0, < 2.5.0)
@@ -94,7 +104,7 @@ GEM
94
104
  adamantium (0.2.0)
95
105
  ice_nine (~> 0.11.0)
96
106
  memoizable (~> 0.4.0)
97
- addressable (2.6.0)
107
+ addressable (2.5.2)
98
108
  public_suffix (>= 2.0.2, < 4.0)
99
109
  archive-zip (0.11.0)
100
110
  io-like (~> 0.3.0)
@@ -105,7 +115,7 @@ GEM
105
115
  babel-source (>= 4.0, < 6)
106
116
  execjs (~> 2.0)
107
117
  builder (3.2.3)
108
- capybara (3.13.2)
118
+ capybara (3.10.1)
109
119
  addressable
110
120
  mini_mime (>= 0.1.3)
111
121
  nokogiri (~> 1.8)
@@ -133,15 +143,16 @@ GEM
133
143
  globalid (0.4.1)
134
144
  activesupport (>= 4.2.0)
135
145
  hike (1.2.3)
136
- i18n (1.1.0)
146
+ i18n (1.1.1)
137
147
  concurrent-ruby (~> 1.0)
138
148
  ice_nine (0.11.2)
149
+ interception (0.5)
139
150
  io-like (0.3.0)
140
151
  jquery-rails (4.3.3)
141
152
  rails-dom-testing (>= 1, < 3)
142
153
  railties (>= 4.2.0)
143
154
  thor (>= 0.14, < 2.0)
144
- libv8 (6.7.288.46.1)
155
+ libv8 (6.3.292.48.1-x86_64-darwin-15)
145
156
  listen (3.1.5)
146
157
  rb-fsevent (~> 0.9, >= 0.9.4)
147
158
  rb-inotify (~> 0.9, >= 0.9.7)
@@ -149,9 +160,9 @@ GEM
149
160
  loofah (2.2.2)
150
161
  crass (~> 1.0.2)
151
162
  nokogiri (>= 1.5.9)
152
- mail (2.7.0)
163
+ mail (2.7.1)
153
164
  mini_mime (>= 0.1.1)
154
- marcel (0.3.2)
165
+ marcel (0.3.3)
155
166
  mimemagic (~> 0.3.2)
156
167
  memoizable (0.4.2)
157
168
  thread_safe (~> 0.3, >= 0.3.1)
@@ -162,12 +173,11 @@ GEM
162
173
  mimemagic (0.3.2)
163
174
  mini_mime (1.0.1)
164
175
  mini_portile2 (2.3.0)
165
- mini_racer (0.2.4)
166
- libv8 (>= 6.3)
176
+ mini_racer (0.1.15)
177
+ libv8 (~> 6.3)
167
178
  minitest (5.11.3)
168
- net_http_ssl_fix (0.0.10)
169
179
  nio4r (2.3.1)
170
- nokogiri (1.8.4)
180
+ nokogiri (1.8.5)
171
181
  mini_portile2 (~> 2.3.0)
172
182
  opal (0.11.3)
173
183
  ast (>= 2.3.0)
@@ -204,8 +214,11 @@ GEM
204
214
  pry (0.11.3)
205
215
  coderay (~> 1.1.0)
206
216
  method_source (~> 0.9.0)
217
+ pry-rescue (1.4.5)
218
+ interception (>= 0.5)
219
+ pry
207
220
  public_suffix (3.0.3)
208
- puma (3.11.4)
221
+ puma (3.12.0)
209
222
  rack (2.0.5)
210
223
  rack-test (1.1.0)
211
224
  rack (>= 1.0, < 3)
@@ -249,16 +262,16 @@ GEM
249
262
  execjs
250
263
  railties (>= 3.2)
251
264
  tilt
252
- regexp_parser (1.3.0)
265
+ regexp_parser (1.2.0)
253
266
  rspec-core (3.8.0)
254
267
  rspec-support (~> 3.8.0)
255
- rspec-expectations (3.8.1)
268
+ rspec-expectations (3.8.2)
256
269
  diff-lcs (>= 1.2.0, < 2.0)
257
270
  rspec-support (~> 3.8.0)
258
271
  rspec-mocks (3.8.0)
259
272
  diff-lcs (>= 1.2.0, < 2.0)
260
273
  rspec-support (~> 3.8.0)
261
- rspec-rails (3.8.0)
274
+ rspec-rails (3.8.1)
262
275
  actionpack (>= 3.0)
263
276
  activesupport (>= 3.0)
264
277
  railties (>= 3.0)
@@ -295,10 +308,10 @@ GEM
295
308
  timecop (0.8.1)
296
309
  tzinfo (1.2.5)
297
310
  thread_safe (~> 0.1)
298
- uglifier (4.1.20)
311
+ uglifier (4.1.19)
299
312
  execjs (>= 0.3.0, < 3)
300
313
  unicode-display_width (1.4.0)
301
- unparser (0.3.0)
314
+ unparser (0.2.8)
302
315
  abstract_type (~> 0.0.7)
303
316
  adamantium (~> 0.2.0)
304
317
  concord (~> 0.1.5)
@@ -306,11 +319,11 @@ GEM
306
319
  equalizer (~> 0.0.9)
307
320
  parser (>= 2.3.1.2, < 2.6)
308
321
  procto (~> 0.0.2)
309
- webdrivers (3.6.0)
310
- net_http_ssl_fix
322
+ webdrivers (3.4.3)
311
323
  nokogiri (~> 1.6)
312
324
  rubyzip (~> 1.0)
313
325
  selenium-webdriver (~> 3.0)
326
+ websocket (1.2.8)
314
327
  websocket-driver (0.7.0)
315
328
  websocket-extensions (>= 0.1.0)
316
329
  websocket-extensions (0.1.3)
@@ -321,12 +334,13 @@ PLATFORMS
321
334
  ruby
322
335
 
323
336
  DEPENDENCIES
324
- bundler (~> 1.16)
337
+ bundler (~> 1.16.0)
325
338
  chromedriver-helper
326
339
  hyper-component!
327
340
  hyper-spec!
341
+ hyper-state!
328
342
  hyper-store!
329
- hyperloop-config!
343
+ hyperstack-config!
330
344
  jquery-rails
331
345
  listen
332
346
  mime-types
@@ -335,6 +349,7 @@ DEPENDENCIES
335
349
  opal-rails (~> 0.9.4)
336
350
  opal-rspec
337
351
  pry
352
+ pry-rescue
338
353
  puma
339
354
  rails (>= 4.0.0)
340
355
  rails-controller-testing
@@ -345,4 +360,4 @@ DEPENDENCIES
345
360
  timecop (~> 0.8.1)
346
361
 
347
362
  BUNDLED WITH
348
- 1.17.3
363
+ 1.16.1
@@ -107,7 +107,7 @@ def register_component_dsl_method(component)
107
107
  parent = split_name.inject([Module]) { |nesting, next_const| nesting + [nesting.last.const_get(next_const)] }[-2]
108
108
  class << parent
109
109
  define_method component_name do |*args, &block|
110
- React::RenderingContext.render(name, *args, &block)
110
+ RenderingContext.render(name, *args, &block)
111
111
  end
112
112
  define_method "#{component_name}_as_node" do |*args, &block|
113
113
  React::Component.deprecation_warning("..._as_node is deprecated. Render component and then use the .node method instead")
@@ -1,10 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path('../lib/', __FILE__)
3
- require 'reactive-ruby/version'
3
+ require 'hyperstack/component/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'hyper-component'
7
- spec.version = Hyperloop::Component::VERSION
7
+ spec.version = Hyperstack::Component::VERSION
8
8
 
9
9
  spec.authors = ['David Chang', 'Adam Jahn', 'Mitch VanDuyn', 'Jan Biedermann', 'Adam Creekroad']
10
10
  spec.email = ['mitch@catprint.com']
@@ -21,17 +21,17 @@ Gem::Specification.new do |spec|
21
21
  spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_dependency 'hyper-store', Hyperloop::Component::VERSION
25
- spec.add_dependency 'hyperloop-config', Hyperloop::Component::VERSION
26
- spec.add_dependency 'libv8', '~> 6.7.0'
27
- spec.add_dependency 'mini_racer', '~> 0.2.4'
24
+ spec.add_dependency 'hyper-state', Hyperstack::Component::VERSION
25
+ spec.add_dependency 'hyperstack-config', Hyperstack::Component::VERSION
26
+ spec.add_dependency 'libv8', '~> 6.3.0' # see https://github.com/discourse/mini_racer/issues/92
27
+ spec.add_dependency 'mini_racer', '~> 0.1.15'
28
28
  spec.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
29
29
  spec.add_dependency 'opal-activesupport', '~> 0.3.1'
30
30
  spec.add_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
31
31
 
32
- spec.add_development_dependency 'bundler', '~> 1.16'
32
+ spec.add_development_dependency 'bundler', '~> 1.16.0'
33
33
  spec.add_development_dependency 'chromedriver-helper'
34
- spec.add_development_dependency 'hyper-spec', Hyperloop::Component::VERSION
34
+ spec.add_development_dependency 'hyper-spec', Hyperstack::Component::VERSION
35
35
  spec.add_development_dependency 'jquery-rails'
36
36
  spec.add_development_dependency 'listen'
37
37
  spec.add_development_dependency 'mime-types'
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency 'opal-rails', '~> 0.9.4'
41
41
  spec.add_development_dependency 'opal-rspec'
42
42
  spec.add_development_dependency 'pry'
43
+ spec.add_development_dependency 'pry-rescue'
43
44
  spec.add_development_dependency 'puma'
44
45
  spec.add_development_dependency 'rails', '>= 4.0.0'
45
46
  spec.add_development_dependency 'rails-controller-testing'
@@ -1,52 +1,40 @@
1
- require 'hyperloop-config'
2
- Hyperloop.import 'hyper-store'
3
- Hyperloop.js_import 'react/react-source-browser', client_only: true, defines: ['ReactDOM', 'React']
4
- Hyperloop.js_import 'react/react-source-server', server_only: true, defines: 'React'
5
- Hyperloop.import 'browser/delay', client_only: true
6
- Hyperloop.js_import 'react_ujs', defines: 'ReactRailsUJS'
1
+ require 'hyperstack/internal/component'
2
+
3
+ Hyperstack.import 'hyper-state'
4
+ Hyperstack.js_import 'react/react-source-browser', client_only: true, defines: %w[ReactDOM React]
5
+ Hyperstack.js_import 'react/react-source-server', server_only: true, defines: 'React'
6
+ Hyperstack.import 'browser/delay', client_only: true
7
+ Hyperstack.js_import 'react_ujs', defines: 'ReactRailsUJS'
8
+ Hyperstack.import 'hyper-component' # TODO: confirm this does not break anything. Added while converting hyperloop->hyperstack
9
+ Hyperstack.import 'hyperstack/component/auto-import' # TODO: confirm we can cancel the import
7
10
 
8
11
  if RUBY_ENGINE == 'opal'
9
- module Hyperloop
10
- class Component
11
- end
12
- end
12
+ require 'hyperstack/internal/callbacks'
13
+ require 'hyperstack/internal/auto_unmount'
13
14
  require 'native'
14
- require 'react/observable'
15
- require 'react/validator'
16
- require 'react/element'
17
- require 'react/api'
18
- require 'react/component'
19
- require 'react/component/dsl_instance_methods'
20
- require 'react/component/should_component_update'
21
- require 'react/component/tags'
22
- require 'react/component/base'
23
- require 'react/event'
24
- require 'react/rendering_context'
25
- require 'react/state'
26
- require 'react/object'
27
- require 'react/to_key'
28
- #require 'react/ext/opal-jquery/element' # now have to manually require this
29
- require 'reactive-ruby/isomorphic_helpers'
30
- require 'react/top_level'
31
- require 'react/top_level_render'
32
- require 'rails-helpers/top_level_rails_component'
33
- require 'reactive-ruby/version'
34
- module Hyperloop
35
- class Component
36
- def self.inherited(child)
37
- child.include(Mixin)
38
- end
39
- end
40
- end
15
+ require 'hyperstack/state/observer'
16
+ require 'hyperstack/internal/component/validator'
17
+ require 'hyperstack/component/element'
18
+ require 'hyperstack/internal/component/react_wrapper'
19
+ require 'hyperstack/component'
20
+ require 'hyperstack/internal/component/should_component_update'
21
+ require 'hyperstack/internal/component/tags'
22
+ require 'hyperstack/component/event'
23
+ require 'hyperstack/internal/component/rendering_context'
24
+ require 'hyperstack/ext/component/object'
25
+ require 'hyperstack/ext/component/number'
26
+ require 'hyperstack/ext/component/boolean'
27
+ require 'hyperstack/component/isomorphic_helpers'
28
+ require 'hyperstack/component/react_api'
29
+ require 'hyperstack/internal/component/top_level_rails_component'
30
+ require 'hyperstack/component/version'
41
31
  else
42
32
  require 'opal'
43
-
44
- require 'hyper-store'
45
33
  require 'opal-activesupport'
46
- require 'reactive-ruby/version'
47
- require 'reactive-ruby/rails' if defined?(Rails)
48
- require 'reactive-ruby/isomorphic_helpers'
49
- require 'reactive-ruby/serializers'
34
+ require 'hyperstack/component/version'
35
+ require 'hyperstack/internal/component/rails'
36
+ require 'hyperstack/component/isomorphic_helpers'
37
+ require 'hyperstack/ext/component/serializers'
50
38
 
51
39
  Opal.append_path File.expand_path('../', __FILE__).untaint
52
40
  require 'react/react-source'
@@ -0,0 +1,145 @@
1
+ require 'hyperstack/ext/component/string'
2
+ require 'hyperstack/ext/component/hash'
3
+ require 'active_support/core_ext/class/attribute'
4
+ require 'hyperstack/internal/auto_unmount'
5
+ require 'hyperstack/internal/component/rendering_context'
6
+ require 'hyperstack/internal/component'
7
+ require 'hyperstack/internal/component/instance_methods'
8
+ require 'hyperstack/internal/component/class_methods'
9
+ require 'hyperstack/internal/component/props_wrapper'
10
+ module Hyperstack
11
+
12
+ module Component
13
+
14
+ def self.included(base)
15
+ base.include(Hyperstack::State::Observer)
16
+ base.include(Hyperstack::Internal::Component::InstanceMethods)
17
+ base.include(Hyperstack::Internal::AutoUnmount) # pulls in the CallBacks module as well
18
+ base.include(Hyperstack::Internal::Component::Tags)
19
+ base.include(Hyperstack::Internal::Component::ShouldComponentUpdate)
20
+ base.class_eval do
21
+ class_attribute :initial_state
22
+ define_callback :before_mount
23
+ define_callback :after_mount
24
+ define_callback :before_receive_props
25
+ define_callback :before_update
26
+ define_callback :after_update
27
+ #define_callback :before_unmount defined already by Async module
28
+ define_callback(:after_error) { Hyperstack::Internal::Component::ReactWrapper.add_after_error_hook(base) }
29
+ end
30
+ base.extend(Hyperstack::Internal::Component::ClassMethods)
31
+ end
32
+
33
+ def self.force_update!
34
+ components = Hyperstack::Internal::Component.mounted_components.to_a
35
+ components.each do |comp|
36
+ next unless Hyperstack::Internal::Component.mounted_components.include? comp
37
+ comp.force_update!
38
+ end
39
+ end
40
+
41
+ def self.deprecation_warning(message)
42
+ Hyperstack.deprecation_warning(name, message)
43
+ end
44
+
45
+ def deprecation_warning(message)
46
+ Hyperstack.deprecation_warning(self.class.name, message)
47
+ end
48
+
49
+ def initialize(native_element)
50
+ @__hyperstack_component_native = native_element
51
+ end
52
+
53
+ def emit(event_name, *args)
54
+ if Event::BUILT_IN_EVENTS.include?(built_in_event_name = "on#{event_name.to_s.event_camelize}")
55
+ params[built_in_event_name].call(*args)
56
+ else
57
+ params["on_#{event_name}"].call(*args)
58
+ end
59
+ end
60
+
61
+ def component_will_mount
62
+ @__hyperstack_component_params_wrapper = self.class.props_wrapper.new(self)
63
+ IsomorphicHelpers.load_context(true) if IsomorphicHelpers.on_opal_client?
64
+ observing(immediate_update: true) do
65
+ Hyperstack::Internal::Component.mounted_components << self
66
+ run_callback(:before_mount, props)
67
+ end
68
+ end
69
+
70
+ def component_did_mount
71
+ observing(update_objects: true) do
72
+ run_callback(:after_mount)
73
+ end
74
+ end
75
+
76
+ def component_will_receive_props(next_props)
77
+ # need to rethink how this works in opal-react, or if its actually that useful within the react.rb environment
78
+ # for now we are just using it to clear processed_params
79
+ observing(immediate_update: true) { run_callback(:before_receive_props, next_props) }
80
+ @__hyperstack_component_receiving_props = true
81
+ end
82
+
83
+ def component_will_update(next_props, next_state)
84
+ observing { run_callback(:before_update, next_props, next_state) }
85
+ if @__hyperstack_component_receiving_props
86
+ @__hyperstack_component_params_wrapper.reload(next_props)
87
+ end
88
+ @__hyperstack_component_receiving_props = false
89
+ end
90
+
91
+ def component_did_update(prev_props, prev_state)
92
+ observing(update_objects: true) { run_callback(:after_update, prev_props, prev_state) }
93
+ end
94
+
95
+ def component_will_unmount
96
+ observing do
97
+ unmount # runs unmount callbacks as well
98
+ remove
99
+ Hyperstack::Internal::Component.mounted_components.delete self
100
+ end
101
+ end
102
+
103
+ def component_did_catch(error, info)
104
+ observing { run_callback(:after_error, error, info) }
105
+ end
106
+
107
+ def mutations(_objects)
108
+ # if we have to we may have to require that all objects respond to a "name" method (see legacy method update_react_js_state below)
109
+ set_state('***_state_updated_at-***' => `Date.now() + Math.random()`)
110
+ end
111
+
112
+ def update_react_js_state(object, name, value)
113
+ if object
114
+ name = "#{object.class}.#{name}" unless object == self
115
+ # Date.now() has only millisecond precision, if several notifications of
116
+ # observer happen within a millisecond, updates may get lost.
117
+ # to mitigate this the Math.random() appends some random number
118
+ # this way notifactions will happen as expected by the rest of hyperloop
119
+ set_state(
120
+ '***_state_updated_at-***' => `Date.now() + Math.random()`,
121
+ name => value
122
+ )
123
+ else
124
+ set_state name => value
125
+ end
126
+ end
127
+
128
+ def render
129
+ raise 'no render defined'
130
+ end unless method_defined?(:render)
131
+
132
+ def waiting_on_resources
133
+ @__hyperstack_component_waiting_on_resources
134
+ end
135
+
136
+ def _render_wrapper
137
+ observing(rendering: true) do
138
+ element = Hyperstack::Internal::Component::RenderingContext.render(nil) { render || '' }
139
+ @__hyperstack_component_waiting_on_resources =
140
+ element.waiting_on_resources if element.respond_to? :waiting_on_resources
141
+ element
142
+ end
143
+ end
144
+ end
145
+ end