caze 0.1.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99a71bded9755881944f839759a8d2c9d8aa521f
4
- data.tar.gz: 57c4a32446ab668e9c1f3939010c8695abf279f1
3
+ metadata.gz: 82ba902e32ad7dd6d95716a2c36a1183f4a34a01
4
+ data.tar.gz: 40e3bb7a9736255e618ba9203f2dfee72bb234f0
5
5
  SHA512:
6
- metadata.gz: 32950a65706b076730f5dd61dcf0280fe0dc8425ca154e50e9e1213c8a726f7937adec28ebea7bd1d369eb74a0b7ae4190756dc37d39ff50991e0fc0daf47ee6
7
- data.tar.gz: 372c8062bda691df0d8ae6fff1cc89508fcbc0ddcacdca31c15973d6c05c4faff26f2328a8a7586b0e5655e4655593d5e2781fda056432b069b07ca6d5d05d9d
6
+ metadata.gz: 270c160bdfa4de547c07b210b67d495a341a6a86c3001511d33a16670837870946e85535ca8e4f0d59e49dde44e30a2ba0d19c81dc94d6582a813ab160adcfa7
7
+ data.tar.gz: 4f57cb0efea9b52a9592cb2fb33b20673fec1415f50ec50f9118bbf815723f66428f6f3e8b7da8a4efc587acf5b62564675cb16c36e567f692616a9c60f2ba7e
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [0.1.1] - 2015-10-30
7
+
8
+ ### Added
9
+
10
+ - Add support to raise errors with the use case name.
11
+
6
12
  ## [0.1.0] - 2015-10-20
7
13
 
8
14
  ### Added
data/README.md CHANGED
@@ -57,6 +57,22 @@ Note that the transaction handler must implement `#transaction` and
57
57
  return the value inside the block. It will also be responsible for handle errors
58
58
  and rollback if necessary.
59
59
 
60
+
61
+ ## Using exception interceptor
62
+
63
+ You can use the raise use case exception in order to know the use case name when an
64
+ error happen.
65
+
66
+ While declaring which use case your app has, you can set the option
67
+ `raise_use_case_exception` to `true`.
68
+
69
+ ```ruby
70
+ has_use_case :say_my_name, UseCases::SayMyName, raise_use_case_exception: true
71
+ ```
72
+
73
+ It should intercept yours exceptions and write the use case name on it following the
74
+ pattern: `SayMyName: This is you error message Heisenberg`
75
+
60
76
  ## Exporting instance methods as class methods
61
77
 
62
78
  Inside the use case classes you can use the `.export` method, so in the `UseCases::Sum` instead of this:
@@ -5,6 +5,7 @@ require 'active_support/core_ext/module/delegation'
5
5
 
6
6
  module Caze
7
7
  class NoTransactionMethodError < StandardError; end
8
+ class UseCaseError < StandardError; end
8
9
  extend ActiveSupport::Concern
9
10
 
10
11
  module ClassMethods
@@ -12,21 +13,30 @@ module Caze
12
13
 
13
14
  def has_use_case(use_case_name, use_case_class, options = {})
14
15
  transactional = options.fetch(:transactional) { false }
16
+ raise_use_case_exception = options.fetch(:raise_use_case_exception) { false }
15
17
 
16
18
  define_singleton_method(use_case_name, Proc.new do |*args|
17
19
  use_case = get_use_case_class(use_case_class)
18
20
 
19
- if transactional
20
- handler = self.transaction_handler
21
+ begin
22
+ if transactional
23
+ handler = self.transaction_handler
21
24
 
22
- unless handler
23
- raise NoTransactionMethodError,
24
- "This action should be executed inside a transaction. But no transaction handler was configured."
25
- end
25
+ unless handler
26
+ raise NoTransactionMethodError,
27
+ "This action should be executed inside a transaction. But no transaction handler was configured."
28
+ end
26
29
 
27
- handler.transaction { use_case.send(use_case_name, *args) }
28
- else
29
- use_case.send(use_case_name, *args)
30
+ handler.transaction { use_case.send(use_case_name, *args) }
31
+ else
32
+ use_case.send(use_case_name, *args)
33
+ end
34
+ rescue => e
35
+ if raise_use_case_exception
36
+ raise UseCaseError.new(e).exception("#{use_case_class}: #{e.message}")
37
+ else
38
+ raise e
39
+ end
30
40
  end
31
41
  end)
32
42
  end
@@ -1,3 +1,3 @@
1
1
  module Caze
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -16,10 +16,16 @@ describe Caze do
16
16
  export :the_answer, as: :the_transactional_answer
17
17
  export :the_answer, as: :the_answer_by_another_entry_point
18
18
  export :the_answer, as: :the_universal_answer
19
+ export :the_answer, as: :the_transactional_and_intercepted_answer
20
+ export :the_question
19
21
 
20
22
  def the_answer
21
23
  42
22
24
  end
25
+
26
+ def the_question
27
+ raise 'You did not say yet.'
28
+ end
23
29
  end
24
30
 
25
31
  class DummyUseCaseWithParam
@@ -44,6 +50,9 @@ describe Caze do
44
50
  has_use_case :the_universal_answer, :DummyUseCase
45
51
  has_use_case :the_answer_for, DummyUseCaseWithParam
46
52
  has_use_case :the_transactional_answer, DummyUseCase, transactional: true
53
+ has_use_case :the_question, DummyUseCase, raise_use_case_exception: true
54
+ has_use_case :the_transactional_and_intercepted_answer, DummyUseCase, transactional: true,
55
+ raise_use_case_exception: true
47
56
  end
48
57
  end
49
58
 
@@ -102,6 +111,26 @@ describe Caze do
102
111
  end
103
112
  end
104
113
  end
114
+
115
+ context 'using exception' do
116
+ context 'when the use case raises an exception' do
117
+ it 'shows the use case name' do
118
+ expect {
119
+ app.the_question
120
+ }.to raise_error('DummyUseCase: You did not say yet.')
121
+ end
122
+ end
123
+ end
124
+
125
+ context 'using exception and transaction' do
126
+ context 'when the use case raises the transaction exception' do
127
+ it 'shows the use case name' do
128
+ expect {
129
+ app.the_transactional_and_intercepted_answer
130
+ }.to raise_error(/DummyUseCase: This action should be executed inside a transaction/)
131
+ end
132
+ end
133
+ end
105
134
  end
106
135
 
107
136
  describe '.export' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caze
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Sampaio
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-20 00:00:00.000000000 Z
12
+ date: 2015-10-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler