teckel 0.7.0 → 0.9.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 +48 -7
- data/README.md +3 -3
- data/lib/teckel/chain/config.rb +35 -23
- data/lib/teckel/chain/result.rb +5 -9
- data/lib/teckel/chain/runner.rb +9 -7
- data/lib/teckel/chain.rb +19 -13
- data/lib/teckel/config.rb +15 -9
- data/lib/teckel/contracts.rb +3 -3
- data/lib/teckel/operation/config.rb +55 -48
- data/lib/teckel/operation/result.rb +16 -16
- data/lib/teckel/operation/runner.rb +5 -5
- data/lib/teckel/operation.rb +37 -18
- data/lib/teckel/result.rb +5 -3
- data/lib/teckel/version.rb +2 -1
- data/lib/teckel.rb +4 -1
- metadata +34 -53
- data/spec/chain/around_hook_spec.rb +0 -100
- data/spec/chain/default_settings_spec.rb +0 -39
- data/spec/chain/inheritance_spec.rb +0 -116
- data/spec/chain/none_input_spec.rb +0 -36
- data/spec/chain/results_spec.rb +0 -53
- data/spec/chain_spec.rb +0 -180
- data/spec/config_spec.rb +0 -26
- data/spec/doctest_helper.rb +0 -8
- data/spec/operation/contract_trace_spec.rb +0 -116
- data/spec/operation/default_settings_spec.rb +0 -94
- data/spec/operation/fail_on_input_spec.rb +0 -103
- data/spec/operation/inheritance_spec.rb +0 -94
- data/spec/operation/result_spec.rb +0 -55
- data/spec/operation/results_spec.rb +0 -117
- data/spec/operation_spec.rb +0 -483
- data/spec/rb27/pattern_matching_spec.rb +0 -193
- data/spec/result_spec.rb +0 -22
- data/spec/spec_helper.rb +0 -28
- data/spec/support/dry_base.rb +0 -8
- data/spec/support/fake_db.rb +0 -12
- data/spec/support/fake_models.rb +0 -20
- data/spec/teckel_spec.rb +0 -7
@@ -11,8 +11,8 @@ module Teckel
|
|
11
11
|
# @param klass [Class] The +input+ class
|
12
12
|
# @return [Class] The +input+ class
|
13
13
|
def input(klass = nil)
|
14
|
-
@config.
|
15
|
-
raise(
|
14
|
+
@config.get_or_set(:input, klass) { self::Input if const_defined?(:Input) } ||
|
15
|
+
raise(MissingConfigError, "Missing input config for #{self}")
|
16
16
|
end
|
17
17
|
|
18
18
|
# @overload input_constructor()
|
@@ -57,8 +57,7 @@ module Teckel
|
|
57
57
|
#
|
58
58
|
# MyOperation.input_constructor.is_a?(Proc) #=> true
|
59
59
|
def input_constructor(sym_or_proc = nil)
|
60
|
-
|
61
|
-
raise(MissingConfigError, "Missing input_constructor config for #{self}")
|
60
|
+
get_or_set_constructor(:input_constructor, input, sym_or_proc)
|
62
61
|
end
|
63
62
|
|
64
63
|
# @overload output()
|
@@ -71,8 +70,8 @@ module Teckel
|
|
71
70
|
# @param klass [Class] The +output+ class
|
72
71
|
# @return [Class] The +output+ class
|
73
72
|
def output(klass = nil)
|
74
|
-
@config.
|
75
|
-
raise(
|
73
|
+
@config.get_or_set(:output, klass) { self::Output if const_defined?(:Output) } ||
|
74
|
+
raise(MissingConfigError, "Missing output config for #{self}")
|
76
75
|
end
|
77
76
|
|
78
77
|
# @overload output_constructor()
|
@@ -103,8 +102,7 @@ module Teckel
|
|
103
102
|
# output_constructor ->(name, options) { Output.new(name: name, **options) }
|
104
103
|
# end
|
105
104
|
def output_constructor(sym_or_proc = nil)
|
106
|
-
|
107
|
-
raise(MissingConfigError, "Missing output_constructor config for #{self}")
|
105
|
+
get_or_set_constructor(:output_constructor, output, sym_or_proc)
|
108
106
|
end
|
109
107
|
|
110
108
|
# @overload error()
|
@@ -116,8 +114,8 @@ module Teckel
|
|
116
114
|
# @param klass [Class] The +error+ class
|
117
115
|
# @return [Class,nil] The +error+ class or +nil+ if it does not error
|
118
116
|
def error(klass = nil)
|
119
|
-
@config.
|
120
|
-
raise(
|
117
|
+
@config.get_or_set(:error, klass) { self::Error if const_defined?(:Error) } ||
|
118
|
+
raise(MissingConfigError, "Missing error config for #{self}")
|
121
119
|
end
|
122
120
|
|
123
121
|
# @overload error_constructor()
|
@@ -148,8 +146,7 @@ module Teckel
|
|
148
146
|
# error_constructor ->(name, options) { Error.new(name: name, **options) }
|
149
147
|
# end
|
150
148
|
def error_constructor(sym_or_proc = nil)
|
151
|
-
|
152
|
-
raise(MissingConfigError, "Missing error_constructor config for #{self}")
|
149
|
+
get_or_set_constructor(:error_constructor, error, sym_or_proc)
|
153
150
|
end
|
154
151
|
|
155
152
|
# @!endgroup
|
@@ -163,7 +160,7 @@ module Teckel
|
|
163
160
|
# @param klass [Class] The +settings+ class
|
164
161
|
# @return [Class] The +settings+ class configured
|
165
162
|
def settings(klass = nil)
|
166
|
-
@config.
|
163
|
+
@config.get_or_set(:settings, klass) { const_defined?(:Settings) ? self::Settings : none }
|
167
164
|
end
|
168
165
|
|
169
166
|
# @overload settings_constructor()
|
@@ -190,7 +187,7 @@ module Teckel
|
|
190
187
|
# settings_constructor :new
|
191
188
|
# end
|
192
189
|
def settings_constructor(sym_or_proc = nil)
|
193
|
-
|
190
|
+
get_or_set_constructor(:settings_constructor, settings, sym_or_proc) ||
|
194
191
|
raise(MissingConfigError, "Missing settings_constructor config for #{self}")
|
195
192
|
end
|
196
193
|
|
@@ -219,22 +216,20 @@ module Teckel
|
|
219
216
|
#
|
220
217
|
# (Like calling +MyOperation.with(arg1, arg2, ...)+)
|
221
218
|
def default_settings!(*args)
|
222
|
-
callable =
|
223
|
-
|
224
|
-
|
225
|
-
elsif args.length == 1
|
226
|
-
build_constructor(settings, args.first)
|
227
|
-
end
|
219
|
+
callable = if args.size.equal?(1)
|
220
|
+
build_constructor(settings, args.first)
|
221
|
+
end
|
228
222
|
|
229
223
|
callable ||= -> { settings_constructor.call(*args) }
|
230
224
|
|
231
|
-
@config.
|
225
|
+
@config.get_or_set(:default_settings, callable)
|
232
226
|
end
|
233
227
|
|
234
228
|
# Getter for configured default settings
|
235
|
-
# @return [
|
229
|
+
# @return [NilClass]
|
230
|
+
# @return [#call] The callable constructor
|
236
231
|
def default_settings
|
237
|
-
@config.
|
232
|
+
@config.get_or_set(:default_settings)
|
238
233
|
end
|
239
234
|
|
240
235
|
# @overload runner()
|
@@ -246,12 +241,12 @@ module Teckel
|
|
246
241
|
# @param klass [Class] A class like the {Runner}
|
247
242
|
# @!visibility protected
|
248
243
|
def runner(klass = nil)
|
249
|
-
@config.
|
244
|
+
@config.get_or_set(:runner, klass) { Runner }
|
250
245
|
end
|
251
246
|
|
252
247
|
# @overload result()
|
253
248
|
# Get the configured result object class wrapping {error} or {output}.
|
254
|
-
# The {ValueResult} default will act as a pass-through
|
249
|
+
# The {ValueResult} default will act as a pass-through. Any error
|
255
250
|
# or output will just returned as-is.
|
256
251
|
# @return [Class] The +result+ class, or {ValueResult} as default
|
257
252
|
#
|
@@ -260,9 +255,12 @@ module Teckel
|
|
260
255
|
# @param klass [Class] The +result+ class
|
261
256
|
# @return [Class] The +result+ class configured
|
262
257
|
def result(klass = nil)
|
263
|
-
@config.
|
258
|
+
@config.get_or_set(:result, klass) { const_defined?(:Result, false) ? self::Result : ValueResult }
|
264
259
|
end
|
265
260
|
|
261
|
+
# @param sym_or_proc [Symbol,Proc,NilClass]
|
262
|
+
# @return [#call]
|
263
|
+
#
|
266
264
|
# @overload result_constructor()
|
267
265
|
# The callable constructor to build an instance of the +result+ class.
|
268
266
|
# Defaults to {Teckel::DEFAULT_CONSTRUCTOR}
|
@@ -288,7 +286,7 @@ module Teckel
|
|
288
286
|
# result_constructor ->(value, success) { result.new(value, success, {foo: :bar}) }
|
289
287
|
# end
|
290
288
|
def result_constructor(sym_or_proc = nil)
|
291
|
-
|
289
|
+
get_or_set_constructor(:result_constructor, result, sym_or_proc) ||
|
292
290
|
raise(MissingConfigError, "Missing result_constructor config for #{self}")
|
293
291
|
end
|
294
292
|
|
@@ -299,14 +297,15 @@ module Teckel
|
|
299
297
|
#
|
300
298
|
# @!visibility protected
|
301
299
|
# @note Don't use in conjunction with {result} or {result_constructor}
|
302
|
-
# @return [
|
300
|
+
# @return [void]
|
303
301
|
def result!
|
304
|
-
@config.
|
305
|
-
@config.
|
302
|
+
@config.get_or_set(:result, Result)
|
303
|
+
@config.get_or_set(:result_constructor, Result.method(:new))
|
306
304
|
nil
|
307
305
|
end
|
308
306
|
|
309
307
|
# @!visibility private
|
308
|
+
# @return [Array<Symbol>]
|
310
309
|
REQUIRED_CONFIGS = %i[
|
311
310
|
input input_constructor
|
312
311
|
output output_constructor
|
@@ -340,9 +339,7 @@ module Teckel
|
|
340
339
|
# @return [self]
|
341
340
|
# @!visibility public
|
342
341
|
def dup
|
343
|
-
super
|
344
|
-
copy.instance_variable_set(:@config, @config.dup)
|
345
|
-
end
|
342
|
+
dup_config(super()) # standard:disable Style/SuperArguments
|
346
343
|
end
|
347
344
|
|
348
345
|
# Produces a clone of this operation and all it's configuration
|
@@ -351,18 +348,24 @@ module Teckel
|
|
351
348
|
# @!visibility public
|
352
349
|
def clone
|
353
350
|
if frozen?
|
354
|
-
super
|
351
|
+
super() # standard:disable Style/SuperArguments
|
355
352
|
else
|
356
|
-
super
|
357
|
-
copy.instance_variable_set(:@config, @config.dup)
|
358
|
-
end
|
353
|
+
dup_config(super()) # standard:disable Style/SuperArguments
|
359
354
|
end
|
360
355
|
end
|
361
356
|
|
357
|
+
# Prevents further modifications to this operation and its config
|
358
|
+
#
|
359
|
+
# @return [self]
|
360
|
+
# @!visibility public
|
361
|
+
def freeze
|
362
|
+
@config.freeze
|
363
|
+
super() # standard:disable Style/SuperArguments
|
364
|
+
end
|
365
|
+
|
362
366
|
# @!visibility private
|
363
367
|
def inherited(subclass)
|
364
|
-
subclass
|
365
|
-
super subclass
|
368
|
+
super(dup_config(subclass))
|
366
369
|
end
|
367
370
|
|
368
371
|
# @!visibility private
|
@@ -374,21 +377,25 @@ module Teckel
|
|
374
377
|
end
|
375
378
|
end
|
376
379
|
|
377
|
-
private
|
380
|
+
private def dup_config(other_class)
|
381
|
+
other_class.instance_variable_set(:@config, @config.dup)
|
382
|
+
other_class
|
383
|
+
end
|
378
384
|
|
379
|
-
def
|
380
|
-
constructor = build_constructor(on, sym_or_proc)
|
385
|
+
private def get_or_set_constructor(name, on, sym_or_proc)
|
386
|
+
constructor = build_constructor(on, sym_or_proc)
|
381
387
|
|
382
|
-
@config.
|
383
|
-
build_constructor(on,
|
388
|
+
@config.get_or_set(name, constructor) {
|
389
|
+
build_constructor(on, DEFAULT_CONSTRUCTOR)
|
384
390
|
}
|
385
391
|
end
|
386
392
|
|
387
|
-
def build_constructor(on, sym_or_proc)
|
388
|
-
|
389
|
-
|
390
|
-
elsif sym_or_proc.respond_to?(:call)
|
393
|
+
private def build_constructor(on, sym_or_proc)
|
394
|
+
case sym_or_proc
|
395
|
+
when Proc
|
391
396
|
sym_or_proc
|
397
|
+
when Symbol
|
398
|
+
on.public_method(sym_or_proc) if on.respond_to?(sym_or_proc)
|
392
399
|
end
|
393
400
|
end
|
394
401
|
end
|
@@ -38,40 +38,40 @@ module Teckel
|
|
38
38
|
include Teckel::Result
|
39
39
|
|
40
40
|
# @param value [Object] The result value
|
41
|
-
# @param
|
42
|
-
def initialize(value,
|
41
|
+
# @param successful [Boolean] whether this is a successful result
|
42
|
+
def initialize(value, successful)
|
43
43
|
@value = value
|
44
|
-
@
|
44
|
+
@successful = successful
|
45
45
|
end
|
46
46
|
|
47
47
|
# Whether this is a success result
|
48
48
|
# @return [Boolean]
|
49
49
|
def successful?
|
50
|
-
@
|
50
|
+
@successful
|
51
51
|
end
|
52
52
|
|
53
53
|
# @!attribute [r] value
|
54
|
-
# @return [
|
54
|
+
# @return [Object] the value/payload
|
55
55
|
attr_reader :value
|
56
56
|
|
57
57
|
# Get the error/failure value
|
58
|
-
# @yield [
|
59
|
-
# @param default [
|
60
|
-
# @return [
|
58
|
+
# @yield [Object] If a block is given and this is not a failure result, the value is yielded to the block
|
59
|
+
# @param default [Object] return this default value if it's not a failure result
|
60
|
+
# @return [Object] the value/payload
|
61
61
|
def failure(default = nil, &block)
|
62
|
-
return
|
63
|
-
return yield(
|
62
|
+
return value unless @successful
|
63
|
+
return yield(value) if block
|
64
64
|
|
65
65
|
default
|
66
66
|
end
|
67
67
|
|
68
68
|
# Get the success value
|
69
|
-
# @yield [
|
70
|
-
# @param default [
|
71
|
-
# @return [
|
69
|
+
# @yield [Object] If a block is given and this is not a success result, the value is yielded to the block
|
70
|
+
# @param default [Object] return this default value if it's not a success result
|
71
|
+
# @return [Object] the value/payload
|
72
72
|
def success(default = nil, &block)
|
73
|
-
return
|
74
|
-
return yield(
|
73
|
+
return value if @successful
|
74
|
+
return yield(value) if block
|
75
75
|
|
76
76
|
default
|
77
77
|
end
|
@@ -85,7 +85,7 @@ module Teckel
|
|
85
85
|
value
|
86
86
|
end
|
87
87
|
|
88
|
-
|
88
|
+
alias_method :new, :[]
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
@@ -8,7 +8,7 @@ module Teckel
|
|
8
8
|
# @!visibility protected
|
9
9
|
class Runner
|
10
10
|
# @!visibility private
|
11
|
-
UNDEFINED =
|
11
|
+
UNDEFINED = Teckel::UNDEFINED
|
12
12
|
|
13
13
|
def initialize(operation, settings = UNDEFINED)
|
14
14
|
@operation, @settings = operation, settings
|
@@ -29,7 +29,7 @@ module Teckel
|
|
29
29
|
|
30
30
|
op = operation.new
|
31
31
|
op.runner = self
|
32
|
-
op.settings = settings
|
32
|
+
op.settings = settings unless settings.eql?(UNDEFINED)
|
33
33
|
|
34
34
|
@instance = op
|
35
35
|
end
|
@@ -37,7 +37,7 @@ module Teckel
|
|
37
37
|
# This is just here to raise a meaningful error.
|
38
38
|
# @!visibility private
|
39
39
|
def with(*)
|
40
|
-
raise
|
40
|
+
raise Error, "Operation already has settings assigned."
|
41
41
|
end
|
42
42
|
|
43
43
|
# Halt any further execution with a output value
|
@@ -46,7 +46,7 @@ module Teckel
|
|
46
46
|
# @!visibility protected
|
47
47
|
def success!(*args)
|
48
48
|
value =
|
49
|
-
if args.size
|
49
|
+
if args.size.equal?(1) && operation.output === args.first # rubocop:disable Style/CaseEquality
|
50
50
|
args.first
|
51
51
|
else
|
52
52
|
operation.output_constructor.call(*args)
|
@@ -61,7 +61,7 @@ module Teckel
|
|
61
61
|
# @!visibility protected
|
62
62
|
def fail!(*args)
|
63
63
|
value =
|
64
|
-
if args.size
|
64
|
+
if args.size.equal?(1) && operation.error === args.first # rubocop:disable Style/CaseEquality
|
65
65
|
args.first
|
66
66
|
else
|
67
67
|
operation.error_constructor.call(*args)
|
data/lib/teckel/operation.rb
CHANGED
@@ -58,29 +58,26 @@ module Teckel
|
|
58
58
|
# @!visibility public
|
59
59
|
module Operation
|
60
60
|
module ClassMethods
|
61
|
+
# @!visibility private
|
62
|
+
UNDEFINED = Teckel::UNDEFINED
|
63
|
+
|
61
64
|
# Invoke the Operation
|
62
65
|
#
|
63
|
-
# @param input Any form of input your {Teckel::Operation::Config#input input} class can handle via the given
|
66
|
+
# @param input [Object,nil] Any form of input your {Teckel::Operation::Config#input input} class can handle via the given
|
64
67
|
# {Teckel::Operation::Config#input_constructor input_constructor}
|
65
68
|
# @return Either An instance of your defined {Teckel::Operation::Config#error error} class or
|
66
69
|
# {Teckel::Operation::Config#output output} class
|
67
70
|
# @!visibility public
|
68
71
|
def call(input = nil)
|
69
|
-
|
70
|
-
|
71
|
-
if default_settings
|
72
|
-
runner.new(self, default_settings.call)
|
73
|
-
else
|
74
|
-
runner.new(self)
|
75
|
-
end.call(input)
|
72
|
+
runable.call(input)
|
76
73
|
end
|
77
74
|
|
78
|
-
# Provide {InstanceMethods#settings() settings} to the
|
75
|
+
# Provide {InstanceMethods#settings() settings} to the operation.
|
79
76
|
#
|
80
77
|
# This method is intended to be called on the operation class outside of
|
81
|
-
# it's definition, prior to
|
78
|
+
# it's definition, prior to invoking {#call}.
|
82
79
|
#
|
83
|
-
# @param
|
80
|
+
# @param settings Any form of settings your {Teckel::Operation::Config#settings settings} class can handle via the given
|
84
81
|
# {Teckel::Operation::Config#settings_constructor settings_constructor}
|
85
82
|
# @return [Class] The configured {Teckel::Operation::Config#runner runner}
|
86
83
|
# @!visibility public
|
@@ -111,10 +108,30 @@ module Teckel
|
|
111
108
|
# MyOperation.with(false).call
|
112
109
|
# MyOperation.call
|
113
110
|
# LOG #=> []
|
114
|
-
def with(
|
115
|
-
|
111
|
+
def with(settings)
|
112
|
+
runable(settings_constructor.call(settings))
|
113
|
+
end
|
114
|
+
alias_method :set, :with
|
115
|
+
|
116
|
+
# Constructs a Runner instance for {call} and {with}.
|
117
|
+
#
|
118
|
+
# @note This method is public to make testing, stubbing and mocking easier.
|
119
|
+
# Your normal application code should use {with} and/or {call}
|
120
|
+
#
|
121
|
+
# @param settings Optional. Any form of settings your
|
122
|
+
# {Teckel::Operation::Config#settings settings} class can handle via the
|
123
|
+
# given {Teckel::Operation::Config#settings_constructor settings_constructor}
|
124
|
+
# @return [Class] The configured {Teckel::Operation::Config#runner runner}
|
125
|
+
# @!visibility public
|
126
|
+
def runable(settings = UNDEFINED)
|
127
|
+
if settings != UNDEFINED
|
128
|
+
runner.new(self, settings)
|
129
|
+
elsif default_settings
|
130
|
+
runner.new(self, default_settings.call)
|
131
|
+
else
|
132
|
+
runner.new(self)
|
133
|
+
end
|
116
134
|
end
|
117
|
-
alias :set :with
|
118
135
|
|
119
136
|
# Convenience method for setting {Teckel::Operation::Config#input input},
|
120
137
|
# {Teckel::Operation::Config#output output} or
|
@@ -145,7 +162,7 @@ module Teckel
|
|
145
162
|
#
|
146
163
|
# MyOperation.call #=> nil
|
147
164
|
def none
|
148
|
-
|
165
|
+
Contracts::None
|
149
166
|
end
|
150
167
|
end
|
151
168
|
|
@@ -187,9 +204,11 @@ module Teckel
|
|
187
204
|
end
|
188
205
|
|
189
206
|
def self.included(receiver)
|
190
|
-
receiver.
|
191
|
-
|
192
|
-
|
207
|
+
receiver.class_eval do
|
208
|
+
extend Config
|
209
|
+
extend ClassMethods
|
210
|
+
include InstanceMethods
|
211
|
+
end
|
193
212
|
end
|
194
213
|
end
|
195
214
|
end
|
data/lib/teckel/result.rb
CHANGED
@@ -37,7 +37,7 @@ module Teckel
|
|
37
37
|
end
|
38
38
|
|
39
39
|
# @!attribute [r] value
|
40
|
-
# @return [
|
40
|
+
# @return [Object] the value/payload
|
41
41
|
def value
|
42
42
|
raise NotImplementedError, "Result object does not implement `value`"
|
43
43
|
end
|
@@ -55,8 +55,10 @@ module Teckel
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def self.included(receiver)
|
58
|
-
receiver.
|
59
|
-
|
58
|
+
receiver.class_eval do
|
59
|
+
extend ClassMethods
|
60
|
+
include InstanceMethods
|
61
|
+
end
|
60
62
|
end
|
61
63
|
end
|
62
64
|
end
|
data/lib/teckel/version.rb
CHANGED
data/lib/teckel.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "teckel/version"
|
4
4
|
|
5
5
|
module Teckel
|
6
6
|
# Base error class for this lib
|
@@ -13,6 +13,9 @@ module Teckel
|
|
13
13
|
class MissingConfigError < Teckel::Error; end
|
14
14
|
|
15
15
|
DEFAULT_CONSTRUCTOR = :[]
|
16
|
+
|
17
|
+
# @!visibility private
|
18
|
+
UNDEFINED = Object.new.freeze
|
16
19
|
end
|
17
20
|
|
18
21
|
require_relative "teckel/config"
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teckel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Schulze
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bundler
|
@@ -52,6 +51,34 @@ dependencies:
|
|
52
51
|
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '3.0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: mutant-rspec
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
type: :development
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: standard
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
55
82
|
- !ruby/object:Gem::Dependency
|
56
83
|
name: yard
|
57
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,38 +134,15 @@ files:
|
|
107
134
|
- lib/teckel/operation/runner.rb
|
108
135
|
- lib/teckel/result.rb
|
109
136
|
- lib/teckel/version.rb
|
110
|
-
- spec/chain/around_hook_spec.rb
|
111
|
-
- spec/chain/default_settings_spec.rb
|
112
|
-
- spec/chain/inheritance_spec.rb
|
113
|
-
- spec/chain/none_input_spec.rb
|
114
|
-
- spec/chain/results_spec.rb
|
115
|
-
- spec/chain_spec.rb
|
116
|
-
- spec/config_spec.rb
|
117
|
-
- spec/doctest_helper.rb
|
118
|
-
- spec/operation/contract_trace_spec.rb
|
119
|
-
- spec/operation/default_settings_spec.rb
|
120
|
-
- spec/operation/fail_on_input_spec.rb
|
121
|
-
- spec/operation/inheritance_spec.rb
|
122
|
-
- spec/operation/result_spec.rb
|
123
|
-
- spec/operation/results_spec.rb
|
124
|
-
- spec/operation_spec.rb
|
125
|
-
- spec/rb27/pattern_matching_spec.rb
|
126
|
-
- spec/result_spec.rb
|
127
|
-
- spec/spec_helper.rb
|
128
|
-
- spec/support/dry_base.rb
|
129
|
-
- spec/support/fake_db.rb
|
130
|
-
- spec/support/fake_models.rb
|
131
|
-
- spec/teckel_spec.rb
|
132
137
|
homepage: https://github.com/fnordfish/teckel
|
133
138
|
licenses:
|
134
139
|
- Apache-2.0
|
135
140
|
metadata:
|
136
|
-
changelog_uri: https://github.com/fnordfish/teckel/blob/
|
141
|
+
changelog_uri: https://github.com/fnordfish/teckel/blob/main/CHANGELOG.md
|
137
142
|
source_code_uri: https://github.com/fnordfish/teckel
|
138
143
|
bug_tracker_uri: https://github.com/fnordfish/teckel/issues
|
139
|
-
documentation_uri: https://www.rubydoc.info/gems/teckel/0.
|
144
|
+
documentation_uri: https://www.rubydoc.info/gems/teckel/0.9.0
|
140
145
|
user_docs_uri: https://fnordfish.github.io/teckel/
|
141
|
-
post_install_message:
|
142
146
|
rdoc_options: []
|
143
147
|
require_paths:
|
144
148
|
- lib
|
@@ -153,30 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
157
|
- !ruby/object:Gem::Version
|
154
158
|
version: '0'
|
155
159
|
requirements: []
|
156
|
-
rubygems_version: 3.
|
157
|
-
signing_key:
|
160
|
+
rubygems_version: 3.6.9
|
158
161
|
specification_version: 4
|
159
162
|
summary: Operations with enforced in/out/err data structures
|
160
|
-
test_files:
|
161
|
-
- spec/chain/around_hook_spec.rb
|
162
|
-
- spec/chain/default_settings_spec.rb
|
163
|
-
- spec/chain/inheritance_spec.rb
|
164
|
-
- spec/chain/none_input_spec.rb
|
165
|
-
- spec/chain/results_spec.rb
|
166
|
-
- spec/chain_spec.rb
|
167
|
-
- spec/config_spec.rb
|
168
|
-
- spec/doctest_helper.rb
|
169
|
-
- spec/operation/contract_trace_spec.rb
|
170
|
-
- spec/operation/default_settings_spec.rb
|
171
|
-
- spec/operation/fail_on_input_spec.rb
|
172
|
-
- spec/operation/inheritance_spec.rb
|
173
|
-
- spec/operation/result_spec.rb
|
174
|
-
- spec/operation/results_spec.rb
|
175
|
-
- spec/operation_spec.rb
|
176
|
-
- spec/rb27/pattern_matching_spec.rb
|
177
|
-
- spec/result_spec.rb
|
178
|
-
- spec/spec_helper.rb
|
179
|
-
- spec/support/dry_base.rb
|
180
|
-
- spec/support/fake_db.rb
|
181
|
-
- spec/support/fake_models.rb
|
182
|
-
- spec/teckel_spec.rb
|
163
|
+
test_files: []
|