hyper-component 0.99.6 → 1.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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