flow_object 0.2.0 → 0.3.0

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: 0c4e0bf60b9bd1664f1e627b21f7ab1f9054abba
4
- data.tar.gz: e8e9520592e1e9cc689c15be26d744580c774396
2
+ SHA256:
3
+ metadata.gz: 0612652b790e12566782ac7aede6677315ae05c773ca066afee9b39fd9ac4335
4
+ data.tar.gz: ebf9b7de4d50e5003f83197f87a3557d831ee20c040947dedaf421d2c3ff73c6
5
5
  SHA512:
6
- metadata.gz: 8edbfe815c46426494dfb7343f9f9d553e4f5889e79af5d7f09b2cd7202677cef7106c2b1ea6c5eb4892b3be24b6c6422465080c61db58b59f695a5511a1d054
7
- data.tar.gz: b57d9c98ce427889d725c8297eadde4c3c190512ed9a9c54b8e2bf0ba224eafb785373cbedb0de56ae62729c4b40006323abad8ac042658d11c455c9373f95b0
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,23 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flow_object (0.2.0)
5
- mature_factory (~> 0.2.13)
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.13)
14
- dry-inflector (~> 0.1)
15
- simple_facade (~> 0.2)
13
+ docile (1.3.5)
14
+ dry-inflector (0.2.0)
15
+ hospodar (1.0.1)
16
+ json (2.5.1)
16
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)
17
22
  pry (0.13.1)
18
23
  coderay (~> 1.1)
19
24
  method_source (~> 1.0)
25
+ rainbow (3.0.0)
20
26
  rake (10.5.0)
27
+ regexp_parser (2.1.1)
28
+ rexml (3.2.5)
21
29
  rspec (3.9.0)
22
30
  rspec-core (~> 3.9.0)
23
31
  rspec-expectations (~> 3.9.0)
@@ -33,7 +41,24 @@ GEM
33
41
  rspec-support (3.9.3)
34
42
  rspec_vars_helper (0.1.0)
35
43
  rspec (>= 2.4)
36
- simple_facade (0.2.1)
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)
37
62
 
38
63
  PLATFORMS
39
64
  ruby
@@ -45,6 +70,8 @@ DEPENDENCIES
45
70
  rake (~> 10.0)
46
71
  rspec (~> 3.0)
47
72
  rspec_vars_helper (~> 0.1)
73
+ rubocop
74
+ simplecov (= 0.17)
48
75
 
49
76
  BUNDLED WITH
50
- 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.13'
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,20 +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
- composed_of :stages, :inputs, :outputs
9
+ produces :stages, :inputs, :outputs
7
10
 
8
11
  class << self
9
12
  attr_reader :in, :out, :initial_values
10
13
  end
11
14
 
12
- attr_reader :output, :given
15
+ extend Forwardable
16
+ def_delegators :callbacks, :output_initialized
17
+
18
+ attr_reader :output, :callbacks
13
19
 
14
- def initialize(given)
15
- @given = given
16
- @output = self.class.send(:__fo_wrap_output__)
17
- self.class.after_output_initialize.call(@output) if self.class.after_output_initialize
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
18
29
  end
19
30
 
20
31
  def on_failure(failed_step = nil)
@@ -25,16 +36,12 @@ module FlowObject
25
36
  # NOOP
26
37
  end
27
38
 
39
+ # Class-level interface for flow objects
28
40
  module ClassMethods
29
41
  def inherited(subclass)
30
42
  super
31
43
  subclass.from(self.in)
32
- subclass.to(self.out)
33
- subclass.after_input_initialize(&self.after_input_initialize)
34
- subclass.after_flow_initialize(&self.after_flow_initialize)
35
- subclass.after_input_check(&self.after_input_check)
36
- subclass.after_flow_check(&self.after_flow_check)
37
- subclass.after_output_initialize(&self.after_output_initialize)
44
+ subclass.to(out)
38
45
  end
39
46
 
40
47
  def from(input)
@@ -52,115 +59,96 @@ module FlowObject
52
59
  self
53
60
  end
54
61
 
55
- def call(flow: :main)
56
- __fo_resolve_cascade__(*__fo_process__(flow: flow))
62
+ def call(flow: :main, &block)
63
+ fo_resolve(fo_process(flow: flow, &block))
57
64
  end
58
65
 
59
66
  def flow(name = :main, &block)
60
- wrap(name, delegate: true, &block)
61
- end
62
-
63
- def after_input_initialize(&block)
64
- block_given? ? @after_input_initialize = block : @after_input_initialize
65
- end
66
-
67
- def after_flow_initialize(&block)
68
- block_given? ? @after_flow_initialize = block : @after_flow_initialize
69
- end
70
-
71
- def after_input_check(&block)
72
- block_given? ? @after_input_check = block : @after_input_check
73
- end
74
-
75
- def after_flow_check(&block)
76
- block_given? ? @after_flow_check = block : @after_flow_check
77
- end
78
-
79
- def after_output_initialize(&block)
80
- block_given? ? @after_output_initialize = block : @after_output_initialize
67
+ wrap(name, delegate: true, on_exception: :halt, &block)
81
68
  end
82
69
 
83
70
  private
84
71
 
85
- def halt_flow?(object, id)
72
+ def halt_flow?(_object, _id)
86
73
  false
87
74
  end
88
75
 
89
- def __fo_process__(flow: :main)
90
- failure, step_name, group = false, self.in, :input
91
- plan = __fo_build_flow__(flow, step_name, group, __fo_wrap_input__)
92
- cascade = __fo_run_flow__(plan,
93
- proc{|_,id| step_name = id.title},
94
- proc{ failure = true },
95
- after_input_initialize,
96
- after_flow_initialize)
97
- after_flow_check.call(cascade.public_send(step_name)) if after_flow_check
98
- [cascade, step_name, failure]
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?
80
+ Runner.new(plan, callbacks, method(:halt_flow?)).execute_plan
99
81
  end
100
82
 
101
- def __fo_build_flow__(flow, step_name, group, object)
102
- 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)
103
87
  end
104
88
 
105
- def __fo_run_flow__(plan, on_step, on_failure, on_input, on_flow)
106
- step_index = 0
107
- plan.call do |object, id|
108
- on_input.call(object) if on_input && id.group == :input
109
- on_flow.call(object) if step_index == 1 && on_flow && id.group == :stage
110
- on_step.call(object, id)
111
- step_index += 1
112
- if halt_flow?(object, id)
113
- on_failure.call(object, id)
114
- throw :halt
115
- end
116
- after_input_check.call(object) if after_input_check && id.group == :input
117
- end
118
- end
119
-
120
- def __fo_wrap_input__
89
+ def fo_wrap_input
121
90
  return initial_values if self.in.nil?
91
+
122
92
  input_class = public_send(:"#{self.in}_input_class")
123
93
  return initial_values if input_class.nil?
94
+
124
95
  public_send(:"new_#{self.in}_input_instance", *initial_values)
125
96
  end
126
97
 
127
- def __fo_wrap_output__
98
+ def fo_wrap_output
128
99
  # rescue NoMethodError => ex
129
100
  # "You have not define output class. Please add `output :#{self.out}`"
130
- return if self.out.nil?
131
- return unless self.respond_to?(:"#{self.out}_output_class")
132
- 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")
133
105
  return if output_class.nil?
134
- public_send(:"new_#{self.out}_output_instance")
106
+
107
+ public_send(:"new_#{out}_output_instance")
135
108
  end
136
109
 
137
- def __fo_resolve_cascade__(cascade, step, failure)
138
- new(cascade).tap do |flow|
139
- if failure
140
- __fo_notify_error__(flow, step)
110
+ def fo_resolve(runner)
111
+ new(runner.flow.public_send(runner.step_name), runner.callbacks, runner.step_name).tap do |handler|
112
+ if runner.flow.exceptional?
113
+ fo_notify_exception(handler, runner.flow.exception)
114
+ elsif runner.failure
115
+ fo_notify_error(handler, runner.step_name)
141
116
  else
142
- __fo_notify_success__(flow)
117
+ fo_notify_success(handler)
143
118
  end
144
119
  end
145
120
  end
146
121
 
147
- def __fo_notify_error__(flow, step)
148
- if flow.output.respond_to?(:"on_#{step}_failure")
149
- flow.output.public_send(:"on_#{step}_failure", flow.given)
150
- elsif flow.output.respond_to?(:on_failure)
151
- flow.output.on_failure(flow.given, step)
152
- elsif flow.respond_to?(:"on_#{step}_failure")
153
- flow.public_send(:"on_#{step}_failure")
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)
126
+ elsif handler.output.respond_to?(:on_exception)
127
+ handler.output.on_exception(exception)
128
+ elsif handler.respond_to?(callback)
129
+ handler.public_send(callback, exception)
130
+ else
131
+ handler.on_exception(exception)
132
+ end
133
+ end
134
+
135
+ def fo_notify_error(handler, step)
136
+ if handler.output.respond_to?(:"on_#{step}_failure")
137
+ handler.output.public_send(:"on_#{step}_failure")
138
+ elsif handler.output.respond_to?(:on_failure)
139
+ handler.output.on_failure(step)
140
+ elsif handler.respond_to?(:"on_#{step}_failure")
141
+ handler.public_send(:"on_#{step}_failure")
154
142
  else
155
- flow.on_failure(step)
143
+ handler.on_failure(step)
156
144
  end
157
145
  end
158
146
 
159
- def __fo_notify_success__(flow)
160
- if flow.output.respond_to?(:on_success)
161
- flow.output.on_success(flow.given)
147
+ def fo_notify_success(handler)
148
+ if handler.output.respond_to?(:on_success)
149
+ handler.output.on_success
162
150
  else
163
- flow.on_success
151
+ handler.on_success
164
152
  end
165
153
  end
166
154
  end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlowObject
4
+ # Storage for users callbacks
5
+ class Callbacks
6
+ NOOP = proc {}.freeze
7
+
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
49
+ end
50
+
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
58
+ end
59
+ end
60
+
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
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlowObject
4
+ # Triggers flow execution and users callbacks
5
+ class Runner
6
+ attr_reader :step_name, :failure, :flow, :callbacks
7
+
8
+ def initialize(plan, callbacks, halt_if_proc)
9
+ @plan = plan
10
+ @flow = flow
11
+ @failure = false
12
+ @step_name = nil
13
+ @callbacks = callbacks
14
+ @halt_if_proc = halt_if_proc
15
+ end
16
+
17
+ def execute_plan
18
+ @flow = flow_builder.call
19
+ self
20
+ end
21
+
22
+ private
23
+
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
30
+
31
+ after_check(object, id)
32
+ end
33
+ end
34
+
35
+ def after_initialize(object, id)
36
+ @callbacks.public_send(:"#{id}_initialized").call(object)
37
+ end
38
+
39
+ def after_check(object, id)
40
+ @callbacks.public_send(:"#{id}_checked").call(object)
41
+ false
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowObject
2
- VERSION = '0.2.0'.freeze
4
+ VERSION = '0.3.0'
3
5
  end
data/lib/flow_object.rb CHANGED
@@ -1,4 +1,8 @@
1
- require 'mature_factory'
1
+ # frozen_string_literal: true
2
+
3
+ require 'hospodar'
4
+ require 'flow_object/callbacks'
5
+ require 'flow_object/runner'
2
6
  require 'flow_object/base'
3
7
  require 'flow_object/version'
4
8
 
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.0
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-03-05 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.13
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.13
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
@@ -116,6 +145,8 @@ files:
116
145
  - flow_object.gemspec
117
146
  - lib/flow_object.rb
118
147
  - lib/flow_object/base.rb
148
+ - lib/flow_object/callbacks.rb
149
+ - lib/flow_object/runner.rb
119
150
  - lib/flow_object/version.rb
120
151
  homepage: https://github.com/andriy-baran/flow_object
121
152
  licenses:
@@ -132,15 +163,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
163
  requirements:
133
164
  - - ">="
134
165
  - !ruby/object:Gem::Version
135
- version: '0'
166
+ version: 2.4.0
136
167
  required_rubygems_version: !ruby/object:Gem::Requirement
137
168
  requirements:
138
169
  - - ">="
139
170
  - !ruby/object:Gem::Version
140
171
  version: '0'
141
172
  requirements: []
142
- rubyforge_project:
143
- rubygems_version: 2.5.1
173
+ rubygems_version: 3.2.30
144
174
  signing_key:
145
175
  specification_version: 4
146
176
  summary: Create objects for storing application flows