isomorfeus-redux 4.0.0 → 4.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|