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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0bfbc6ca15e1293fffeafc0cb7da4cef48d614f3ba6654ebae2e74870c57789
4
- data.tar.gz: cc359cbc4398a5afc5b8bbbb01ce506b8224ac5331f4618626998976402eb76f
3
+ metadata.gz: c458faddf925c1111b375c756b44a34174fdcfeed4d90211dd8adca6b7639e29
4
+ data.tar.gz: 0b84a6265afa0f2324e248d9614bb4aa0559bace68b61bac2cbe6f2052ddfe9b
5
5
  SHA512:
6
- metadata.gz: a607fd7369424132da44a384de8ec1bf2f99216ae6ff5c33f4c1de12389fd9dff76c737349198fd1705c8b28ec0be0e351866534bd07bef6dc054d06c8a2591f
7
- data.tar.gz: d97693792528940ce27becfac78897e4885372a32eec545f4713e8a3450f315e0ff31a6f48ea1419fa55fcd4f83fdf47616f72aa2b9648b5ffadbc8dd5fc9ef5
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
@@ -6,7 +6,7 @@ module Procedure
6
6
  #
7
7
  # @return [String]
8
8
  def to_s
9
- "0.0.1"
9
+ "0.0.5"
10
10
  end
11
11
  end
12
12
  end
data/lib/procedure.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'procedure/outcome'
2
+ require 'procedure/process'
3
+ require 'procedure/step'
4
+ require 'procedure/organizer'
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.1
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/rubyhero/procedure
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
- rubyforge_project:
60
- rubygems_version: 2.7.6
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: []