solid_use_case 1.0.0 → 1.0.1
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 +4 -4
- data/README.md +1 -1
- data/lib/solid_use_case/command.rb +6 -3
- data/lib/solid_use_case/rspec_matchers.rb +33 -0
- data/lib/solid_use_case/version.rb +1 -1
- data/spec/command_spec.rb +39 -4
- data/spec/rspec_matchers_spec.rb +31 -0
- metadata +16 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a75fb4eab33c1942ba1b3d2f5af8450ad6b9d7a8
|
4
|
+
data.tar.gz: 18303c9f6d0f0caf2d874e17175888f62947932e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c482f81c0e82b031533dfe3252c51229971882037b20bec61af68a5631335946c62f85c75783fa655503c87261a51296c7a22ce93afe6ad53be60f2023f375ae
|
7
|
+
data.tar.gz: 33d6162f7d0457934309fefc1c2704a0442681c3bf7b87d371df4fe002ee145ccc82a56bcf9596882ceb4a64da825c657dc612afacfcab99bc0cb592a88a71fe
|
data/README.md
CHANGED
@@ -7,13 +7,16 @@ module SolidUseCase
|
|
7
7
|
self.new.run(input_hash)
|
8
8
|
end
|
9
9
|
|
10
|
-
# # # # # #
|
11
|
-
#
|
12
|
-
# # # # # #
|
10
|
+
# # # # # #
|
11
|
+
# Helpers #
|
12
|
+
# # # # # #
|
13
13
|
|
14
14
|
def fail(type, data={})
|
15
15
|
data[:type] = type
|
16
16
|
Failure(ErrorStruct.new(data))
|
17
17
|
end
|
18
|
+
|
19
|
+
alias :next_step :Success
|
20
|
+
alias :succeed :Success
|
18
21
|
end
|
19
22
|
end
|
@@ -5,6 +5,10 @@ module SolidUseCase
|
|
5
5
|
ValidateSuccess.new
|
6
6
|
end
|
7
7
|
|
8
|
+
def fail_with(error_name)
|
9
|
+
MatchFailure.new(error_name)
|
10
|
+
end
|
11
|
+
|
8
12
|
class ValidateSuccess
|
9
13
|
def matches?(result)
|
10
14
|
@result = result
|
@@ -20,5 +24,34 @@ module SolidUseCase
|
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
27
|
+
class MatchFailure
|
28
|
+
|
29
|
+
def initialize(expected_error_name)
|
30
|
+
@expected_error_name = expected_error_name
|
31
|
+
end
|
32
|
+
|
33
|
+
def matches?(result)
|
34
|
+
@result = result
|
35
|
+
@is_failure = @result.is_a?(Deterministic::Failure)
|
36
|
+
@is_failure && @result.value.type == @expected_error_name
|
37
|
+
end
|
38
|
+
|
39
|
+
def failure_message_for_should
|
40
|
+
if @is_failure
|
41
|
+
"expected result to fail with :#{@expected_error_name} (failed with :#{@result.value.type} instead)"
|
42
|
+
else
|
43
|
+
"expected result to fail with :#{@expected_error_name} (result was successful instead)"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def failure_message_for_should_not
|
48
|
+
if @is_failure
|
49
|
+
"expected result to fail with an error not equal to :#{@expected_error_name}"
|
50
|
+
else
|
51
|
+
"expected result to fail with an error not equal to :#{@expected_error_name} (result was successful instead)"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
23
56
|
end
|
24
57
|
end
|
data/spec/command_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe SolidUseCase::Command do
|
4
4
|
|
5
5
|
describe 'Stepping' do
|
6
|
-
class
|
6
|
+
class GiantSteps < SolidUseCase::Command
|
7
7
|
def run(inputs)
|
8
8
|
attempt_all do
|
9
9
|
step { step_1(inputs) }
|
@@ -13,18 +13,53 @@ describe SolidUseCase::Command do
|
|
13
13
|
|
14
14
|
def step_1(inputs)
|
15
15
|
inputs[:number] += 10
|
16
|
-
|
16
|
+
next_step(inputs)
|
17
17
|
end
|
18
18
|
|
19
19
|
def step_2(inputs)
|
20
20
|
inputs[:number] *= 2
|
21
|
-
|
21
|
+
succeed(inputs)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
it "pipes one step result to the next step" do
|
26
|
-
result =
|
26
|
+
result = GiantSteps.run(:number => 10)
|
27
27
|
expect(result).to be_a_success
|
28
|
+
expect(result.value[:number]).to eq(40)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
describe 'Failure Matching' do
|
34
|
+
class FailureMatch < SolidUseCase::Command
|
35
|
+
def run(inputs)
|
36
|
+
attempt_all do
|
37
|
+
step { fail_it(inputs) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def fail_it(inputs)
|
42
|
+
error_sym = inputs[:fail_with]
|
43
|
+
fail(error_sym)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "pattern matches" do
|
48
|
+
result = FailureMatch.run(:fail_with => :abc)
|
49
|
+
# Custom RSpec matcher
|
50
|
+
expect(result).to_not be_a_success
|
51
|
+
|
52
|
+
expect(result.value).to be_a SolidUseCase::ErrorStruct
|
53
|
+
expect(result.value.type).to eq :abc
|
54
|
+
|
55
|
+
matched = false
|
56
|
+
result.match do
|
57
|
+
success { raise StandardError.new "We shouldn't get here" }
|
58
|
+
failure(:xyz) { raise StandardError.new "We shouldn't get here" }
|
59
|
+
failure(:abc) { matched = true }
|
60
|
+
failure { raise StandardError.new "We shouldn't get here" }
|
61
|
+
end
|
62
|
+
expect(matched).to eq true
|
28
63
|
end
|
29
64
|
end
|
30
65
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Custom RSpec Matchers' do
|
4
|
+
include SolidUseCase::RSpecMatchers
|
5
|
+
|
6
|
+
class FailCase < SolidUseCase::Command
|
7
|
+
def run(error)
|
8
|
+
fail(error)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class SuccessCase < SolidUseCase::Command
|
13
|
+
def run(val)
|
14
|
+
succeed(val)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#fail_with' do
|
19
|
+
|
20
|
+
it "matches error messages" do
|
21
|
+
matcher = fail_with(:xyz)
|
22
|
+
expect(matcher.matches? FailCase.run(:xyz)).to eq(true)
|
23
|
+
expect(matcher.matches? FailCase.run(:abc)).to eq(false)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "does not match successes" do
|
27
|
+
matcher = fail_with(:hello)
|
28
|
+
expect(matcher.matches? SuccessCase.run).to eq(false)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solid_use_case
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gilbert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deterministic
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.14.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.14.1
|
69
69
|
description: Create use cases the way they were meant to be. Easily verify inputs
|
@@ -74,8 +74,8 @@ executables: []
|
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
-
- .gitignore
|
78
|
-
- .rspec
|
77
|
+
- ".gitignore"
|
78
|
+
- ".rspec"
|
79
79
|
- Gemfile
|
80
80
|
- LICENSE.txt
|
81
81
|
- README.md
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- lib/solid_use_case/version.rb
|
89
89
|
- solid_use_case.gemspec
|
90
90
|
- spec/command_spec.rb
|
91
|
+
- spec/rspec_matchers_spec.rb
|
91
92
|
- spec/spec_helper.rb
|
92
93
|
homepage: https://github.com/mindeavor/solid_use_case
|
93
94
|
licenses:
|
@@ -99,12 +100,12 @@ require_paths:
|
|
99
100
|
- lib
|
100
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
101
102
|
requirements:
|
102
|
-
- - ~>
|
103
|
+
- - "~>"
|
103
104
|
- !ruby/object:Gem::Version
|
104
105
|
version: '2.0'
|
105
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
107
|
requirements:
|
107
|
-
- -
|
108
|
+
- - ">="
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: '0'
|
110
111
|
requirements: []
|
@@ -115,5 +116,5 @@ specification_version: 4
|
|
115
116
|
summary: A flexible UseCase pattern that works *with* your workflow, not against it.
|
116
117
|
test_files:
|
117
118
|
- spec/command_spec.rb
|
119
|
+
- spec/rspec_matchers_spec.rb
|
118
120
|
- spec/spec_helper.rb
|
119
|
-
has_rdoc:
|