dry-mutations 0.8.93 → 0.8.95

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: c1759720e362dcbe20461c07691459b2d4205037
4
- data.tar.gz: bc03a2102a137b5a8cebd7cee53088b172cf2c7d
3
+ metadata.gz: ab34cce7ae7dae0a65fb5c0deae32a5b58d80b4d
4
+ data.tar.gz: 807b22566a844bded55c9fbf8f3cde5f02e6926f
5
5
  SHA512:
6
- metadata.gz: 3d6627239412c2f4036b0d68bdfc8d21e9473b3b621ce127bcbfcad8a74f3208f5cce41511f5cc8bc6799ef1bdc078b6f69ec3a4af1dcacc7b3e8eed1d589507
7
- data.tar.gz: 4fe798defef2109b81c04ebd0542f830c588a0e994888f79fd3ea2e45301e73faabc83a3e0b1541098ebc113239a47b7f9669efa68d00da7dcb58ba65286b33e
6
+ metadata.gz: c9bf7564f9c36b9bb5b4219355f142c688813663936d1d2dfd123e56045b525c90faab9876fbad350e88c27c53966e51dc14ddc5487b4ae1ef41d26a93f0c7d1
7
+ data.tar.gz: c2f1299819df0f7bcce26cf41c718e03447e12a0e034d49cc39538225537cbefce6c8e844529e1faff5bf99f1945132bc342f1b7372e6cab50c42c3a9911b4af
@@ -10,8 +10,9 @@ module Dry
10
10
  attr_reader :outcome, :either
11
11
 
12
12
  def initialize(outcome)
13
+ @∨ = outcome.class.instance_variable_get(:@∨)
13
14
  @either = Right(@outcome = outcome).bind do |value|
14
- value.success? ? Right(value.result) : Left(value.errors)
15
+ value.public_send(@∨[:success]) ? Right(value.public_send(@∨[:right])) : Left(value.public_send(@∨[:left]))
15
16
  end
16
17
  end
17
18
  end
@@ -41,8 +42,15 @@ module Dry
41
42
  end
42
43
 
43
44
  def self.prepended base
44
- fail ArgumentError, "Can not prepend #{self} to #{base}: base class must be a ::Mutations::Outcome descendant." unless base <= ::Mutations::Outcome
45
+ λ = base.instance_methods.method(:include?)
46
+ base.instance_variable_set(:@∨, {
47
+ left: [:errors, :left].detect(&λ),
48
+ right: [:result, :output, :right].detect(&λ),
49
+ success: [:success?].detect(&λ)
50
+ }.reject { |_, v| v.nil? }.merge(base.instance_variable_get(:@∨) || {}))
51
+ fail ArgumentError, "Can not have #{self} #{__callee__} to #{base}: base class must look like an either." unless base.instance_variable_get(:@∨).size == 3
45
52
  end
53
+ singleton_class.send :alias_method, :included, :prepended
46
54
 
47
55
  def either
48
56
  @either ||= EitherCalculator.new(self).either
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Mutations
3
- VERSION = '0.8.93'.freeze
3
+ VERSION = '0.8.95'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-mutations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.93
4
+ version: 0.8.95
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksei Matiushkin