solid_use_case 1.0.2 → 1.1.0

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: fc73aaa654b2bb9094f89bdc59eadb2c6e6850ad
4
- data.tar.gz: daf146af027dca257b571f6ee43487a1a30343cd
3
+ metadata.gz: 4e7056ae1ef3157772218479526874fa94e710f7
4
+ data.tar.gz: fd9a2327b8919bfd623d72e7fbe66ec6e0ced364
5
5
  SHA512:
6
- metadata.gz: a18e3f021309842f666d8c8ee25d95468aa68c23d8c8d0bae297dbbe0a0868a125f23c436c7207ad3536b4aa1bfe645b51fa50069d246628f9eaa4e1f9b74fde
7
- data.tar.gz: cfca654335a96807e4e95351981643a6e0a1dff902a604fadda53905b85da1c52a3e955981700a11344400499d6d25524f1eb34b688fce5d299c23481cc48d35
6
+ metadata.gz: 0dcee4954826b006d3c3bda5516536db3db27c1e1eca0c7731029daec17cd00a6122f8846f48237387e3fe45d81a81da2f8998a71b0fa9d3c287cea9c77d5a76
7
+ data.tar.gz: 24dab826516eab7bfe84842e89c3361ac06c039edfbbe0d82c226fd339ebbc843bc24a96878c431f59071a8d5637f1aab307fa3215cbc3447fb58fa23861516d
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.2'
9
+ gem 'solid_use_case', '~> 1.1.0'
10
10
 
11
11
  And then execute:
12
12
 
@@ -25,22 +25,17 @@ The only required method is the `#run` method.
25
25
  ### Rails Example
26
26
 
27
27
  ```ruby
28
- class UserSignup < SolidUseCase::Command
29
- def run(params)
30
- attempt_all do
31
- step { validate(params) }
32
- step {|params| save_user(params) }
33
- try {|params| email_user(params) }
34
- end
35
- end
28
+ class UserSignup < SolidUseCase::Base
29
+
30
+ steps :validate, :save_user, :email_user
36
31
 
37
32
  def validate(params)
38
33
  user = User.new(params[:user])
39
- if user.valid?
34
+ if !user.valid?
40
35
  fail :invalid_user, :user => user
41
36
  else
42
37
  params[:user] = user
43
- Success(params)
38
+ continue(params)
44
39
  end
45
40
  end
46
41
 
@@ -49,13 +44,14 @@ class UserSignup < SolidUseCase::Command
49
44
  if user.save
50
45
  fail :user_save_failed, :user => user
51
46
  else
52
- Success(params)
47
+ continue(params)
53
48
  end
54
49
  end
55
50
 
56
51
  def email_user(params)
57
52
  UserMailer.async.deliver(:welcome, params[:user].id)
58
- Success(params[:user])
53
+ # Because this is the last step, we want to end with the created user
54
+ continue(params[:user])
59
55
  end
60
56
  end
61
57
  ```
@@ -72,15 +68,15 @@ class UsersController < ApplicationController
72
68
  end
73
69
 
74
70
  failure(:invalid_user) do |error_data|
75
- render_new(error_data, "Oops, fix your mistakes and try again")
71
+ render_form_errors(error_data, "Oops, fix your mistakes and try again")
76
72
  end
77
73
 
78
74
  failure(:user_save_failed) do |error_data|
79
- render_new(error_data, "Sorry, something went wrong on our side.")
75
+ render_form_errors(error_data, "Sorry, something went wrong on our side.")
80
76
  end
81
77
 
82
78
  failure do |exception|
83
- flash[:error] = "Something went terribly wrong"
79
+ flash[:error] = "something went terribly wrong"
84
80
  render 'new'
85
81
  end
86
82
  end
@@ -88,7 +84,7 @@ class UsersController < ApplicationController
88
84
 
89
85
  private
90
86
 
91
- def render_new(user, error_message)
87
+ def render_form_errors(user, error_message)
92
88
  @user = user
93
89
  @error_message = error_message
94
90
  render 'new'
@@ -2,9 +2,9 @@ require "deterministic"
2
2
  require "deterministic/core_ext/either"
3
3
 
4
4
  require "solid_use_case/version"
5
- require 'solid_use_case/command/util.rb'
6
- require 'solid_use_case/command/error_struct.rb'
7
- require 'solid_use_case/command.rb'
5
+ require 'solid_use_case/base/util.rb'
6
+ require 'solid_use_case/base/error_struct.rb'
7
+ require 'solid_use_case/base.rb'
8
8
 
9
9
  module SolidUseCase
10
10
  end
@@ -0,0 +1,48 @@
1
+ module SolidUseCase
2
+ class Base
3
+ include Deterministic::CoreExt::Either
4
+ include BaseUtil
5
+
6
+ def self.run(input_hash={})
7
+ self.new.run(input_hash)
8
+ end
9
+
10
+ def self.steps(*args)
11
+ @__steps ||= []
12
+ @__steps += args
13
+ end
14
+
15
+ def run(inputs)
16
+ steps = self.class.instance_variable_get("@__steps").clone
17
+ result = Success(inputs)
18
+ return result unless steps
19
+
20
+ while steps.count > 0
21
+ next_step = steps.shift
22
+
23
+ if next_step.is_a?(Class) && (next_step < SolidUseCase::Base)
24
+ subresult = next_step.run(result.value)
25
+ elsif next_step.is_a?(Symbol)
26
+ subresult = self.send(next_step, result.value)
27
+ else
28
+ raise "Invalid step type: #{next_step.inspect}"
29
+ end
30
+
31
+ result = result.and(subresult)
32
+ end
33
+
34
+ result
35
+ end
36
+
37
+ # # # # # #
38
+ # Helpers #
39
+ # # # # # #
40
+
41
+ def fail(type, data={})
42
+ data[:type] = type
43
+ Failure(ErrorStruct.new(data))
44
+ end
45
+
46
+ alias :continue :Success
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  module SolidUseCase
2
- module CommandUtil
2
+ module BaseUtil
3
3
 
4
4
  def symbolize_names(object)
5
5
  case object
@@ -1,3 +1,3 @@
1
1
  module SolidUseCase
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '~> 2.0'
22
22
 
23
- spec.add_dependency "deterministic", '~> 0.2.0'
23
+ spec.add_dependency "deterministic", '~> 0.6.0'
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.3"
26
26
  spec.add_development_dependency "rake"
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SolidUseCase::Command do
3
+ describe SolidUseCase::Base do
4
4
 
5
5
  describe 'Stepping' do
6
- class GiantSteps < SolidUseCase::Command
6
+ class GiantSteps < SolidUseCase::Base
7
7
  def run(inputs)
8
8
  attempt_all do
9
9
  step { step_1(inputs) }
@@ -13,12 +13,12 @@ describe SolidUseCase::Command do
13
13
 
14
14
  def step_1(inputs)
15
15
  inputs[:number] += 10
16
- next_step(inputs)
16
+ continue(inputs)
17
17
  end
18
18
 
19
19
  def step_2(inputs)
20
20
  inputs[:number] *= 2
21
- succeed(inputs)
21
+ continue(inputs)
22
22
  end
23
23
  end
24
24
 
@@ -30,8 +30,54 @@ describe SolidUseCase::Command do
30
30
  end
31
31
 
32
32
 
33
+ describe 'Stepping DSL' do
34
+ class GiantStepsDSL < SolidUseCase::Base
35
+
36
+ steps :step_1, :step_2
37
+
38
+ def step_1(inputs)
39
+ inputs[:number] += 10
40
+ continue(inputs)
41
+ end
42
+
43
+ def step_2(inputs)
44
+ inputs[:number] *= 2
45
+ continue(inputs)
46
+ end
47
+ end
48
+
49
+ it "pipes one step result to the next step" do
50
+ result = GiantStepsDSL.run(:number => 10)
51
+ expect(result).to be_a_success
52
+ expect(result.value[:number]).to eq(40)
53
+ end
54
+
55
+ it "can run multiple times" do
56
+ result = GiantStepsDSL.run(:number => 10)
57
+ result = GiantStepsDSL.run(:number => 10)
58
+ expect(result).to be_a_success
59
+ expect(result.value[:number]).to eq(40)
60
+ end
61
+
62
+ class SubStep < SolidUseCase::Base
63
+ steps GiantStepsDSL, :last_step
64
+
65
+ def last_step(inputs)
66
+ inputs[:number] += 1
67
+ continue(inputs[:number])
68
+ end
69
+ end
70
+
71
+ it "pipes one step result to the next step" do
72
+ result = SubStep.run(:number => 10)
73
+ expect(result).to be_a_success
74
+ expect(result.value).to eq(41)
75
+ end
76
+ end
77
+
78
+
33
79
  describe 'Failure Matching' do
34
- class FailureMatch < SolidUseCase::Command
80
+ class FailureMatch < SolidUseCase::Base
35
81
  def run(inputs)
36
82
  attempt_all do
37
83
  step { fail_it(inputs) }
@@ -3,19 +3,19 @@ require 'spec_helper'
3
3
  describe 'Custom RSpec Matchers' do
4
4
  include SolidUseCase::RSpecMatchers
5
5
 
6
- class FailCase < SolidUseCase::Command
6
+ class FailCase < SolidUseCase::Base
7
7
  def run(error)
8
8
  fail(error)
9
9
  end
10
10
  end
11
11
 
12
- class SuccessCase < SolidUseCase::Command
12
+ class SuccessCase < SolidUseCase::Base
13
13
  def run(val)
14
- succeed(val)
14
+ continue(val)
15
15
  end
16
16
  end
17
17
 
18
- class ExceptionCase < SolidUseCase::Command
18
+ class ExceptionCase < SolidUseCase::Base
19
19
  def run(val)
20
20
  attempt_all do
21
21
  try { raise_exception }
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.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gilbert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-16 00:00:00.000000000 Z
11
+ date: 2014-07-22 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
- version: 0.2.0
19
+ version: 0.6.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
- version: 0.2.0
26
+ version: 0.6.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,20 +74,20 @@ 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
82
82
  - Rakefile
83
83
  - lib/solid_use_case.rb
84
- - lib/solid_use_case/command.rb
85
- - lib/solid_use_case/command/error_struct.rb
86
- - lib/solid_use_case/command/util.rb
84
+ - lib/solid_use_case/base.rb
85
+ - lib/solid_use_case/base/error_struct.rb
86
+ - lib/solid_use_case/base/util.rb
87
87
  - lib/solid_use_case/rspec_matchers.rb
88
88
  - lib/solid_use_case/version.rb
89
89
  - solid_use_case.gemspec
90
- - spec/command_spec.rb
90
+ - spec/base_spec.rb
91
91
  - spec/rspec_matchers_spec.rb
92
92
  - spec/spec_helper.rb
93
93
  homepage: https://github.com/mindeavor/solid_use_case
@@ -100,12 +100,12 @@ require_paths:
100
100
  - lib
101
101
  required_ruby_version: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - "~>"
103
+ - - ~>
104
104
  - !ruby/object:Gem::Version
105
105
  version: '2.0'
106
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
@@ -115,6 +115,7 @@ signing_key:
115
115
  specification_version: 4
116
116
  summary: A flexible UseCase pattern that works *with* your workflow, not against it.
117
117
  test_files:
118
- - spec/command_spec.rb
118
+ - spec/base_spec.rb
119
119
  - spec/rspec_matchers_spec.rb
120
120
  - spec/spec_helper.rb
121
+ has_rdoc:
@@ -1,22 +0,0 @@
1
- module SolidUseCase
2
- class Command
3
- include Deterministic::CoreExt::Either
4
- include CommandUtil
5
-
6
- def self.run(input_hash={})
7
- self.new.run(input_hash)
8
- end
9
-
10
- # # # # # #
11
- # Helpers #
12
- # # # # # #
13
-
14
- def fail(type, data={})
15
- data[:type] = type
16
- Failure(ErrorStruct.new(data))
17
- end
18
-
19
- alias :next_step :Success
20
- alias :succeed :Success
21
- end
22
- end