dry-mutations 0.8.12 → 0.8.13

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
  SHA1:
3
- metadata.gz: f49ca2fa2417fe1742ed3fa35e912ac08a83cf30
4
- data.tar.gz: c688fd3329e66ffeac44de2af98e01f4a5dc2e01
3
+ metadata.gz: 037fef1da0d822b477b53b0d2e5cbbc68739148e
4
+ data.tar.gz: ca900597fee286845d886cd93d7d9041460f4dc7
5
5
  SHA512:
6
- metadata.gz: ccaea6b0d3b35983de61d2346d58f792a160e9cd5966be7f2206457fc4f26f08f70846431f64b454cddf796dbf5870568c4794b53d2d88cb2994b241d32f1a24
7
- data.tar.gz: ebcb6185a4d5ae865acf1091faf1ce6fa3c67bc2770d8b95aa73b62ba42e56650b71f4fcb8920847fc9a631cacc659f6f78559a40727c6029641086a5a2abf56
6
+ metadata.gz: dd0b5855b30691cf2e22968ea246c6a810c90573388451893ccb6ed1f558b30531aae0f0176ae53256266fc02f7c75759291340b84e8d9bacc5e5050a4edd8dc
7
+ data.tar.gz: d8cabef109dda5d57dec635890fc333c2e1871926fafe6731b6110b262fcfc1e98988ed12ebfcb6db16f4a2694d2de47bbb9af1e8ed0417630ced6974fe2d2b1
@@ -75,13 +75,7 @@ module Dry
75
75
  ########################################################################
76
76
 
77
77
  def validation_outcome(result = nil)
78
- # Outcome.new(!has_errors?, has_errors? ? nil : result, @errors, @inputs)
79
- super.tap do |outcome|
80
- outcome.singleton_class.tap do |klazz|
81
- klazz.prepend Outcome unless klazz.ancestors.include?(Outcome)
82
- end
83
- outcome.eitherify!
84
- end
78
+ ::Dry::Mutations::Extensions::Outcome(super)
85
79
  end
86
80
 
87
81
  def execute
@@ -7,10 +7,10 @@ module Dry
7
7
  class EitherCalculator # :nodoc:
8
8
  include Dry::Monads::Either::Mixin
9
9
 
10
- attr_accessor :outcome
10
+ attr_reader :outcome, :either
11
11
 
12
- def calculate
13
- Right(outcome).bind do |value|
12
+ def initialize(outcome)
13
+ @either = Right(@outcome = outcome).bind do |value|
14
14
  value.success? ? Right(value.result) : Left(value.errors)
15
15
  end
16
16
  end
@@ -41,32 +41,23 @@ module Dry
41
41
  end
42
42
 
43
43
  def self.prepended base
44
- fail ArgumentError, "Can not prepend #{self.class} to #{base.class}: base class must be a ::Mutations::Outcome descendant." unless base < ::Mutations::Outcome
44
+ fail ArgumentError, "Can not prepend #{self} to #{base}: base class must be a ::Mutations::Outcome descendant." unless base <= ::Mutations::Outcome
45
45
  end
46
46
 
47
- attr_reader :either
48
-
49
- def initialize(is_success, result, errors, inputs)
50
- super is_success, result, errors, inputs
51
- etherify!
52
- end
53
-
54
- def eitherify!
55
- calc = EitherCalculator.new
56
- calc.outcome = self
57
- @either = calc.calculate
47
+ def either
48
+ @either ||= EitherCalculator.new(self).either
58
49
  end
59
50
 
60
51
  def right?
61
- @either.is_a?(Right)
52
+ either.is_a?(Right)
62
53
  end
63
54
 
64
55
  def left?
65
- @either.is_a?(Left)
56
+ either.is_a?(Left)
66
57
  end
67
58
 
68
59
  def value
69
- @either.value
60
+ either.value
70
61
  end
71
62
 
72
63
  def match
@@ -74,6 +65,21 @@ module Dry
74
65
  Matcher.!.(self, &Proc.new)
75
66
  end
76
67
  end
68
+
69
+ ::Mutations::Outcome.prepend Outcome unless ::Mutations::Outcome.ancestors.include?(Outcome)
70
+
71
+ def self.Outcome input
72
+ case input
73
+ when ::Mutations::Outcome then input
74
+ when ::Dry::Monads::Either::Left
75
+ ::Mutations::Outcome.new(false, nil, input.value, nil)
76
+ when ::Dry::Monads::Either::Right
77
+ ::Mutations::Outcome.new(true, input.value, nil, nil)
78
+ when ->(inp) { inp.respond_to?(:success?) }
79
+ ::Mutations::Outcome.new(input.success?, input.success? && input, input.success? || input, nil)
80
+ else fail TypeError.new("Wrong input passed to Outcome(): [#{input.inspect}]")
81
+ end
82
+ end
77
83
  end
78
84
  end
79
85
  end
@@ -25,7 +25,9 @@ module Dry
25
25
  singleton_class.send :define_method, :call do |input|
26
26
  transaction.(input)
27
27
  end
28
- singleton_class.send(:alias_method, :run, :call) unless singleton_class.respond_to?(:run)
28
+ singleton_class.send :define_method, :run do |input|
29
+ ::Dry::Mutations::Extensions::Outcome(transaction.(input))
30
+ end
29
31
  end
30
32
  end
31
33
  end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Mutations
3
- VERSION = '0.8.12'.freeze
3
+ VERSION = '0.8.13'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-mutations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.12
4
+ version: 0.8.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksei Matiushkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2016-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler