solid_use_case 1.0.0 → 1.0.1

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: 73d709fecdc2b338756dc63b0462fb5829adfd55
4
- data.tar.gz: 3a22295d95abdbb70b0577874095f20194d63561
3
+ metadata.gz: a75fb4eab33c1942ba1b3d2f5af8450ad6b9d7a8
4
+ data.tar.gz: 18303c9f6d0f0caf2d874e17175888f62947932e
5
5
  SHA512:
6
- metadata.gz: eda68689269d4501859898c8b66a2f37a10e406c6f4232a517736d372e1822be39d7e85732e8cd6094f78128529d53229d5037f72a0be2d07f50288e0775e09b
7
- data.tar.gz: 109405d81cc25bb82b63c969e461d3ace5d0e64433c88b7cd7fe0d586af0942b23231be614c8c44e404b57c1e41aca679ae4c53fd28ce20a81fde6a2b8099238
6
+ metadata.gz: c482f81c0e82b031533dfe3252c51229971882037b20bec61af68a5631335946c62f85c75783fa655503c87261a51296c7a22ce93afe6ad53be60f2023f375ae
7
+ data.tar.gz: 33d6162f7d0457934309fefc1c2704a0442681c3bf7b87d371df4fe002ee145ccc82a56bcf9596882ceb4a64da825c657dc612afacfcab99bc0cb592a88a71fe
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'solid_use_case', '~> 1.0.0'
9
+ gem 'solid_use_case', '~> 1.0.1'
10
10
 
11
11
  And then execute:
12
12
 
@@ -7,13 +7,16 @@ module SolidUseCase
7
7
  self.new.run(input_hash)
8
8
  end
9
9
 
10
- # # # # # # # # #
11
- # Monad-related #
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
@@ -1,3 +1,3 @@
1
1
  module SolidUseCase
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  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 TestA < SolidUseCase::Command
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
- Success(inputs)
16
+ next_step(inputs)
17
17
  end
18
18
 
19
19
  def step_2(inputs)
20
20
  inputs[:number] *= 2
21
- Success(inputs)
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 = TestA.run(:number => 10)
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.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-03-30 00:00:00.000000000 Z
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: