dry-mutations 0.8.12 → 0.8.13

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
  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