isomorfeus-redux 4.1.13 → 4.1.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d912db358118c0d9f353c8acf7f3b529c982e9d1f798d8e0331da47879cc970
4
- data.tar.gz: 9683d346b2f91ac9ce03d9c9e1e965e018f454fce79fd072cc4f3e58afb7a62f
3
+ metadata.gz: 220dc51a83d5f18cace172fb7bc59be39088fd6c737f7f7e8654aa12badac83a
4
+ data.tar.gz: bca4b194909499cd142e5ea25f3b839cb93897da0951c9295543bd36c1661ffe
5
5
  SHA512:
6
- metadata.gz: b67e553f57b28e9363e5627ed4cdb27b2f4ff540cd918363ace1a19a27de960403e98cef0fa652ea34c9447efe61a0396bdb317f6eabfd949e88a7cc5c48d65a
7
- data.tar.gz: 6129c5401a995ec02c5eabee7be2b4fdd0a8188bdcdaa79fa93fcbc7879dae42f6b018ad6cde58c97e27469b886c58a27df9188950a9e70d30ee6e67010bf6d6
6
+ metadata.gz: 0ca0f077dbca3a6885a2891310a51ac4af9a57cab926551dac0a559ba45e504100da1cd016f4164bbd5f2cf7c69c3a4c190e51ae775a52b60196fa83dac8c06e
7
+ data.tar.gz: 01f0009e2b8a6496c88c89b19267faeabbf2faa068118ba8d29ae1cae046299321131e6c418664aa2177e53dc9665ff8818251185f3b0c80f6774eefc01ffa9d
@@ -1,77 +1,54 @@
1
- module Redux
2
- module Reducers
3
- def self.add_application_reducers_to_store
4
- unless @_application_reducers_added
5
- @_application_reducers_added = true
6
- app_reducer = Redux.create_reducer do |prev_state, action|
7
- case action[:type]
8
- when 'APPLICATION_STATE'
9
- if action.key?(:set_state)
10
- action[:set_state]
11
- else
12
- new_state = {}.merge!(prev_state) # make a copy of state
13
- if action.key?(:collected)
14
- action[:collected].each do |act|
15
- new_state.merge!(act[:name] => act[:value])
16
- end
17
- else
18
- new_state.merge!(action[:name] => action[:value])
19
- end
20
- new_state
21
- end
22
- else
23
- prev_state
24
- end
25
- end
26
-
27
- instance_reducer = Redux.create_reducer do |prev_state, action|
28
- case action[:type]
29
- when 'INSTANCE_STATE'
30
- if action.key?(:set_state)
31
- action[:set_state]
32
- else
33
- new_state = {}.merge!(prev_state) # make a copy of state
34
- if action.key?(:collected)
35
- action[:collected].each do |act|
36
- new_state[act[:object_id]] = {} unless new_state.key?(act[:object_id])
37
- new_state[act[:object_id]].merge!(act[:name] => act[:value])
38
- end
39
- else
40
- new_state[action[:object_id]] = {} unless new_state.key?(action[:object_id])
41
- new_state[action[:object_id]].merge!(action[:name] => action[:value])
42
- end
43
- new_state
44
- end
45
- else
46
- prev_state
47
- end
48
- end
49
-
50
- class_reducer = Redux.create_reducer do |prev_state, action|
51
- case action[:type]
52
- when 'CLASS_STATE'
53
- if action.key?(:set_state)
54
- action[:set_state]
55
- else
56
- new_state = {}.merge!(prev_state) # make a copy of state
57
- if action.key?(:collected)
58
- action[:collected].each do |act|
59
- new_state[act[:class]] = {} unless new_state.key?(act[:class])
60
- new_state[act[:class]].merge!(act[:name] => act[:value])
61
- end
62
- else
63
- new_state[action[:class]] = {} unless new_state.key?(action[:class])
64
- new_state[action[:class]].merge!(action[:name] => action[:value])
65
- end
66
- new_state
67
- end
68
- else
69
- prev_state
70
- end
71
- end
72
- Redux::Store.preloaded_state_merge!(application_state: {}, instance_state: {}, class_state: {})
73
- Redux::Store.add_reducers(application_state: app_reducer, instance_state: instance_reducer, class_state: class_reducer)
74
- end
75
- end
76
- end
77
- end
1
+ module Redux
2
+ module Reducers
3
+ def self.add_application_reducers_to_store
4
+ unless @_application_reducers_added
5
+ @_application_reducers_added = true
6
+ app_reducer = Redux.create_reducer do |prev_state, action|
7
+ case action[:type]
8
+ when 'APPLICATION_STATE'
9
+ if action.key?(:set_state)
10
+ action[:set_state]
11
+ else
12
+ new_state = {}.merge!(prev_state) # make a copy of state
13
+ if action.key?(:collected)
14
+ action[:collected].each do |act|
15
+ new_state.merge!(act[:name] => act[:value])
16
+ end
17
+ else
18
+ new_state.merge!(action[:name] => action[:value])
19
+ end
20
+ new_state
21
+ end
22
+ else
23
+ prev_state.nil? ? {} : prev_state
24
+ end
25
+ end
26
+
27
+ class_reducer = Redux.create_reducer do |prev_state, action|
28
+ case action[:type]
29
+ when 'CLASS_STATE'
30
+ if action.key?(:set_state)
31
+ action[:set_state]
32
+ else
33
+ new_state = {}.merge!(prev_state) # make a copy of state
34
+ if action.key?(:collected)
35
+ action[:collected].each do |act|
36
+ new_state[act[:class]] = {} unless new_state.key?(act[:class])
37
+ new_state[act[:class]].merge!(act[:name] => act[:value])
38
+ end
39
+ else
40
+ new_state[action[:class]] = {} unless new_state.key?(action[:class])
41
+ new_state[action[:class]].merge!(action[:name] => action[:value])
42
+ end
43
+ new_state
44
+ end
45
+ else
46
+ prev_state.nil? ? {} : prev_state
47
+ end
48
+ end
49
+ Redux::Store.preloaded_state_merge!(application_state: {}, class_state: {})
50
+ Redux::Store.add_reducers(application_state: app_reducer, class_state: class_reducer)
51
+ end
52
+ end
53
+ end
54
+ end
data/lib/redux/store.rb CHANGED
@@ -1,183 +1,199 @@
1
- module Redux
2
- class Store
3
- include Native::Wrapper
4
-
5
- def self.add_middleware(middleware)
6
- if Isomorfeus.store
7
- `console.warning("Adding middleware after Store initialization may have side effects! Saving state and initializing new store with restored state!")`
8
- middlewares << middleware
9
- preloaded_state = Isomorfeus.store.get_state
10
- init!
11
- else
12
- middlewares << middleware
13
- end
14
- end
15
-
16
- def self.add_reducer(reducer)
17
- if Isomorfeus.store
18
- # if the store has been initalized already, add the reducer to the instance
19
- Isomorfeus.store.add_reducer(reducer)
20
- else
21
- # otherwise just add it to the reducers, so that they will be used when initializing the store
22
- preloaded_state[reducer.keys.first] = {} unless preloaded_state.key?(reducer.keys.first)
23
- reducers.merge!(reducer)
24
- end
25
- end
26
-
27
- def self.add_reducers(new_reducers)
28
- if Isomorfeus.store
29
- # if the store has been initalized already, add the reducer to the instance
30
- Isomorfeus.store.add_reducers(new_reducers)
31
- else
32
- # otherwise just add it to the reducers, so that they will be used when initializing the store
33
- new_reducers.each do |key, value|
34
- add_reducer(key => value)
35
- end
36
- end
37
- end
38
-
39
- # called from Isomorfeus.init
40
- def self.init!
41
- next_reducer = Redux.combine_reducers(@reducers)
42
- if middlewares.any?
43
- enhancer = Redux.apply_middleware(middlewares)
44
- Redux::Store.new(next_reducer, preloaded_state, enhancer)
45
- else
46
- Redux::Store.new(next_reducer, preloaded_state)
47
- end
48
- end
49
-
50
- def self.middlewares
51
- @middlewares ||= []
52
- end
53
-
54
- def self.preloaded_state_merge!(ruby_hash)
55
- preloaded_state.merge!(ruby_hash)
56
- end
57
-
58
- def self.preloaded_state
59
- @preloaded_state ||= {}
60
- end
61
-
62
- def self.preloaded_state=(ruby_hash)
63
- @preloaded_state = ruby_hash
64
- end
65
-
66
- def self.reducers
67
- @reducers ||= {}
68
- end
69
-
70
- def initialize(reducer, preloaded_state = `null`, enhancer = `null`)
71
- @deferred_actions = {}
72
- @deferred_dispatcher = nil
73
- @last_dispatch_time = Time.now
74
- %x{
75
- var compose = (typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || Opal.global.Redux.compose;
76
- var devext_enhance;
77
- if (typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION__) { devext_enhance = window.__REDUX_DEVTOOLS_EXTENSION__(); }
78
- var real_preloaded_state;
79
- if (typeof preloaded_state.$class === "function" && preloaded_state.$class() == "Hash") {
80
- if (preloaded_state.$size() == 0) {
81
- real_preloaded_state = null;
82
- } else {
83
- real_preloaded_state = preloaded_state.$to_n();
84
- }
85
- } else if (preloaded_state == nil) {
86
- real_preloaded_state = null;
87
- } else {
88
- real_preloaded_state = preloaded_state;
89
- }
90
- if (enhancer && real_preloaded_state) {
91
- this.native = Opal.global.Redux.createStore(reducer, real_preloaded_state, compose(enhancer));
92
- } else if (real_preloaded_state) {
93
- this.native = Opal.global.Redux.createStore(reducer, real_preloaded_state, devext_enhance);
94
- } else if (enhancer) {
95
- this.native = Opal.global.Redux.createStore(reducer, compose(enhancer));
96
- } else {
97
- this.native = Opal.global.Redux.createStore(reducer, devext_enhance);
98
- }
99
- }
100
- end
101
-
102
- def add_reducer(reducer)
103
- self.class.reducers.merge!(reducer)
104
- next_reducer = Redux.combine_reducers(self.class.reducers)
105
- replace_reducer(next_reducer)
106
- end
107
-
108
- def add_reducers(new_reducers)
109
- self.class.reducers.merge!(new_reducers)
110
- next_reducer = Redux.combine_reducers(self.class.reducers)
111
- replace_reducer(next_reducer)
112
- end
113
-
114
- def dispatch(action)
115
- %x{
116
- if (typeof action.$class === "function" && action.$class() == "Hash") {
117
- this.native.dispatch(action.$to_n());
118
- } else {
119
- this.native.dispatch(action);
120
- }
121
- }
122
- end
123
-
124
- def get_state
125
- Hash.new(`this.native.getState()`)
126
- end
127
-
128
- def collect_and_defer_dispatch(action)
129
- if !Isomorfeus.on_ssr?
130
- type = action.delete(:type)
131
- @deferred_actions[type] = [] unless @deferred_actions.key?(type)
132
- @deferred_actions[type].push(action)
133
- @last_dispatch_time = `Date.now()`
134
- # `console.log(#@last_dispatch_time)`
135
- deferred_dispatcher(`Date.now()`) unless @deferred_dispatcher
136
- else
137
- dispatch(action)
138
- end
139
- nil
140
- end
141
-
142
- def replace_reducer(next_reducer)
143
- `this.native.replaceReducer(next_reducer)`
144
- end
145
-
146
- # returns function needed to unsubscribe the listener
147
- def subscribe(&listener)
148
- `this.native.subscribe(function() { return listener.$call(); })`
149
- end
150
-
151
- private
152
-
153
- def deferred_dispatcher(first)
154
- @deferred_dispatcher = true
155
- %x{
156
- setTimeout(function() {
157
- if (#{wait_longer?(first)}) { #{deferred_dispatcher(first)} }
158
- else { #{dispatch_deferred_dispatches} }
159
- }, 10)
160
- }
161
- end
162
-
163
- def dispatch_deferred_dispatches
164
- # `console.log(Date.now())`
165
- @deferred_dispatcher = false
166
- actions = @deferred_actions
167
- @deferred_actions = {}
168
- actions.each do |type, data|
169
- dispatch(type: type, collected: data)
170
- end
171
- end
172
-
173
- def wait_longer?(first)
174
- t = `Date.now()`
175
- time_since_first = `t - first`
176
- # `console.log('delta', time_since_first)`
177
- return true if `typeof Opal.Preact !== 'undefined' && typeof Opal.Preact.render_buffer !== 'undefined' && Opal.Preact.render_buffer.length > 0 && time_since_first < 1000`
178
- return false if time_since_first > 100 # ms
179
- return false if (`t - #@last_dispatch_time`) > 9 # ms
180
- return true
181
- end
182
- end
183
- end
1
+ module Redux
2
+ class Store
3
+ include Native::Wrapper
4
+
5
+ class << self
6
+ def add_middleware(middleware)
7
+ if Isomorfeus.store
8
+ `console.warning("Adding middleware after Store initialization may have side effects! Saving state and initializing new store with restored state!")`
9
+ middlewares << middleware
10
+ preloaded_state = Isomorfeus.store.get_state
11
+ init!
12
+ else
13
+ middlewares << middleware
14
+ end
15
+ end
16
+
17
+ def add_reducer(reducer)
18
+ if Isomorfeus.store
19
+ # if the store has been initalized already, add the reducer to the instance
20
+ Isomorfeus.store.add_reducer(reducer)
21
+ else
22
+ # otherwise just add it to the reducers, so that they will be used when initializing the store
23
+ preloaded_state[reducer.keys.first] = {} unless preloaded_state.key?(reducer.keys.first)
24
+ reducers.merge!(reducer)
25
+ end
26
+ end
27
+
28
+ def add_reducers(new_reducers)
29
+ if Isomorfeus.store
30
+ # if the store has been initalized already, add the reducer to the instance
31
+ Isomorfeus.store.add_reducers(new_reducers)
32
+ else
33
+ # otherwise just add it to the reducers, so that they will be used when initializing the store
34
+ new_reducers.each do |key, value|
35
+ add_reducer(key => value)
36
+ end
37
+ end
38
+ end
39
+
40
+ # called from Isomorfeus.init
41
+ def init!
42
+ next_reducer = Redux.combine_reducers(@reducers)
43
+ if middlewares.any?
44
+ enhancer = Redux.apply_middleware(middlewares)
45
+ Redux::Store.new(next_reducer, preloaded_state, enhancer)
46
+ else
47
+ Redux::Store.new(next_reducer, preloaded_state)
48
+ end
49
+ end
50
+
51
+ def middlewares
52
+ @middlewares ||= []
53
+ end
54
+
55
+ def preloaded_state_merge!(ruby_hash)
56
+ preloaded_state.merge!(ruby_hash)
57
+ end
58
+
59
+ def preloaded_state
60
+ @preloaded_state ||= {}
61
+ end
62
+
63
+ def preloaded_state=(ruby_hash)
64
+ @preloaded_state = ruby_hash
65
+ end
66
+
67
+ def reducers
68
+ @reducers ||= {}
69
+ end
70
+ end
71
+
72
+ def initialize(reducer, preloaded_state = nil, enhancer = nil)
73
+ @deferred_actions = {}
74
+ @deferred_dispatcher = nil
75
+ @last_dispatch_time = Time.now
76
+ %x{
77
+ var ogre = Opal.global.Redux;
78
+ var compose = (typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || ogre.compose;
79
+ if (enhancer == nil) { enhancer = null; }
80
+ if (typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION__) {
81
+ var devext_enhance = window.__REDUX_DEVTOOLS_EXTENSION__();
82
+ if (enhancer) { enhancer = compose([enhancer, devext_enhance]); }
83
+ else { enhancer = devext_enhance; }
84
+ }
85
+ if (preloaded_state == nil) {
86
+ preloaded_state = null;
87
+ } else if (typeof preloaded_state.$class === "function" && preloaded_state.$class() == "Hash") {
88
+ if (preloaded_state.$size() == 0) {
89
+ preloaded_state = null;
90
+ } else {
91
+ preloaded_state = preloaded_state.$to_n();
92
+ }
93
+ }
94
+ if (enhancer && preloaded_state) {
95
+ this.native = ogre.createStore(reducer, preloaded_state, enhancer);
96
+ } else if (preloaded_state) {
97
+ this.native = ogre.createStore(reducer, preloaded_state);
98
+ } else if (enhancer) {
99
+ this.native = ogre.createStore(reducer, enhancer);
100
+ } else {
101
+ this.native = ogre.createStore(reducer);
102
+ }
103
+ }
104
+ end
105
+
106
+ def add_reducer(reducer)
107
+ self.class.reducers.merge!(reducer)
108
+ next_reducer = Redux.combine_reducers(self.class.reducers)
109
+ replace_reducer(next_reducer)
110
+ end
111
+
112
+ def add_reducers(new_reducers)
113
+ self.class.reducers.merge!(new_reducers)
114
+ next_reducer = Redux.combine_reducers(self.class.reducers)
115
+ replace_reducer(next_reducer)
116
+ end
117
+
118
+ def dispatch(action)
119
+ %x{
120
+ if (typeof action.$class === "function" && action.$class() == "Hash") {
121
+ action = action.$to_n();
122
+ }
123
+ this.native.dispatch(action);
124
+ }
125
+ end
126
+
127
+ def get_state
128
+ %x{
129
+ let res = this.native.getState();
130
+ if (typeof(res) === 'object' && !Array.isArray(res) && res !== null) {
131
+ return Opal.Hash.$new(res);
132
+ }
133
+ return res;
134
+ }
135
+ end
136
+
137
+ def recently_dispatched?
138
+ res = @dispatched
139
+ @dispatched = false
140
+ res
141
+ end
142
+
143
+ def collect_and_defer_dispatch(action)
144
+ if !Isomorfeus.on_ssr?
145
+ type = action.delete(:type)
146
+ @deferred_actions[type] = [] unless @deferred_actions.key?(type)
147
+ @deferred_actions[type].push(action)
148
+ @last_dispatch_time = `Date.now()`
149
+ # `console.log(#@last_dispatch_time)`
150
+ deferred_dispatcher(`Date.now()`) unless @deferred_dispatcher
151
+ else
152
+ @dispatched = true
153
+ dispatch(action)
154
+ end
155
+ nil
156
+ end
157
+
158
+ def replace_reducer(next_reducer)
159
+ `this.native.replaceReducer(next_reducer)`
160
+ end
161
+
162
+ # returns function needed to unsubscribe the listener
163
+ def subscribe(&listener)
164
+ `this.native.subscribe(function() { return listener.$call(); })`
165
+ end
166
+
167
+ private
168
+
169
+ def deferred_dispatcher(first)
170
+ @deferred_dispatcher = true
171
+ %x{
172
+ setTimeout(function() {
173
+ if (#{wait_longer?(first)}) { #{deferred_dispatcher(first)} }
174
+ else { #{dispatch_deferred_dispatches} }
175
+ }, 10)
176
+ }
177
+ end
178
+
179
+ def dispatch_deferred_dispatches
180
+ # `console.log(Date.now())`
181
+ @deferred_dispatcher = false
182
+ actions = @deferred_actions
183
+ @deferred_actions = {}
184
+ actions.each do |type, data|
185
+ dispatch(type: type, collected: data)
186
+ end
187
+ end
188
+
189
+ def wait_longer?(first)
190
+ t = `Date.now()`
191
+ time_since_first = `t - first`
192
+ # `console.log('delta', time_since_first)`
193
+ return true if `typeof Opal.Preact !== 'undefined' && typeof Opal.Preact.render_buffer !== 'undefined' && Opal.Preact.render_buffer.length > 0 && time_since_first < 1000`
194
+ return false if time_since_first > 100 # ms
195
+ return false if (`t - #@last_dispatch_time`) > 9 # ms
196
+ return true
197
+ end
198
+ end
199
+ end
data/lib/redux/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Redux
2
- VERSION = '4.1.13'
3
- end
1
+ module Redux
2
+ VERSION = '4.1.17'
3
+ end
data/lib/redux.rb CHANGED
@@ -1,112 +1,118 @@
1
1
  module Redux
2
- def self.create_store(reducer, preloaded_state = nil, enhancer = nil)
3
- Redux::Store.new(reducer, preloaded_state, enhancer)
4
- end
2
+ class << self
3
+ def create_store(reducer, preloaded_state = nil, enhancer = nil)
4
+ Redux::Store.new(reducer, preloaded_state, enhancer)
5
+ end
5
6
 
6
- def self.combine_reducers(reducers)
7
- %x{
8
- var real_reducers;
9
- if (typeof reducers.$class === "function") {
10
- real_reducers = reducers.$to_n();
11
- } else {
12
- real_reducers = reducers;
7
+ def combine_reducers(reducers)
8
+ %x{
9
+ if (typeof reducers.$to_n === "function") {
10
+ reducers = reducers.$to_n();
11
+ }
12
+ return Opal.global.Redux.combineReducers(reducers);
13
13
  }
14
- return Opal.global.Redux.combineReducers(real_reducers);
15
- }
16
- end
14
+ end
17
15
 
18
- def self.apply_middleware(*middlewares)
19
- if middlewares.size == 1
20
- `Opal.global.Redux.applyMiddleware.apply(null, middlewares[0])`
21
- else
22
- `Opal.global.Redux.applyMiddleware.apply(null, middlewares)`
16
+ def apply_middleware(*middlewares)
17
+ if middlewares.size == 1
18
+ `Opal.global.Redux.applyMiddleware.apply(null, middlewares[0])`
19
+ else
20
+ `Opal.global.Redux.applyMiddleware.apply(null, middlewares)`
21
+ end
23
22
  end
24
- end
25
23
 
26
- def self.bind_action_creators(*args)
27
- dispatch = args.pop
28
- `Opal.global.Redux.bindActionCreators(args, dispatch)`
29
- end
24
+ def bind_action_creators(*args)
25
+ dispatch = args.pop
26
+ `Opal.global.Redux.bindActionCreators(args, dispatch)`
27
+ end
30
28
 
31
- def self.compose(*functions)
32
- `Opal.global.Redux.compose(functions)`
33
- end
29
+ def compose(*functions)
30
+ `Opal.global.Redux.compose(functions)`
31
+ end
34
32
 
35
- def self.create_reducer(&block)
36
- %x{
37
- return (function(previous_state, action) {
38
- if (!previous_state) { previous_state = {}; }
39
- var previous_state_hash = Opal.Hash.$new(previous_state);
40
- var new_state_hash = block.$call(previous_state_hash, Opal.Hash.$new(action));
41
- if (previous_state_hash === new_state_hash) { return previous_state; }
42
- if (typeof new_state_hash.$class === "function") { return new_state_hash.$to_n(); }
43
- return previous_state;
44
- });
45
- }
46
- end
33
+ def create_reducer(&block)
34
+ %x{
35
+ return function(previous_state, action) {
36
+ let state = null;
37
+ if (previous_state === null || typeof(previous_state) === 'undefined') { state = nil; }
38
+ else if (typeof(previous_state) === 'object' && !Array.isArray(previous_state)) {
39
+ state = Opal.Hash.$new(previous_state);
40
+ } else { state = previous_state; }
41
+ var new_state = block.$call(state, Opal.Hash.$new(action));
42
+ if (typeof(previous_state) === 'undefined' || previous_state === null) {
43
+ if (typeof(new_state.$to_n) === "function") { return new_state.$to_n(); }
44
+ return new_state;
45
+ }
46
+ if (state === new_state) { return previous_state; }
47
+ if (typeof(new_state.$to_n) === "function") { return new_state.$to_n(); }
48
+ return previous_state;
49
+ };
50
+ }
51
+ end
47
52
 
48
- def self.delete_state_path(state, *path)
49
- size = path.size - 1
50
- set_state_path(state, *path[0..-2], nil)
51
- (2...size).each do |i|
52
- val = get_state_path(state, *path[0..-i])
53
- break if val.keys.size > 1
54
- set_state_path(state, *path[0..-i], nil)
53
+ def delete_state_path(state, *path)
54
+ size = path.size - 1
55
+ set_state_path(state, *path[0..-2], nil)
56
+ (2...size).each do |i|
57
+ val = get_state_path(state, *path[0..-i])
58
+ break if val.keys.size > 1
59
+ set_state_path(state, *path[0..-i], nil)
60
+ end
55
61
  end
56
- end
57
62
 
58
- def self.fetch_by_path(*path)
59
- # get active redux component
60
- %x{
61
- var active_component = Opal.Preact.active_redux_component();
62
- var current_state;
63
- var final_data;
64
- var path_last = path.length - 1;
65
- if (path[path_last].constructor === Array) {
66
- path[path_last] = JSON.stringify(path[path_last]);
67
- }
68
- if (active_component) {
69
- // try to get data from component state or props or store
70
- current_state = active_component.data_access()
71
- if (current_state) {
63
+ def fetch_by_path(*path)
64
+ # get active redux component
65
+ %x{
66
+ var active_component = Opal.Preact.active_redux_component();
67
+ var current_state;
68
+ var final_data;
69
+ var path_last = path.length - 1;
70
+ if (path[path_last].constructor === Array) {
71
+ path[path_last] = JSON.stringify(path[path_last]);
72
+ }
73
+ if (active_component) {
74
+ // try to get data from component state or props or store
75
+ current_state = active_component.data_access()
76
+ if (current_state) {
77
+ final_data = path.reduce(function(prev, curr) { return prev && prev[curr]; }, current_state);
78
+ // if final data doesn't exist, 'null' is returned, so nil or false are ok as final_data
79
+ if (final_data !== null && typeof final_data !== "undefined") { return final_data; }
80
+ }
81
+ } else {
82
+ // try to get data from store
83
+ current_state = Opal.Isomorfeus.store.native.getState();
72
84
  final_data = path.reduce(function(prev, curr) { return prev && prev[curr]; }, current_state);
73
85
  // if final data doesn't exist, 'null' is returned, so nil or false are ok as final_data
74
86
  if (final_data !== null && typeof final_data !== "undefined") { return final_data; }
75
87
  }
76
- } else {
77
- // try to get data from store
78
- current_state = Opal.Isomorfeus.store.native.getState();
79
- final_data = path.reduce(function(prev, curr) { return prev && prev[curr]; }, current_state);
80
- // if final data doesn't exist, 'null' is returned, so nil or false are ok as final_data
81
- if (final_data !== null && typeof final_data !== "undefined") { return final_data; }
88
+ return null;
82
89
  }
83
- return null;
84
- }
85
- end
90
+ end
86
91
 
87
- def self.get_state_path(state, *path)
88
- path.inject(state) do |state_el, path_el|
89
- if state_el.key?(path_el)
90
- state_el[path_el]
91
- else
92
- return nil
92
+ def get_state_path(state, *path)
93
+ path.inject(state) do |state_el, path_el|
94
+ if state_el.key?(path_el)
95
+ state_el[path_el]
96
+ else
97
+ return nil
98
+ end
93
99
  end
94
100
  end
95
- end
96
101
 
97
- def self.set_state_path(state, *path, value)
98
- last_el = path.last
99
- path.inject(state) do |state_el, path_el|
100
- if path_el == last_el
101
- state_el[path_el] = value
102
- state_el[path_el]
103
- elsif !state_el.key?(path_el)
104
- state_el[path_el] = {}
105
- state_el[path_el]
106
- else
107
- state_el[path_el]
102
+ def set_state_path(state, *path, value)
103
+ last_el = path.last
104
+ path.inject(state) do |state_el, path_el|
105
+ if path_el == last_el
106
+ state_el[path_el] = value
107
+ state_el[path_el]
108
+ elsif !state_el.key?(path_el)
109
+ state_el[path_el] = {}
110
+ state_el[path_el]
111
+ else
112
+ state_el[path_el]
113
+ end
108
114
  end
115
+ nil
109
116
  end
110
- nil
111
117
  end
112
118
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-redux
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.13
4
+ version: 4.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-08 00:00:00.000000000 Z
11
+ date: 2022-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.14.8
33
+ version: 0.14.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.14.8
40
+ version: 0.14.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: isomorfeus-speednode
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.8
47
+ version: 0.4.9
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.4.8
54
+ version: 0.4.9
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement