rest_my_case 1.0.0 → 1.1.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 +4 -4
- data/.rspec +4 -0
- data/README.md +2 -2
- data/lib/rest_my_case/base.rb +34 -34
- data/lib/rest_my_case/configuration.rb +13 -0
- data/lib/rest_my_case/context.rb +7 -11
- data/lib/rest_my_case/defense_attorney.rb +23 -2
- data/lib/rest_my_case/judges/base.rb +86 -0
- data/lib/rest_my_case/version.rb +1 -1
- data/lib/rest_my_case.rb +20 -3
- data/rest_my_case.gemspec +17 -15
- data/spec/rest_my_case/base_spec.rb +79 -0
- data/spec/rest_my_case/defense_attorney_spec.rb +34 -0
- data/spec/rest_my_case/judges/base_spec.rb +28 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/_send_email/base.rb +14 -0
- data/spec/support/_send_email/fetch_admins.rb +6 -0
- data/spec/support/_send_email/one_more_dependency.rb +6 -0
- data/spec/support/_send_email/to_admins.rb +11 -0
- data/spec/support/_send_email/to_user.rb +6 -0
- data/spec/support/_send_email/use_case.rb +11 -0
- data/spec/support/comments/create/base.rb +18 -0
- data/spec/support/comments/create/build_comment.rb +8 -0
- data/spec/support/comments/create/send_email.rb +13 -0
- data/spec/support/comments/find_one.rb +8 -0
- data/spec/support/comments/save_comment.rb +6 -0
- data/spec/support/comments/use_case.rb +11 -0
- data/spec/support/posts/create/base.rb +16 -0
- data/spec/support/posts/create/build_post.rb +8 -0
- data/spec/support/posts/save_post.rb +6 -0
- data/spec/support/posts/use_case.rb +6 -0
- metadata +79 -10
- data/lib/rest_my_case/helpers.rb +0 -11
- data/lib/rest_my_case/judge.rb +0 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24f1ea66d95ea0375eb3a27f226eacd76f615c18
|
4
|
+
data.tar.gz: aaff479de083593b50440e49c84cf68e3911a2ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ee5095a6139908f84ebf44c9e1e665f84dc794a43d08432813cfec5aaedb7de233515f7e64a9eee482f15a5f28002aceb14cba0d39123316c183437903095af
|
7
|
+
data.tar.gz: 0afb19fa366ac967335d80b7bcfe054b1deffaacfb064a00b296e7345d41f59bb7d239998bbb95506226c78ab43815aae0e040e88da7465d77eb8f59fec684d9
|
data/.rspec
ADDED
data/README.md
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# RestMyCase
|
2
|
+
Very light Ruby gem with everything you need in a "The Clean Architecture" use case scenario. Strongly inspired on the tdantas/usecasing gem.
|
data/lib/rest_my_case/base.rb
CHANGED
@@ -1,35 +1,51 @@
|
|
1
|
+
require "rest_my_case/judges/base"
|
2
|
+
|
1
3
|
module RestMyCase
|
2
4
|
|
3
5
|
class Base
|
4
6
|
|
5
7
|
def self.depends(*use_cases)
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
# List of use case classes that the current class depends on
|
10
|
-
def self.local_dependencies
|
11
|
-
@local_dependencies ||= []
|
8
|
+
dependencies.push *use_cases
|
12
9
|
end
|
13
10
|
|
14
|
-
# List of use cases that the current class depends on, plus its parent class
|
15
|
-
# This list will be used during .perform
|
16
11
|
def self.dependencies
|
17
|
-
|
12
|
+
@dependencies ||= []
|
18
13
|
end
|
19
14
|
|
20
15
|
def self.perform(attributes = {})
|
21
|
-
|
16
|
+
unless attributes.respond_to?(:to_hash)
|
17
|
+
raise ArgumentError.new('Must respond_to method #to_hash')
|
18
|
+
end
|
19
|
+
|
20
|
+
Judges::Base.execute_the_sentence(self, attributes.to_hash)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.context_accessor(*methods)
|
24
|
+
context_writer(*methods)
|
25
|
+
context_reader(*methods)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.context_writer(*methods)
|
29
|
+
methods.each do |method|
|
30
|
+
define_method("#{method}=") { |value| context.send "#{method}=", value }
|
31
|
+
end
|
22
32
|
end
|
23
33
|
|
34
|
+
def self.context_reader(*methods)
|
35
|
+
methods.each { |method| define_method(method) { context.send(method) } }
|
36
|
+
end
|
37
|
+
|
38
|
+
##################### INSTANCE METHODS BELLOW ###################
|
39
|
+
|
24
40
|
attr_reader :context, :should_abort, :should_skip
|
25
41
|
|
26
42
|
def initialize(context)
|
27
|
-
@context
|
28
|
-
|
29
|
-
@should_abort =
|
43
|
+
@context = context
|
44
|
+
@should_skip = false
|
45
|
+
@should_abort = false
|
30
46
|
end
|
31
47
|
|
32
|
-
def
|
48
|
+
def setup; end
|
33
49
|
|
34
50
|
def perform; end
|
35
51
|
|
@@ -37,44 +53,28 @@ module RestMyCase
|
|
37
53
|
|
38
54
|
def final; end
|
39
55
|
|
40
|
-
# Calls #abort and populates the context's errors
|
41
56
|
def fail(message = '')
|
42
|
-
abort
|
43
|
-
|
44
|
-
@context.errors[self.class.name].push message
|
57
|
+
abort && @context.errors[self.class.name].push(message)
|
45
58
|
end
|
46
59
|
|
47
|
-
# Calls #fail and also prevents the next line of code to be ran
|
48
60
|
def fail!(message = '')
|
49
|
-
fail
|
50
|
-
|
51
|
-
raise Errors::Abort
|
61
|
+
fail(message) && raise(Errors::Abort)
|
52
62
|
end
|
53
63
|
|
54
|
-
# Prevents the next use case to be ran and will trigger the rollback process
|
55
64
|
def abort
|
56
65
|
@should_abort = true
|
57
66
|
end
|
58
67
|
|
59
|
-
# Calls #abort and prevents the next line of code to be ran
|
60
68
|
def abort!
|
61
|
-
abort
|
62
|
-
|
63
|
-
raise Errors::Abort
|
69
|
+
abort && raise(Errors::Abort)
|
64
70
|
end
|
65
71
|
|
66
|
-
# To be used during the #before method:
|
67
|
-
# Prevents the current use case to be
|
68
|
-
# ran (during perform), but not the next ones
|
69
72
|
def skip
|
70
73
|
@should_skip = true
|
71
74
|
end
|
72
75
|
|
73
|
-
# Calls #skip and prevents the next line of code to be ran
|
74
76
|
def skip!
|
75
|
-
skip
|
76
|
-
|
77
|
-
raise Errors::Skip
|
77
|
+
skip && raise(Errors::Skip)
|
78
78
|
end
|
79
79
|
|
80
80
|
end
|
data/lib/rest_my_case/context.rb
CHANGED
@@ -1,23 +1,19 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
1
3
|
module RestMyCase
|
2
4
|
|
3
5
|
class Context < OpenStruct
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(attributes)
|
8
|
-
if !attributes.is_a?(::Hash) && !attributes.is_a?(Context)
|
9
|
-
raise ArgumentError.new('Must be a Hash or Context')
|
10
|
-
end
|
11
|
-
|
12
|
-
super Helpers.stringify_keys(attributes)
|
13
|
-
|
14
|
-
@errors = Hash.new { |hash, key| hash[key] = [] }
|
7
|
+
def errors
|
8
|
+
@errors ||= Hash.new { |hash, key| hash[key] = [] }
|
15
9
|
end
|
16
10
|
|
17
11
|
def valid?
|
18
|
-
|
12
|
+
errors.empty?
|
19
13
|
end
|
20
14
|
|
15
|
+
alias :ok? :valid?
|
16
|
+
|
21
17
|
def serializable_hash(options = nil)
|
22
18
|
marshal_dump
|
23
19
|
end
|
@@ -1,11 +1,32 @@
|
|
1
|
+
require "rest_my_case/context"
|
2
|
+
|
1
3
|
module RestMyCase
|
2
4
|
|
3
5
|
module DefenseAttorney
|
4
6
|
|
5
|
-
|
7
|
+
def self.build_use_cases_for_the(defendant, attributes)
|
8
|
+
shared_context = Context.new attributes
|
9
|
+
|
10
|
+
dependencies(defendant).map do |use_case|
|
11
|
+
use_case.new(shared_context)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.dependencies(use_case)
|
16
|
+
return [] unless use_case.respond_to?(:dependencies)
|
17
|
+
|
18
|
+
if parent_dependencies_first?(use_case)
|
19
|
+
dependencies(use_case.superclass) | use_case.dependencies
|
20
|
+
else
|
21
|
+
use_case.dependencies | dependencies(use_case.superclass)
|
22
|
+
end
|
23
|
+
end
|
6
24
|
|
7
|
-
|
25
|
+
protected ###################### PROTECTED #########################
|
8
26
|
|
27
|
+
def self.parent_dependencies_first?(use_case)
|
28
|
+
# use_case.parent_dependencies_first ||
|
29
|
+
RestMyCase.configuration.parent_dependencies_first
|
9
30
|
end
|
10
31
|
|
11
32
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require "rest_my_case/defense_attorney"
|
2
|
+
|
3
|
+
module RestMyCase
|
4
|
+
module Judges
|
5
|
+
|
6
|
+
class Base
|
7
|
+
|
8
|
+
def self.execute_the_sentence(defendant, attributes)
|
9
|
+
new_trial = self.new(defendant, attributes)
|
10
|
+
|
11
|
+
new_trial.run_setup_methods
|
12
|
+
new_trial.run_perform_methods
|
13
|
+
new_trial.run_rollback_methods
|
14
|
+
new_trial.run_final_methods
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(defendant, attributes)
|
18
|
+
@use_cases =
|
19
|
+
DefenseAttorney.build_use_cases_for_the(defendant, attributes)
|
20
|
+
|
21
|
+
@performed_use_cases = []
|
22
|
+
@use_case_that_aborted = false
|
23
|
+
end
|
24
|
+
|
25
|
+
protected #################### PROTECTED ####################
|
26
|
+
|
27
|
+
def run_setup_methods
|
28
|
+
@use_cases.each do |use_case|
|
29
|
+
break if method_setup_has_aborted use_case
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def run_perform_methods
|
34
|
+
return nil if @use_case_that_aborted
|
35
|
+
|
36
|
+
@use_cases.each do |use_case|
|
37
|
+
break if method_perform_has_aborted use_case
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def run_rollback_methods
|
42
|
+
return nil unless @use_case_that_aborted
|
43
|
+
|
44
|
+
@performed_use_cases.revert.each do |use_case|
|
45
|
+
run_method(:rollback, use_case)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def run_final_methods
|
50
|
+
@use_cases.each { |use_case| run_method(:final, use_case) }
|
51
|
+
end
|
52
|
+
|
53
|
+
private #################### PRIVATE ######################
|
54
|
+
|
55
|
+
def method_setup_has_aborted(use_case)
|
56
|
+
method_aborts?(:setup, use_case)
|
57
|
+
end
|
58
|
+
|
59
|
+
def method_perform_has_aborted(use_case)
|
60
|
+
return false if use_case.should_skip
|
61
|
+
|
62
|
+
@performed_use_cases.push use_case
|
63
|
+
|
64
|
+
method_aborts?(:perform, use_case)
|
65
|
+
end
|
66
|
+
|
67
|
+
def method_aborts?(method_name, use_case)
|
68
|
+
begin
|
69
|
+
run_method(method_name, use_case)
|
70
|
+
|
71
|
+
use_case.should_abort
|
72
|
+
rescue Errors::Skip => exception
|
73
|
+
false
|
74
|
+
rescue Errors::Abort => exception
|
75
|
+
@use_case_that_aborted = use_case
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def run_method(method_name, use_case)
|
80
|
+
use_case.send(method_name)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
data/lib/rest_my_case/version.rb
CHANGED
data/lib/rest_my_case.rb
CHANGED
@@ -1,7 +1,24 @@
|
|
1
|
+
require "rest_my_case/configuration"
|
1
2
|
require "rest_my_case/version"
|
2
|
-
require "rest_my_case/context"
|
3
3
|
require "rest_my_case/errors"
|
4
|
-
require "rest_my_case/judge"
|
5
4
|
require "rest_my_case/base"
|
6
5
|
|
7
|
-
module RestMyCase
|
6
|
+
module RestMyCase
|
7
|
+
|
8
|
+
def self.configure(&block)
|
9
|
+
yield(Config)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.configure
|
13
|
+
yield configuration
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configuration
|
17
|
+
@configuration ||= Configuration.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.reset_configuration
|
21
|
+
@configuration = Configuration.new
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/rest_my_case.gemspec
CHANGED
@@ -3,21 +3,23 @@ lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require 'rest_my_case/version'
|
5
5
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "rest_my_case"
|
8
|
+
gem.version = RestMyCase::VERSION
|
9
|
+
gem.authors = ["goncalvesjoao"]
|
10
|
+
gem.email = ["goncalves.joao@gmail.com"]
|
11
|
+
gem.summary = %q{Quick and light "The Clean Architecture" use case implementation.}
|
12
|
+
gem.description = %q{Very light Ruby gem with everything you need in a "The Clean Architecture" use case scenario}
|
13
|
+
gem.homepage = "https://github.com/goncalvesjoao/rest_my_case"
|
14
|
+
gem.license = "MIT"
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
gem.files = `git ls-files -z`.split("\x0")
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
gem.add_development_dependency "pry", '~> 0.10'
|
22
|
+
gem.add_development_dependency "rake", '~> 10.1'
|
23
|
+
gem.add_development_dependency "rspec",'~> 3.2'
|
24
|
+
gem.add_development_dependency "simplecov", '~> 0.9'
|
23
25
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RestMyCase::Base do
|
4
|
+
|
5
|
+
context "When a use case depends on other use cases" do
|
6
|
+
|
7
|
+
it ".dependencies should list the class's dependencies" do
|
8
|
+
expect(Posts::Create::Base.dependencies).to \
|
9
|
+
eq [Posts::Create::BuildPost, Posts::SavePost]
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
context "When a use case inherits from another that also has its own dependencies" do
|
15
|
+
|
16
|
+
it ".dependencies should only list the class's dependencies" do
|
17
|
+
expect(Comments::Create::SendEmail.dependencies).to eq [Comments::FindOne]
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".context_accessor" do
|
23
|
+
|
24
|
+
let(:context) { RestMyCase::Context.new(id: 1, comment: 'my comment', session: -1) }
|
25
|
+
let(:use_case) { Comments::FindOne.new(context) }
|
26
|
+
|
27
|
+
it "Should create getters targeting to context" do
|
28
|
+
expect(use_case.respond_to?(:comment)).to be true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "Should create setters targeting to context" do
|
32
|
+
expect(use_case.respond_to?(:comment=)).to be true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "Getter should delegate to context" do
|
36
|
+
expect(use_case.comment).to eq context.comment
|
37
|
+
end
|
38
|
+
|
39
|
+
it "Setter should delegate to context" do
|
40
|
+
use_case.comment = 'your comment'
|
41
|
+
expect(use_case.context.comment).to eq 'your comment'
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe ".context_writer" do
|
47
|
+
|
48
|
+
let(:use_case) { Comments::FindOne.new(RestMyCase::Context.new) }
|
49
|
+
|
50
|
+
it "Should create setters targeting to context" do
|
51
|
+
expect(use_case.respond_to?(:id)).to be false
|
52
|
+
expect(use_case.respond_to?(:id=)).to be true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "Setter should delegate to context" do
|
56
|
+
use_case.id = 2
|
57
|
+
|
58
|
+
expect(use_case.context.id).to eq 2
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
describe ".context_reader" do
|
64
|
+
|
65
|
+
let(:context) { RestMyCase::Context.new(id: 1, comment: 'my comment', session: -1) }
|
66
|
+
let(:use_case) { Comments::FindOne.new(context) }
|
67
|
+
|
68
|
+
it "Should create getters targeting to context" do
|
69
|
+
expect(use_case.respond_to?(:session)).to be true
|
70
|
+
expect(use_case.respond_to?(:session=)).to be false
|
71
|
+
end
|
72
|
+
|
73
|
+
it "Getter should delegate to context" do
|
74
|
+
expect(use_case.session).to eq context.session
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RestMyCase::DefenseAttorney do
|
4
|
+
|
5
|
+
describe ".dependencies" do
|
6
|
+
|
7
|
+
context "When a use case depends on other use cases" do
|
8
|
+
|
9
|
+
let(:use_cases) do
|
10
|
+
RestMyCase::DefenseAttorney.dependencies Posts::Create::Base
|
11
|
+
end
|
12
|
+
|
13
|
+
it "use_cases should be in the proper order" do
|
14
|
+
expect(use_cases).to eq [Posts::Create::BuildPost, Posts::SavePost]
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
context "When a use case depends on other use cases" do
|
20
|
+
|
21
|
+
let(:use_cases) do
|
22
|
+
RestMyCase::DefenseAttorney.dependencies Comments::Create::SendEmail
|
23
|
+
end
|
24
|
+
|
25
|
+
it "use_cases should be in the proper order" do
|
26
|
+
expect(use_cases).to \
|
27
|
+
eq [Comments::FindOne, SendEmail::ToAdmins, SendEmail::ToUser, SendEmail::OneMoreDependency]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RestMyCase::Judges::Base do
|
4
|
+
|
5
|
+
describe "#build_use_cases_for_the_defendant" do
|
6
|
+
|
7
|
+
# context "When a use case depends on other use cases" do
|
8
|
+
# before { @result = defense_attorney.build_use_cases_for_the_defendant }
|
9
|
+
# let(:attributes) { { id: 1, comment: 'my comment', session: -1 } }
|
10
|
+
# let(:defense_attorney) do
|
11
|
+
# RestMyCase::DefenseAttorney.new(Comments::Create::Base, attributes)
|
12
|
+
# end
|
13
|
+
|
14
|
+
# it "Should instanciate 3 objects" do
|
15
|
+
# expect(@result.length).to be 3
|
16
|
+
# end
|
17
|
+
|
18
|
+
# it "dass" do
|
19
|
+
# expect(@result[0]).to be_a Comments::Create::BuildComment
|
20
|
+
# expect(@result[1]).to be_a Comments::SaveComment
|
21
|
+
# expect(@result[2]).to be_a Comments::Create::SendEmail
|
22
|
+
# end
|
23
|
+
|
24
|
+
# end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "simplecov"
|
2
|
+
|
3
|
+
SimpleCov.start do
|
4
|
+
root("lib/")
|
5
|
+
coverage_dir("../tmp/coverage/")
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'pry'
|
9
|
+
require 'rest_my_case'
|
10
|
+
$: << File.expand_path('../', File.dirname(__FILE__))
|
11
|
+
|
12
|
+
Dir["./spec/**/support/**/*.rb"].each do |file|
|
13
|
+
require file
|
14
|
+
end
|
15
|
+
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.run_all_when_everything_filtered = true
|
18
|
+
config.filter_run :focus
|
19
|
+
|
20
|
+
config.order = 'random'
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../use_case'
|
2
|
+
require_relative 'build_comment'
|
3
|
+
require_relative 'send_email'
|
4
|
+
require_relative '../save_comment'
|
5
|
+
|
6
|
+
module Comments
|
7
|
+
module Create
|
8
|
+
|
9
|
+
class Base < UseCase
|
10
|
+
|
11
|
+
depends BuildComment,
|
12
|
+
SaveComment,
|
13
|
+
SendEmail
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest_my_case
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- goncalvesjoao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: pry
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0.10'
|
20
20
|
type: :development
|
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: '
|
26
|
+
version: '0.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '10.
|
33
|
+
version: '10.1'
|
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
|
-
version: '10.
|
40
|
+
version: '10.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.9'
|
41
69
|
description: Very light Ruby gem with everything you need in a "The Clean Architecture"
|
42
70
|
use case scenario
|
43
71
|
email:
|
@@ -47,6 +75,7 @@ extensions: []
|
|
47
75
|
extra_rdoc_files: []
|
48
76
|
files:
|
49
77
|
- ".gitignore"
|
78
|
+
- ".rspec"
|
50
79
|
- Gemfile
|
51
80
|
- LICENSE
|
52
81
|
- LICENSE.txt
|
@@ -54,13 +83,33 @@ files:
|
|
54
83
|
- Rakefile
|
55
84
|
- lib/rest_my_case.rb
|
56
85
|
- lib/rest_my_case/base.rb
|
86
|
+
- lib/rest_my_case/configuration.rb
|
57
87
|
- lib/rest_my_case/context.rb
|
58
88
|
- lib/rest_my_case/defense_attorney.rb
|
59
89
|
- lib/rest_my_case/errors.rb
|
60
|
-
- lib/rest_my_case/
|
61
|
-
- lib/rest_my_case/judge.rb
|
90
|
+
- lib/rest_my_case/judges/base.rb
|
62
91
|
- lib/rest_my_case/version.rb
|
63
92
|
- rest_my_case.gemspec
|
93
|
+
- spec/rest_my_case/base_spec.rb
|
94
|
+
- spec/rest_my_case/defense_attorney_spec.rb
|
95
|
+
- spec/rest_my_case/judges/base_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- spec/support/_send_email/base.rb
|
98
|
+
- spec/support/_send_email/fetch_admins.rb
|
99
|
+
- spec/support/_send_email/one_more_dependency.rb
|
100
|
+
- spec/support/_send_email/to_admins.rb
|
101
|
+
- spec/support/_send_email/to_user.rb
|
102
|
+
- spec/support/_send_email/use_case.rb
|
103
|
+
- spec/support/comments/create/base.rb
|
104
|
+
- spec/support/comments/create/build_comment.rb
|
105
|
+
- spec/support/comments/create/send_email.rb
|
106
|
+
- spec/support/comments/find_one.rb
|
107
|
+
- spec/support/comments/save_comment.rb
|
108
|
+
- spec/support/comments/use_case.rb
|
109
|
+
- spec/support/posts/create/base.rb
|
110
|
+
- spec/support/posts/create/build_post.rb
|
111
|
+
- spec/support/posts/save_post.rb
|
112
|
+
- spec/support/posts/use_case.rb
|
64
113
|
homepage: https://github.com/goncalvesjoao/rest_my_case
|
65
114
|
licenses:
|
66
115
|
- MIT
|
@@ -85,4 +134,24 @@ rubygems_version: 2.4.2
|
|
85
134
|
signing_key:
|
86
135
|
specification_version: 4
|
87
136
|
summary: Quick and light "The Clean Architecture" use case implementation.
|
88
|
-
test_files:
|
137
|
+
test_files:
|
138
|
+
- spec/rest_my_case/base_spec.rb
|
139
|
+
- spec/rest_my_case/defense_attorney_spec.rb
|
140
|
+
- spec/rest_my_case/judges/base_spec.rb
|
141
|
+
- spec/spec_helper.rb
|
142
|
+
- spec/support/_send_email/base.rb
|
143
|
+
- spec/support/_send_email/fetch_admins.rb
|
144
|
+
- spec/support/_send_email/one_more_dependency.rb
|
145
|
+
- spec/support/_send_email/to_admins.rb
|
146
|
+
- spec/support/_send_email/to_user.rb
|
147
|
+
- spec/support/_send_email/use_case.rb
|
148
|
+
- spec/support/comments/create/base.rb
|
149
|
+
- spec/support/comments/create/build_comment.rb
|
150
|
+
- spec/support/comments/create/send_email.rb
|
151
|
+
- spec/support/comments/find_one.rb
|
152
|
+
- spec/support/comments/save_comment.rb
|
153
|
+
- spec/support/comments/use_case.rb
|
154
|
+
- spec/support/posts/create/base.rb
|
155
|
+
- spec/support/posts/create/build_post.rb
|
156
|
+
- spec/support/posts/save_post.rb
|
157
|
+
- spec/support/posts/use_case.rb
|
data/lib/rest_my_case/helpers.rb
DELETED
data/lib/rest_my_case/judge.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require "rest_my_case/defense_attorney"
|
2
|
-
|
3
|
-
module RestMyCase
|
4
|
-
|
5
|
-
module Judge
|
6
|
-
|
7
|
-
extend self
|
8
|
-
|
9
|
-
def execute_the_sentence(defendant, context)
|
10
|
-
@use_case_that_aborted = false
|
11
|
-
|
12
|
-
@use_cases = DefenseAttorney.build_use_cases_for_the defendant, context
|
13
|
-
|
14
|
-
run_before_methods
|
15
|
-
|
16
|
-
run_perform_methods
|
17
|
-
|
18
|
-
run_rollback_methods
|
19
|
-
|
20
|
-
run_final_methods
|
21
|
-
end
|
22
|
-
|
23
|
-
protected #################### PROTECTED ####################
|
24
|
-
|
25
|
-
def run_before_methods
|
26
|
-
@use_cases.each do |use_case|
|
27
|
-
break if run_method(:before, use_case) == 'abort'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def run_perform_methods
|
32
|
-
return nil if @use_case_that_aborted
|
33
|
-
|
34
|
-
@use_cases.each do |use_case|
|
35
|
-
break if run_method(:perform, use_case) == 'abort'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def run_rollback_methods
|
40
|
-
return nil unless @use_case_that_aborted
|
41
|
-
|
42
|
-
# Revert the list, remove all use cases until you find
|
43
|
-
# the use_case_that_aborted and run .map(&:rollback)
|
44
|
-
# on the remaining elements
|
45
|
-
end
|
46
|
-
|
47
|
-
def run_final_methods
|
48
|
-
@use_cases.map(&:final)
|
49
|
-
end
|
50
|
-
|
51
|
-
private #################### PRIVATE ######################
|
52
|
-
|
53
|
-
def run_method(method_name, use_case)
|
54
|
-
begin
|
55
|
-
return 'skip' if use_case.should_skip
|
56
|
-
|
57
|
-
use_case.send(method_name)
|
58
|
-
|
59
|
-
use_case.should_abort ? 'abort' : 'ok'
|
60
|
-
rescue Errors::Skip => exception
|
61
|
-
'skip'
|
62
|
-
rescue Errors::Abort => exception
|
63
|
-
@use_case_that_aborted = use_case
|
64
|
-
'abort'
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|