either_result_matcher 0.1.0 → 0.2.0

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: 2c1e5589196cbb40e8ef62a6511a303e0daed1fb
4
- data.tar.gz: f5b0fccbf089e4810018e1da59290063ed47fc90
3
+ metadata.gz: 80a95e0850165a08bd7f7c0f492f9d11844b7b50
4
+ data.tar.gz: b430504c717d1c6121768c77caaef30644a8df07
5
5
  SHA512:
6
- metadata.gz: fd6181b2cae7ee09a3eca63c19ae4b0e3a0ec578c7f68cdfb7ac75b88d8531a314d042b28c211bf7eefe69967774eef263141076f9a64311acc95340799ba35f
7
- data.tar.gz: c811660449fba53db8ed32da6e969dee9696f2dadde5525c2f02a758a9c7cb67db12edd309ed3f7260b76663fd7e514a9097a28a405792af7819b22f20d68f17
6
+ metadata.gz: 37f88039789b2bccf79ad32e72c5275472d96b4a8d4bfaadffb58d3f2f57a8bd50d66a47f5cbdf8231cf1628896e825f320a76077d5b2bafce9a9a65c28aaee1
7
+ data.tar.gz: 2b900cc22f5191ab7559d9d4523b9ca2bd1b290d5d98f6212541a13f86473646459e9f0557578dbc4cdb0689e7d28ff3a6f0161cef36038efd8bd400c8bccdce
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- either_result_matcher (0.1.0)
4
+ either_result_matcher (0.2.0)
5
5
  kleisli
6
6
 
7
7
  GEM
@@ -13,7 +13,7 @@ GEM
13
13
  diff-lcs (1.2.5)
14
14
  docile (1.1.5)
15
15
  json (1.8.3)
16
- kleisli (0.2.6)
16
+ kleisli (0.2.7)
17
17
  parser (2.2.3.0)
18
18
  ast (>= 1.1, < 3.0)
19
19
  powerpack (0.1.1)
@@ -59,4 +59,4 @@ DEPENDENCIES
59
59
  yard
60
60
 
61
61
  BUNDLED WITH
62
- 1.10.6
62
+ 1.11.2
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Usage
4
4
 
5
+ Operate an an `Either` object from the outside:
6
+
5
7
  ```ruby
6
8
  result = Right("some result")
7
9
 
@@ -15,3 +17,26 @@ MatchEitherResult(result) do |m|
15
17
  end
16
18
  end
17
19
  ```
20
+
21
+ Or extend your own `Either`-returning classes to support result match blocks:
22
+
23
+ ```ruby
24
+ class MyOperation
25
+ include EitherResultMatcher.for(:call)
26
+
27
+ def call
28
+ Right("some result")
29
+ end
30
+ end
31
+
32
+ my_op = MyOperation.new
33
+ my_op.call() do |m|
34
+ m.success do |v|
35
+ "Success: #{v}"
36
+ end
37
+
38
+ m.failure do |v|
39
+ "Failure: #{v}"
40
+ end
41
+ end
42
+ ```
@@ -3,3 +3,29 @@ require "either_result_matcher/matcher"
3
3
  def MatchEitherResult(result, &block)
4
4
  block.call(EitherResultMatcher::Matcher.new(result))
5
5
  end
6
+
7
+ module EitherResultMatcher
8
+ def self.for(*match_methods)
9
+ matchers_mod = Module.new do
10
+ match_methods.each do |match_method|
11
+ define_method(match_method) do |*args, &block|
12
+ result = super(*args)
13
+
14
+ if block
15
+ MatchEitherResult(result, &block)
16
+ else
17
+ result
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ Module.new do
24
+ const_set :Matchers, matchers_mod
25
+
26
+ def self.included(klass)
27
+ klass.prepend const_get(:Matchers)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module EitherResultMatcher
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  end
@@ -1,4 +1,8 @@
1
- example_id | status | run_time |
2
- ----------------------------------------------------- | ------ | --------------- |
3
- ./spec/integration/match_either_result_spec.rb[1:1:1] | passed | 0.00089 seconds |
4
- ./spec/integration/match_either_result_spec.rb[1:2:1] | passed | 0.00012 seconds |
1
+ example_id | status | run_time |
2
+ --------------------------------------------------------- | ------ | --------------- |
3
+ ./spec/integration/match_either_result_spec.rb[1:1:1:1] | passed | 0.00011 seconds |
4
+ ./spec/integration/match_either_result_spec.rb[1:1:2:1] | passed | 0.00011 seconds |
5
+ ./spec/integration/match_either_result_spec.rb[1:2:1:1:1] | passed | 0.00146 seconds |
6
+ ./spec/integration/match_either_result_spec.rb[1:2:1:2:1] | passed | 0.00024 seconds |
7
+ ./spec/integration/match_either_result_spec.rb[1:2:2:1:1] | passed | 0.00012 seconds |
8
+ ./spec/integration/match_either_result_spec.rb[1:2:2:2:1] | passed | 0.00012 seconds |
@@ -1,29 +1,93 @@
1
1
  RSpec.describe "MatchEitherResult" do
2
- subject(:match) {
3
- MatchEitherResult(result) do |m|
4
- m.success do |v|
5
- "Matched success: #{v}"
2
+ describe "external matching" do
3
+ subject(:match) {
4
+ MatchEitherResult(result) do |m|
5
+ m.success do |v|
6
+ "Matched success: #{v}"
7
+ end
8
+
9
+ m.failure do |v|
10
+ "Matched failure: #{v}"
11
+ end
6
12
  end
13
+ }
14
+
15
+ context "successful result" do
16
+ let(:result) { Right("a success") }
7
17
 
8
- m.failure do |v|
9
- "Matched failure: #{v}"
18
+ it "matches on success" do
19
+ expect(match).to eq "Matched success: a success"
10
20
  end
11
21
  end
12
- }
13
22
 
14
- context "successful result" do
15
- let(:result) { Right("a success") }
23
+ context "failed result" do
24
+ let(:result) { Left("a failure") }
16
25
 
17
- it "matches on success" do
18
- expect(match).to eq "Matched success: a success"
26
+ it "matches on failure" do
27
+ expect(match).to eq "Matched failure: a failure"
28
+ end
19
29
  end
20
30
  end
21
31
 
22
- context "failed result" do
23
- let(:result) { Left("a failure") }
32
+ describe "class enhancement" do
33
+ let(:operation) {
34
+ Class.new do
35
+ include EitherResultMatcher.for(:call)
36
+
37
+ def call(bool)
38
+ bool ? Right("a success") : Left("a failure")
39
+ end
40
+ end.new
41
+ }
42
+
43
+ describe "match blocks" do
44
+ subject(:match) {
45
+ operation.call(input) do |m|
46
+ m.success do |v|
47
+ "Matched success: #{v}"
48
+ end
49
+
50
+ m.failure do |v|
51
+ "Matched failure: #{v}"
52
+ end
53
+ end
54
+ }
55
+
56
+ context "successful result" do
57
+ let(:input) { true }
58
+
59
+ it "matches on success" do
60
+ expect(match).to eq "Matched success: a success"
61
+ end
62
+ end
63
+
64
+ context "failed result" do
65
+ let(:input) { false }
24
66
 
25
- it "matches on failure" do
26
- expect(match).to eq "Matched failure: a failure"
67
+ it "matches on failure" do
68
+ expect(match).to eq "Matched failure: a failure"
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "without match blocks" do
74
+ subject(:result) { operation.call(input) }
75
+
76
+ context "successful result" do
77
+ let(:input) { true }
78
+
79
+ it "returns the result" do
80
+ expect(result).to eq Right("a success")
81
+ end
82
+ end
83
+
84
+ context "failed result" do
85
+ let(:input) { false }
86
+
87
+ it "returns the result" do
88
+ expect(result).to eq Left("a failure")
89
+ end
90
+ end
27
91
  end
28
92
  end
29
93
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: either_result_matcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Riley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-03 00:00:00.000000000 Z
11
+ date: 2016-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kleisli
@@ -121,7 +121,6 @@ files:
121
121
  - README.md
122
122
  - Rakefile
123
123
  - lib/either_result_matcher.rb
124
- - lib/either_result_matcher/either_extensions.rb
125
124
  - lib/either_result_matcher/matcher.rb
126
125
  - lib/either_result_matcher/version.rb
127
126
  - spec/examples.txt
@@ -147,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
146
  version: '0'
148
147
  requirements: []
149
148
  rubyforge_project:
150
- rubygems_version: 2.4.5.1
149
+ rubygems_version: 2.5.1
151
150
  signing_key:
152
151
  specification_version: 4
153
152
  summary: Expressive, all-in-one match API for Kleisli Either monads
@@ -1,12 +0,0 @@
1
- require "kleisli"
2
- require "either_result_matcher"
3
-
4
- module EitherResultMatcher
5
- module EitherExtensions
6
- def match(&block)
7
- MatchEitherResult(self, &block)
8
- end
9
- end
10
- end
11
-
12
- Kleisli::Either.include EitherResultMatcher::EitherExtensions