teckel 0.4.0 → 0.8.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/CHANGELOG.md +71 -0
- data/README.md +3 -3
- data/lib/teckel/chain/config.rb +286 -0
- data/lib/teckel/chain/result.rb +3 -3
- data/lib/teckel/chain/runner.rb +28 -17
- data/lib/teckel/chain.rb +14 -190
- data/lib/teckel/config.rb +13 -7
- data/lib/teckel/operation/config.rb +400 -0
- data/lib/teckel/operation/result.rb +8 -8
- data/lib/teckel/operation/runner.rb +29 -25
- data/lib/teckel/operation.rb +87 -388
- data/lib/teckel/result.rb +8 -6
- data/lib/teckel/version.rb +1 -1
- data/lib/teckel.rb +0 -1
- data/spec/chain/around_hook_spec.rb +100 -0
- data/spec/chain/default_settings_spec.rb +39 -0
- data/spec/chain/inheritance_spec.rb +44 -44
- data/spec/chain/none_input_spec.rb +36 -0
- data/spec/chain/results_spec.rb +28 -28
- data/spec/chain_spec.rb +132 -57
- data/spec/doctest_helper.rb +1 -0
- data/spec/operation/config_spec.rb +227 -0
- data/spec/operation/contract_trace_spec.rb +118 -0
- data/spec/operation/default_settings_spec.rb +120 -0
- data/spec/operation/fail_on_input_spec.rb +103 -0
- data/spec/operation/inheritance_spec.rb +38 -38
- data/spec/operation/result_spec.rb +27 -12
- data/spec/operation/results_spec.rb +67 -67
- data/spec/operation_spec.rb +276 -230
- data/spec/rb27/pattern_matching_spec.rb +2 -2
- data/spec/result_spec.rb +12 -10
- data/spec/spec_helper.rb +10 -0
- metadata +41 -12
- data/spec/chain_around_hook_spec.rb +0 -100
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teckel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Schulze
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mutant-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: yard
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,22 +109,30 @@ files:
|
|
95
109
|
- README.md
|
96
110
|
- lib/teckel.rb
|
97
111
|
- lib/teckel/chain.rb
|
112
|
+
- lib/teckel/chain/config.rb
|
98
113
|
- lib/teckel/chain/result.rb
|
99
114
|
- lib/teckel/chain/runner.rb
|
100
115
|
- lib/teckel/chain/step.rb
|
101
116
|
- lib/teckel/config.rb
|
102
117
|
- lib/teckel/contracts.rb
|
103
118
|
- lib/teckel/operation.rb
|
119
|
+
- lib/teckel/operation/config.rb
|
104
120
|
- lib/teckel/operation/result.rb
|
105
121
|
- lib/teckel/operation/runner.rb
|
106
122
|
- lib/teckel/result.rb
|
107
123
|
- lib/teckel/version.rb
|
124
|
+
- spec/chain/around_hook_spec.rb
|
125
|
+
- spec/chain/default_settings_spec.rb
|
108
126
|
- spec/chain/inheritance_spec.rb
|
127
|
+
- spec/chain/none_input_spec.rb
|
109
128
|
- spec/chain/results_spec.rb
|
110
|
-
- spec/chain_around_hook_spec.rb
|
111
129
|
- spec/chain_spec.rb
|
112
130
|
- spec/config_spec.rb
|
113
131
|
- spec/doctest_helper.rb
|
132
|
+
- spec/operation/config_spec.rb
|
133
|
+
- spec/operation/contract_trace_spec.rb
|
134
|
+
- spec/operation/default_settings_spec.rb
|
135
|
+
- spec/operation/fail_on_input_spec.rb
|
114
136
|
- spec/operation/inheritance_spec.rb
|
115
137
|
- spec/operation/result_spec.rb
|
116
138
|
- spec/operation/results_spec.rb
|
@@ -126,11 +148,12 @@ homepage: https://github.com/fnordfish/teckel
|
|
126
148
|
licenses:
|
127
149
|
- Apache-2.0
|
128
150
|
metadata:
|
129
|
-
changelog_uri: https://github.com/
|
130
|
-
source_code_uri: https://github.com/
|
131
|
-
bug_tracker_uri: https://github.com/
|
132
|
-
documentation_uri: https://www.rubydoc.info/gems/teckel/0.
|
133
|
-
|
151
|
+
changelog_uri: https://github.com/fnordfish/teckel/blob/main/CHANGELOG.md
|
152
|
+
source_code_uri: https://github.com/fnordfish/teckel
|
153
|
+
bug_tracker_uri: https://github.com/fnordfish/teckel/issues
|
154
|
+
documentation_uri: https://www.rubydoc.info/gems/teckel/0.8.0
|
155
|
+
user_docs_uri: https://fnordfish.github.io/teckel/
|
156
|
+
post_install_message:
|
134
157
|
rdoc_options: []
|
135
158
|
require_paths:
|
136
159
|
- lib
|
@@ -145,17 +168,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
168
|
- !ruby/object:Gem::Version
|
146
169
|
version: '0'
|
147
170
|
requirements: []
|
148
|
-
rubygems_version: 3.
|
149
|
-
signing_key:
|
171
|
+
rubygems_version: 3.2.15
|
172
|
+
signing_key:
|
150
173
|
specification_version: 4
|
151
174
|
summary: Operations with enforced in/out/err data structures
|
152
175
|
test_files:
|
176
|
+
- spec/chain/around_hook_spec.rb
|
177
|
+
- spec/chain/default_settings_spec.rb
|
153
178
|
- spec/chain/inheritance_spec.rb
|
179
|
+
- spec/chain/none_input_spec.rb
|
154
180
|
- spec/chain/results_spec.rb
|
155
|
-
- spec/chain_around_hook_spec.rb
|
156
181
|
- spec/chain_spec.rb
|
157
182
|
- spec/config_spec.rb
|
158
183
|
- spec/doctest_helper.rb
|
184
|
+
- spec/operation/config_spec.rb
|
185
|
+
- spec/operation/contract_trace_spec.rb
|
186
|
+
- spec/operation/default_settings_spec.rb
|
187
|
+
- spec/operation/fail_on_input_spec.rb
|
159
188
|
- spec/operation/inheritance_spec.rb
|
160
189
|
- spec/operation/result_spec.rb
|
161
190
|
- spec/operation/results_spec.rb
|
@@ -1,100 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'support/dry_base'
|
4
|
-
require 'support/fake_db'
|
5
|
-
require 'support/fake_models'
|
6
|
-
|
7
|
-
RSpec.describe Teckel::Chain do
|
8
|
-
module TeckelChainAroundHookTest
|
9
|
-
class CreateUser
|
10
|
-
include ::Teckel::Operation
|
11
|
-
|
12
|
-
result!
|
13
|
-
|
14
|
-
input Types::Hash.schema(name: Types::String, age: Types::Coercible::Integer.optional)
|
15
|
-
output Types.Instance(User)
|
16
|
-
error Types::Hash.schema(message: Types::String, errors: Types::Array.of(Types::Hash))
|
17
|
-
|
18
|
-
def call(input)
|
19
|
-
user = User.new(name: input[:name], age: input[:age])
|
20
|
-
if user.save
|
21
|
-
success!(user)
|
22
|
-
else
|
23
|
-
fail!(message: "Could not safe User", errors: user.errors)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class AddFriend
|
29
|
-
include ::Teckel::Operation
|
30
|
-
|
31
|
-
result!
|
32
|
-
|
33
|
-
settings Struct.new(:fail_befriend)
|
34
|
-
|
35
|
-
input Types.Instance(User)
|
36
|
-
output Types::Hash.schema(user: Types.Instance(User), friend: Types.Instance(User))
|
37
|
-
error Types::Hash.schema(message: Types::String)
|
38
|
-
|
39
|
-
def call(user)
|
40
|
-
if settings&.fail_befriend
|
41
|
-
fail!(message: "Did not find a friend.")
|
42
|
-
else
|
43
|
-
{ user: user, friend: User.new(name: "A friend", age: 42) }
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
@stack = []
|
49
|
-
def self.stack
|
50
|
-
@stack
|
51
|
-
end
|
52
|
-
|
53
|
-
class Chain
|
54
|
-
include Teckel::Chain
|
55
|
-
|
56
|
-
around ->(chain, input) {
|
57
|
-
result = nil
|
58
|
-
begin
|
59
|
-
TeckelChainAroundHookTest.stack << :before
|
60
|
-
|
61
|
-
FakeDB.transaction do
|
62
|
-
result = chain.call(input)
|
63
|
-
raise FakeDB::Rollback if result.failure?
|
64
|
-
end
|
65
|
-
|
66
|
-
TeckelChainAroundHookTest.stack << :after
|
67
|
-
result
|
68
|
-
rescue FakeDB::Rollback
|
69
|
-
result
|
70
|
-
end
|
71
|
-
}
|
72
|
-
|
73
|
-
step :create, CreateUser
|
74
|
-
step :befriend, AddFriend
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
before { TeckelChainAroundHookTest.stack.clear }
|
79
|
-
|
80
|
-
context "success" do
|
81
|
-
it "result matches" do
|
82
|
-
result = TeckelChainAroundHookTest::Chain.call(name: "Bob", age: 23)
|
83
|
-
expect(result.success).to include(user: kind_of(User), friend: kind_of(User))
|
84
|
-
end
|
85
|
-
|
86
|
-
it "runs around hook" do
|
87
|
-
TeckelChainAroundHookTest::Chain.call(name: "Bob", age: 23)
|
88
|
-
expect(TeckelChainAroundHookTest.stack).to eq([:before, :after])
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "failure" do
|
93
|
-
it "runs around hook" do
|
94
|
-
TeckelChainAroundHookTest::Chain.
|
95
|
-
with(befriend: :fail).
|
96
|
-
call(name: "Bob", age: 23)
|
97
|
-
expect(TeckelChainAroundHookTest.stack).to eq([:before])
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|