dry-mutations 0.8.93 → 0.8.95

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