rdux 0.4.2 → 0.5.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: 4d8b2deb7d13b8061c8996ccb5389ee374f7822aeb9973e50c7723688caf1c1d
4
+ data.tar.gz: 4d5fd29c0b67e4c3d01a326b2b34e7e7ee8a5599485b2ea76c48cfd445147ad6
5
5
  SHA512:
6
- metadata.gz: a46d816e59e211e14da6662e7e575e268da5f6f00b1c2b12cf41d682f3366f266b2ee8321059e800dfd7f5636270751590820ca371a9cbe30a5a041bf1f7e848
7
- data.tar.gz: 3f42d29015f3b25b7d1da6135a0e8d43c00ec6dd04812462da24331d23684a27d0a486af45a2abd452d0562d7f6479bda9bc81f2eeada32eb96cc496a75a6f8f
6
+ metadata.gz: a27f19dba3623c4e9da1f0c802d3d62f44a5d9a20a75fc7af1ac14a597e9f203b2237ada8930ca22c10e626e756d77b601041e820668485ec3c25b325c744f40
7
+ data.tar.gz: e5603781b011cd5fd8e215083be8165c3665a5071b7a148d91cfd247e6e0be3875d5289ed89f5ec593b4e26aece21f2e7b05f19d5334ccb569c8c574272e2838
@@ -4,6 +4,8 @@ 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'
@@ -14,14 +16,14 @@ module Rdux
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,7 +44,7 @@ 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)
47
+ .where('rdux_action_id IS NULL OR rdux_action_id != ?', id)
46
48
  q = q.where(stream_hash: stream_hash) unless stream_hash.nil?
47
49
  !q.count.positive?
48
50
  end
@@ -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
 
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.5.0'
5
5
  end
data/lib/rdux.rb CHANGED
@@ -9,58 +9,49 @@ 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: 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
30
  end
30
31
 
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)
36
- end
37
-
38
32
  def assign_and_persist(res, action)
33
+ action.down_payload = res.down_payload&.deep_stringify_keys!
39
34
  if res.ok
40
35
  assign_and_persist_for_ok(res, action)
41
36
  elsif res.save_failed?
42
37
  assign_and_persist_for_failed(res, action)
38
+ else
39
+ action.destroy
43
40
  end
44
- res.action ||= action
45
41
  res
46
42
  end
47
43
 
48
- def assign_and_persist_common(res, action)
49
- sanitize(action)
50
- action.up_result = res.up_result
51
- end
52
-
53
44
  def assign_and_persist_for_ok(res, action)
54
- assign_and_persist_common(res, action)
45
+ action.up_result = res.up_result
46
+ res.action = action.tap(&:save!)
55
47
  res.nested&.each { |nested_res| action.rdux_actions << nested_res.action }
56
- action.save!
57
48
  end
58
49
 
59
50
  def assign_and_persist_for_failed(res, action)
60
- assign_and_persist_common(res, action)
61
- action.up_result ||= res.resp
51
+ action.up_result = res.up_result
62
52
  res.action = action.to_failed_action.tap(&:save!)
63
- assign_nested_responses_to_failed_action(res.action, res.nested) unless res.nested.nil?
53
+ action.destroy
54
+ assign_nested_responses_to_failed_action(res.action, res.nested) if res.nested
64
55
  end
65
56
 
66
57
  def assign_nested_responses_to_failed_action(failed_action, nested)
@@ -76,6 +67,7 @@ module Rdux
76
67
  def sanitize(action)
77
68
  up_payload_sanitized = Sanitize.call(action.up_payload)
78
69
  action.up_payload_sanitized = action.up_payload != up_payload_sanitized
70
+ action.up_payload_unsanitized = action.up_payload if action.up_payload_sanitized
79
71
  action.up_payload = up_payload_sanitized
80
72
  end
81
73
  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.5.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: 2023-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails