rdux 0.4.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="