processable 0.0.1 → 1.0.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: 705d27371b77cdc00c484f92db94f67a7e94cdc04862ebad2c61089e9a183267
4
- data.tar.gz: c5ebc893d17dc9d3f70129a7ca840be4d5dcd7277d97214e9e29c09ce1c00771
3
+ metadata.gz: ec61896c8cf47fe86e818a6c6aa4a188763603ec6eeaf7fd7cbb6d8331896995
4
+ data.tar.gz: 81fe69af1a31eb0014883fb7c149492dddb103aad7a2a5b7bc40961d506a9452
5
5
  SHA512:
6
- metadata.gz: 76663b37e4ed8c24df609e5a0749250bd82111e0a9659a78dd955cc1f52476635883664e2f6fa800bba80aa5dddc92e5960cf5143cb78bd570a0ceff7f764ed7
7
- data.tar.gz: be1cc7b3986091c40635c16ca504ea000071e4d5bb5ad02cad3e3198f3c8ca83845d6db8a7e0a7924eec04643a7fae76e38b47721c4b51b22b4ef76b7244e09d
6
+ metadata.gz: c58eeb9c2e4a3c88431a28aff883e90ed340448c4708f6c7ed05a99de80bb0b4932a911e35208997220e87936608eddccdf5135b3d7d7804a21be5615fd38741
7
+ data.tar.gz: 0c57d85af3ed9c69a244be3d7051f948f1145742d67758cf3dd1799faf7a3dedc3f665f05643114fe2b329a44947bc908503996c22cb21a082c7af439e983a6f
data/.gitignore CHANGED
@@ -10,4 +10,5 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  .idea
13
- .byebug_history
13
+ .byebug_history
14
+ *.gem
data/.rubocop_todo.yml CHANGED
@@ -1,11 +1,22 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --auto-gen-only-exclude`
3
- # on 2022-07-16 11:38:10 UTC using RuboCop version 0.93.1.
3
+ # on 2023-10-20 07:00:15 UTC using RuboCop version 0.93.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
+ # Offense count: 1
10
+ Lint/ShadowingOuterLocalVariable:
11
+ Exclude:
12
+ - 'lib/processable.rb'
13
+
14
+ # Offense count: 1
15
+ # Configuration parameters: IgnoredMethods, Max.
16
+ Metrics/AbcSize:
17
+ Exclude:
18
+ - 'lib/processable.rb'
19
+
9
20
  # Offense count: 1
10
21
  # Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods.
11
22
  # ExcludedMethods: refine
@@ -14,6 +25,12 @@ Metrics/BlockLength:
14
25
  - '**/*.gemspec'
15
26
  - 'spec/processable_spec.rb'
16
27
 
28
+ # Offense count: 1
29
+ # Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods.
30
+ Metrics/MethodLength:
31
+ Exclude:
32
+ - 'lib/processable.rb'
33
+
17
34
  # Offense count: 2
18
35
  Style/ClassVars:
19
36
  Exclude:
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.0.5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- processable (0.0.1)
4
+ processable (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -10,26 +10,28 @@ GEM
10
10
  byebug (11.1.3)
11
11
  diff-lcs (1.5.0)
12
12
  docile (1.4.0)
13
- parallel (1.22.1)
14
- parser (3.1.2.0)
13
+ parallel (1.23.0)
14
+ parser (3.2.2.4)
15
15
  ast (~> 2.4.1)
16
+ racc
17
+ racc (1.7.1)
16
18
  rainbow (3.1.1)
17
19
  rake (13.0.6)
18
- regexp_parser (2.5.0)
19
- rexml (3.2.5)
20
- rspec (3.11.0)
21
- rspec-core (~> 3.11.0)
22
- rspec-expectations (~> 3.11.0)
23
- rspec-mocks (~> 3.11.0)
24
- rspec-core (3.11.0)
25
- rspec-support (~> 3.11.0)
26
- rspec-expectations (3.11.0)
20
+ regexp_parser (2.8.2)
21
+ rexml (3.2.6)
22
+ rspec (3.12.0)
23
+ rspec-core (~> 3.12.0)
24
+ rspec-expectations (~> 3.12.0)
25
+ rspec-mocks (~> 3.12.0)
26
+ rspec-core (3.12.2)
27
+ rspec-support (~> 3.12.0)
28
+ rspec-expectations (3.12.3)
27
29
  diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.11.0)
29
- rspec-mocks (3.11.1)
30
+ rspec-support (~> 3.12.0)
31
+ rspec-mocks (3.12.6)
30
32
  diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.11.0)
32
- rspec-support (3.11.0)
33
+ rspec-support (~> 3.12.0)
34
+ rspec-support (3.12.1)
33
35
  rubocop (0.93.1)
34
36
  parallel (~> 1.10)
35
37
  parser (>= 2.7.1.5)
@@ -39,12 +41,12 @@ GEM
39
41
  rubocop-ast (>= 0.6.0)
40
42
  ruby-progressbar (~> 1.7)
41
43
  unicode-display_width (>= 1.4.0, < 2.0)
42
- rubocop-ast (1.18.0)
43
- parser (>= 3.1.1.0)
44
+ rubocop-ast (1.29.0)
45
+ parser (>= 3.2.1.0)
44
46
  rubocop-rspec (1.44.1)
45
47
  rubocop (~> 0.87)
46
48
  rubocop-ast (>= 0.7.1)
47
- ruby-progressbar (1.11.0)
49
+ ruby-progressbar (1.13.0)
48
50
  simplecov (0.21.2)
49
51
  docile (~> 1.1)
50
52
  simplecov-html (~> 0.11)
@@ -66,4 +68,4 @@ DEPENDENCIES
66
68
  simplecov (~> 0.21.2)
67
69
 
68
70
  BUNDLED WITH
69
- 2.2.3
71
+ 2.4.20
data/README.md CHANGED
@@ -13,10 +13,12 @@ class PrintGithubRepos < Processable
13
13
  repos_json.except(:title, :description)
14
14
  end
15
15
 
16
- step :print_to_console do |repos_json|
17
- print repos_json
16
+ step :print_to_console do |result_from_prev_step, current_step, list_of_steps|
17
+ print result_from_prev_step
18
18
  end
19
19
  end
20
+
21
+ PrintGithubRepos.new.process
20
22
  ```
21
23
 
22
24
  ## Installation
@@ -28,13 +30,14 @@ gem 'processable'
28
30
  ```
29
31
 
30
32
  And then execute:
31
-
32
- $ bundle install
33
+ ```shell
34
+ bundle install
35
+ ```
33
36
 
34
37
  Or install it yourself as:
35
-
36
- $ gem install processable
37
-
38
+ ```shell
39
+ gem install processable
40
+ ```
38
41
  ## Usage
39
42
 
40
43
  **Define new class with required behavior**
@@ -62,7 +65,7 @@ class SiteScrapper < Processable
62
65
  end
63
66
  ```
64
67
 
65
- **Add steps to the process**
68
+ **Trigger the process**
66
69
 
67
70
  To start the process simply call...
68
71
 
@@ -70,6 +73,19 @@ To start the process simply call...
70
73
  SiteScrapper.new.process
71
74
  ```
72
75
 
76
+ To run the process until some certain step you can pass the name of the step as an argument. Also keep in mind the step defined in run_until will not be executed as well.
77
+
78
+ ```ruby
79
+ SiteScrapper.new.process(run_until: :save_to_database)
80
+ ```
81
+
82
+ To exec only one particular step you can pass the name of the step as an argument.
83
+
84
+ ```ruby
85
+ SiteScrapper.new.process(exec_step: :save_to_database)
86
+ ```
87
+
88
+
73
89
  ## Development
74
90
 
75
91
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/lib/processable.rb CHANGED
@@ -19,7 +19,7 @@ class Processable
19
19
  # Collections of steps like
20
20
  # @type [String]
21
21
  @@registered_steps = []
22
- class Error < StandardError; end
22
+ class StepNotFoundError < StandardError; end
23
23
 
24
24
  class << self
25
25
  # Adding new step to the process
@@ -31,21 +31,40 @@ class Processable
31
31
  end
32
32
 
33
33
  # Run steps in order as they were defined
34
- def process
35
- @@registered_steps.each_with_index do |step, index|
36
- previous_step = index.zero? ? {} : @@registered_steps[index - 1]
34
+ def process(run_until: nil)
35
+ steps_to_run = if run_until
36
+ run_until_index = @@registered_steps.find_index { |step_hash| step_hash[:name] == run_until }
37
+ raise StepNotFoundError, "Step '#{run_until}' not found" unless run_until_index
38
+
39
+ @@registered_steps[0..run_until_index]
40
+ else
41
+ @@registered_steps
42
+ end
43
+
44
+ steps_to_run.each_with_index do |step, index|
45
+ previous_step = index.zero? ? {} : steps_to_run[index - 1]
37
46
 
38
47
  result = instance_exec(previous_step[:result],
39
48
  step,
40
- @@registered_steps,
49
+ steps_to_run,
41
50
  &step[:block])
42
51
 
43
52
  step[:result] = result
44
53
  end
45
54
 
46
- @@registered_steps.last[:result]
55
+ steps_to_run.last[:result]
47
56
  end
48
57
 
58
+ def exec_step(step_name:, options:)
59
+ step = @@registered_steps.find { |step| step[:name] == step_name }
60
+
61
+ raise StepNotFoundError, "Step '#{step_name}' not found" unless step
62
+
63
+ instance_exec(options, step, @@registered_steps, &step[:block])
64
+ end
65
+
66
+ def initialize(*arguments); end
67
+
49
68
  private
50
69
 
51
70
  attr_accessor :registered_steps
data/processable.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "processable"
5
- spec.version = "0.0.1"
5
+ spec.version = "1.0.0"
6
6
  spec.authors = ["Max Rukomoynikov"]
7
7
  spec.email = ["rukomoynikov@gmail.com"]
8
8
 
data/processable.idea CHANGED
@@ -20,6 +20,8 @@ class LocationsUploaderStep < Processable::Step
20
20
  end
21
21
 
22
22
  # Order of steps as it's been defined
23
+ # Run process until
24
+ # Pass arguments to each step manually for test purpose
23
25
  # In the result you will get either result of the last step
24
26
  # Print every step (option to disable)
25
27
  # How to validate?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: processable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Rukomoynikov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-16 00:00:00.000000000 Z
11
+ date: 2023-10-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -23,6 +23,7 @@ files:
23
23
  - ".rspec"
24
24
  - ".rubocop.yml"
25
25
  - ".rubocop_todo.yml"
26
+ - ".ruby-version"
26
27
  - CODE_OF_CONDUCT.md
27
28
  - Gemfile
28
29
  - Gemfile.lock
@@ -55,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
56
  - !ruby/object:Gem::Version
56
57
  version: '0'
57
58
  requirements: []
58
- rubygems_version: 3.2.3
59
+ rubygems_version: 3.2.33
59
60
  signing_key:
60
61
  specification_version: 4
61
62
  summary: Ruby gem to help you organize any process into series of steps