hyper-component 1.0.alpha1.5 → 1.0.alpha1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -0
- data/hyper-component.gemspec +6 -9
- data/lib/hyper-component.rb +2 -1
- data/lib/hyperstack/component.rb +46 -10
- data/lib/hyperstack/component/children.rb +1 -1
- data/lib/hyperstack/component/element.rb +60 -19
- data/lib/hyperstack/component/event.rb +1 -1
- data/lib/hyperstack/component/isomorphic_helpers.rb +13 -8
- data/lib/hyperstack/component/version.rb +1 -1
- data/lib/hyperstack/component/while_loading.rb +1 -1
- data/lib/hyperstack/internal/component/class_methods.rb +1 -1
- data/lib/hyperstack/internal/component/haml.rb +1 -1
- data/lib/hyperstack/internal/component/rails/component_mount.rb +3 -0
- data/lib/hyperstack/internal/component/rails/server_rendering/contextual_renderer.rb +5 -1
- data/lib/hyperstack/internal/component/rails/server_rendering/hyper_asset_container.rb +4 -2
- data/lib/hyperstack/internal/component/react_wrapper.rb +32 -41
- data/lib/hyperstack/internal/component/rendering_context.rb +80 -44
- data/lib/hyperstack/internal/component/rescue_wrapper.rb +1 -1
- data/lib/hyperstack/internal/component/tags.rb +9 -0
- data/lib/react/react-source.rb +2 -2
- metadata +39 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 280f2800045d849e7cc7eb6e517673861a9a0dd15ea96a204bc246f7c35fdf96
|
4
|
+
data.tar.gz: 5f15dcac1988d4aa3443db720bb253e4b0f1cf36fa59884fafdf8d73ade1bbb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d56717e2ef07a3b4e94e3dbe933a1710167bf8a6a9318f2667e986d055d14af3f2a86daa426ef20bdd394352398dbdd6877615daf4b7a1454e7bea40d9014c04
|
7
|
+
data.tar.gz: 5d7920af6aa4843c8141c41b44ca7120d46be0be7a752336a7d48fb2cfc5aad76c985b2b5b3586391c4baed240b9c3d3655c59db3db07a6bdf0890c07e784614
|
data/Gemfile
CHANGED
@@ -4,5 +4,10 @@ gem 'hyper-spec', path: '../hyper-spec'
|
|
4
4
|
gem 'hyperstack-config', path: '../hyperstack-config'
|
5
5
|
gem 'hyper-store', path: '../hyper-store'
|
6
6
|
gem 'hyper-state', path: '../hyper-state'
|
7
|
+
unless ENV['OPAL_VERSION']&.match("0.11")
|
8
|
+
gem 'opal-browser', git: 'https://github.com/opal/opal-browser'
|
9
|
+
end
|
10
|
+
gem 'hyper-trace', path: '../hyper-trace'
|
11
|
+
|
7
12
|
#gem 'puma', '~> 3.11.0' # As of adding, version 3.12.0 isn't working so we are locking
|
8
13
|
gemspec
|
data/hyper-component.gemspec
CHANGED
@@ -23,30 +23,27 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_dependency 'hyper-state', Hyperstack::Component::VERSION
|
25
25
|
spec.add_dependency 'hyperstack-config', Hyperstack::Component::VERSION
|
26
|
-
spec.add_dependency 'libv8', '~> 6.7.0'
|
27
|
-
spec.add_dependency 'mini_racer', '~> 0.2.4'
|
28
|
-
spec.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
|
29
26
|
spec.add_dependency 'opal-activesupport', '~> 0.3.1'
|
30
27
|
spec.add_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
|
31
28
|
|
32
|
-
spec.add_development_dependency 'bundler'
|
29
|
+
spec.add_development_dependency 'bundler'
|
33
30
|
spec.add_development_dependency 'chromedriver-helper'
|
34
31
|
spec.add_development_dependency 'hyper-spec', Hyperstack::Component::VERSION
|
35
32
|
spec.add_development_dependency 'jquery-rails'
|
36
33
|
spec.add_development_dependency 'listen'
|
37
34
|
spec.add_development_dependency 'mime-types'
|
35
|
+
spec.add_development_dependency 'mini_racer'
|
38
36
|
spec.add_development_dependency 'nokogiri'
|
39
37
|
spec.add_development_dependency 'opal-jquery'
|
40
|
-
spec.add_development_dependency 'opal-rails', '
|
41
|
-
spec.add_development_dependency 'opal-rspec'
|
42
|
-
spec.add_development_dependency 'pry'
|
38
|
+
spec.add_development_dependency 'opal-rails', '>= 0.9.4', '< 2.0'
|
43
39
|
spec.add_development_dependency 'pry-rescue'
|
40
|
+
spec.add_development_dependency 'pry-stack_explorer'
|
44
41
|
spec.add_development_dependency 'puma'
|
45
|
-
spec.add_development_dependency 'rails', '>=
|
42
|
+
spec.add_development_dependency 'rails', ENV['RAILS_VERSION'] || '>= 5.0.0', '< 7.0'
|
46
43
|
spec.add_development_dependency 'rails-controller-testing'
|
47
44
|
spec.add_development_dependency 'rake'
|
48
45
|
spec.add_development_dependency 'rspec-rails'
|
49
46
|
spec.add_development_dependency 'rubocop', '~> 0.51.0'
|
50
|
-
spec.add_development_dependency 'sqlite3', '~> 1.
|
47
|
+
spec.add_development_dependency 'sqlite3', '~> 1.4.2'
|
51
48
|
spec.add_development_dependency 'timecop', '~> 0.8.1'
|
52
49
|
end
|
data/lib/hyper-component.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'hyperstack/internal/component'
|
2
2
|
|
3
|
-
Hyperstack.import 'hyper-state'
|
4
3
|
Hyperstack.js_import 'react/react-source-browser', client_only: true, defines: %w[ReactDOM React]
|
5
4
|
Hyperstack.js_import 'react/react-source-server', server_only: true, defines: 'React'
|
6
5
|
Hyperstack.import 'browser/delay', client_only: true
|
6
|
+
Hyperstack.import 'browser/interval', client_only: true
|
7
7
|
Hyperstack.js_import 'react_ujs', defines: 'ReactRailsUJS'
|
8
8
|
Hyperstack.import 'hyper-component' # TODO: confirm this does not break anything. Added while converting hyperloop->hyperstack
|
9
9
|
Hyperstack.import 'hyperstack/component/auto-import' # TODO: confirm we can cancel the import
|
@@ -38,6 +38,7 @@ if RUBY_ENGINE == 'opal'
|
|
38
38
|
require 'hyperstack/component/version'
|
39
39
|
else
|
40
40
|
require 'opal'
|
41
|
+
require 'hyper-state'
|
41
42
|
require 'opal-activesupport'
|
42
43
|
require 'hyperstack/component/version'
|
43
44
|
require 'hyperstack/internal/component/rails'
|
data/lib/hyperstack/component.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'hyperstack/ext/component/string'
|
2
2
|
require 'hyperstack/ext/component/hash'
|
3
3
|
require 'active_support/core_ext/class/attribute'
|
4
|
-
require 'hyperstack/internal/auto_unmount'
|
5
4
|
require 'hyperstack/internal/component/rendering_context'
|
6
5
|
require 'hyperstack/internal/component'
|
7
6
|
require 'hyperstack/internal/component/instance_methods'
|
@@ -19,15 +18,40 @@ module Hyperstack
|
|
19
18
|
base.include(Hyperstack::Internal::Component::ShouldComponentUpdate)
|
20
19
|
base.class_eval do
|
21
20
|
class_attribute :initial_state
|
22
|
-
|
21
|
+
|
22
|
+
method_args_deprecation_check = lambda do |name, sself, proc, *args|
|
23
|
+
if proc.arity.zero?
|
24
|
+
args = []
|
25
|
+
else
|
26
|
+
deprecation_warning "In the future #{name} callbacks will not receive any parameters."
|
27
|
+
end
|
28
|
+
sself.instance_exec(*args, &proc)
|
29
|
+
args
|
30
|
+
end
|
31
|
+
|
32
|
+
define_callback :before_mount, before_call_hook: method_args_deprecation_check
|
23
33
|
define_callback :after_mount
|
24
|
-
define_callback
|
25
|
-
|
34
|
+
define_callback(
|
35
|
+
:before_new_params,
|
36
|
+
after_define_hook: lambda do |klass|
|
37
|
+
klass.deprecation_warning "`before_new_params` has been deprecated. The base "\
|
38
|
+
"method componentWillReceiveProps is deprecated in React without replacement"
|
39
|
+
end
|
40
|
+
)
|
41
|
+
define_callback(:before_update, before_call_hook: method_args_deprecation_check)
|
26
42
|
define_callback :after_update
|
27
|
-
define_callback
|
28
|
-
|
29
|
-
|
30
|
-
|
43
|
+
define_callback(
|
44
|
+
:__hyperstack_component_after_render_hook,
|
45
|
+
before_call_hook: ->(_, sself, proc, *args) { [*sself.instance_exec(*args, &proc)] }
|
46
|
+
)
|
47
|
+
define_callback(
|
48
|
+
:__hyperstack_component_rescue_hook,
|
49
|
+
before_call_hook: ->(_, sself, proc, *args) { sself.instance_exec(*args, &proc) }
|
50
|
+
)
|
51
|
+
define_callback(
|
52
|
+
:after_error,
|
53
|
+
after_define_hook: ->(klass) { Hyperstack::Internal::Component::ReactWrapper.add_after_error_hook(klass) }
|
54
|
+
)
|
31
55
|
end
|
32
56
|
base.extend(Hyperstack::Internal::Component::ClassMethods)
|
33
57
|
unless `Opal.__hyperstack_component_original_defn`
|
@@ -165,13 +189,25 @@ module Hyperstack
|
|
165
189
|
end
|
166
190
|
|
167
191
|
def __hyperstack_component_run_post_render_hooks(element)
|
168
|
-
run_callback(:__hyperstack_component_after_render_hook, element)
|
192
|
+
run_callback(:__hyperstack_component_after_render_hook, element).first
|
169
193
|
end
|
170
194
|
|
195
|
+
def _run_before_render_callbacks
|
196
|
+
# eventually add before_update if @__component_mounted
|
197
|
+
# but that will not perfectly match the current React behavior.
|
198
|
+
# However that behavior is deprecated, and so once we have
|
199
|
+
# given a chance for the code to be updated we can switch this over
|
200
|
+
# and switch the deprecation notice to an error.
|
201
|
+
component_will_mount unless @__component_mounted
|
202
|
+
@__component_mounted = true
|
203
|
+
end
|
204
|
+
|
205
|
+
|
171
206
|
def _render_wrapper
|
207
|
+
_run_before_render_callbacks
|
172
208
|
observing(rendering: true) do
|
173
209
|
element = Hyperstack::Internal::Component::RenderingContext.render(nil) do
|
174
|
-
render ||
|
210
|
+
render || ""
|
175
211
|
end
|
176
212
|
@__hyperstack_component_waiting_on_resources =
|
177
213
|
element.waiting_on_resources if element.respond_to? :waiting_on_resources
|
@@ -15,33 +15,73 @@ module Hyperstack
|
|
15
15
|
# by using method missing
|
16
16
|
#
|
17
17
|
class Element
|
18
|
-
include Native
|
19
18
|
|
20
|
-
|
21
|
-
|
19
|
+
# $$typeof: Symbol(react.element)
|
20
|
+
# key: null
|
21
|
+
# props: {}
|
22
|
+
# ref: null
|
23
|
+
# type: "div"
|
24
|
+
# _ _owner: null
|
22
25
|
|
23
|
-
attr_reader
|
26
|
+
attr_reader :type
|
27
|
+
|
28
|
+
attr_reader :element_type # change this so name does not conflict - change to element type
|
24
29
|
attr_reader :properties
|
25
30
|
attr_reader :block
|
31
|
+
attr_reader :to_n
|
26
32
|
|
27
33
|
attr_accessor :waiting_on_resources
|
28
34
|
|
29
|
-
def
|
30
|
-
@
|
35
|
+
def set_native_attributes(native_element)
|
36
|
+
@key = `native_element.key`
|
37
|
+
@props = `native_element.props`
|
38
|
+
@ref = `native_element.ref`
|
39
|
+
@type = `native_element.type`
|
40
|
+
@_owner = `native_element._owner`
|
41
|
+
@_props_as_hash = Hash.new(@props)
|
42
|
+
end
|
43
|
+
|
44
|
+
def props
|
45
|
+
@_props_as_hash
|
46
|
+
end
|
47
|
+
|
48
|
+
def convert_string(native_element, element_type, props, block)
|
49
|
+
return native_element unless `native_element['$is_a?']`
|
50
|
+
return native_element unless native_element.is_a? String
|
51
|
+
raise "Internal Error Element.new called with string, but non-nil props or block" if !props.empty? || block
|
52
|
+
|
53
|
+
if element_type == :wrap_child
|
54
|
+
`React.createElement(React.Fragment, null, [native_element])`
|
55
|
+
else
|
56
|
+
`React.createElement(native_element, null)`
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize(native_element, element_type = nil, properties = {}, block = nil)
|
61
|
+
|
62
|
+
native_element = convert_string(native_element, element_type, properties, block)
|
63
|
+
@element_type = element_type unless element_type == :wrap_child
|
31
64
|
@properties = (`typeof #{properties} === 'undefined'` ? nil : properties) || {}
|
32
65
|
@block = block
|
33
|
-
|
66
|
+
`#{self}.$$typeof = native_element.$$typeof`
|
67
|
+
@to_n = self
|
68
|
+
set_native_attributes(native_element)
|
69
|
+
rescue Exception
|
70
|
+
end
|
71
|
+
|
72
|
+
def children
|
73
|
+
`#{@props}.children`
|
34
74
|
end
|
35
75
|
|
36
76
|
def _update_ref(x)
|
37
|
-
@
|
77
|
+
@_ref = x
|
38
78
|
@_child_element._update_ref(x) if @_child_element
|
39
79
|
end
|
40
80
|
|
41
|
-
def ref
|
42
|
-
return @
|
43
|
-
raise("The instance of #{self.
|
44
|
-
raise("Attempt to get a ref on #{self.
|
81
|
+
def ref # this will not conflict with React's on ref attribute okay because its $ref!!!
|
82
|
+
return @_ref if @_ref
|
83
|
+
raise("The instance of #{self.element_type} has not been mounted yet") if properties[:ref]
|
84
|
+
raise("Attempt to get a ref on #{self.element_type} which is a static component.")
|
45
85
|
end
|
46
86
|
|
47
87
|
def dom_node
|
@@ -57,7 +97,7 @@ module Hyperstack
|
|
57
97
|
merge_event_prop!(event_name, &block)
|
58
98
|
any_found = true
|
59
99
|
end
|
60
|
-
|
100
|
+
set_native_attributes(`React.cloneElement(#{self}, #{@properties.shallow_to_n})`) if any_found
|
61
101
|
self
|
62
102
|
end
|
63
103
|
|
@@ -69,10 +109,10 @@ module Hyperstack
|
|
69
109
|
if props.empty?
|
70
110
|
Hyperstack::Internal::Component::RenderingContext.render(self)
|
71
111
|
else
|
72
|
-
props = Hyperstack::Internal::Component::ReactWrapper.convert_props(
|
112
|
+
props = Hyperstack::Internal::Component::ReactWrapper.convert_props(element_type, @properties, *props)
|
73
113
|
@_child_element = Hyperstack::Internal::Component::RenderingContext.render(
|
74
|
-
Element.new(`React.cloneElement(#{
|
75
|
-
|
114
|
+
Element.new(`React.cloneElement(#{self}, #{props.shallow_to_n})`,
|
115
|
+
element_type, props, block)
|
76
116
|
)
|
77
117
|
end
|
78
118
|
end
|
@@ -80,11 +120,12 @@ module Hyperstack
|
|
80
120
|
# Delete (remove) element from rendering context, the element may later be added back in
|
81
121
|
# using the render method.
|
82
122
|
|
83
|
-
def
|
123
|
+
def ~
|
84
124
|
Hyperstack::Internal::Component::RenderingContext.delete(self)
|
85
125
|
end
|
86
126
|
# Deprecated version of delete method
|
87
|
-
alias as_node
|
127
|
+
alias as_node ~
|
128
|
+
alias delete ~
|
88
129
|
|
89
130
|
private
|
90
131
|
|
@@ -109,7 +150,7 @@ module Hyperstack
|
|
109
150
|
merge_built_in_event_prop! name, &block
|
110
151
|
elsif event_name == :enter
|
111
152
|
merge_built_in_event_prop!('onKeyDown') { |evt| yield(evt) if evt.key_code == 13 }
|
112
|
-
elsif
|
153
|
+
elsif element_type.instance_variable_get('@native_import')
|
113
154
|
merge_component_event_prop! name, &block
|
114
155
|
else
|
115
156
|
merge_component_event_prop! "on_#{event_name}", &block
|
@@ -18,16 +18,22 @@ module Hyperstack
|
|
18
18
|
def self.load_context(unique_id = nil, name = nil)
|
19
19
|
# can be called on the client to force re-initialization for testing purposes
|
20
20
|
if !unique_id || !@context || @context.unique_id != unique_id
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
message =
|
22
|
+
if on_opal_server?
|
23
|
+
`console.history = []` rescue nil
|
24
|
+
"************************ React Prerendering Context Initialized #{name} ***********************"
|
25
|
+
else
|
26
|
+
'************************ React Browser Context Initialized ****************************'
|
27
|
+
end
|
28
|
+
|
27
29
|
log(message)
|
30
|
+
|
28
31
|
@context = Context.new(unique_id)
|
29
32
|
end
|
30
|
-
|
33
|
+
|
34
|
+
# True is returned here because this method is evaluated by MiniRacer,
|
35
|
+
# and can cause TypeError: Converting circular structure to JSON to raise
|
36
|
+
true
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
@@ -139,7 +145,6 @@ module Hyperstack
|
|
139
145
|
|
140
146
|
def send_to_opal(method_name, *args)
|
141
147
|
return unless @ctx
|
142
|
-
args = [1] if args.length == 0
|
143
148
|
Hyperstack::Internal::Component::Rails::ComponentLoader.new(@ctx).load!
|
144
149
|
method_args = args.collect do |arg|
|
145
150
|
quarg = "#{arg}".tr('"', "'")
|
@@ -16,7 +16,7 @@ module Hyperstack
|
|
16
16
|
if Hyperstack::Component::IsomorphicHelpers.on_opal_client?
|
17
17
|
%x{
|
18
18
|
function onError(event) {
|
19
|
-
if (event.message.
|
19
|
+
if (event.message.match(/^Uncaught NotQuiet: /)) event.preventDefault();
|
20
20
|
}
|
21
21
|
|
22
22
|
window.addEventListener('error', onError);
|
@@ -50,7 +50,7 @@ module Hyperstack
|
|
50
50
|
def render(container = nil, params = {}, &block)
|
51
51
|
Tags.included(self)
|
52
52
|
if container
|
53
|
-
container = container.
|
53
|
+
container = container.element_type if container.is_a? Hyperstack::Component::Element
|
54
54
|
define_method(:__hyperstack_component_render) do
|
55
55
|
__hyperstack_component_select_wrappers do
|
56
56
|
RenderingContext.render(container, params) do
|
@@ -28,7 +28,7 @@ module Hyperstack
|
|
28
28
|
self,
|
29
29
|
Hyperstack::Internal::Component::RenderingContext.build do
|
30
30
|
Hyperstack::Internal::Component::RenderingContext.render(
|
31
|
-
|
31
|
+
element_type, @properties, args, class: haml_class_name(class_name), &new_block
|
32
32
|
)
|
33
33
|
end
|
34
34
|
)
|
@@ -13,7 +13,11 @@ module Hyperstack
|
|
13
13
|
|
14
14
|
class ContextualRenderer < React::ServerRendering::BundleRenderer
|
15
15
|
def initialize(options = {})
|
16
|
-
|
16
|
+
unless v8_runtime?
|
17
|
+
raise "Hyperstack prerendering only works with MiniRacer. Add 'mini_racer' to your Gemfile"
|
18
|
+
end
|
19
|
+
|
20
|
+
super({ files: ['hyperstack-prerender-loader.js'] }.merge(options))
|
17
21
|
ComponentLoader.new(v8_context).load
|
18
22
|
end
|
19
23
|
|
@@ -9,7 +9,9 @@ module Hyperstack
|
|
9
9
|
module ServerRendering
|
10
10
|
class HyperTestAssetContainer
|
11
11
|
def find_asset(logical_path)
|
12
|
-
|
12
|
+
# we skip the container if it raises an error so we
|
13
|
+
# don't care if we are running under hyperspec or not
|
14
|
+
HyperSpec::Internal::Controller.cache_read(logical_path)
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
@@ -24,7 +26,7 @@ module Hyperstack
|
|
24
26
|
if React::ServerRendering::WebpackerManifestContainer.compatible?
|
25
27
|
@ass_containers << React::ServerRendering::WebpackerManifestContainer.new
|
26
28
|
end
|
27
|
-
@ass_containers << HyperTestAssetContainer.new
|
29
|
+
@ass_containers << HyperTestAssetContainer.new
|
28
30
|
end
|
29
31
|
|
30
32
|
def find_asset(logical_path)
|
@@ -19,7 +19,7 @@ module Hyperstack
|
|
19
19
|
@@component_classes = {}
|
20
20
|
|
21
21
|
def self.stateless?(ncc)
|
22
|
-
`typeof #{ncc} === 'function' && !(#{ncc}.prototype && #{ncc}.prototype.isReactComponent)`
|
22
|
+
`typeof #{ncc} === 'symbol' || (typeof #{ncc} === 'function' && !(#{ncc}.prototype && #{ncc}.prototype.isReactComponent))`
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.import_native_component(opal_class, native_class)
|
@@ -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
|
+
|
33
34
|
component = `component.default` if `component.__esModule`
|
34
35
|
is_component_class = `#{component}.prototype !== undefined` &&
|
35
36
|
(`!!#{component}.prototype.isReactComponent` ||
|
@@ -43,9 +44,11 @@ module Hyperstack
|
|
43
44
|
|
44
45
|
def self.native_react_component?(name = nil)
|
45
46
|
return false unless name
|
47
|
+
|
46
48
|
eval_native_react_component(name)
|
47
49
|
true
|
48
|
-
|
50
|
+
# Exception to be compatible with all versions of opal
|
51
|
+
rescue Exception # rubocop:disable Lint/RescueException
|
49
52
|
false
|
50
53
|
end
|
51
54
|
|
@@ -64,93 +67,81 @@ module Hyperstack
|
|
64
67
|
end
|
65
68
|
|
66
69
|
def self.create_native_react_class(type)
|
70
|
+
raise "createReactClass is undefined. Add the 'react-create-class' npm module, and import it as 'createReactClass'" if `typeof(createReactClass)=='undefined'`
|
67
71
|
raise "Provided class should define `render` method" if !(type.method_defined? :render)
|
68
|
-
|
72
|
+
old_school = !type.method_defined?(:_render_wrapper)
|
73
|
+
render_fn = old_school ? :render : :_render_wrapper
|
69
74
|
# this was hashing type.to_s, not sure why but .to_s does not work as it Foo::Bar::View.to_s just returns "View"
|
70
|
-
|
71
75
|
@@component_classes[type] ||= begin
|
72
76
|
comp = %x{
|
73
|
-
|
74
|
-
|
75
|
-
super(props);
|
77
|
+
createReactClass({
|
78
|
+
getInitialState: function() {
|
76
79
|
this.mixins = #{type.respond_to?(:native_mixins) ? type.native_mixins : `[]`};
|
77
80
|
this.statics = #{type.respond_to?(:static_call_backs) ? type.static_call_backs.to_n : `{}`};
|
78
|
-
this.state = {};
|
79
81
|
this.__opalInstanceInitializedState = false;
|
80
82
|
this.__opalInstanceSyncSetState = true;
|
81
83
|
this.__opalInstance = #{type.new(`this`)};
|
82
84
|
this.__opalInstanceInitializedState = true;
|
83
85
|
this.__opalInstanceSyncSetState = false;
|
84
86
|
this.__name = #{type.name};
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
} else {
|
90
|
-
return #{type.name};
|
91
|
-
}
|
92
|
-
}
|
93
|
-
static set displayName(name) {
|
94
|
-
this.__name = name;
|
95
|
-
}
|
96
|
-
static get defaultProps() {
|
87
|
+
return {}
|
88
|
+
},
|
89
|
+
displayName: #{type.name},
|
90
|
+
getDefaultProps: function() {
|
97
91
|
return #{type.respond_to?(:default_props) ? type.default_props.to_n : `{}`};
|
98
|
-
}
|
99
|
-
|
100
|
-
|
101
|
-
}
|
102
|
-
componentWillMount() {
|
92
|
+
},
|
93
|
+
propTypes: #{type.respond_to?(:prop_types) ? type.prop_types.to_n : `{}`},
|
94
|
+
componentWillMount: old_school && function() {
|
103
95
|
if (#{type.method_defined? :component_will_mount}) {
|
104
96
|
this.__opalInstanceSyncSetState = true;
|
105
97
|
this.__opalInstance.$component_will_mount();
|
106
98
|
this.__opalInstanceSyncSetState = false;
|
107
99
|
}
|
108
|
-
}
|
109
|
-
componentDidMount() {
|
100
|
+
},
|
101
|
+
componentDidMount: function() {
|
110
102
|
this.__opalInstance.__hyperstack_component_is_mounted = true
|
111
103
|
if (#{type.method_defined? :component_did_mount}) {
|
112
104
|
this.__opalInstanceSyncSetState = false;
|
113
105
|
this.__opalInstance.$component_did_mount();
|
114
106
|
}
|
115
|
-
}
|
116
|
-
|
107
|
+
},
|
108
|
+
UNSAFE_componentWillReceiveProps: function(next_props) {
|
117
109
|
if (#{type.method_defined? :component_will_receive_props}) {
|
118
110
|
this.__opalInstanceSyncSetState = true;
|
119
111
|
this.__opalInstance.$component_will_receive_props(Opal.Hash.$new(next_props));
|
120
112
|
this.__opalInstanceSyncSetState = false;
|
121
113
|
}
|
122
|
-
}
|
123
|
-
shouldComponentUpdate(next_props, next_state) {
|
114
|
+
},
|
115
|
+
shouldComponentUpdate: function(next_props, next_state) {
|
124
116
|
if (#{type.method_defined? :should_component_update?}) {
|
125
117
|
this.__opalInstanceSyncSetState = false;
|
126
118
|
return this.__opalInstance["$should_component_update?"](Opal.Hash.$new(next_props), Opal.Hash.$new(next_state));
|
127
119
|
} else { return true; }
|
128
|
-
}
|
129
|
-
|
120
|
+
},
|
121
|
+
UNSAFE_componentWillUpdate: function(next_props, next_state) {
|
130
122
|
if (#{type.method_defined? :component_will_update}) {
|
131
123
|
this.__opalInstanceSyncSetState = false;
|
132
124
|
this.__opalInstance.$component_will_update(Opal.Hash.$new(next_props), Opal.Hash.$new(next_state));
|
133
125
|
}
|
134
|
-
}
|
135
|
-
componentDidUpdate(prev_props, prev_state) {
|
126
|
+
},
|
127
|
+
componentDidUpdate: function(prev_props, prev_state) {
|
136
128
|
if (#{type.method_defined? :component_did_update}) {
|
137
129
|
this.__opalInstanceSyncSetState = false;
|
138
130
|
this.__opalInstance.$component_did_update(Opal.Hash.$new(prev_props), Opal.Hash.$new(prev_state));
|
139
131
|
}
|
140
|
-
}
|
141
|
-
componentWillUnmount() {
|
132
|
+
},
|
133
|
+
componentWillUnmount: function() {
|
142
134
|
if (#{type.method_defined? :component_will_unmount}) {
|
143
135
|
this.__opalInstanceSyncSetState = false;
|
144
136
|
this.__opalInstance.$component_will_unmount();
|
145
137
|
}
|
146
138
|
this.__opalInstance.__hyperstack_component_is_mounted = false;
|
147
|
-
}
|
148
|
-
|
149
|
-
render() {
|
139
|
+
},
|
140
|
+
render: function() {
|
150
141
|
this.__opalInstanceSyncSetState = false;
|
151
142
|
return this.__opalInstance.$send(render_fn).$to_n();
|
152
143
|
}
|
153
|
-
}
|
144
|
+
})
|
154
145
|
}
|
155
146
|
# check to see if there is an after_error callback. If there is add a
|
156
147
|
# componentDidCatch handler. Because legacy behavior is to allow any object
|
@@ -19,27 +19,41 @@ module Hyperstack
|
|
19
19
|
raise NotQuiet.new("#{component} is waiting on resources")
|
20
20
|
end
|
21
21
|
|
22
|
+
def render_string(string)
|
23
|
+
@buffer ||= []
|
24
|
+
@buffer << string
|
25
|
+
end
|
26
|
+
|
22
27
|
def render(name, *args, &block)
|
23
28
|
was_outer_most = !@not_outer_most
|
24
29
|
@not_outer_most = true
|
25
30
|
remove_nodes_from_args(args)
|
26
|
-
@buffer ||= [] unless @buffer
|
31
|
+
@buffer ||= [] #unless @buffer
|
27
32
|
if block
|
28
33
|
element = build do
|
29
34
|
saved_waiting_on_resources = nil #waiting_on_resources what was the purpose of this its used below to or in with the current elements waiting_for_resources
|
30
35
|
self.waiting_on_resources = nil
|
31
|
-
run_child_block(
|
36
|
+
run_child_block(&block)
|
32
37
|
if name
|
33
38
|
buffer = @buffer.dup
|
34
39
|
ReactWrapper.create_element(name, *args) { buffer }.tap do |element|
|
35
40
|
element.waiting_on_resources = saved_waiting_on_resources || !!buffer.detect { |e| e.waiting_on_resources if e.respond_to?(:waiting_on_resources) }
|
36
41
|
element.waiting_on_resources ||= waiting_on_resources if buffer.last.is_a?(String)
|
37
42
|
end
|
38
|
-
elsif @buffer.last.is_a? Hyperstack::Component::Element
|
39
|
-
@buffer.last.tap { |element| element.waiting_on_resources ||= saved_waiting_on_resources }
|
40
43
|
else
|
41
|
-
|
42
|
-
|
44
|
+
buffer = @buffer.collect do |item|
|
45
|
+
if item.is_a? Hyperstack::Component::Element
|
46
|
+
item.waiting_on_resources ||= saved_waiting_on_resources
|
47
|
+
item
|
48
|
+
else
|
49
|
+
RenderingContext.render(:span) { item.to_s }.tap { |element| element.waiting_on_resources = saved_waiting_on_resources }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
if buffer.length > 1
|
53
|
+
buffer
|
54
|
+
else
|
55
|
+
buffer.first
|
56
|
+
end
|
43
57
|
end
|
44
58
|
end
|
45
59
|
elsif name.is_a? Hyperstack::Component::Element
|
@@ -65,6 +79,7 @@ module Hyperstack
|
|
65
79
|
|
66
80
|
def delete(element)
|
67
81
|
@buffer.delete(element)
|
82
|
+
@last_deleted = element
|
68
83
|
element
|
69
84
|
end
|
70
85
|
alias as_node delete
|
@@ -86,55 +101,74 @@ module Hyperstack
|
|
86
101
|
end if args[0] && args[0].is_a?(Hash)
|
87
102
|
end
|
88
103
|
|
89
|
-
# run_child_block
|
104
|
+
# run_child_block yields to the child rendering block which will put any
|
105
|
+
# elements to be rendered into the current rendering buffer.
|
106
|
+
#
|
90
107
|
# for example when rendering this div: div { "hello".span; "goodby".span }
|
91
108
|
# two child Elements will be generated.
|
92
109
|
#
|
93
|
-
# the
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
97
|
-
# 4 or the last element pushed on the buffer
|
110
|
+
# However the block itself will return a value, which in some cases should
|
111
|
+
# also added to the buffer:
|
112
|
+
#
|
113
|
+
# If the final value of the block is a
|
98
114
|
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
115
|
+
# a hyper model dummy value that is being loaded, then wrap it in a span and add it to the buffer
|
116
|
+
# a string (or if the buffer is empty any value), then add it to the buffer
|
117
|
+
# an Element, then add it on the buffer unless it has been just deleted
|
118
|
+
# #
|
119
|
+
# Note that the reason we don't always allow Strings to be automatically pushed is
|
120
|
+
# to avoid confusing results in situations like this:
|
121
|
+
# DIV { collection.each { |item| SPAN { item } } }
|
122
|
+
# If we accepted any object to be rendered this would generate:
|
123
|
+
# DIV { SPAN { collection[0] } SPAN { collection[n] } collection.to_s }
|
124
|
+
# which is probably not the desired output. If it was you would just append to_s
|
125
|
+
# to the end of the expression, to force it to be added to the output buffer.
|
103
126
|
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
# so we insure that is the case, and also check to make sure that element in the buffer
|
107
|
-
# is the element returned
|
127
|
+
# However if the buffer is empty then it makes sense to automatically apply the `.to_s`
|
128
|
+
# to the value, and push it on the buffer, unless it is a falsy value or an array
|
108
129
|
|
109
|
-
def run_child_block
|
130
|
+
def run_child_block
|
110
131
|
result = yield
|
111
|
-
|
112
|
-
|
132
|
+
check_for_component_return(result)
|
133
|
+
if dummy_value?(result)
|
134
|
+
# hyper-mesh DummyValues must
|
113
135
|
# be converted to spans INSIDE the parent, otherwise the waiting_on_resources
|
114
136
|
# flag will get set in the wrong context
|
115
137
|
RenderingContext.render(:span) { result.to_s }
|
116
|
-
elsif result.is_a?(
|
117
|
-
@buffer << result
|
138
|
+
elsif result.is_a?(Hyperstack::Component::Element)
|
139
|
+
@buffer << result if @buffer.empty? unless @last_deleted == result
|
140
|
+
elsif pushable_string?(result)
|
141
|
+
@buffer << result.to_s
|
118
142
|
end
|
119
|
-
|
143
|
+
@last_deleted = nil
|
120
144
|
end
|
121
145
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
146
|
+
def check_for_component_return(result)
|
147
|
+
# check for a common error of saying (for example) DIV (without parens)
|
148
|
+
# which returns the DIV component class instead of a rendered DIV
|
149
|
+
return unless result.try :hyper_component?
|
150
|
+
|
151
|
+
Hyperstack::Component::IsomorphicHelpers.log(
|
152
|
+
"a component's render method returned the component class #{result}, did you mean to say #{result}()",
|
153
|
+
:warning
|
154
|
+
)
|
155
|
+
end
|
156
|
+
|
157
|
+
def dummy_value?(result)
|
158
|
+
result.respond_to?(:loading?) && result.loading?
|
159
|
+
end
|
160
|
+
|
161
|
+
def pushable_string?(result)
|
162
|
+
# if the buffer is not empty we will only push on strings, and ignore anything else
|
163
|
+
return result.is_a?(String) unless @buffer.empty?
|
164
|
+
|
165
|
+
# if the buffer IS empty then we can push on anything except we avoid nil, false and arrays
|
166
|
+
# as these are almost never what you want to render, and if you do there are mechanisms
|
167
|
+
# to render them explicitly
|
168
|
+
result && result.respond_to?(:to_n) && !result.is_a?(Array)
|
133
169
|
end
|
134
170
|
|
135
171
|
def improper_render(message, solution)
|
136
|
-
raise "a component's render method must generate and return exactly 1 element or a string.\n"\
|
137
|
-
" #{message} #{solution}"
|
138
172
|
end
|
139
173
|
end
|
140
174
|
end
|
@@ -143,7 +177,7 @@ module Hyperstack
|
|
143
177
|
end
|
144
178
|
|
145
179
|
class Object
|
146
|
-
[
|
180
|
+
%i[span td th].each do |tag|
|
147
181
|
define_method(tag) do |*args, &block|
|
148
182
|
args.unshift(tag)
|
149
183
|
# legacy hyperloop allowed tags to be lower case as well so if self is a component
|
@@ -155,24 +189,26 @@ class Object
|
|
155
189
|
# in the component.
|
156
190
|
# If we fully deprecate lowercase tags, then this next line can go...
|
157
191
|
return send(*args, &block) if respond_to?(:hyper_component?) && hyper_component?
|
192
|
+
|
158
193
|
Hyperstack::Internal::Component::RenderingContext.render(*args) { to_s }
|
159
194
|
end
|
160
195
|
end
|
161
196
|
|
162
|
-
|
163
197
|
def para(*args, &block)
|
164
198
|
args.unshift(:p)
|
165
199
|
# see above comment
|
166
200
|
return send(*args, &block) if respond_to?(:hyper_component?) && hyper_component?
|
201
|
+
|
167
202
|
Hyperstack::Internal::Component::RenderingContext.render(*args) { to_s }
|
168
203
|
end
|
169
204
|
|
170
205
|
def br
|
171
206
|
# see above comment
|
172
207
|
return send(:br) if respond_to?(:hyper_component?) && hyper_component?
|
173
|
-
|
174
|
-
|
175
|
-
Hyperstack::Internal::Component::RenderingContext.render(
|
208
|
+
|
209
|
+
Hyperstack::Internal::Component::RenderingContext.render(Hyperstack::Internal::Component::Tags::FRAGMENT) do
|
210
|
+
Hyperstack::Internal::Component::RenderingContext.render(Hyperstack::Internal::Component::Tags::FRAGMENT) { to_s }
|
211
|
+
Hyperstack::Internal::Component::RenderingContext.render(Hyperstack::Internal::Component::Tags::BR)
|
176
212
|
end
|
177
213
|
end
|
178
214
|
|
@@ -27,7 +27,7 @@ module Hyperstack
|
|
27
27
|
|
28
28
|
after_error do |error, info|
|
29
29
|
args = RescueWrapper.after_error_args || [error, info]
|
30
|
-
found, * = @Child.run_callback(:__hyperstack_component_rescue_hook, found, *args)
|
30
|
+
found, * = @Child.run_callback(:__hyperstack_component_rescue_hook, found, *args)
|
31
31
|
unless found
|
32
32
|
RescueWrapper.after_error_args = args
|
33
33
|
raise error
|
@@ -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,6 +93,7 @@ module Hyperstack
|
|
85
93
|
|
86
94
|
def lookup_const(name)
|
87
95
|
return nil unless name =~ /^[A-Z]/
|
96
|
+
return Hyperstack::Internal::Component::Tags::FRAGMENT if name == "FRAGMENT"
|
88
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
|
data/lib/react/react-source.rb
CHANGED
@@ -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? ?
|
15
|
-
react_directory = React::Rails::AssetVariant.new({
|
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.
|
4
|
+
version: 1.0.alpha1.6
|
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:
|
15
|
+
date: 2021-03-29 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.
|
23
|
+
version: 1.0.alpha1.6
|
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.
|
30
|
+
version: 1.0.alpha1.6
|
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.
|
37
|
+
version: 1.0.alpha1.6
|
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.
|
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.7.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.7.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.2.4
|
66
|
-
type: :runtime
|
67
|
-
prerelease: false
|
68
|
-
version_requirements: !ruby/object:Gem::Requirement
|
69
|
-
requirements:
|
70
|
-
- - "~>"
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 0.2.4
|
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.6
|
93
45
|
- !ruby/object:Gem::Dependency
|
94
46
|
name: opal-activesupport
|
95
47
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,20 +82,14 @@ dependencies:
|
|
130
82
|
requirements:
|
131
83
|
- - ">="
|
132
84
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
134
|
-
- - "<"
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: '2.1'
|
85
|
+
version: '0'
|
137
86
|
type: :development
|
138
87
|
prerelease: false
|
139
88
|
version_requirements: !ruby/object:Gem::Requirement
|
140
89
|
requirements:
|
141
90
|
- - ">="
|
142
91
|
- !ruby/object:Gem::Version
|
143
|
-
version:
|
144
|
-
- - "<"
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: '2.1'
|
92
|
+
version: '0'
|
147
93
|
- !ruby/object:Gem::Dependency
|
148
94
|
name: chromedriver-helper
|
149
95
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,14 +110,14 @@ dependencies:
|
|
164
110
|
requirements:
|
165
111
|
- - '='
|
166
112
|
- !ruby/object:Gem::Version
|
167
|
-
version: 1.0.alpha1.
|
113
|
+
version: 1.0.alpha1.6
|
168
114
|
type: :development
|
169
115
|
prerelease: false
|
170
116
|
version_requirements: !ruby/object:Gem::Requirement
|
171
117
|
requirements:
|
172
118
|
- - '='
|
173
119
|
- !ruby/object:Gem::Version
|
174
|
-
version: 1.0.alpha1.
|
120
|
+
version: 1.0.alpha1.6
|
175
121
|
- !ruby/object:Gem::Dependency
|
176
122
|
name: jquery-rails
|
177
123
|
requirement: !ruby/object:Gem::Requirement
|
@@ -215,7 +161,7 @@ dependencies:
|
|
215
161
|
- !ruby/object:Gem::Version
|
216
162
|
version: '0'
|
217
163
|
- !ruby/object:Gem::Dependency
|
218
|
-
name:
|
164
|
+
name: mini_racer
|
219
165
|
requirement: !ruby/object:Gem::Requirement
|
220
166
|
requirements:
|
221
167
|
- - ">="
|
@@ -229,7 +175,7 @@ dependencies:
|
|
229
175
|
- !ruby/object:Gem::Version
|
230
176
|
version: '0'
|
231
177
|
- !ruby/object:Gem::Dependency
|
232
|
-
name:
|
178
|
+
name: nokogiri
|
233
179
|
requirement: !ruby/object:Gem::Requirement
|
234
180
|
requirements:
|
235
181
|
- - ">="
|
@@ -243,35 +189,41 @@ dependencies:
|
|
243
189
|
- !ruby/object:Gem::Version
|
244
190
|
version: '0'
|
245
191
|
- !ruby/object:Gem::Dependency
|
246
|
-
name: opal-
|
192
|
+
name: opal-jquery
|
247
193
|
requirement: !ruby/object:Gem::Requirement
|
248
194
|
requirements:
|
249
|
-
- - "
|
195
|
+
- - ">="
|
250
196
|
- !ruby/object:Gem::Version
|
251
|
-
version: 0
|
197
|
+
version: '0'
|
252
198
|
type: :development
|
253
199
|
prerelease: false
|
254
200
|
version_requirements: !ruby/object:Gem::Requirement
|
255
201
|
requirements:
|
256
|
-
- - "
|
202
|
+
- - ">="
|
257
203
|
- !ruby/object:Gem::Version
|
258
|
-
version: 0
|
204
|
+
version: '0'
|
259
205
|
- !ruby/object:Gem::Dependency
|
260
|
-
name: opal-
|
206
|
+
name: opal-rails
|
261
207
|
requirement: !ruby/object:Gem::Requirement
|
262
208
|
requirements:
|
263
209
|
- - ">="
|
264
210
|
- !ruby/object:Gem::Version
|
265
|
-
version:
|
211
|
+
version: 0.9.4
|
212
|
+
- - "<"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '2.0'
|
266
215
|
type: :development
|
267
216
|
prerelease: false
|
268
217
|
version_requirements: !ruby/object:Gem::Requirement
|
269
218
|
requirements:
|
270
219
|
- - ">="
|
271
220
|
- !ruby/object:Gem::Version
|
272
|
-
version:
|
221
|
+
version: 0.9.4
|
222
|
+
- - "<"
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '2.0'
|
273
225
|
- !ruby/object:Gem::Dependency
|
274
|
-
name: pry
|
226
|
+
name: pry-rescue
|
275
227
|
requirement: !ruby/object:Gem::Requirement
|
276
228
|
requirements:
|
277
229
|
- - ">="
|
@@ -285,7 +237,7 @@ dependencies:
|
|
285
237
|
- !ruby/object:Gem::Version
|
286
238
|
version: '0'
|
287
239
|
- !ruby/object:Gem::Dependency
|
288
|
-
name: pry-
|
240
|
+
name: pry-stack_explorer
|
289
241
|
requirement: !ruby/object:Gem::Requirement
|
290
242
|
requirements:
|
291
243
|
- - ">="
|
@@ -318,14 +270,20 @@ dependencies:
|
|
318
270
|
requirements:
|
319
271
|
- - ">="
|
320
272
|
- !ruby/object:Gem::Version
|
321
|
-
version:
|
273
|
+
version: 5.0.0
|
274
|
+
- - "<"
|
275
|
+
- !ruby/object:Gem::Version
|
276
|
+
version: '7.0'
|
322
277
|
type: :development
|
323
278
|
prerelease: false
|
324
279
|
version_requirements: !ruby/object:Gem::Requirement
|
325
280
|
requirements:
|
326
281
|
- - ">="
|
327
282
|
- !ruby/object:Gem::Version
|
328
|
-
version:
|
283
|
+
version: 5.0.0
|
284
|
+
- - "<"
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: '7.0'
|
329
287
|
- !ruby/object:Gem::Dependency
|
330
288
|
name: rails-controller-testing
|
331
289
|
requirement: !ruby/object:Gem::Requirement
|
@@ -388,14 +346,14 @@ dependencies:
|
|
388
346
|
requirements:
|
389
347
|
- - "~>"
|
390
348
|
- !ruby/object:Gem::Version
|
391
|
-
version: 1.
|
349
|
+
version: 1.4.2
|
392
350
|
type: :development
|
393
351
|
prerelease: false
|
394
352
|
version_requirements: !ruby/object:Gem::Requirement
|
395
353
|
requirements:
|
396
354
|
- - "~>"
|
397
355
|
- !ruby/object:Gem::Version
|
398
|
-
version: 1.
|
356
|
+
version: 1.4.2
|
399
357
|
- !ruby/object:Gem::Dependency
|
400
358
|
name: timecop
|
401
359
|
requirement: !ruby/object:Gem::Requirement
|
@@ -493,7 +451,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
493
451
|
- !ruby/object:Gem::Version
|
494
452
|
version: 1.3.1
|
495
453
|
requirements: []
|
496
|
-
rubygems_version: 3.0.
|
454
|
+
rubygems_version: 3.0.8
|
497
455
|
signing_key:
|
498
456
|
specification_version: 4
|
499
457
|
summary: Opal Ruby wrapper of React.js library.
|