procedure 0.0.1 → 0.0.2

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: f4a926ece6841bbf56280c68e7d365fb6bf88f368539ffd711d6ddfd47eb1a53
4
+ data.tar.gz: 66fb2960f17d604f42d002364fbd8aa8706b13a9d077d537850986b940c181db
5
5
  SHA512:
6
- metadata.gz: a607fd7369424132da44a384de8ec1bf2f99216ae6ff5c33f4c1de12389fd9dff76c737349198fd1705c8b28ec0be0e351866534bd07bef6dc054d06c8a2591f
7
- data.tar.gz: d97693792528940ce27becfac78897e4885372a32eec545f4713e8a3450f315e0ff31a6f48ea1419fa55fcd4f83fdf47616f72aa2b9648b5ffadbc8dd5fc9ef5
6
+ metadata.gz: c0ba98b788fdf9d1688b923036dea84a35344a2d1bf1c53ca350e426fe1aa34d282170f471d1dc352854bfa57c64d0b604ab0a3335faea2c5487d31072f62321
7
+ data.tar.gz: 21dc888a795cfefbda391f94c4a5ac34c4715527a942e024be4e87edffe7abb77a0d1fe058f399c1ba9e04e8cd43ea2f35c56ad2a612aff6fc8bdd1f79859731
@@ -0,0 +1,4 @@
1
+ require 'procedure/outcome'
2
+ require 'procedure/process'
3
+ require 'procedure/step'
4
+ require 'procedure/organizer'
@@ -0,0 +1,28 @@
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 = {})
16
+ params = { execution_time: Time.now }.merge(context)
17
+ fake_open_struct = Struct.new(*params.keys).new(*params.values)
18
+
19
+ Procedure::Process.new(fake_open_struct, @step_classes).tap do |process|
20
+ process.call
21
+ end
22
+ end
23
+ end
24
+
25
+ module InstanceMethods
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,41 @@
1
+ module Procedure
2
+ class Outcome
3
+ def initialize(step_classes)
4
+ @step_classes = step_classes
5
+ @failed_step = nil
6
+ @passed_steps = []
7
+ end
8
+
9
+ def add(step)
10
+ if step.passed?
11
+ @passed_steps << step
12
+ else
13
+ @failed_step = step
14
+ end
15
+ end
16
+
17
+ def failure_message
18
+ return unless failure?
19
+
20
+ @failed_step.failure_message
21
+ end
22
+
23
+ def failure_code
24
+ return unless failure?
25
+
26
+ @failed_step.failure_code
27
+ end
28
+
29
+ def failure?
30
+ !@failed_step.nil?
31
+ end
32
+
33
+ def positive?
34
+ @failed_step.nil? && @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_message
18
+ outcome.failure_message
19
+ end
20
+
21
+ def failure_code
22
+ outcome.failure_code
23
+ end
24
+
25
+ def passed_steps
26
+ outcome.passed_steps
27
+ end
28
+
29
+ def call
30
+ @steps.each do |step_class|
31
+ step = step_class.new(@context)
32
+ outcome.add(step)
33
+
34
+ break if outcome.failure?
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,23 @@
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
+ end
10
+
11
+ module InstanceMethods
12
+ def initialize(context)
13
+ @context = context
14
+ end
15
+
16
+ def failure_message; end
17
+ def failure_code; end
18
+
19
+ private
20
+ attr_reader :context
21
+ end
22
+ end
23
+ 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.2"
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paweł Dąbrowski
@@ -36,8 +36,13 @@ executables: []
36
36
  extensions: []
37
37
  extra_rdoc_files: []
38
38
  files:
39
+ - lib/procedure.rb
40
+ - lib/procedure/organizer.rb
41
+ - lib/procedure/outcome.rb
42
+ - lib/procedure/process.rb
43
+ - lib/procedure/step.rb
39
44
  - lib/procedure/version.rb
40
- homepage: http://github.com/rubyhero/procedure
45
+ homepage: http://github.com/pdabrowski6/procedure
41
46
  licenses:
42
47
  - MIT
43
48
  metadata: {}