hyper-component 1.0.alpha1.4 → 1.0.alpha1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 407fc5c699f76a1d030f4f8c3c221806ce010cd473adb062fbba7f08d41f2a74
4
- data.tar.gz: 9d139310c4721502f09b74477efdd4f4f6fe388bc4a410abf6abe87e7cee0f52
3
+ metadata.gz: 5eb3f7c53a31ed9f6708f9fd1251f3ed52f7d54e5894145abaaf4ac4e5ac7fce
4
+ data.tar.gz: b95ea7df69882114a1a55f772911ba2b609221bde04df9e629e1278c0e71ea73
5
5
  SHA512:
6
- metadata.gz: aa213634e017097aa2562f00f29083017a12e345ba1abfe51bac88e7941b7e0f08f787f32f64871698b922e8518ec0e11bd34faa52a83c3c453f931a8ce97811
7
- data.tar.gz: bf453d84ab0e93c94831a42cba2b3a3c364d18612071e7564b4d3f751d282c5fa04240f3c938e591e9f755f2dee619e69b885b90c4718f2da5199446ce380587
6
+ metadata.gz: b7022103f15e46d7251addacac7ca755bb2cc2e7d52ae9ec8ebcd9fbb24ada6db90e77d3d689ad20a058a60e84192f00ea88f5d99065c2b86420187f2a0a2057
7
+ data.tar.gz: 44d0acecd8dc27123a35d0db8fa32f9cbdbe6715c523661a618114ad157891dfec8ebc226b6eff70e3a2a562271e3144d477e16f9110a8a274058edd1fb188cf
@@ -22,12 +22,16 @@ if RUBY_ENGINE == 'opal'
22
22
  require 'hyperstack/component/event'
23
23
  require 'hyperstack/internal/component/rendering_context'
24
24
  require 'hyperstack/ext/component/object'
25
+ require 'hyperstack/ext/component/kernel'
25
26
  require 'hyperstack/ext/component/number'
26
27
  require 'hyperstack/ext/component/boolean'
28
+ require 'hyperstack/ext/component/array'
29
+ require 'hyperstack/ext/component/enumerable'
27
30
  require 'hyperstack/component/isomorphic_helpers'
28
31
  require 'hyperstack/component/react_api'
29
32
  require 'hyperstack/internal/component/top_level_rails_component'
30
33
  require 'hyperstack/component/while_loading'
34
+ require 'hyperstack/component/free_render'
31
35
  require 'hyperstack/internal/component/rescue_wrapper'
32
36
  require 'hyperstack/internal/component/while_loading_wrapper'
33
37
 
@@ -39,18 +39,25 @@ module Hyperstack
39
39
  end
40
40
 
41
41
  def ref
42
- @ref || raise("#{self} has not been mounted yet")
42
+ return @ref if @ref
43
+ raise("The instance of #{self.type} has not been mounted yet") if properties[:ref]
44
+ raise("Attempt to get a ref on #{self.type} which is a static component.")
43
45
  end
44
46
 
45
47
  def dom_node
46
- @type.is_a?(String) ? ref : ref.dom_node
48
+ `typeof #{ref}.$dom_node == 'function'` ? ref.dom_node : ref
47
49
  end
48
50
 
49
- # Attach event handlers.
51
+ # Attach event handlers. skip false, nil and blank event names
50
52
 
51
53
  def on(*event_names, &block)
52
- event_names.each { |event_name| merge_event_prop!(event_name, &block) }
53
- @native = `React.cloneElement(#{@native}, #{@properties.shallow_to_n})`
54
+ any_found = false
55
+ event_names.each do |event_name|
56
+ next unless event_name && event_name.strip != ''
57
+ merge_event_prop!(event_name, &block)
58
+ any_found = true
59
+ end
60
+ @native = `React.cloneElement(#{@native}, #{@properties.shallow_to_n})` if any_found
54
61
  self
55
62
  end
56
63
 
@@ -114,6 +121,9 @@ module Hyperstack
114
121
  prop_name => %x{
115
122
  function(){
116
123
  var react_event = arguments[0];
124
+ if (arguments.length == 0 || !react_event.nativeEvent) {
125
+ return #{yield(*Array(`arguments`))}
126
+ }
117
127
  var all_args;
118
128
  var other_args;
119
129
  if (arguments.length > 1) {
@@ -0,0 +1,21 @@
1
+ module Hyperstack
2
+ module Component
3
+ module FreeRender
4
+ def self.included(base)
5
+ base.instance_eval do
6
+ alias :hyperstack_component_original_meth_missing method_missing
7
+ def method_missing(name, *args, &block)
8
+ if const_defined?(name) &&
9
+ (klass = const_get(name)) &&
10
+ ((klass.is_a?(Class) && klass.method_defined?(:render)) ||
11
+ Hyperstack::Internal::Component::Tags::HTML_TAGS.include?(klass))
12
+ render(klass, *args, &block)
13
+ else
14
+ hyperstack_component_original_meth_missing(name, *args, &block)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  module Hyperstack
2
2
  module Component
3
- VERSION = '1.0.alpha1.4' # '1.0.alpha1.4'
3
+ VERSION = '1.0.alpha1.5' # '1.0.alpha1.5'
4
4
  end
5
5
  end
@@ -0,0 +1,20 @@
1
+ # from Rails 6.0 activesupport. Remove once defined by Opal activesupport
2
+ class Array
3
+ # Removes and returns the elements for which the block returns a true value.
4
+ # If no block is given, an Enumerator is returned instead.
5
+ #
6
+ # numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7
+ # odd_numbers = numbers.extract! { |number| number.odd? } # => [1, 3, 5, 7, 9]
8
+ # numbers # => [0, 2, 4, 6, 8]
9
+ def extract!
10
+ return to_enum(:extract!) { size } unless block_given?
11
+
12
+ extracted_elements = []
13
+
14
+ reject! do |element|
15
+ extracted_elements << element if yield(element)
16
+ end
17
+
18
+ extracted_elements
19
+ end
20
+ end
@@ -1,11 +1,9 @@
1
1
  Element.instance_eval do
2
2
  def self.find(selector)
3
- selector = begin
4
- selector.dom_node
5
- rescue
6
- selector
7
- end if `#{selector}.$dom_node !== undefined`
8
- `$(#{selector})`
3
+ if `typeof #{selector}['$respond_to?'] == 'function'` && selector.respond_to?(:dom_node)
4
+ selector = selector.dom_node
5
+ end
6
+ `jQuery(#{selector})`
9
7
  end
10
8
 
11
9
  def self.[](selector)
@@ -37,7 +35,7 @@ Element.instance_eval do
37
35
  # see react-rails documentation for more details
38
36
 
39
37
  %x{
40
- $.fn.mount_components = function() {
38
+ jQuery.fn.mount_components = function() {
41
39
  this.each(function(e) { ReactRailsUJS.mountComponents(e[0]) })
42
40
  return this;
43
41
  }
@@ -0,0 +1,18 @@
1
+ # from Rails 6.0 activesupport. Remove once defined by Opal activesupport
2
+ module Enumerable
3
+ INDEX_WITH_DEFAULT = Object.new
4
+ private_constant :INDEX_WITH_DEFAULT
5
+ def index_with(default = INDEX_WITH_DEFAULT)
6
+ if block_given?
7
+ result = {}
8
+ each { |elem| result[elem] = yield(elem) }
9
+ result
10
+ elsif default != INDEX_WITH_DEFAULT
11
+ result = {}
12
+ each { |elem| result[elem] = default }
13
+ result
14
+ else
15
+ to_enum(:index_with) { size if respond_to?(:size) }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Kernel
2
+ def pause(s, &block)
3
+ Promise.new.tap { |p| after(s) { p.resolve(*(block && [block.call])) }}
4
+ end
5
+ alias busy_sleep sleep
6
+ alias sleep pause
7
+ end
@@ -271,7 +271,8 @@ module Hyperstack
271
271
  ReactWrapper.import_native_component(
272
272
  self, ReactWrapper.eval_native_react_component(component_name)
273
273
  )
274
- define_method(:render) {} # define a dummy render method - will never be called...
274
+ render {}
275
+ #define_method(:render) {} # define a dummy render method - will never be called...
275
276
  rescue Exception => e # rubocop:disable Lint/RescueException : we need to catch everything!
276
277
  raise "#{self} cannot import '#{component_name}': #{e.message}."
277
278
  # rubocop:enable Lint/RescueException
@@ -291,7 +292,7 @@ module Hyperstack
291
292
  end
292
293
 
293
294
  def to_n
294
- ReactWrapper.class_eval('@@component_classes')[self]
295
+ Hyperstack::Internal::Component::ReactWrapper.create_native_react_class(self)
295
296
  end
296
297
  end
297
298
  end
@@ -48,21 +48,23 @@ module Hyperstack
48
48
  end
49
49
 
50
50
  def define_param(name, param_type, aka = nil)
51
- meth_name = aka || name
52
- var_name = fix_suffix(aka) || instance_var_name_for(name)
53
- param_definitions[name] = lambda do |props|
54
- @component.instance_variable_set :"@#{var_name}", val = fetch_from_cache(name, param_type, props)
55
- next unless param_accessor_style == :accessors
56
- `#{@component}[#{"$#{meth_name}"}] = function() { return #{val} }`
57
- # @component.define_singleton_method(name) { val } if param_accessor_style == :accessors
51
+ if param_accessor_style != :legacy || aka
52
+ meth_name = aka || name
53
+ var_name = fix_suffix(aka) || instance_var_name_for(name)
54
+ param_definitions[name] = lambda do |props|
55
+ @component.instance_variable_set :"@#{var_name}", val = fetch_from_cache(name, param_type, props)
56
+ next unless param_accessor_style == :accessors
57
+ `#{@component}[#{"$#{meth_name}"}] = function() { return #{val} }`
58
+ # @component.define_singleton_method(name) { val } if param_accessor_style == :accessors
59
+ end
60
+ return if %i[hyperstack accessors].include? param_accessor_style
58
61
  end
59
- return if %i[hyperstack accessors].include? param_accessor_style
60
62
  if param_type == Proc
61
- define_method(meth_name.to_sym) do |*args, &block|
63
+ define_method(name.to_sym) do |*args, &block|
62
64
  props[name].call(*args, &block) if props[name]
63
65
  end
64
66
  else
65
- define_method(meth_name.to_sym) do
67
+ define_method(name.to_sym) do
66
68
  fetch_from_cache(name, param_type, props)
67
69
  end
68
70
  end
@@ -88,7 +90,7 @@ module Hyperstack
88
90
 
89
91
  def initialize(component, incoming = nil)
90
92
  @component = component
91
- return if param_accessor_style == :legacy
93
+ #return if param_accessor_style == :legacy
92
94
  self.class.param_definitions.each_value do |initializer|
93
95
  instance_exec(incoming || props, &initializer)
94
96
  end
@@ -50,3 +50,12 @@ module Hyperstack
50
50
  end
51
51
  end
52
52
  end
53
+
54
+
55
+ module React
56
+ module Rails
57
+ module ViewHelper
58
+ alias mount_component react_component
59
+ end
60
+ end
61
+ end
@@ -22,7 +22,7 @@ module ActionController
22
22
  @render_params = args.shift || {}
23
23
  options = args[0] || {}
24
24
  return if performed?
25
- render inline: '<%= react_component @component_name, @render_params %>',
25
+ render inline: '<%= mount_component @component_name, @render_params %>',
26
26
  layout: options.key?(:layout) ? options[:layout].to_s : :default
27
27
  rescue Exception => e
28
28
  m = /^RuntimeError: Hyperstack::Internal::Component::Redirect (.+) status: (.+)$/.match(e.message)
@@ -12,8 +12,9 @@ module Hyperstack
12
12
  end
13
13
  config.after_initialize do
14
14
  class ::HyperstackController < ::ApplicationController
15
- def action_missing(_name)
16
- render_component
15
+ def action_missing(*)
16
+ parts = params[:action].split('__')
17
+ render_component (parts[0..-2]+[parts.last.camelize]).join('::')
17
18
  end
18
19
  end
19
20
  end
@@ -30,6 +30,7 @@ module Hyperstack
30
30
  def self.eval_native_react_component(name)
31
31
  component = `eval(name)`
32
32
  raise "#{name} is not defined" if `#{component} === undefined`
33
+ component = `component.default` if `component.__esModule`
33
34
  is_component_class = `#{component}.prototype !== undefined` &&
34
35
  (`!!#{component}.prototype.isReactComponent` ||
35
36
  `!!#{component}.prototype.render`)
@@ -85,11 +85,11 @@ module Hyperstack
85
85
 
86
86
  def lookup_const(name)
87
87
  return nil unless name =~ /^[A-Z]/
88
- scopes = self.class.name.to_s.split('::').inject([Module]) do |nesting, next_const|
88
+ scopes = self.class.name.to_s.split('::').inject([Object]) do |nesting, next_const|
89
89
  nesting + [nesting.last.const_get(next_const)]
90
90
  end.reverse
91
- scope = scopes.detect { |s| s.const_defined?(name) }
92
- scope.const_get(name) if scope
91
+ scope = scopes.detect { |s| s.const_defined?(name, false) }
92
+ scope.const_get(name, false) if scope
93
93
  end
94
94
  end
95
95
  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.4
4
+ version: 1.0.alpha1.5
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: 2019-02-16 00:00:00.000000000 Z
15
+ date: 2019-06-19 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: hyper-state
@@ -20,28 +20,28 @@ dependencies:
20
20
  requirements:
21
21
  - - '='
22
22
  - !ruby/object:Gem::Version
23
- version: 1.0.alpha1.4
23
+ version: 1.0.alpha1.5
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.4
30
+ version: 1.0.alpha1.5
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.4
37
+ version: 1.0.alpha1.5
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.4
44
+ version: 1.0.alpha1.5
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: libv8
47
47
  requirement: !ruby/object:Gem::Requirement
@@ -164,14 +164,14 @@ dependencies:
164
164
  requirements:
165
165
  - - '='
166
166
  - !ruby/object:Gem::Version
167
- version: 1.0.alpha1.4
167
+ version: 1.0.alpha1.5
168
168
  type: :development
169
169
  prerelease: false
170
170
  version_requirements: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - '='
173
173
  - !ruby/object:Gem::Version
174
- version: 1.0.alpha1.4
174
+ version: 1.0.alpha1.5
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: jquery-rails
177
177
  requirement: !ruby/object:Gem::Requirement
@@ -431,6 +431,7 @@ files:
431
431
  - lib/hyperstack/component/children.rb
432
432
  - lib/hyperstack/component/element.rb
433
433
  - lib/hyperstack/component/event.rb
434
+ - lib/hyperstack/component/free_render.rb
434
435
  - lib/hyperstack/component/haml.rb
435
436
  - lib/hyperstack/component/isomorphic_helpers.rb
436
437
  - lib/hyperstack/component/jquery.rb
@@ -439,9 +440,12 @@ files:
439
440
  - lib/hyperstack/component/server.rb
440
441
  - lib/hyperstack/component/version.rb
441
442
  - lib/hyperstack/component/while_loading.rb
443
+ - lib/hyperstack/ext/component/array.rb
442
444
  - lib/hyperstack/ext/component/boolean.rb
443
445
  - lib/hyperstack/ext/component/element.rb
446
+ - lib/hyperstack/ext/component/enumerable.rb
444
447
  - lib/hyperstack/ext/component/hash.rb
448
+ - lib/hyperstack/ext/component/kernel.rb
445
449
  - lib/hyperstack/ext/component/number.rb
446
450
  - lib/hyperstack/ext/component/object.rb
447
451
  - lib/hyperstack/ext/component/serializers.rb
@@ -489,7 +493,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
489
493
  - !ruby/object:Gem::Version
490
494
  version: 1.3.1
491
495
  requirements: []
492
- rubygems_version: 3.0.2
496
+ rubygems_version: 3.0.4
493
497
  signing_key:
494
498
  specification_version: 4
495
499
  summary: Opal Ruby wrapper of React.js library.