procedure 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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: []