procedure 0.0.1 → 0.0.5
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/lib/procedure/organizer.rb +29 -0
- data/lib/procedure/outcome.rb +41 -0
- data/lib/procedure/process.rb +44 -0
- data/lib/procedure/step.rb +28 -0
- data/lib/procedure/version.rb +1 -1
- data/lib/procedure.rb +4 -0
- metadata +25 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c458faddf925c1111b375c756b44a34174fdcfeed4d90211dd8adca6b7639e29
|
|
4
|
+
data.tar.gz: 0b84a6265afa0f2324e248d9614bb4aa0559bace68b61bac2cbe6f2052ddfe9b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: afca081ce6fba7a2bd748dbb25677df3b0dcf9268490c3c4533737101f1ef67e41b9415fbcac5448bd3f33e090a584bf98eeaf73f09688090c17adee76299235
|
|
7
|
+
data.tar.gz: 3173f16e423bb214772b79c1c138b896160717b5acfd4fce6ddde0c44a262ccf4a638bd23a36288db1c89d40576e44c3af28cdadc00ccaacf54a021d2c548e44
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Procedure
|
|
2
|
+
module Organizer
|
|
3
|
+
def self.included(target)
|
|
4
|
+
target.send(:include, InstanceMethods)
|
|
5
|
+
target.extend ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module ClassMethods
|
|
9
|
+
attr_accessor :step_classes
|
|
10
|
+
|
|
11
|
+
def steps(*step_classes)
|
|
12
|
+
@step_classes = step_classes
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call(context: {}, options: {})
|
|
16
|
+
base_options = { fail_fast: true }.merge(options)
|
|
17
|
+
params = { execution_time: Time.now }.merge(context)
|
|
18
|
+
fake_open_struct = Struct.new(*params.keys).new(*params.values)
|
|
19
|
+
|
|
20
|
+
Procedure::Process.new(fake_open_struct, @step_classes).tap do |process|
|
|
21
|
+
process.call(base_options[:fail_fast])
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
module InstanceMethods
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Procedure
|
|
2
|
+
class Outcome
|
|
3
|
+
def initialize(step_classes)
|
|
4
|
+
@step_classes = step_classes
|
|
5
|
+
@failed_steps = []
|
|
6
|
+
@passed_steps = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def add(step)
|
|
10
|
+
if step.passed?
|
|
11
|
+
@passed_steps << step
|
|
12
|
+
else
|
|
13
|
+
@failed_steps << step
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def failure_messages
|
|
18
|
+
return [] unless failure?
|
|
19
|
+
|
|
20
|
+
@failed_steps.map(&:failure_message)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def failure_codes
|
|
24
|
+
return [] unless failure?
|
|
25
|
+
|
|
26
|
+
@failed_steps.map(&:failure_code)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def failure?
|
|
30
|
+
@failed_steps.size.positive?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def positive?
|
|
34
|
+
@failed_steps.size.zero? && @step_classes.size == @passed_steps.size
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def passed_steps
|
|
38
|
+
@passed_steps.map { |step| step.class.name }
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Procedure
|
|
2
|
+
class Process
|
|
3
|
+
def initialize(context, steps)
|
|
4
|
+
@context = context
|
|
5
|
+
@steps = steps
|
|
6
|
+
@passed = false
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def success?
|
|
10
|
+
outcome.positive?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def failure?
|
|
14
|
+
!success?
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def failure_messages
|
|
18
|
+
outcome.failure_messages
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def failure_codes
|
|
22
|
+
outcome.failure_codes
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def passed_steps
|
|
26
|
+
outcome.passed_steps
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def call(fail_fast)
|
|
30
|
+
@steps.each do |step_class|
|
|
31
|
+
step = step_class.new(@context)
|
|
32
|
+
outcome.add(step)
|
|
33
|
+
|
|
34
|
+
break if outcome.failure? && fail_fast
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def outcome
|
|
41
|
+
@outcome ||= Procedure::Outcome.new(@steps)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Procedure
|
|
2
|
+
module Step
|
|
3
|
+
def self.included(target)
|
|
4
|
+
target.send(:include, InstanceMethods)
|
|
5
|
+
target.extend ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module ClassMethods
|
|
9
|
+
def passed?(context = {})
|
|
10
|
+
fake_open_struct = Struct.new(*context.keys).new(*context.values)
|
|
11
|
+
|
|
12
|
+
new(fake_open_struct).passed?
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module InstanceMethods
|
|
17
|
+
def initialize(context)
|
|
18
|
+
@context = context
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def failure_message; end
|
|
22
|
+
def failure_code; end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
attr_reader :context
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/procedure/version.rb
CHANGED
data/lib/procedure.rb
ADDED
metadata
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: procedure
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Paweł Dąbrowski
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
date: 2019-11-21 00:00:00.000000000 Z
|
|
@@ -30,18 +30,37 @@ dependencies:
|
|
|
30
30
|
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: 3.7.0
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: pry
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
type: :development
|
|
41
|
+
prerelease: false
|
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
33
47
|
description: Mariage of policy object and interactor patterns
|
|
34
48
|
email: dziamber@gmail.com
|
|
35
49
|
executables: []
|
|
36
50
|
extensions: []
|
|
37
51
|
extra_rdoc_files: []
|
|
38
52
|
files:
|
|
53
|
+
- lib/procedure.rb
|
|
54
|
+
- lib/procedure/organizer.rb
|
|
55
|
+
- lib/procedure/outcome.rb
|
|
56
|
+
- lib/procedure/process.rb
|
|
57
|
+
- lib/procedure/step.rb
|
|
39
58
|
- lib/procedure/version.rb
|
|
40
|
-
homepage: http://github.com/
|
|
59
|
+
homepage: http://github.com/pdabrowski6/procedure
|
|
41
60
|
licenses:
|
|
42
61
|
- MIT
|
|
43
62
|
metadata: {}
|
|
44
|
-
post_install_message:
|
|
63
|
+
post_install_message:
|
|
45
64
|
rdoc_options: []
|
|
46
65
|
require_paths:
|
|
47
66
|
- lib
|
|
@@ -56,9 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
56
75
|
- !ruby/object:Gem::Version
|
|
57
76
|
version: '0'
|
|
58
77
|
requirements: []
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
signing_key:
|
|
78
|
+
rubygems_version: 3.2.11
|
|
79
|
+
signing_key:
|
|
62
80
|
specification_version: 4
|
|
63
81
|
summary: Mariage of policy object and interactor patterns
|
|
64
82
|
test_files: []
|