flow_object 0.2.1 → 0.3.1

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
- SHA1:
3
- metadata.gz: b6e87c3678c7dfc6a5b2293cdde82114f9f5630d
4
- data.tar.gz: c1cd29c871342cc8a434cf60026fabd2a5d23394
2
+ SHA256:
3
+ metadata.gz: db5d4237447ea9da647afab9214f2a37e10e3446353933dd6dd9f929d1b4a021
4
+ data.tar.gz: 0ca51ffecc9b02fe9f6a92f9382b0a91d18812645e844cfc02e22dc95997e4a4
5
5
  SHA512:
6
- metadata.gz: bd56f181a60349d8dbfa029d5da3d6e2fd9746fbf1bbbb05b70745082af186ea2985c9928a659f9d9346ee8515f9b1e437bcd513c2845650da6b6c94d62cc2f0
7
- data.tar.gz: bfa56fa807813ffe8dce4c3c8fd3d8e2d90587a9e14355fd9ea3d2b7a619fe16039145a87501748b96273145cff6f2186b4ae1fe04866406f489df5f9f7f5ef5
6
+ metadata.gz: 2fe85a38185bc79f41c3000ca80e8079578e591317dede9a2615a632a3e5756eb0c50b6f9a2def175bf781d50d9c00c50a645c2b623b8e8796a7904a3bb3dcf4
7
+ data.tar.gz: a63a10e4d35e722f28cb641711509653c44dfc0763c8cee77fc9f3da7b790f6bf49cf5c1a945dbedb395261aaa4d7e87096e071b8f4dd602c5f43d22b20111ff
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,23 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flow_object (0.2.1)
5
- mature_factory (~> 0.2.14)
4
+ flow_object (0.3.1)
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.14)
13
+ docile (1.3.5)
14
+ dry-inflector (0.2.0)
15
+ hospodar (1.0.1)
14
16
  dry-inflector (~> 0.1)
15
- simple_facade (~> 0.2)
17
+ json (2.5.1)
16
18
  method_source (1.0.0)
19
+ dry-inflector (~> 0.1)
20
+ parallel (1.20.1)
21
+ parser (3.0.2.0)
22
+ ast (~> 2.4.1)
17
23
  pry (0.13.1)
18
24
  coderay (~> 1.1)
19
25
  method_source (~> 1.0)
26
+ rainbow (3.0.0)
20
27
  rake (10.5.0)
28
+ regexp_parser (2.1.1)
29
+ rexml (3.2.5)
21
30
  rspec (3.9.0)
22
31
  rspec-core (~> 3.9.0)
23
32
  rspec-expectations (~> 3.9.0)
@@ -33,7 +42,24 @@ GEM
33
42
  rspec-support (3.9.3)
34
43
  rspec_vars_helper (0.1.0)
35
44
  rspec (>= 2.4)
36
- simple_facade (0.2.1)
45
+ rubocop (1.12.1)
46
+ parallel (~> 1.10)
47
+ parser (>= 3.0.0.0)
48
+ rainbow (>= 2.2.2, < 4.0)
49
+ regexp_parser (>= 1.8, < 3.0)
50
+ rexml
51
+ rubocop-ast (>= 1.2.0, < 2.0)
52
+ ruby-progressbar (~> 1.7)
53
+ unicode-display_width (>= 1.4.0, < 3.0)
54
+ rubocop-ast (1.4.1)
55
+ parser (>= 2.7.1.5)
56
+ ruby-progressbar (1.11.0)
57
+ simplecov (0.17.0)
58
+ docile (~> 1.1)
59
+ json (>= 1.8, < 3)
60
+ simplecov-html (~> 0.10.0)
61
+ simplecov-html (0.10.2)
62
+ unicode-display_width (2.0.0)
37
63
 
38
64
  PLATFORMS
39
65
  ruby
@@ -45,6 +71,8 @@ DEPENDENCIES
45
71
  rake (~> 10.0)
46
72
  rspec (~> 3.0)
47
73
  rspec_vars_helper (~> 0.1)
74
+ rubocop
75
+ simplecov (= 0.17)
48
76
 
49
77
  BUNDLED WITH
50
- 1.17.0
78
+ 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.14'
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,31 @@
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
- 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
12
+ attr_reader :in, :out
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)
25
+ end
26
+
27
+ def on_exception(exception = nil)
28
+ # NOOP
21
29
  end
22
30
 
23
31
  def on_failure(failed_step = nil)
@@ -28,20 +36,12 @@ module FlowObject
28
36
  # NOOP
29
37
  end
30
38
 
39
+ # Class-level interface for flow objects
31
40
  module ClassMethods
32
41
  def inherited(subclass)
33
42
  super
34
43
  subclass.from(self.in)
35
- subclass.to(self.out)
36
- subclass.after_input_initialize(&self.after_input_initialize)
37
- subclass.after_flow_initialize(&self.after_flow_initialize)
38
- subclass.after_input_check(&self.after_input_check)
39
- subclass.after_flow_check(&self.after_flow_check)
40
- subclass.after_output_initialize(&self.after_output_initialize)
41
- end
42
-
43
- def callbacks
44
- @callbacks ||= Callbacks.new
44
+ subclass.to(out)
45
45
  end
46
46
 
47
47
  def from(input)
@@ -54,67 +54,80 @@ module FlowObject
54
54
  self
55
55
  end
56
56
 
57
- def accept(*values)
58
- @initial_values = values
59
- self
60
- end
61
-
62
- def call(flow: :main)
63
- __fo_resolve__(__fo_process__(flow: flow))
57
+ def call(input:, flow: :main, &block)
58
+ fo_resolve(fo_process(input, flow: flow, &block))
64
59
  end
65
60
 
66
61
  def flow(name = :main, &block)
67
- wrap(name, delegate: true, &block)
68
- end
69
-
70
- def link_with_delegation(target, object, accessor, delegate)
71
- MatureFactory::Features::Assemble::AbstractBuilder
72
- .link_with_delegation(target, object, accessor, delegate)
62
+ wrap(name, delegate: true, on_exception: :halt, &block)
73
63
  end
74
64
 
75
65
  private
76
66
 
77
- def halt_flow?(object, id)
67
+ def halt_flow?(_object, _id)
78
68
  false
79
69
  end
80
70
 
81
- def __fo_process__(flow: :main)
82
- plan = __fo_build_flow__(flow, self.in, :input, __fo_wrap_input__)
71
+ def fo_process(input, flow: :main, &block)
72
+ plan = fo_build_flow(flow, self.in, :input, fo_wrap_input(input))
73
+ callbacks = Callbacks.new(@callbacks_allowlist)
74
+ block.call(callbacks) if block_given?
83
75
  Runner.new(plan, callbacks, method(:halt_flow?)).execute_plan
84
76
  end
85
77
 
86
- def __fo_build_flow__(flow, step_name, group, object)
87
- public_send(:"build_#{flow}", title: step_name, group: group, object: object)
78
+ def fo_build_flow(flow, step_name, group, object)
79
+ plan = send(:"hospodar_perform_planing_for_#{flow}", object, step_name, group)
80
+ @callbacks_allowlist = plan.map(&:last).map(&:to_sym) + [:"#{out}_output"]
81
+ send(:"hospodar_execute_plan_for_#{flow}", plan)
88
82
  end
89
83
 
90
- def __fo_wrap_input__
84
+ def fo_wrap_input(*initial_values)
91
85
  return initial_values if self.in.nil?
86
+
92
87
  input_class = public_send(:"#{self.in}_input_class")
93
88
  return initial_values if input_class.nil?
89
+
94
90
  public_send(:"new_#{self.in}_input_instance", *initial_values)
95
91
  end
96
92
 
97
- def __fo_wrap_output__
93
+ def fo_wrap_output
98
94
  # rescue NoMethodError => ex
99
95
  # "You have not define output class. Please add `output :#{self.out}`"
100
- return if self.out.nil?
101
- return unless self.respond_to?(:"#{self.out}_output_class")
102
- output_class = public_send(:"#{self.out}_output_class")
96
+ return if out.nil?
97
+ return unless respond_to?(:"#{out}_output_class")
98
+
99
+ output_class = public_send(:"#{out}_output_class")
103
100
  return if output_class.nil?
104
- public_send(:"new_#{self.out}_output_instance")
101
+
102
+ public_send(:"new_#{out}_output_instance")
105
103
  end
106
104
 
107
- def __fo_resolve__(runner)
108
- new(runner.flow, runner.step_name).tap do |handler|
109
- if runner.failure
110
- __fo_notify_error__(handler, runner.step_name)
105
+ def fo_resolve(runner)
106
+ new(runner.flow.public_send(runner.step_name), runner.callbacks, runner.step_name).tap do |handler|
107
+ if runner.flow.exceptional?
108
+ fo_notify_exception(handler, runner.flow.exception)
109
+ elsif runner.failure
110
+ fo_notify_error(handler, runner.step_name)
111
111
  else
112
- __fo_notify_success__(handler)
112
+ fo_notify_success(handler)
113
113
  end
114
114
  end
115
115
  end
116
116
 
117
- def __fo_notify_error__(handler, step)
117
+ def fo_notify_exception(handler, exception)
118
+ callback = :"on_#{exception.step_id.title}_exception"
119
+ if handler.output.respond_to?(callback)
120
+ handler.output.public_send(callback, exception)
121
+ elsif handler.output.respond_to?(:on_exception)
122
+ handler.output.on_exception(exception)
123
+ elsif handler.respond_to?(callback)
124
+ handler.public_send(callback, exception)
125
+ else
126
+ handler.on_exception(exception)
127
+ end
128
+ end
129
+
130
+ def fo_notify_error(handler, step)
118
131
  if handler.output.respond_to?(:"on_#{step}_failure")
119
132
  handler.output.public_send(:"on_#{step}_failure")
120
133
  elsif handler.output.respond_to?(:on_failure)
@@ -126,7 +139,7 @@ module FlowObject
126
139
  end
127
140
  end
128
141
 
129
- def __fo_notify_success__(handler)
142
+ def fo_notify_success(handler)
130
143
  if handler.output.respond_to?(:on_success)
131
144
  handler.output.on_success
132
145
  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.1'.freeze
4
+ VERSION = '0.3.1'
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.1
4
+ version: 0.3.1
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-03-18 00:00:00.000000000 Z
11
+ date: 2021-11-29 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.14
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.14
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,15 +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
- rubyforge_project:
145
- rubygems_version: 2.5.1
173
+ rubygems_version: 3.2.30
146
174
  signing_key:
147
175
  specification_version: 4
148
176
  summary: Create objects for storing application flows