rdux 0.4.2 → 0.6.0
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/app/models/rdux/action.rb +12 -10
- data/app/models/rdux/actionable.rb +3 -3
- data/lib/rdux/result.rb +2 -1
- data/lib/rdux/version.rb +1 -1
- data/lib/rdux.rb +19 -26
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8bafc3ffdb3e56b33a2c6144590f851600eda0abfe67766f2ccb917c4580158
|
4
|
+
data.tar.gz: 7cf3def8a9248fead40f01c72fa5f06a5b69c6aa460d0fabf361860301dfa146
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b63dea34a594cf2ef6ab632ae872353cf0c041c40a9c7b3aec4fdedcd00fdc7a65d068c2cb9c21d30f6662b47a8dfbd2b95a20e73a5527846331286843dea066
|
7
|
+
data.tar.gz: 0d9d8ba53c8bec8f31e3f45747257c114a72ea0382838eca0d0203e27998789216a6584031dda8fb340f8a0be7c931760d3a9d03e06b4bbf5d690f8ccbf2a6d4
|
data/app/models/rdux/action.rb
CHANGED
@@ -4,24 +4,26 @@ module Rdux
|
|
4
4
|
class Action < ApplicationRecord
|
5
5
|
include Actionable
|
6
6
|
|
7
|
+
attr_accessor :up_payload_unsanitized
|
8
|
+
|
7
9
|
belongs_to :rdux_failed_action, optional: true, class_name: 'Rdux::FailedAction'
|
8
10
|
belongs_to :rdux_action, optional: true, class_name: 'Rdux::Action'
|
9
11
|
has_many :rdux_actions, class_name: 'Rdux::Action', foreign_key: 'rdux_action_id'
|
10
12
|
|
11
|
-
serialize :down_payload, JSON if ActiveRecord::Base.connection.adapter_name != 'PostgreSQL'
|
13
|
+
serialize :down_payload, coder: JSON if ActiveRecord::Base.connection.adapter_name != 'PostgreSQL'
|
12
14
|
|
13
15
|
scope :up, -> { where(down_at: nil) }
|
14
16
|
scope :down, -> { where.not(down_at: nil) }
|
15
17
|
|
16
18
|
def call(opts = {})
|
17
|
-
perform_action(:call, up_payload, opts)
|
19
|
+
perform_action(:call, up_payload_unsanitized || up_payload, opts)
|
18
20
|
end
|
19
21
|
|
20
22
|
def up(opts = {})
|
21
|
-
return false if up_payload_sanitized
|
23
|
+
return false if up_payload_sanitized && up_payload_unsanitized.nil?
|
22
24
|
return false unless down_at.nil?
|
23
25
|
|
24
|
-
perform_action(:up, up_payload, opts)
|
26
|
+
perform_action(:up, up_payload_unsanitized || up_payload, opts)
|
25
27
|
end
|
26
28
|
|
27
29
|
def down
|
@@ -42,8 +44,8 @@ module Rdux
|
|
42
44
|
def can_down?
|
43
45
|
q = self.class.where('created_at > ?', created_at)
|
44
46
|
.where(down_at: nil)
|
45
|
-
.where('
|
46
|
-
q = q.where(stream_hash:
|
47
|
+
.where('rdux_action_id IS NULL OR rdux_action_id != ?', id)
|
48
|
+
q = q.where(stream_hash:) unless stream_hash.nil?
|
47
49
|
!q.count.positive?
|
48
50
|
end
|
49
51
|
|
@@ -57,13 +59,13 @@ module Rdux
|
|
57
59
|
end
|
58
60
|
|
59
61
|
def perform_action(meth, payload, opts)
|
60
|
-
|
61
|
-
return if
|
62
|
+
performer = action_performer(meth)
|
63
|
+
return if performer.nil?
|
62
64
|
|
63
65
|
if opts.any?
|
64
|
-
|
66
|
+
performer.public_send(meth, payload, opts)
|
65
67
|
else
|
66
|
-
|
68
|
+
performer.public_send(meth, payload)
|
67
69
|
end
|
68
70
|
end
|
69
71
|
|
@@ -6,9 +6,9 @@ module Rdux
|
|
6
6
|
|
7
7
|
included do
|
8
8
|
if ActiveRecord::Base.connection.adapter_name != 'PostgreSQL'
|
9
|
-
serialize :up_payload, JSON
|
10
|
-
serialize :up_result, JSON
|
11
|
-
serialize :meta, JSON
|
9
|
+
serialize :up_payload, coder: JSON
|
10
|
+
serialize :up_result, coder: JSON
|
11
|
+
serialize :meta, coder: JSON
|
12
12
|
end
|
13
13
|
|
14
14
|
validates :name, presence: true
|
data/lib/rdux/result.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Rdux
|
4
|
-
Result = Struct.new(:ok, :down_payload, :resp, :
|
4
|
+
Result = Struct.new(:ok, :down_payload, :resp, :up_result, :save, :after_save, :nested, :action) do
|
5
5
|
def payload
|
6
6
|
resp || down_payload
|
7
7
|
end
|
8
|
+
alias_method :val, :payload
|
8
9
|
|
9
10
|
def save_failed?
|
10
11
|
ok == false && save
|
data/lib/rdux/version.rb
CHANGED
data/lib/rdux.rb
CHANGED
@@ -9,58 +9,50 @@ module Rdux
|
|
9
9
|
class << self
|
10
10
|
def dispatch(action_name, payload, opts = {}, meta: nil)
|
11
11
|
(opts[:ars] || {}).each { |k, v| payload["#{k}_id"] = v.id }
|
12
|
-
action = Action.
|
13
|
-
|
12
|
+
action = Action.create!(name: action_name, up_payload: payload, meta:)
|
13
|
+
sanitize(action)
|
14
|
+
call_call_or_up_on_action(action, opts)
|
14
15
|
end
|
15
16
|
|
16
17
|
alias perform dispatch
|
17
18
|
|
18
19
|
private
|
19
20
|
|
20
|
-
def
|
21
|
+
def call_call_or_up_on_action(action, opts)
|
21
22
|
res = action.call(opts)
|
22
|
-
|
23
|
-
|
24
|
-
unless res.down_payload.nil?
|
25
|
-
res.resp = res.down_payload.deep_stringify_keys
|
23
|
+
if res
|
24
|
+
res.resp ||= res.down_payload
|
26
25
|
res.down_payload = nil
|
26
|
+
else
|
27
|
+
res = action.up(opts)
|
27
28
|
end
|
28
29
|
assign_and_persist(res, action)
|
29
|
-
|
30
|
-
|
31
|
-
def call_up_meth_on_action(action, opts)
|
32
|
-
res = action.up(opts)
|
33
|
-
res.down_payload&.deep_stringify_keys!
|
34
|
-
action.down_payload = res.down_payload
|
35
|
-
assign_and_persist(res, action)
|
30
|
+
res.after_save.call(res.action) if res.after_save && res.action
|
31
|
+
res
|
36
32
|
end
|
37
33
|
|
38
34
|
def assign_and_persist(res, action)
|
35
|
+
action.down_payload = res.down_payload&.deep_stringify_keys!
|
39
36
|
if res.ok
|
40
37
|
assign_and_persist_for_ok(res, action)
|
41
38
|
elsif res.save_failed?
|
42
39
|
assign_and_persist_for_failed(res, action)
|
40
|
+
else
|
41
|
+
action.destroy
|
43
42
|
end
|
44
|
-
res.action ||= action
|
45
|
-
res
|
46
|
-
end
|
47
|
-
|
48
|
-
def assign_and_persist_common(res, action)
|
49
|
-
sanitize(action)
|
50
|
-
action.up_result = res.up_result
|
51
43
|
end
|
52
44
|
|
53
45
|
def assign_and_persist_for_ok(res, action)
|
54
|
-
|
46
|
+
action.up_result = res.up_result
|
47
|
+
res.action = action.tap(&:save!)
|
55
48
|
res.nested&.each { |nested_res| action.rdux_actions << nested_res.action }
|
56
|
-
action.save!
|
57
49
|
end
|
58
50
|
|
59
51
|
def assign_and_persist_for_failed(res, action)
|
60
|
-
|
61
|
-
action.up_result ||= res.resp
|
52
|
+
action.up_result = res.up_result
|
62
53
|
res.action = action.to_failed_action.tap(&:save!)
|
63
|
-
|
54
|
+
action.destroy
|
55
|
+
assign_nested_responses_to_failed_action(res.action, res.nested) if res.nested
|
64
56
|
end
|
65
57
|
|
66
58
|
def assign_nested_responses_to_failed_action(failed_action, nested)
|
@@ -76,6 +68,7 @@ module Rdux
|
|
76
68
|
def sanitize(action)
|
77
69
|
up_payload_sanitized = Sanitize.call(action.up_payload)
|
78
70
|
action.up_payload_sanitized = action.up_payload != up_payload_sanitized
|
71
|
+
action.up_payload_unsanitized = action.up_payload if action.up_payload_sanitized
|
79
72
|
action.up_payload = up_payload_sanitized
|
80
73
|
end
|
81
74
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zbigniew Humeniuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -36,56 +36,56 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 1.5.
|
39
|
+
version: 1.5.4
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.5.
|
46
|
+
version: 1.5.4
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rubocop
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
53
|
+
version: 1.59.0
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 1.
|
60
|
+
version: 1.59.0
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rubocop-rails
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: 2.
|
67
|
+
version: 2.23.1
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 2.
|
74
|
+
version: 2.23.1
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: sqlite3
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: 1.
|
81
|
+
version: 1.7.0
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: 1.
|
88
|
+
version: 1.7.0
|
89
89
|
description: |
|
90
90
|
Write apps that are easy to test.
|
91
91
|
Rdux gives you a possibility to centralize your app's state modification logic (DB changes).
|
@@ -124,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
124
|
requirements:
|
125
125
|
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: 3.
|
127
|
+
version: 3.1.4
|
128
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - ">="
|