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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad9475cbd38a59110640b53626f3bf33d605c34d6cef0dd857caf2e5c49d741d
4
- data.tar.gz: d22d50839f3b66f0d028ebe3281c015b2d72d31264aff073aa0002f5ed2c59b2
3
+ metadata.gz: e8bafc3ffdb3e56b33a2c6144590f851600eda0abfe67766f2ccb917c4580158
4
+ data.tar.gz: 7cf3def8a9248fead40f01c72fa5f06a5b69c6aa460d0fabf361860301dfa146
5
5
  SHA512:
6
- metadata.gz: a46d816e59e211e14da6662e7e575e268da5f6f00b1c2b12cf41d682f3366f266b2ee8321059e800dfd7f5636270751590820ca371a9cbe30a5a041bf1f7e848
7
- data.tar.gz: 3f42d29015f3b25b7d1da6135a0e8d43c00ec6dd04812462da24331d23684a27d0a486af45a2abd452d0562d7f6479bda9bc81f2eeada32eb96cc496a75a6f8f
6
+ metadata.gz: b63dea34a594cf2ef6ab632ae872353cf0c041c40a9c7b3aec4fdedcd00fdc7a65d068c2cb9c21d30f6662b47a8dfbd2b95a20e73a5527846331286843dea066
7
+ data.tar.gz: 0d9d8ba53c8bec8f31e3f45747257c114a72ea0382838eca0d0203e27998789216a6584031dda8fb340f8a0be7c931760d3a9d03e06b4bbf5d690f8ccbf2a6d4
@@ -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('id != ?', rdux_action_id.to_i)
46
- q = q.where(stream_hash: stream_hash) unless stream_hash.nil?
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
- responder = action_performer(meth)
61
- return if responder.nil?
62
+ performer = action_performer(meth)
63
+ return if performer.nil?
62
64
 
63
65
  if opts.any?
64
- responder.public_send(meth, payload, opts)
66
+ performer.public_send(meth, payload, opts)
65
67
  else
66
- responder.public_send(meth, payload)
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, :action, :up_result, :nested, :save) do
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rdux
4
- VERSION = '0.4.2'
4
+ VERSION = '0.6.0'
5
5
  end
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.new(name: action_name, up_payload: payload, meta: meta)
13
- call_call_meth_on_action(action, opts)
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 call_call_meth_on_action(action, opts)
21
+ def call_call_or_up_on_action(action, opts)
21
22
  res = action.call(opts)
22
- return call_up_meth_on_action(action, opts) if res.nil?
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
- end
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
- assign_and_persist_common(res, action)
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
- assign_and_persist_common(res, action)
61
- action.up_result ||= res.resp
52
+ action.up_result = res.up_result
62
53
  res.action = action.to_failed_action.tap(&:save!)
63
- assign_nested_responses_to_failed_action(res.action, res.nested) unless res.nested.nil?
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.2
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: 2023-12-10 00:00:00.000000000 Z
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.2
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.2
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.55.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.55.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.20.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.20.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.6.3
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.6.3
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.0.0
127
+ version: 3.1.4
128
128
  required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ">="