isomorfeus-react 16.5.1
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 +7 -0
- data/Gemfile +1 -0
- data/README.md +620 -0
- data/isomorfeus-react.gemspec +23 -0
- data/lib/isomorfeus-react.rb +131 -0
- data/lib/isomorfeus/config.rb +84 -0
- data/lib/isomorfeus/top_level.rb +48 -0
- data/lib/isomorfeus/view_helpers.rb +38 -0
- data/lib/lucid_app/api.rb +22 -0
- data/lib/lucid_app/base.rb +7 -0
- data/lib/lucid_app/context.rb +7 -0
- data/lib/lucid_app/mixin.rb +17 -0
- data/lib/lucid_app/native_component_constructor.rb +70 -0
- data/lib/lucid_component/api.rb +97 -0
- data/lib/lucid_component/base.rb +7 -0
- data/lib/lucid_component/event_handler.rb +17 -0
- data/lib/lucid_component/initializer.rb +12 -0
- data/lib/lucid_component/mixin.rb +17 -0
- data/lib/lucid_component/native_component_constructor.rb +131 -0
- data/lib/react.rb +147 -0
- data/lib/react/active_support_support.rb +13 -0
- data/lib/react/component/api.rb +226 -0
- data/lib/react/component/base.rb +9 -0
- data/lib/react/component/elements.rb +78 -0
- data/lib/react/component/event_handler.rb +19 -0
- data/lib/react/component/features.rb +47 -0
- data/lib/react/component/history.rb +36 -0
- data/lib/react/component/initializer.rb +11 -0
- data/lib/react/component/location.rb +15 -0
- data/lib/react/component/match.rb +31 -0
- data/lib/react/component/mixin.rb +19 -0
- data/lib/react/component/native_component_constructor.rb +76 -0
- data/lib/react/component/native_component_validate_prop.rb +37 -0
- data/lib/react/component/props.rb +49 -0
- data/lib/react/component/resolution.rb +71 -0
- data/lib/react/component/should_component_update.rb +14 -0
- data/lib/react/component/state.rb +52 -0
- data/lib/react/component/unsafe_api.rb +33 -0
- data/lib/react/context_wrapper.rb +47 -0
- data/lib/react/function_component/creator.rb +47 -0
- data/lib/react/function_component/resolution.rb +61 -0
- data/lib/react/function_component/runner.rb +19 -0
- data/lib/react/native_constant_wrapper.rb +34 -0
- data/lib/react/pure_component/base.rb +9 -0
- data/lib/react/pure_component/mixin.rb +17 -0
- data/lib/react/redux_component/api.rb +132 -0
- data/lib/react/redux_component/app_store_defaults.rb +38 -0
- data/lib/react/redux_component/app_store_proxy.rb +46 -0
- data/lib/react/redux_component/base.rb +9 -0
- data/lib/react/redux_component/class_store_proxy.rb +50 -0
- data/lib/react/redux_component/component_class_store_defaults.rb +40 -0
- data/lib/react/redux_component/component_instance_store_defaults.rb +41 -0
- data/lib/react/redux_component/initializer.rb +14 -0
- data/lib/react/redux_component/instance_store_proxy.rb +50 -0
- data/lib/react/redux_component/mixin.rb +18 -0
- data/lib/react/redux_component/native_component_constructor.rb +119 -0
- data/lib/react/redux_component/reducers.rb +53 -0
- data/lib/react/ref.rb +19 -0
- data/lib/react/synthetic_event.rb +53 -0
- data/lib/react/version.rb +3 -0
- data/lib/react_dom.rb +31 -0
- data/lib/react_dom_server.rb +17 -0
- metadata +167 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
module React
|
2
|
+
module ReduxComponent
|
3
|
+
class ComponentInstanceStoreDefaults
|
4
|
+
def initialize(state, component_name)
|
5
|
+
@state = {}
|
6
|
+
@component_name = component_name
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(key, *args, &block)
|
10
|
+
if `args.length > 0`
|
11
|
+
# set initial class state
|
12
|
+
key = key.chop if `key.endsWith('=')`
|
13
|
+
@state[key] = args[0]
|
14
|
+
current_state = Isomorfeus.store.get_state
|
15
|
+
if !(current_state[:component_class_state].has_key?(@component_name) &&
|
16
|
+
current_state[:component_class_state][@component_name].has_key?(:instance_defaults) &&
|
17
|
+
current_state[:component_class_state][@component_name][:instance_defaults].has_key?(key))
|
18
|
+
Isomorfeus.store.dispatch(type: 'COMPONENT_CLASS_STATE', class: @component_name, name: :instance_defaults, value: { key => args[0]})
|
19
|
+
end
|
20
|
+
else
|
21
|
+
# get class state
|
22
|
+
|
23
|
+
# check if we have a component local state value
|
24
|
+
|
25
|
+
if @state.has_key?(key)
|
26
|
+
return @state[key]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_h
|
33
|
+
@state
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_n
|
37
|
+
@state.to_n
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module React
|
2
|
+
module ReduxComponent
|
3
|
+
module Initializer
|
4
|
+
def initialize(native_component)
|
5
|
+
@native = native_component
|
6
|
+
@app_store = ::React::ReduxComponent::AppStoreProxy.new(self)
|
7
|
+
@class_store = ::React::ReduxComponent::ClassStoreProxy.new(self)
|
8
|
+
@props = ::React::Component::Props.new(@native.JS[:props])
|
9
|
+
@state = ::React::Component::State.new(@native)
|
10
|
+
@store = ::React::ReduxComponent::InstanceStoreProxy.new(self)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module React
|
2
|
+
module ReduxComponent
|
3
|
+
class InstanceStoreProxy
|
4
|
+
|
5
|
+
def initialize(component_instance, access_key = 'state')
|
6
|
+
@native_component_instance = component_instance.to_n
|
7
|
+
@component_instance = component_instance
|
8
|
+
@component_object_id = component_instance.object_id.to_s
|
9
|
+
@access_key = access_key
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(key, *args, &block)
|
13
|
+
@native_component_instance.JS.register_used_store_path(['component_state', @component_object_id, key])
|
14
|
+
if `args.length > 0`
|
15
|
+
# set instance state, simply a dispatch
|
16
|
+
|
17
|
+
action = { type: 'COMPONENT_STATE', object_id: @component_object_id, name: (`key.endsWith('=')` ? key.chop : key), value: args[0] }
|
18
|
+
Isomorfeus.store.dispatch(action)
|
19
|
+
|
20
|
+
else
|
21
|
+
# get instance state
|
22
|
+
|
23
|
+
if @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id] &&
|
24
|
+
@native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id].JS.hasOwnProperty(key)
|
25
|
+
# check if we have a component local state value
|
26
|
+
return @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id].JS[key]
|
27
|
+
elsif @component_instance.class.default_instance_store_defined && @component_instance.class.store.to_h.has_key?(key)
|
28
|
+
# check if a default value was given
|
29
|
+
return @component_instance.class.store.to_h[key]
|
30
|
+
end
|
31
|
+
|
32
|
+
# otherwise return nil
|
33
|
+
return nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def dispatch(action)
|
38
|
+
Isomorfeus.store.dispatch(action)
|
39
|
+
end
|
40
|
+
|
41
|
+
def subscribe(&block)
|
42
|
+
Isomorfeus.store.subscribe(&block)
|
43
|
+
end
|
44
|
+
|
45
|
+
def unsubscribe(unsubscriber)
|
46
|
+
`unsubscriber()`
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module React
|
2
|
+
module ReduxComponent
|
3
|
+
module Mixin
|
4
|
+
def self.included(base)
|
5
|
+
base.include(::Native::Wrapper)
|
6
|
+
base.extend(::React::ReduxComponent::NativeComponentConstructor)
|
7
|
+
base.extend(::React::Component::NativeComponentValidateProp)
|
8
|
+
base.extend(::React::Component::EventHandler)
|
9
|
+
base.include(::React::Component::Elements)
|
10
|
+
base.include(::React::Component::API)
|
11
|
+
base.include(::React::ReduxComponent::API)
|
12
|
+
base.include(::React::ReduxComponent::Initializer)
|
13
|
+
base.include(::React::Component::Features)
|
14
|
+
base.include(::React::Component::Resolution)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module React
|
2
|
+
module ReduxComponent
|
3
|
+
module NativeComponentConstructor
|
4
|
+
# for should_component_update we apply ruby semantics for comparing props
|
5
|
+
# to do so, we convert the props to ruby hashes and then compare
|
6
|
+
# this makes sure, that for example rubys Nil object gets handled properly
|
7
|
+
def self.extended(base)
|
8
|
+
component_name = base.to_s
|
9
|
+
# language=JS
|
10
|
+
%x{
|
11
|
+
base.react_component = class extends React.Component {
|
12
|
+
constructor(props) {
|
13
|
+
super(props);
|
14
|
+
if (base.$default_state_defined()) {
|
15
|
+
this.state = Object.assign({}, base.$state().$to_n(), { isomorfeus_store: Opal.Isomorfeus.store.native.getState() });
|
16
|
+
} else {
|
17
|
+
this.state = { isomorfeus_store: Opal.Isomorfeus.store.native.getState() };
|
18
|
+
};
|
19
|
+
if (typeof this.state.isomorfeus_store.component_class_state[#{component_name}] === "undefined") {
|
20
|
+
this.state.isomorfeus_store.component_class_state[#{component_name}] = {};
|
21
|
+
};
|
22
|
+
this.__ruby_instance = base.$new(this);
|
23
|
+
this.__object_id = this.__ruby_instance.$object_id().$to_s();
|
24
|
+
if (!this.state.isomorfeus_store.component_state) {
|
25
|
+
this.state.isomorfeus_store.component_state = {};
|
26
|
+
if (base.$default_instance_store_defined()) {
|
27
|
+
this.state.isomorfeus_store.component_state[this.__object_id] = base.$store.$to_n();
|
28
|
+
} else {
|
29
|
+
this.state.isomorfeus_store.component_state[this.__object_id] = {};
|
30
|
+
}
|
31
|
+
};
|
32
|
+
var event_handlers = #{base.event_handlers};
|
33
|
+
for (var i = 0; i < event_handlers.length; i++) {
|
34
|
+
this[event_handlers[i]] = this[event_handlers[i]].bind(this);
|
35
|
+
}
|
36
|
+
var defined_refs = #{base.defined_refs};
|
37
|
+
for (var ref in defined_refs) {
|
38
|
+
if (defined_refs[ref] != null) {
|
39
|
+
this[ref] = function(element) {
|
40
|
+
#{`this.__ruby_instance`.instance_exec(React::Ref.new(`element`), `defined_refs[ref]`)}
|
41
|
+
}
|
42
|
+
this[ref] = this[ref].bind(this);
|
43
|
+
} else {
|
44
|
+
this[ref] = React.createRef();
|
45
|
+
}
|
46
|
+
}
|
47
|
+
this.listener = this.listener.bind(this);
|
48
|
+
this.unsubscriber = Opal.Isomorfeus.store.native.subscribe(this.listener);
|
49
|
+
}
|
50
|
+
data_access() {
|
51
|
+
return this.state.isomorfeus_store
|
52
|
+
}
|
53
|
+
static get displayName() {
|
54
|
+
return #{component_name};
|
55
|
+
}
|
56
|
+
listener() {
|
57
|
+
var next_state = Object.assign({}, this.state, { isomorfeus_store: Opal.Isomorfeus.store.native.getState() });
|
58
|
+
if (this.scu_for_used_store_paths(this, this.state.isomorfeus_store, next_state.isomorfeus_store)) { this.setState(next_state); }
|
59
|
+
}
|
60
|
+
register_used_store_path(path) {
|
61
|
+
this.used_store_paths.push(path);
|
62
|
+
}
|
63
|
+
componentWillUnmount() {
|
64
|
+
if (typeof this.unsubscriber === "function") { this.unsubscriber(); };
|
65
|
+
}
|
66
|
+
shouldComponentUpdate(next_props, next_state) {
|
67
|
+
var next_props_keys = Object.keys(next_props);
|
68
|
+
var this_props_keys = Object.keys(this.props);
|
69
|
+
if (next_props_keys.length !== this_props_keys.length) { return true; }
|
70
|
+
|
71
|
+
var next_state_keys = Object.keys(next_state);
|
72
|
+
var this_state_keys = Object.keys(this.state);
|
73
|
+
if (next_state_keys.length !== this_state_keys.length) { return true; }
|
74
|
+
|
75
|
+
for (var property in next_props) {
|
76
|
+
if (next_props.hasOwnProperty(property)) {
|
77
|
+
if (!this.props.hasOwnProperty(property)) { return true; };
|
78
|
+
if (property == "children") { if (next_props.children !== this.props.children) { return true; }}
|
79
|
+
else if (typeof next_props[property] !== "undefined" && typeof next_props[property]['$!='] !== "undefined" && typeof this.props[property] !== "undefined" && typeof this.props[property]['$!='] !== "undefined") {
|
80
|
+
if (#{ !! (`next_props[property]` != `this.props[property]`) }) { return true; };
|
81
|
+
} else if (next_props[property] !== this.props[property]) { return true; };
|
82
|
+
}
|
83
|
+
}
|
84
|
+
for (var property in next_state) {
|
85
|
+
if (property === "isomorfeus_store") {
|
86
|
+
var res = this.scu_for_used_store_paths(this, this.state.isomorfeus_store, next_state.isomorfeus_store);
|
87
|
+
if (res) { return true; }
|
88
|
+
}
|
89
|
+
if (next_state.hasOwnProperty(property)) {
|
90
|
+
if (!this.state.hasOwnProperty(property)) { return true; };
|
91
|
+
if (typeof next_state[property]['$!='] !== "undefined" && typeof this.state[property]['$!='] !== "undefined") {
|
92
|
+
if (#{ !! (`next_state[property]` != `this.state[property]`) }) { return true };
|
93
|
+
} else if (next_state[property] !== this.state[property]) { return true };
|
94
|
+
}
|
95
|
+
}
|
96
|
+
return false;
|
97
|
+
}
|
98
|
+
scu_for_used_store_paths(self, current_state, next_state) {
|
99
|
+
var unique_used_store_paths = self.used_store_paths.filter(function(elem, pos) {
|
100
|
+
return (self.used_store_paths.indexOf(elem) === pos);
|
101
|
+
});
|
102
|
+
var used_length = unique_used_store_paths.length;
|
103
|
+
var store_path;
|
104
|
+
var current_value;
|
105
|
+
var next_value;
|
106
|
+
for (var i = 0; i < used_length; i++) {
|
107
|
+
store_path = unique_used_store_paths[i];
|
108
|
+
current_value = store_path.reduce(function(prev, curr) { return prev && prev[curr]; }, current_state);
|
109
|
+
next_value = store_path.reduce(function(prev, curr) { return prev && prev[curr]; }, next_state);
|
110
|
+
if (current_value !== next_value) { return true; };
|
111
|
+
}
|
112
|
+
return false;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module React
|
2
|
+
module ReduxComponent
|
3
|
+
module Reducers
|
4
|
+
def self.add_component_reducers_to_store
|
5
|
+
component_reducer = Redux.create_reducer do |prev_state, action|
|
6
|
+
case action[:type]
|
7
|
+
when 'COMPONENT_STATE'
|
8
|
+
new_state = {}.merge!(prev_state) # make a copy of state
|
9
|
+
new_state[action[:object_id]] = {} unless new_state.has_key?(action[:object_id])
|
10
|
+
new_state[action[:object_id]].merge!(action[:name] => action[:value])
|
11
|
+
new_state
|
12
|
+
when 'INIT'
|
13
|
+
new_state = {}
|
14
|
+
new_state
|
15
|
+
else
|
16
|
+
prev_state
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
component_class_reducer = Redux.create_reducer do |prev_state, action|
|
21
|
+
case action[:type]
|
22
|
+
when 'COMPONENT_CLASS_STATE'
|
23
|
+
new_state = {}.merge!(prev_state) # make a copy of state
|
24
|
+
new_state[action[:class]] = {} unless new_state.has_key?(action[:class])
|
25
|
+
new_state[action[:class]].merge!(action[:name] => action[:value])
|
26
|
+
new_state
|
27
|
+
when 'INIT'
|
28
|
+
new_state = {}
|
29
|
+
new_state
|
30
|
+
else
|
31
|
+
prev_state
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
app_reducer = Redux.create_reducer do |prev_state, action|
|
36
|
+
case action[:type]
|
37
|
+
when 'APPLICATION_STATE'
|
38
|
+
new_state = {}.merge!(prev_state) # make a copy of state
|
39
|
+
new_state.merge!(action[:name] => action[:value])
|
40
|
+
new_state
|
41
|
+
when 'INIT'
|
42
|
+
new_state = {}
|
43
|
+
new_state
|
44
|
+
else
|
45
|
+
prev_state
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Redux::Store.add_reducers(component_state: component_reducer, component_class_state: component_class_reducer, application_state: app_reducer)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/react/ref.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module React
|
2
|
+
class Ref
|
3
|
+
include ::Native::Wrapper
|
4
|
+
|
5
|
+
def initialize(native_ref)
|
6
|
+
@native = native_ref
|
7
|
+
end
|
8
|
+
|
9
|
+
def current
|
10
|
+
%x{
|
11
|
+
if (typeof #@native.current.__ruby_instance != undefined) {
|
12
|
+
return #@native.current.__ruby_instance;
|
13
|
+
} else {
|
14
|
+
#@native.current;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module React
|
2
|
+
class SyntheticEvent
|
3
|
+
include Native::Wrapper
|
4
|
+
# helpers
|
5
|
+
def self.native_accessors(*js_names)
|
6
|
+
js_names.each do |js_name|
|
7
|
+
ruby_name = js_name.underscore
|
8
|
+
define_method(ruby_name) do
|
9
|
+
@native.JS[js_name]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.native_boolean_accessors(*js_names)
|
15
|
+
js_names.each do |js_name|
|
16
|
+
ruby_name = js_name.underscore + '?'
|
17
|
+
define_method(ruby_name) do
|
18
|
+
@native.JS[js_name]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
alias_native :get_modifier_state, :getModifierState
|
24
|
+
alias_native :is_default_prevented?, :isDefaultPrevented
|
25
|
+
alias_native :is_propagation_stopped?, :isPropagationStopped
|
26
|
+
alias_native :persist, :persist
|
27
|
+
alias_native :prevent_default, :preventDefault
|
28
|
+
alias_native :stop_propagation, :stopPropagation
|
29
|
+
|
30
|
+
native_accessors :animationName, :button, :buttons, :changedTouches, :charCode, :clientX, :clientY, :clipboardData, :data, :deltaMode, :deltaX,
|
31
|
+
:deltaY, :deltaZ, :detail, :elapsedTime, :eventPhase, :height, :key, :keyCode, :locale, :location, :pageX, :pageY, :pointerId,
|
32
|
+
:pointerType, :pressure, :propertyName, :pseudoElement, :screenX, :screenY, :tangentialPressure, :targetTouches, :tiltX, :tiltY,
|
33
|
+
:timestamp, :touches, :twist, :type, :view, :which, :width
|
34
|
+
|
35
|
+
native_boolean_accessors :altKey, :bubbles, :cancelable, :ctrlKey, :defaultPrevented, :isPrimary, :isTrusted, :metaKey, :repeat, :shiftKey
|
36
|
+
|
37
|
+
def current_target
|
38
|
+
Browser::Event::Target.convert(@native.JS[:currentTarget])
|
39
|
+
end
|
40
|
+
|
41
|
+
def native_event
|
42
|
+
Browser::Event.new(@native.JS[:nativeEvent])
|
43
|
+
end
|
44
|
+
|
45
|
+
def related_target
|
46
|
+
Browser::Event::Target.convert(@native.JS[:relatedTarget])
|
47
|
+
end
|
48
|
+
|
49
|
+
def target
|
50
|
+
Browser::Event::Target.convert(@native.JS[:target])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/react_dom.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module ReactDOM
|
2
|
+
def create_portal
|
3
|
+
|
4
|
+
end
|
5
|
+
|
6
|
+
def find_dom_node
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
def hydrate
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.render(native_element, container, &block)
|
15
|
+
`Opal.React.render_buffer.push([]);`
|
16
|
+
|
17
|
+
result = if block_given?
|
18
|
+
`ReactDOM.render(native_element, container, function() { block.$call() })`
|
19
|
+
else
|
20
|
+
`ReactDOM.render(native_element, container)`
|
21
|
+
end
|
22
|
+
|
23
|
+
`Opal.React.render_buffer.pop([])`
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
def unmount_component_at_node
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: isomorfeus-react
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 16.5.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jan Biedermann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: opal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.11.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.12.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.11.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.12.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: opal-activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.3.1
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.3.1
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: opal-browser
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.2.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.2.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: isomorfeus-redux
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 4.0.0
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 4.0.0
|
75
|
+
description: Write React Components in Ruby.
|
76
|
+
email:
|
77
|
+
- jan@kursator.com
|
78
|
+
executables: []
|
79
|
+
extensions: []
|
80
|
+
extra_rdoc_files: []
|
81
|
+
files:
|
82
|
+
- Gemfile
|
83
|
+
- README.md
|
84
|
+
- isomorfeus-react.gemspec
|
85
|
+
- lib/isomorfeus-react.rb
|
86
|
+
- lib/isomorfeus/config.rb
|
87
|
+
- lib/isomorfeus/top_level.rb
|
88
|
+
- lib/isomorfeus/view_helpers.rb
|
89
|
+
- lib/lucid_app/api.rb
|
90
|
+
- lib/lucid_app/base.rb
|
91
|
+
- lib/lucid_app/context.rb
|
92
|
+
- lib/lucid_app/mixin.rb
|
93
|
+
- lib/lucid_app/native_component_constructor.rb
|
94
|
+
- lib/lucid_component/api.rb
|
95
|
+
- lib/lucid_component/base.rb
|
96
|
+
- lib/lucid_component/event_handler.rb
|
97
|
+
- lib/lucid_component/initializer.rb
|
98
|
+
- lib/lucid_component/mixin.rb
|
99
|
+
- lib/lucid_component/native_component_constructor.rb
|
100
|
+
- lib/react.rb
|
101
|
+
- lib/react/active_support_support.rb
|
102
|
+
- lib/react/component/api.rb
|
103
|
+
- lib/react/component/base.rb
|
104
|
+
- lib/react/component/elements.rb
|
105
|
+
- lib/react/component/event_handler.rb
|
106
|
+
- lib/react/component/features.rb
|
107
|
+
- lib/react/component/history.rb
|
108
|
+
- lib/react/component/initializer.rb
|
109
|
+
- lib/react/component/location.rb
|
110
|
+
- lib/react/component/match.rb
|
111
|
+
- lib/react/component/mixin.rb
|
112
|
+
- lib/react/component/native_component_constructor.rb
|
113
|
+
- lib/react/component/native_component_validate_prop.rb
|
114
|
+
- lib/react/component/props.rb
|
115
|
+
- lib/react/component/resolution.rb
|
116
|
+
- lib/react/component/should_component_update.rb
|
117
|
+
- lib/react/component/state.rb
|
118
|
+
- lib/react/component/unsafe_api.rb
|
119
|
+
- lib/react/context_wrapper.rb
|
120
|
+
- lib/react/function_component/creator.rb
|
121
|
+
- lib/react/function_component/resolution.rb
|
122
|
+
- lib/react/function_component/runner.rb
|
123
|
+
- lib/react/native_constant_wrapper.rb
|
124
|
+
- lib/react/pure_component/base.rb
|
125
|
+
- lib/react/pure_component/mixin.rb
|
126
|
+
- lib/react/redux_component/api.rb
|
127
|
+
- lib/react/redux_component/app_store_defaults.rb
|
128
|
+
- lib/react/redux_component/app_store_proxy.rb
|
129
|
+
- lib/react/redux_component/base.rb
|
130
|
+
- lib/react/redux_component/class_store_proxy.rb
|
131
|
+
- lib/react/redux_component/component_class_store_defaults.rb
|
132
|
+
- lib/react/redux_component/component_instance_store_defaults.rb
|
133
|
+
- lib/react/redux_component/initializer.rb
|
134
|
+
- lib/react/redux_component/instance_store_proxy.rb
|
135
|
+
- lib/react/redux_component/mixin.rb
|
136
|
+
- lib/react/redux_component/native_component_constructor.rb
|
137
|
+
- lib/react/redux_component/reducers.rb
|
138
|
+
- lib/react/ref.rb
|
139
|
+
- lib/react/synthetic_event.rb
|
140
|
+
- lib/react/version.rb
|
141
|
+
- lib/react_dom.rb
|
142
|
+
- lib/react_dom_server.rb
|
143
|
+
homepage: http://isomorfeus.com
|
144
|
+
licenses:
|
145
|
+
- MIT
|
146
|
+
metadata: {}
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
requirements: []
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 2.7.6
|
164
|
+
signing_key:
|
165
|
+
specification_version: 4
|
166
|
+
summary: React for Opal Ruby.
|
167
|
+
test_files: []
|