processable 0.0.2 → 1.0.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
2
  SHA256:
3
- metadata.gz: af6456b89563d366dff4a93ac219dc3ac5509a90ab764492ff21c88a695e4131
4
- data.tar.gz: 7c0d7cf116cd5b826b7d70da5cfc87fa4bb604164fd0c7680ce418b88b4b3304
3
+ metadata.gz: ec61896c8cf47fe86e818a6c6aa4a188763603ec6eeaf7fd7cbb6d8331896995
4
+ data.tar.gz: 81fe69af1a31eb0014883fb7c149492dddb103aad7a2a5b7bc40961d506a9452
5
5
  SHA512:
6
- metadata.gz: bd72c594a38123b84614d58bcab6fc1f16c1d4bb3247e1fea4012bdea96b3f6888b519c61b368b12cf5a7120a47d61d3763aeb00199ee69fb4493f8e6bdc45ad
7
- data.tar.gz: c8c1a8c1c38888305d907f87e06253a4fcafcdde2086121b0252b650cc4ae1dafaf4a064910f61fc9f154e242aa4b7b72f82f13089f58a795be540276bac8ffa
6
+ metadata.gz: c58eeb9c2e4a3c88431a28aff883e90ed340448c4708f6c7ed05a99de80bb0b4932a911e35208997220e87936608eddccdf5135b3d7d7804a21be5615fd38741
7
+ data.tar.gz: 0c57d85af3ed9c69a244be3d7051f948f1145742d67758cf3dd1799faf7a3dedc3f665f05643114fe2b329a44947bc908503996c22cb21a082c7af439e983a6f
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.2)
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,8 +13,8 @@ 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
20
 
@@ -30,13 +30,14 @@ gem 'processable'
30
30
  ```
31
31
 
32
32
  And then execute:
33
-
34
- $ bundle install
33
+ ```shell
34
+ bundle install
35
+ ```
35
36
 
36
37
  Or install it yourself as:
37
-
38
- $ gem install processable
39
-
38
+ ```shell
39
+ gem install processable
40
+ ```
40
41
  ## Usage
41
42
 
42
43
  **Define new class with required behavior**
@@ -72,6 +73,19 @@ To start the process simply call...
72
73
  SiteScrapper.new.process
73
74
  ```
74
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
+
75
89
  ## Development
76
90
 
77
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,24 +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
 
49
- def initialize(*arguments)
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])
50
64
  end
51
65
 
66
+ def initialize(*arguments); end
67
+
52
68
  private
53
69
 
54
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.2"
5
+ spec.version = "1.0.0"
6
6
  spec.authors = ["Max Rukomoynikov"]
7
7
  spec.email = ["rukomoynikov@gmail.com"]
8
8
 
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.2
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-17 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