isomorfeus-redux 4.0.0 → 4.0.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 +4 -4
- data/lib/redux.rb +78 -4
- data/lib/redux/version.rb +1 -1
- data/{README.md → readme.md} +18 -0
- metadata +4 -13
- data/Gemfile +0 -1
- data/isomorfeus-redux.gemspec +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 316eff3b0ae68f2c49026abe7bb2176e56d584f33e84b4cbc249551d67ddffed
|
4
|
+
data.tar.gz: c85a2a6d5aab70b1103eff25e30b3fb37c3c3df007f70d611fdc99994ad38406
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f6ef180cd71de42683bc99fd017e83f868eb6ecd467b37cf8ee9c191c5b6df87b25c96afc58e50c710b61c0b03917719c38a29efb2302fc671e3abdee60c55b
|
7
|
+
data.tar.gz: 6503807aca972d4d3bc5f6e0a196cdd7bb2932305df9637ef8070228899c8c318c654475390954770f33c1beb2ce712b37adac4a8fe978a396f8320c90950026
|
data/lib/redux.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
module Redux
|
2
|
-
|
3
2
|
def self.create_store(reducer, preloaded_state = nil, enhancer = nil)
|
4
3
|
Redux::Store.new(reducer, preloaded_state, enhancer)
|
5
4
|
end
|
@@ -25,7 +24,7 @@ module Redux
|
|
25
24
|
end
|
26
25
|
|
27
26
|
def self.bind_action_creators(*args)
|
28
|
-
dispatch = args.pop
|
27
|
+
dispatch = args.pop
|
29
28
|
`Redux.bindActionCreators(args, dispatch)`
|
30
29
|
end
|
31
30
|
|
@@ -36,10 +35,85 @@ module Redux
|
|
36
35
|
def self.create_reducer(&block)
|
37
36
|
%x{
|
38
37
|
return (function(previous_state, action) {
|
39
|
-
var
|
40
|
-
|
38
|
+
var previous_state_hash = Opal.Hash.$new(previous_state);
|
39
|
+
var new_state_hash = block.$call(previous_state_hash, Opal.Hash.$new(action));
|
40
|
+
if (previous_state_hash === new_state_hash) { return previous_state; }
|
41
|
+
if (typeof new_state.$class === "function") { return new_state.$to_n(); }
|
41
42
|
return new_state;
|
42
43
|
});
|
43
44
|
}
|
44
45
|
end
|
46
|
+
|
47
|
+
def self.delete_state_path(state, *path)
|
48
|
+
size = path.size - 1
|
49
|
+
set_state_path(state, *path[0..-2], nil)
|
50
|
+
(2...size).each do |i|
|
51
|
+
val = get_state_path(state, *path[0..-i])
|
52
|
+
break if val.keys.size > 1
|
53
|
+
set_state_path(state, *path[0..-i], nil)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.fetch_by_path(*path)
|
58
|
+
# get active redux component
|
59
|
+
# (There should be a better way to get the component)
|
60
|
+
%x{
|
61
|
+
var active_component = Opal.React.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) {
|
72
|
+
final_data = path.reduce(function(prev, curr) { return prev && prev[curr]; }, current_state);
|
73
|
+
// if final data doesn't exist, its set to 'null', so nil or false are ok as final_data
|
74
|
+
if (final_data !== null && typeof final_data !== "undefined") { return final_data; }
|
75
|
+
}
|
76
|
+
} else {
|
77
|
+
// try to get data from store
|
78
|
+
current_state = 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, its set to 'null', so nil or false are ok as final_data
|
81
|
+
if (final_data !== null && typeof final_data !== "undefined") { return final_data; }
|
82
|
+
}
|
83
|
+
return null;
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.get_state_path(state, *path)
|
88
|
+
path.inject(state) do |state_el, path_el|
|
89
|
+
if state_el.has_key?(path_el)
|
90
|
+
state_el[path_el]
|
91
|
+
else
|
92
|
+
return nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.register_used_store_path(*path)
|
98
|
+
%x{
|
99
|
+
var active_component = Opal.React.active_redux_component();
|
100
|
+
if (active_component) { active_component.register_used_store_path(path); }
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.set_state_path(state, *path, value)
|
105
|
+
last_el = path.last
|
106
|
+
path.inject(state) do |state_el, path_el|
|
107
|
+
if path_el == last_el
|
108
|
+
state_el[path_el] = value
|
109
|
+
state_el[path_el]
|
110
|
+
elsif !state_el.has_key?(path_el)
|
111
|
+
state_el[path_el] = {}
|
112
|
+
state_el[path_el]
|
113
|
+
else
|
114
|
+
state_el[path_el]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
nil
|
118
|
+
end
|
45
119
|
end
|
data/lib/redux/version.rb
CHANGED
data/{README.md → readme.md}
RENAMED
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
Redux for Opal Ruby.
|
4
4
|
|
5
|
+
### Community and Support
|
6
|
+
At the [Isomorfeus Framework Project](http://isomorfeus.com)
|
7
|
+
|
5
8
|
## Versioning
|
6
9
|
isomorfeus-redux version follows the Redux version which features and API it implements.
|
7
10
|
Isomorfeus-redux 4.0.x implements features and the API of Redux 4.0 and should be used with Redux4.0
|
@@ -20,6 +23,21 @@ and to your client code add:
|
|
20
23
|
```ruby
|
21
24
|
require 'isomorfeus-redux'
|
22
25
|
```
|
26
|
+
|
27
|
+
### Dependencies
|
28
|
+
|
29
|
+
For full functionality the following are required:
|
30
|
+
- [Opal ES6 import export](https://github.com/opal/opal/pull/1832)
|
31
|
+
- [Opal Webpack Loader](https://github.com/janbiedermann/opal-webpack-loader)
|
32
|
+
- [Opal Autoloader](https://github.com/janbiedermann/opal-autoloader)
|
33
|
+
|
34
|
+
For the Gemfile:
|
35
|
+
```ruby
|
36
|
+
gem 'opal', github: 'janbiedermann/opal', branch: 'es6_import_export'
|
37
|
+
gem 'opal-webpack-loader', '~> 0.3.7'
|
38
|
+
gem 'opal-autoloader', '~> 0.0.3'
|
39
|
+
```
|
40
|
+
|
23
41
|
## Usage
|
24
42
|
Because isomorfeus-redux follows closely the Redux principles/implementation/API and Documentation, most things of the official Redux documentation
|
25
43
|
apply, but in the Ruby way, see:
|
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.0.
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
@@ -17,9 +17,6 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.11.0
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.12.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,9 +24,6 @@ dependencies:
|
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 0.11.0
|
30
|
-
- - "<"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.12.0
|
33
27
|
description: Use a global store and write reducers for it in Opal Ruby.
|
34
28
|
email:
|
35
29
|
- jan@kursator.com
|
@@ -37,14 +31,12 @@ executables: []
|
|
37
31
|
extensions: []
|
38
32
|
extra_rdoc_files: []
|
39
33
|
files:
|
40
|
-
- Gemfile
|
41
|
-
- README.md
|
42
|
-
- isomorfeus-redux.gemspec
|
43
34
|
- lib/isomorfeus-redux.rb
|
44
35
|
- lib/isomorfeus/promise.rb
|
45
36
|
- lib/redux.rb
|
46
37
|
- lib/redux/store.rb
|
47
38
|
- lib/redux/version.rb
|
39
|
+
- readme.md
|
48
40
|
homepage: http://isomorfeus.com
|
49
41
|
licenses:
|
50
42
|
- MIT
|
@@ -64,8 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
56
|
- !ruby/object:Gem::Version
|
65
57
|
version: '0'
|
66
58
|
requirements: []
|
67
|
-
|
68
|
-
rubygems_version: 2.7.6
|
59
|
+
rubygems_version: 3.0.3
|
69
60
|
signing_key:
|
70
61
|
specification_version: 4
|
71
62
|
summary: Redux for Opal Ruby.
|
data/Gemfile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
gemspec
|
data/isomorfeus-redux.gemspec
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
require_relative 'lib/redux/version.rb'
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = 'isomorfeus-redux'
|
6
|
-
s.version = Redux::VERSION
|
7
|
-
|
8
|
-
s.authors = ['Jan Biedermann']
|
9
|
-
s.email = ['jan@kursator.com']
|
10
|
-
s.homepage = 'http://isomorfeus.com'
|
11
|
-
s.summary = 'Redux for Opal Ruby.'
|
12
|
-
s.license = 'MIT'
|
13
|
-
s.description = 'Use a global store and write reducers for it in Opal Ruby.'
|
14
|
-
|
15
|
-
s.files = `git ls-files`.split("\n").reject { |f| f.match(%r{^(gemfiles|s)/}) }
|
16
|
-
# s.test_files = `git ls-files -- {test,s,features}/*`.split("\n")
|
17
|
-
s.require_paths = ['lib']
|
18
|
-
|
19
|
-
s.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
|
20
|
-
end
|