isomorfeus-redux 4.1.14 → 4.1.18

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: 025b8912245201aa017694533af72e872c0fab88ddfb92b5e635063b54c755b4
4
- data.tar.gz: 27c35a6d959b591a4466761d60a86bc5bb39b8ad1fbeeba8fcb2b8ba69a91459
3
+ metadata.gz: 90b649600d874c4ee1a1aa211440783505cd9f49c32fcc86d3f19d58ad3f91ff
4
+ data.tar.gz: 2691fabf451cf7a70d199f22733f7a146823414ce42805b44cc3109e23103b05
5
5
  SHA512:
6
- metadata.gz: f57f256c46df5c13c3ed94cbf4cb5649186130eeb9b9fa9fa021adfadc730e9a737a90a0dab41857be3f78db7060b30c874c7c8f64385d1d04e179d158aec18e
7
- data.tar.gz: 4cb517c3356c24f4b76186a14d189e4f169dfeb6f804fc70c40324e206abeaf920eecf96b7591ace34d5d4abfa52e2b6701ea897ae934e45a8750cafa6ea65b6
6
+ metadata.gz: ff5d875c014668e3422480edfa3064547ecbc5f6401d77d6062f1895449cddd5da39f5d4293ec8f30c071f22b928f2d85b6fe3ebe8a64ffe812b4257de6c1085
7
+ data.tar.gz: 7e79f8f3e07b35b626f3b5f370dc8c6440a31dcd220989b34d5ebdec92a709d33f4b0bfb82098d051a20b268e758233b03c8375936a819a850910ce7ad10cae4
@@ -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,192 +1,199 @@
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 collect_and_defer_dispatch(action)
138
- if !Isomorfeus.on_ssr?
139
- type = action.delete(:type)
140
- @deferred_actions[type] = [] unless @deferred_actions.key?(type)
141
- @deferred_actions[type].push(action)
142
- @last_dispatch_time = `Date.now()`
143
- # `console.log(#@last_dispatch_time)`
144
- deferred_dispatcher(`Date.now()`) unless @deferred_dispatcher
145
- else
146
- dispatch(action)
147
- end
148
- nil
149
- end
150
-
151
- def replace_reducer(next_reducer)
152
- `this.native.replaceReducer(next_reducer)`
153
- end
154
-
155
- # returns function needed to unsubscribe the listener
156
- def subscribe(&listener)
157
- `this.native.subscribe(function() { return listener.$call(); })`
158
- end
159
-
160
- private
161
-
162
- def deferred_dispatcher(first)
163
- @deferred_dispatcher = true
164
- %x{
165
- setTimeout(function() {
166
- if (#{wait_longer?(first)}) { #{deferred_dispatcher(first)} }
167
- else { #{dispatch_deferred_dispatches} }
168
- }, 10)
169
- }
170
- end
171
-
172
- def dispatch_deferred_dispatches
173
- # `console.log(Date.now())`
174
- @deferred_dispatcher = false
175
- actions = @deferred_actions
176
- @deferred_actions = {}
177
- actions.each do |type, data|
178
- dispatch(type: type, collected: data)
179
- end
180
- end
181
-
182
- def wait_longer?(first)
183
- t = `Date.now()`
184
- time_since_first = `t - first`
185
- # `console.log('delta', time_since_first)`
186
- return true if `typeof Opal.Preact !== 'undefined' && typeof Opal.Preact.render_buffer !== 'undefined' && Opal.Preact.render_buffer.length > 0 && time_since_first < 1000`
187
- return false if time_since_first > 100 # ms
188
- return false if (`t - #@last_dispatch_time`) > 9 # ms
189
- return true
190
- end
191
- end
192
- 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.14'
3
- end
1
+ module Redux
2
+ VERSION = '4.1.18'
3
+ 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.14
4
+ version: 4.1.18
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-12 00:00:00.000000000 Z
11
+ date: 2022-02-19 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.9
33
+ version: 0.14.12
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.9
40
+ version: 0.14.12
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.9
47
+ version: 0.5.0
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.9
54
+ version: 0.5.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement