isomorfeus-redux 4.1.14 → 4.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 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