caze 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82ba902e32ad7dd6d95716a2c36a1183f4a34a01
4
- data.tar.gz: 40e3bb7a9736255e618ba9203f2dfee72bb234f0
3
+ metadata.gz: 4348280a267c35d66793ac71a0bbef6ff6ee3513
4
+ data.tar.gz: dd7ecc669f618e9067493246a2210a69b5caa65e
5
5
  SHA512:
6
- metadata.gz: 270c160bdfa4de547c07b210b67d495a341a6a86c3001511d33a16670837870946e85535ca8e4f0d59e49dde44e30a2ba0d19c81dc94d6582a813ab160adcfa7
7
- data.tar.gz: 4f57cb0efea9b52a9592cb2fb33b20673fec1415f50ec50f9118bbf815723f66428f6f3e8b7da8a4efc587acf5b62564675cb16c36e567f692616a9c60f2ba7e
6
+ metadata.gz: 8b63e83e36489b90fb83d508f2309f811437a9a5d4bb8b521040423c588f0de0ebb3d4df453ecfdf1f9cbfadc208a6d742bc06c3bbd5a1e514f67bf24cb528ea
7
+ data.tar.gz: 7afbd83e99b8f85b58df53fca3a1ca2f8b4a44f1e84d65c7b050c4ddacf449f8f7d1d97d756b9c103c5ffb4bc32963d8429d94d3c8d004262d6d47fa96a828d3
@@ -3,6 +3,13 @@
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.2.0] - 2016-01-07
7
+
8
+ ### Change
9
+
10
+ - Raise errors from inside the use case context, so we can have names easier to identify.
11
+ - Add the complete backtrace to the raised error
12
+
6
13
  ## [0.1.1] - 2015-10-30
7
14
 
8
15
  ### Added
@@ -29,6 +36,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
29
36
  - Change main methods to define use cases and export them.
30
37
  - Add more details about the API and how to use the lib at README.
31
38
 
32
- [unreleased]: https://github.com/magnetis/caze/compare/v0.0.4...HEAD
39
+ [unreleased]: https://github.com/magnetis/caze/compare/v0.2.0...HEAD
40
+ [0.2.0]: https://github.com/magnetis/caze/compare/v0.1.1...v0.2.0
41
+ [0.1.1]: https://github.com/magnetis/caze/compare/v0.1.0...v0.1.1
42
+ [0.1.0]: https://github.com/magnetis/caze/compare/v0.0.4...v0.1.0
33
43
  [0.0.4]: https://github.com/magnetis/caze/compare/v0.0.3...v0.0.4
34
44
  [0.0.3]: https://github.com/magnetis/caze/compare/v0.0.2...v0.0.3
@@ -5,7 +5,6 @@ require 'active_support/core_ext/module/delegation'
5
5
 
6
6
  module Caze
7
7
  class NoTransactionMethodError < StandardError; end
8
- class UseCaseError < StandardError; end
9
8
  extend ActiveSupport::Concern
10
9
 
11
10
  module ClassMethods
@@ -33,7 +32,7 @@ module Caze
33
32
  end
34
33
  rescue => e
35
34
  if raise_use_case_exception
36
- raise UseCaseError.new(e).exception("#{use_case_class}: #{e.message}")
35
+ raise raise_use_case_error(use_case, e)
37
36
  else
38
37
  raise e
39
38
  end
@@ -59,5 +58,20 @@ module Caze
59
58
 
60
59
  use_case_class
61
60
  end
61
+
62
+ # This method intends to inject the error inside the context of the use case,
63
+ # so we can identify the use case from it was raised
64
+ def raise_use_case_error(use_case, error)
65
+ demodulized_error_class = error.class.name.split('::').last
66
+
67
+ base_class = Class.new(error.class)
68
+
69
+ error_class = use_case.const_set(demodulized_error_class, base_class)
70
+
71
+ error_instance = error_class.new(error.message)
72
+ error_instance.set_backtrace(error.backtrace)
73
+
74
+ raise error_instance
75
+ end
62
76
  end
63
77
  end
@@ -1,3 +1,3 @@
1
1
  module Caze
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -5,7 +5,7 @@ describe Caze do
5
5
  before do
6
6
  # Removing constant definitions if they exist
7
7
  # This avoids state to be permanent through tests
8
- [:DummyUseCase, :DummyUseCaseWithParam, :Dummy].each do |const|
8
+ [:DummyUseCase, :DummyUseCaseWithParam, :Dummy, :DummyUseCaseTest].each do |const|
9
9
  Object.send(:remove_const, const) if Object.constants.include?(const)
10
10
  end
11
11
 
@@ -42,6 +42,22 @@ describe Caze do
42
42
  end
43
43
  end
44
44
 
45
+ class DummyUseCaseTest
46
+ include Caze
47
+
48
+ export :the_question
49
+
50
+ def the_question
51
+ raise 'We do not know the question'
52
+ end
53
+ end
54
+
55
+ module DummyNamespace
56
+ include Caze
57
+
58
+ has_use_case :the_question, DummyUseCaseTest, raise_use_case_exception: true
59
+ end
60
+
45
61
  module Dummy
46
62
  include Caze
47
63
 
@@ -58,6 +74,7 @@ describe Caze do
58
74
 
59
75
  let(:use_case) { DummyUseCase }
60
76
  let(:app) { Dummy }
77
+ let(:namespaced_use_case) { DummyNamespace }
61
78
 
62
79
  describe '.has_use_case' do
63
80
  it 'delegates the message to the use case' do
@@ -114,10 +131,10 @@ describe Caze do
114
131
 
115
132
  context 'using exception' do
116
133
  context 'when the use case raises an exception' do
117
- it 'shows the use case name' do
134
+ it 'raises with the namespace of the use case' do
118
135
  expect {
119
- app.the_question
120
- }.to raise_error('DummyUseCase: You did not say yet.')
136
+ namespaced_use_case.the_question
137
+ }.to raise_error(DummyUseCaseTest::RuntimeError)
121
138
  end
122
139
  end
123
140
  end
@@ -127,7 +144,7 @@ describe Caze do
127
144
  it 'shows the use case name' do
128
145
  expect {
129
146
  app.the_transactional_and_intercepted_answer
130
- }.to raise_error(/DummyUseCase: This action should be executed inside a transaction/)
147
+ }.to raise_error(Caze::NoTransactionMethodError, "This action should be executed inside a transaction. But no transaction handler was configured.")
131
148
  end
132
149
  end
133
150
  end
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.1
4
+ version: 0.2.0
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-30 00:00:00.000000000 Z
12
+ date: 2016-01-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler