flow_object 0.2.3 → 0.3.0

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: cdecba76df1dc39202b7abcd32a626738447dc90ae0fc1d7cae695ca2aae876e
4
- data.tar.gz: a6e4763933194dd419837ab96b75b22bc1e61b31473f6ccee3be052f2ac98e49
3
+ metadata.gz: 0612652b790e12566782ac7aede6677315ae05c773ca066afee9b39fd9ac4335
4
+ data.tar.gz: ebf9b7de4d50e5003f83197f87a3557d831ee20c040947dedaf421d2c3ff73c6
5
5
  SHA512:
6
- metadata.gz: 11fe476ab5eb07624fb4629f520ee88a75b2da05e4393b72907247f84b3a569af961b1bcef5be91a86f47f03f6ebe639d305e6d2a7d80735efe9096e7a82a926
7
- data.tar.gz: a1ae38390b9c66abb5f2a1df631eb3391b16563e5c7db1bae885802a93c50d272fa0b7388b8a2896f41fa0d924fba2b891a20bc51482168f028067c469fb222f
6
+ metadata.gz: 8f9a6e6cdd8aadba78d66c68a9014fe868927bf6b3f877f34650847162e6dfbe541a69dd779002e09f2799faab8f27799554777429c49d63afc8029318760eb4
7
+ data.tar.gz: def73238080897d12e9d5d1c2aa501872fb9b0e5e6a770b15cb197108b6edd95b5bfa4d78a7a8dc6891a3c20ed6080ce0d7ecfc4e37a3a642ead55e8302eace2
data/.gitignore CHANGED
File without changes
data/.rspec CHANGED
File without changes
data/.rubocop.yml ADDED
@@ -0,0 +1,78 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ Exclude:
4
+ - flow_object.gemspec
5
+ Gemspec/DateAssignment: # (new in 1.10)
6
+ Enabled: true
7
+ Layout/SpaceBeforeBrackets: # (new in 1.7)
8
+ Enabled: true
9
+ Lint/AmbiguousAssignment: # (new in 1.7)
10
+ Enabled: true
11
+ Lint/DeprecatedConstants: # (new in 1.8)
12
+ Enabled: true
13
+ Lint/DuplicateBranch: # (new in 1.3)
14
+ Enabled: true
15
+ Lint/DuplicateRegexpCharacterClassElement: # (new in 1.1)
16
+ Enabled: true
17
+ Lint/EmptyBlock: # (new in 1.1)
18
+ Enabled: true
19
+ Exclude:
20
+ - lib/flow_object/callbacks.rb
21
+ Lint/EmptyClass: # (new in 1.3)
22
+ Enabled: true
23
+ Exclude:
24
+ - spec/**/*.rb
25
+ Lint/LambdaWithoutLiteralBlock: # (new in 1.8)
26
+ Enabled: true
27
+ Lint/NoReturnInBeginEndBlocks: # (new in 1.2)
28
+ Enabled: true
29
+ Lint/NumberedParameterAssignment: # (new in 1.9)
30
+ Enabled: true
31
+ Lint/OrAssignmentToConstant: # (new in 1.9)
32
+ Enabled: true
33
+ Lint/RedundantDirGlobSort: # (new in 1.8)
34
+ Enabled: true
35
+ Lint/SymbolConversion: # (new in 1.9)
36
+ Enabled: true
37
+ Lint/ToEnumArguments: # (new in 1.1)
38
+ Enabled: true
39
+ Lint/TripleQuotes: # (new in 1.9)
40
+ Enabled: true
41
+ Lint/UnexpectedBlockArity: # (new in 1.5)
42
+ Enabled: true
43
+ Lint/UnmodifiedReduceAccumulator: # (new in 1.1)
44
+ Enabled: true
45
+ Style/ArgumentsForwarding: # (new in 1.1)
46
+ Enabled: true
47
+ Style/CollectionCompact: # (new in 1.2)
48
+ Enabled: true
49
+ Style/DocumentDynamicEvalDefinition: # (new in 1.1)
50
+ Enabled: true
51
+ Style/EndlessMethod: # (new in 1.8)
52
+ Enabled: true
53
+ Style/HashConversion: # (new in 1.10)
54
+ Enabled: true
55
+ Style/HashExcept: # (new in 1.7)
56
+ Enabled: true
57
+ Style/IfWithBooleanLiteralBranches: # (new in 1.9)
58
+ Enabled: true
59
+ Style/NegatedIfElseCondition: # (new in 1.2)
60
+ Enabled: true
61
+ Style/NilLambda: # (new in 1.3)
62
+ Enabled: true
63
+ Style/RedundantArgument: # (new in 1.4)
64
+ Enabled: true
65
+ Style/StringChars: # (new in 1.12)
66
+ Enabled: true
67
+ Style/SwapValues: # (new in 1.1)
68
+ Enabled: true
69
+ Metrics/BlockLength:
70
+ Exclude:
71
+ - spec/**/*.rb
72
+ Naming/MethodParameterName:
73
+ Exclude:
74
+ - spec/**/*.rb
75
+ Style/Semicolon:
76
+ Exclude:
77
+ - spec/**/*.rb
78
+
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.4.0
data/.travis.yml CHANGED
File without changes
data/CODE_OF_CONDUCT.md CHANGED
File without changes
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in flow_object.gemspec
6
8
  gemspec
data/Gemfile.lock CHANGED
@@ -1,22 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flow_object (0.2.3)
5
- mature_factory (~> 0.2.17)
4
+ flow_object (0.3.0)
5
+ hospodar (~> 1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ ast (2.4.2)
10
11
  coderay (1.1.3)
11
12
  diff-lcs (1.4.4)
12
- dry-inflector (0.1.2)
13
- mature_factory (0.2.17)
14
- dry-inflector (~> 0.1)
13
+ docile (1.3.5)
14
+ dry-inflector (0.2.0)
15
+ hospodar (1.0.1)
16
+ json (2.5.1)
15
17
  method_source (1.0.0)
18
+ dry-inflector (~> 0.1)
19
+ parallel (1.20.1)
20
+ parser (3.0.2.0)
21
+ ast (~> 2.4.1)
16
22
  pry (0.13.1)
17
23
  coderay (~> 1.1)
18
24
  method_source (~> 1.0)
25
+ rainbow (3.0.0)
19
26
  rake (10.5.0)
27
+ regexp_parser (2.1.1)
28
+ rexml (3.2.5)
20
29
  rspec (3.9.0)
21
30
  rspec-core (~> 3.9.0)
22
31
  rspec-expectations (~> 3.9.0)
@@ -32,6 +41,24 @@ GEM
32
41
  rspec-support (3.9.3)
33
42
  rspec_vars_helper (0.1.0)
34
43
  rspec (>= 2.4)
44
+ rubocop (1.12.1)
45
+ parallel (~> 1.10)
46
+ parser (>= 3.0.0.0)
47
+ rainbow (>= 2.2.2, < 4.0)
48
+ regexp_parser (>= 1.8, < 3.0)
49
+ rexml
50
+ rubocop-ast (>= 1.2.0, < 2.0)
51
+ ruby-progressbar (~> 1.7)
52
+ unicode-display_width (>= 1.4.0, < 3.0)
53
+ rubocop-ast (1.4.1)
54
+ parser (>= 2.7.1.5)
55
+ ruby-progressbar (1.11.0)
56
+ simplecov (0.17.0)
57
+ docile (~> 1.1)
58
+ json (>= 1.8, < 3)
59
+ simplecov-html (~> 0.10.0)
60
+ simplecov-html (0.10.2)
61
+ unicode-display_width (2.0.0)
35
62
 
36
63
  PLATFORMS
37
64
  ruby
@@ -43,6 +70,8 @@ DEPENDENCIES
43
70
  rake (~> 10.0)
44
71
  rspec (~> 3.0)
45
72
  rspec_vars_helper (~> 0.1)
73
+ rubocop
74
+ simplecov (= 0.17)
46
75
 
47
76
  BUNDLED WITH
48
- 1.17.0
77
+ 1.17.3
data/LICENSE.txt CHANGED
File without changes
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
data/bin/console CHANGED
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "flow_object"
4
+ require 'bundler/setup'
5
+ require 'flow_object'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
8
9
 
9
10
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- require "pry"
11
+ require 'pry'
11
12
  Pry.start
12
13
 
13
14
  # require "irb"
data/flow_object.gemspec CHANGED
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'flow_object/version'
5
6
 
@@ -9,10 +10,11 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['Andrii Baran']
10
11
  spec.email = ['andriy.baran.v@gmail.com']
11
12
 
12
- spec.summary = %q{Create objects for storing application flows}
13
- spec.description = %q{General purpose software library designed for happiness}
13
+ spec.summary = 'Create objects for storing application flows'
14
+ spec.description = 'General purpose software library designed for happiness'
14
15
  spec.homepage = 'https://github.com/andriy-baran/flow_object'
15
16
  spec.license = 'MIT'
17
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
16
18
 
17
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
20
  # to allow pushing to a single host or delete this section to allow pushing to any host.
@@ -29,18 +31,20 @@ Gem::Specification.new do |spec|
29
31
 
30
32
  # Specify which files should be added to the gem when it is released.
31
33
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
34
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
33
35
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
36
  end
35
37
  spec.bindir = 'exe'
36
38
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
39
  spec.require_paths = ['lib']
38
40
 
39
- spec.add_dependency 'mature_factory', '~> 0.2.17'
41
+ spec.add_dependency 'hospodar', '~> 1'
40
42
 
41
43
  spec.add_development_dependency 'bundler', '~> 1.17'
42
44
  spec.add_development_dependency 'pry'
43
45
  spec.add_development_dependency 'rake', '~> 10.0'
44
46
  spec.add_development_dependency 'rspec', '~> 3.0'
45
47
  spec.add_development_dependency 'rspec_vars_helper', '~> 0.1'
48
+ spec.add_development_dependency 'rubocop'
49
+ spec.add_development_dependency 'simplecov', '0.17'
46
50
  end
@@ -1,23 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowObject
4
+ # Provides DSL for flows definitions
2
5
  class Base
3
- include MatureFactory
4
- include MatureFactory::Features::Assemble
6
+ include Hospodar
7
+ include Hospodar::Builder
5
8
 
6
9
  produces :stages, :inputs, :outputs
7
10
 
8
11
  class << self
9
- extend Forwardable
10
12
  attr_reader :in, :out, :initial_values
11
- def_delegators :callbacks, :after_input_initialize, :after_flow_initialize,
12
- :after_input_check, :after_flow_check, :after_output_initialize
13
13
  end
14
14
 
15
- attr_reader :output
15
+ extend Forwardable
16
+ def_delegators :callbacks, :output_initialized
17
+
18
+ attr_reader :output, :callbacks
16
19
 
17
- def initialize(flow, step_name = :flow)
18
- @output = self.class.send(:__fo_wrap_output__)
19
- self.class.link_with_delegation(@output, flow, step_name, true)
20
- self.class.after_output_initialize.call(@output)
20
+ def initialize(flow, callbacks, step_name = :flow)
21
+ @output = self.class.send(:fo_wrap_output)
22
+ @callbacks = callbacks
23
+ Hospodar::Builder.def_accessor(step_name, on: @output, to: flow, delegate: true)
24
+ output_initialized.call(@output)
21
25
  end
22
26
 
23
27
  def on_exception(exception = nil)
@@ -32,20 +36,12 @@ module FlowObject
32
36
  # NOOP
33
37
  end
34
38
 
39
+ # Class-level interface for flow objects
35
40
  module ClassMethods
36
41
  def inherited(subclass)
37
42
  super
38
43
  subclass.from(self.in)
39
- subclass.to(self.out)
40
- subclass.after_input_initialize(&self.after_input_initialize)
41
- subclass.after_flow_initialize(&self.after_flow_initialize)
42
- subclass.after_input_check(&self.after_input_check)
43
- subclass.after_flow_check(&self.after_flow_check)
44
- subclass.after_output_initialize(&self.after_output_initialize)
45
- end
46
-
47
- def callbacks
48
- @callbacks ||= Callbacks.new
44
+ subclass.to(out)
49
45
  end
50
46
 
51
47
  def from(input)
@@ -63,78 +59,80 @@ module FlowObject
63
59
  self
64
60
  end
65
61
 
66
- def call(flow: :main)
67
- __fo_resolve__(__fo_process__(flow: flow))
62
+ def call(flow: :main, &block)
63
+ fo_resolve(fo_process(flow: flow, &block))
68
64
  end
69
65
 
70
66
  def flow(name = :main, &block)
71
67
  wrap(name, delegate: true, on_exception: :halt, &block)
72
68
  end
73
69
 
74
- def link_with_delegation(target, object, accessor, delegate)
75
- MatureFactory::Features::Assemble::AbstractBuilder
76
- .link_with_delegation(target, object, accessor, delegate)
77
- end
78
-
79
70
  private
80
71
 
81
- def halt_flow?(object, id)
72
+ def halt_flow?(_object, _id)
82
73
  false
83
74
  end
84
75
 
85
- def __fo_process__(flow: :main)
86
- plan = __fo_build_flow__(flow, self.in, :input, __fo_wrap_input__)
76
+ def fo_process(flow: :main, &block)
77
+ plan = fo_build_flow(flow, self.in, :input, fo_wrap_input)
78
+ callbacks = Callbacks.new(@callbacks_allowlist)
79
+ block.call(callbacks) if block_given?
87
80
  Runner.new(plan, callbacks, method(:halt_flow?)).execute_plan
88
81
  end
89
82
 
90
- def __fo_build_flow__(flow, step_name, group, object)
91
- public_send(:"build_#{flow}", title: step_name, group: group, object: object)
83
+ def fo_build_flow(flow, step_name, group, object)
84
+ plan = send(:"hospodar_perform_planing_for_#{flow}", object, step_name, group)
85
+ @callbacks_allowlist = plan.map(&:last).map(&:to_sym) + [:"#{out}_output"]
86
+ send(:"hospodar_execute_plan_for_#{flow}", plan)
92
87
  end
93
88
 
94
- def __fo_wrap_input__
89
+ def fo_wrap_input
95
90
  return initial_values if self.in.nil?
91
+
96
92
  input_class = public_send(:"#{self.in}_input_class")
97
93
  return initial_values if input_class.nil?
94
+
98
95
  public_send(:"new_#{self.in}_input_instance", *initial_values)
99
96
  end
100
97
 
101
- def __fo_wrap_output__
98
+ def fo_wrap_output
102
99
  # rescue NoMethodError => ex
103
100
  # "You have not define output class. Please add `output :#{self.out}`"
104
- return if self.out.nil?
105
- return unless self.respond_to?(:"#{self.out}_output_class")
106
- output_class = public_send(:"#{self.out}_output_class")
101
+ return if out.nil?
102
+ return unless respond_to?(:"#{out}_output_class")
103
+
104
+ output_class = public_send(:"#{out}_output_class")
107
105
  return if output_class.nil?
108
- public_send(:"new_#{self.out}_output_instance")
106
+
107
+ public_send(:"new_#{out}_output_instance")
109
108
  end
110
109
 
111
- def __fo_resolve__(runner)
112
- new(runner.flow.public_send(runner.step_name), runner.step_name).tap do |handler|
110
+ def fo_resolve(runner)
111
+ new(runner.flow.public_send(runner.step_name), runner.callbacks, runner.step_name).tap do |handler|
113
112
  if runner.flow.exceptional?
114
- __fo_notify_exception__(handler, runner.flow.exception)
113
+ fo_notify_exception(handler, runner.flow.exception)
115
114
  elsif runner.failure
116
- __fo_notify_error__(handler, runner.step_name)
115
+ fo_notify_error(handler, runner.step_name)
117
116
  else
118
- __fo_notify_success__(handler)
117
+ fo_notify_success(handler)
119
118
  end
120
119
  end
121
120
  end
122
121
 
123
- def __fo_notify_exception__(handler, exception)
124
- step = exception.step_id.title
125
- if handler.output.respond_to?(:"on_#{step}_exception")
126
- handler.output.public_send(:"on_#{step}_exception", exception)
122
+ def fo_notify_exception(handler, exception)
123
+ callback = :"on_#{exception.step_id.title}_exception"
124
+ if handler.output.respond_to?(callback)
125
+ handler.output.public_send(callback, exception)
127
126
  elsif handler.output.respond_to?(:on_exception)
128
127
  handler.output.on_exception(exception)
129
- elsif handler.respond_to?(:"on_#{step}_exception")
130
- handler.public_send(:"on_#{step}_exception", exception)
128
+ elsif handler.respond_to?(callback)
129
+ handler.public_send(callback, exception)
131
130
  else
132
131
  handler.on_exception(exception)
133
132
  end
134
- __fo_notify_error__(handler, exception.step_id.title)
135
133
  end
136
134
 
137
- def __fo_notify_error__(handler, step)
135
+ def fo_notify_error(handler, step)
138
136
  if handler.output.respond_to?(:"on_#{step}_failure")
139
137
  handler.output.public_send(:"on_#{step}_failure")
140
138
  elsif handler.output.respond_to?(:on_failure)
@@ -146,7 +144,7 @@ module FlowObject
146
144
  end
147
145
  end
148
146
 
149
- def __fo_notify_success__(handler)
147
+ def fo_notify_success(handler)
150
148
  if handler.output.respond_to?(:on_success)
151
149
  handler.output.on_success
152
150
  else
@@ -1,29 +1,73 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowObject
4
+ # Storage for users callbacks
2
5
  class Callbacks
3
- SUPPORTED = %i[
4
- after_input_initialize
5
- after_flow_initialize
6
- after_input_check
7
- after_flow_check
8
- after_output_initialize
9
- ].freeze
10
-
11
6
  NOOP = proc {}.freeze
12
7
 
13
- def initialize
14
- @callbacks = Hash.new { |hash, key| hash[key] = NOOP }
8
+ Iteration = Struct.new(:idx, :type, :list_size) do
9
+ def output_checked?
10
+ output? && checked?
11
+ end
12
+
13
+ def generic_alias
14
+ return :"input_#{type}" if input?
15
+ return :flow_initialized if flow_initialized?
16
+ return :flow_checked if flow_checked?
17
+ return :output_initialized if output_initialized?
18
+ end
19
+
20
+ private
21
+
22
+ def flow_initialized?
23
+ idx == 1 && initialized?
24
+ end
25
+
26
+ def flow_checked?
27
+ idx == list_size - 2 && checked?
28
+ end
29
+
30
+ def output_initialized?
31
+ output? && initialized?
32
+ end
33
+
34
+ def input?
35
+ idx.zero?
36
+ end
37
+
38
+ def initialized?
39
+ type == :initialized
40
+ end
41
+
42
+ def checked?
43
+ type == :checked
44
+ end
45
+
46
+ def output?
47
+ idx == list_size - 1
48
+ end
15
49
  end
16
50
 
17
- def method_missing(name, *_attrs, &block)
18
- if SUPPORTED.include?(name)
19
- block_given? ? @callbacks[name] = block : @callbacks[name]
20
- else
21
- super
51
+ def initialize(list)
52
+ @callbacks = Hash.new { |hash, key| hash[key] = NOOP }
53
+ each_callback(list) do |callback, callback_alias|
54
+ define_singleton_method(callback) do |&block|
55
+ block.nil? ? @callbacks[callback] : @callbacks[callback] = block
56
+ end
57
+ singleton_class.class_eval { alias_method(callback_alias, callback) } if callback_alias
22
58
  end
23
59
  end
24
60
 
25
- def respond_to_missing?(name, *)
26
- SUPPORTED.include?(name)
61
+ private
62
+
63
+ def each_callback(list)
64
+ list_size = list.size
65
+ list.each.with_index do |method_name, idx|
66
+ { initialized: :"#{method_name}_initialized", checked: :"#{method_name}_checked" }.each do |type, callback|
67
+ callback_alias = Iteration.new(idx, type, list_size).generic_alias
68
+ yield(callback, callback_alias)
69
+ end
70
+ end
27
71
  end
28
72
  end
29
73
  end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowObject
4
+ # Triggers flow execution and users callbacks
2
5
  class Runner
3
- attr_reader :step_name, :failure, :flow
6
+ attr_reader :step_name, :failure, :flow, :callbacks
4
7
 
5
8
  def initialize(plan, callbacks, halt_if_proc)
6
9
  @plan = plan
@@ -8,60 +11,34 @@ module FlowObject
8
11
  @failure = false
9
12
  @step_name = nil
10
13
  @callbacks = callbacks
11
- @step_index = 0
12
14
  @halt_if_proc = halt_if_proc
13
15
  end
14
16
 
15
17
  def execute_plan
16
- @flow = call_flow_builder
17
- after_flow_check(flow.public_send(@step_name))
18
+ @flow = flow_builder.call
18
19
  self
19
20
  end
20
21
 
21
22
  private
22
23
 
23
- def call_flow_builder
24
- @plan.call do |object, id|
25
- handle_step(object, id) { throw :halt }
26
- end
27
- end
28
-
29
- def after_flow_check(object)
30
- @callbacks.after_flow_check.call(object)
31
- end
32
-
33
- def after_input_initialize(object)
34
- @callbacks.after_input_initialize.call(object)
35
- end
24
+ def flow_builder
25
+ @plan.do_until do |object, id|
26
+ @step_name = id.title
27
+ after_initialize(object, id)
28
+ @failure = @halt_if_proc.call(object, id)
29
+ next true if @failure
36
30
 
37
- def after_flow_initialize(object)
38
- @callbacks.after_flow_initialize.call(object)
39
- end
40
-
41
- def after_input_check(object)
42
- @callbacks.after_input_check.call(object)
43
- end
44
-
45
- def second_step?
46
- @step_index == 1
47
- end
48
-
49
- def input_step?(id)
50
- id.group == :input
31
+ after_check(object, id)
32
+ end
51
33
  end
52
34
 
53
- def flow_step?(id)
54
- id.group == :stage
35
+ def after_initialize(object, id)
36
+ @callbacks.public_send(:"#{id}_initialized").call(object)
55
37
  end
56
38
 
57
- def handle_step(object, id)
58
- after_input_initialize(object) if input_step?(id)
59
- after_flow_initialize(object) if second_step? && flow_step?(id)
60
- @step_name = id.title
61
- @step_index += 1
62
- yield if @failure = @halt_if_proc.call(object, id)
63
- after_input_check(object) if input_step?(id)
39
+ def after_check(object, id)
40
+ @callbacks.public_send(:"#{id}_checked").call(object)
41
+ false
64
42
  end
65
-
66
43
  end
67
44
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowObject
2
- VERSION = '0.2.3'.freeze
4
+ VERSION = '0.3.0'
3
5
  end
data/lib/flow_object.rb CHANGED
@@ -1,4 +1,6 @@
1
- require 'mature_factory'
1
+ # frozen_string_literal: true
2
+
3
+ require 'hospodar'
2
4
  require 'flow_object/callbacks'
3
5
  require 'flow_object/runner'
4
6
  require 'flow_object/base'
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flow_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrii Baran
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-23 00:00:00.000000000 Z
11
+ date: 2021-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: mature_factory
14
+ name: hospodar
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.17
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.17
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: '0.17'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: '0.17'
97
125
  description: General purpose software library designed for happiness
98
126
  email:
99
127
  - andriy.baran.v@gmail.com
@@ -103,6 +131,7 @@ extra_rdoc_files: []
103
131
  files:
104
132
  - ".gitignore"
105
133
  - ".rspec"
134
+ - ".rubocop.yml"
106
135
  - ".ruby-version"
107
136
  - ".travis.yml"
108
137
  - CODE_OF_CONDUCT.md
@@ -134,14 +163,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
163
  requirements:
135
164
  - - ">="
136
165
  - !ruby/object:Gem::Version
137
- version: '0'
166
+ version: 2.4.0
138
167
  required_rubygems_version: !ruby/object:Gem::Requirement
139
168
  requirements:
140
169
  - - ">="
141
170
  - !ruby/object:Gem::Version
142
171
  version: '0'
143
172
  requirements: []
144
- rubygems_version: 3.2.16
173
+ rubygems_version: 3.2.30
145
174
  signing_key:
146
175
  specification_version: 4
147
176
  summary: Create objects for storing application flows