lite-command 1.0.10 → 1.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
2
  SHA256:
3
- metadata.gz: 6feebc5e78cac74077531519297ff22b363fb2222b25f81e7a9b8c19c2762ac7
4
- data.tar.gz: 21cd5b42655e169af48f0081c7cf63196c4779f9a0d07b74be8d9cc77eb3f8d8
3
+ metadata.gz: 684eabeaf395c6e9bed47aad1b9e1eac697a2cfb0166a9814b23be9a1375a091
4
+ data.tar.gz: b70e0c2599fe3b44c87ab9a1277a51619aa8a05dd07474549e410a67c2f17275
5
5
  SHA512:
6
- metadata.gz: 5cb3f7fa8726bea8569e565a4c567f08a696b72d53bd85fe4a68dd0f4869be90cc60ef22e3968ab7cff314f97797d76ff0efc254112000282d0581b37eed634b
7
- data.tar.gz: 4bf282682cf120881ea8d30fabf3b1f87e9f612cc2ed7f1c0d16d397d4f82e881c86198f6e18b8452a12b7ffd706ed5eb12f133c5dad9038ca6bce943ed3dcb5
6
+ metadata.gz: eb98fbd1ab50a50c7891856d3735d7c59ce86559d5c1b017f72751e413125a5585128c298f9a508203bc01ecc0a5d130e7def18b9648eefee0d663beed3f2a7a
7
+ data.tar.gz: bff0220ecdeb881e68cb99a2fa335ed74aa01f4c779c51fb36b30b985cd266904882af58f7e7c706cdaa0d574d071211643dba62d8be264d8f0a125f5eb2d66a
data/.rubocop.yml CHANGED
@@ -1,10 +1,16 @@
1
1
  require:
2
2
  - rubocop-performance
3
+ - rubocop-rake
3
4
  - rubocop-rspec
4
5
  AllCops:
5
- TargetRubyVersion: 2.6
6
+ TargetRubyVersion: 3.0
7
+ NewCops: enable
6
8
  DisplayCopNames: true
7
9
  DisplayStyleGuide: true
10
+ Gemspec/RequiredRubyVersion:
11
+ Enabled: false
12
+ Layout/EmptyLinesAroundAttributeAccessor:
13
+ Enabled: true
8
14
  Layout/EmptyLinesAroundBlockBody:
9
15
  Exclude:
10
16
  - 'spec/**/**/*'
@@ -14,6 +20,12 @@ Layout/EmptyLinesAroundModuleBody:
14
20
  EnforcedStyle: empty_lines_except_namespace
15
21
  Layout/LineLength:
16
22
  Max: 100
23
+ Layout/SpaceAroundMethodCallOperator:
24
+ Enabled: true
25
+ Lint/RaiseException:
26
+ Enabled: true
27
+ Lint/StructNewOverride:
28
+ Enabled: true
17
29
  Metrics/BlockLength:
18
30
  Exclude:
19
31
  - 'spec/**/**/*'
@@ -24,6 +36,8 @@ RSpec/ExampleLength:
24
36
  Enabled: false
25
37
  RSpec/MultipleExpectations:
26
38
  Enabled: false
39
+ Style/ArgumentsForwarding:
40
+ Enabled: false
27
41
  Style/Documentation:
28
42
  Enabled: false
29
43
  Style/ExpandPathArguments:
data/.travis.yml CHANGED
@@ -4,6 +4,7 @@ cache: bundler
4
4
  rvm:
5
5
  - 2.5
6
6
  - 2.6
7
+ - 2.7
7
8
  - ruby-head
8
9
  matrix:
9
10
  fast_finish: true
data/CHANGELOG.md CHANGED
@@ -6,7 +6,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.3.0] - 2021-07-19
10
+ ### Added
11
+ - Added Ruby 3.0 support
12
+
13
+ ## [1.2.0] - 2021-02-04
14
+ ### Changed
15
+ - Add failed_steps to procedure
16
+
17
+ ## [1.1.1] - 2019-12-08
18
+ ### Changed
19
+ - Improve procedure error merging
20
+
21
+ ## [1.1.0] - 2019-12-06
22
+ ### Added
23
+ - Added procedure support for running multiple commands
24
+
9
25
  ## [1.0.10] - 2019-12-21
26
+ ### Added
27
+ - Added Ruby 2.7 support
10
28
  ### Removed
11
29
  - Removed generator empty directory check
12
30
 
data/Gemfile.lock CHANGED
@@ -1,68 +1,74 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-command (1.0.10)
4
+ lite-command (1.3.0)
5
5
  lite-errors
6
6
  lite-memoize
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionpack (6.0.2.1)
12
- actionview (= 6.0.2.1)
13
- activesupport (= 6.0.2.1)
14
- rack (~> 2.0, >= 2.0.8)
11
+ actionpack (6.1.4)
12
+ actionview (= 6.1.4)
13
+ activesupport (= 6.1.4)
14
+ rack (~> 2.0, >= 2.0.9)
15
15
  rack-test (>= 0.6.3)
16
16
  rails-dom-testing (~> 2.0)
17
17
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
18
- actionview (6.0.2.1)
19
- activesupport (= 6.0.2.1)
18
+ actionview (6.1.4)
19
+ activesupport (= 6.1.4)
20
20
  builder (~> 3.1)
21
21
  erubi (~> 1.4)
22
22
  rails-dom-testing (~> 2.0)
23
23
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
24
- activemodel (6.0.2.1)
25
- activesupport (= 6.0.2.1)
26
- activerecord (6.0.2.1)
27
- activemodel (= 6.0.2.1)
28
- activesupport (= 6.0.2.1)
29
- activesupport (6.0.2.1)
24
+ activemodel (6.1.4)
25
+ activesupport (= 6.1.4)
26
+ activerecord (6.1.4)
27
+ activemodel (= 6.1.4)
28
+ activesupport (= 6.1.4)
29
+ activesupport (6.1.4)
30
30
  concurrent-ruby (~> 1.0, >= 1.0.2)
31
- i18n (>= 0.7, < 2)
32
- minitest (~> 5.1)
33
- tzinfo (~> 1.1)
34
- zeitwerk (~> 2.2)
35
- ast (2.4.0)
31
+ i18n (>= 1.6, < 2)
32
+ minitest (>= 5.1)
33
+ tzinfo (~> 2.0)
34
+ zeitwerk (~> 2.3)
35
+ ast (2.4.2)
36
36
  builder (3.2.4)
37
37
  colorize (0.8.1)
38
- concurrent-ruby (1.1.5)
39
- crass (1.0.5)
40
- database_cleaner (1.7.0)
41
- diff-lcs (1.3)
42
- erubi (1.9.0)
43
- fasterer (0.8.1)
38
+ concurrent-ruby (1.1.9)
39
+ crass (1.0.6)
40
+ database_cleaner (2.0.1)
41
+ database_cleaner-active_record (~> 2.0.0)
42
+ database_cleaner-active_record (2.0.1)
43
+ activerecord (>= 5.a)
44
+ database_cleaner-core (~> 2.0.0)
45
+ database_cleaner-core (2.0.1)
46
+ diff-lcs (1.4.4)
47
+ erubi (1.10.0)
48
+ fasterer (0.9.0)
44
49
  colorize (~> 0.7)
45
50
  ruby_parser (>= 3.14.1)
46
51
  generator_spec (0.9.4)
47
52
  activesupport (>= 3.0.0)
48
53
  railties (>= 3.0.0)
49
- i18n (1.7.0)
54
+ i18n (1.8.10)
50
55
  concurrent-ruby (~> 1.0)
51
- jaro_winkler (1.5.4)
52
- lite-errors (1.0.1)
53
- lite-memoize (1.0.3)
54
- loofah (2.4.0)
56
+ lite-errors (1.1.0)
57
+ lite-memoize (1.0.4)
58
+ loofah (2.10.0)
55
59
  crass (~> 1.0.2)
56
60
  nokogiri (>= 1.5.9)
57
- method_source (0.9.2)
58
- mini_portile2 (2.4.0)
59
- minitest (5.13.0)
60
- nokogiri (1.10.7)
61
- mini_portile2 (~> 2.4.0)
62
- parallel (1.19.1)
63
- parser (2.6.5.0)
64
- ast (~> 2.4.0)
65
- rack (2.0.8)
61
+ method_source (1.0.0)
62
+ mini_portile2 (2.5.3)
63
+ minitest (5.14.4)
64
+ nokogiri (1.11.7)
65
+ mini_portile2 (~> 2.5.0)
66
+ racc (~> 1.4)
67
+ parallel (1.20.1)
68
+ parser (3.0.2.0)
69
+ ast (~> 2.4.1)
70
+ racc (1.5.2)
71
+ rack (2.2.3)
66
72
  rack-test (1.1.0)
67
73
  rack (>= 1.0, < 3)
68
74
  rails-dom-testing (2.0.3)
@@ -70,49 +76,58 @@ GEM
70
76
  nokogiri (>= 1.6)
71
77
  rails-html-sanitizer (1.3.0)
72
78
  loofah (~> 2.3)
73
- railties (6.0.2.1)
74
- actionpack (= 6.0.2.1)
75
- activesupport (= 6.0.2.1)
79
+ railties (6.1.4)
80
+ actionpack (= 6.1.4)
81
+ activesupport (= 6.1.4)
76
82
  method_source
77
- rake (>= 0.8.7)
78
- thor (>= 0.20.3, < 2.0)
83
+ rake (>= 0.13)
84
+ thor (~> 1.0)
79
85
  rainbow (3.0.0)
80
- rake (13.0.1)
81
- rspec (3.9.0)
82
- rspec-core (~> 3.9.0)
83
- rspec-expectations (~> 3.9.0)
84
- rspec-mocks (~> 3.9.0)
85
- rspec-core (3.9.0)
86
- rspec-support (~> 3.9.0)
87
- rspec-expectations (3.9.0)
86
+ rake (13.0.6)
87
+ regexp_parser (2.1.1)
88
+ rexml (3.2.5)
89
+ rspec (3.10.0)
90
+ rspec-core (~> 3.10.0)
91
+ rspec-expectations (~> 3.10.0)
92
+ rspec-mocks (~> 3.10.0)
93
+ rspec-core (3.10.1)
94
+ rspec-support (~> 3.10.0)
95
+ rspec-expectations (3.10.1)
88
96
  diff-lcs (>= 1.2.0, < 2.0)
89
- rspec-support (~> 3.9.0)
90
- rspec-mocks (3.9.0)
97
+ rspec-support (~> 3.10.0)
98
+ rspec-mocks (3.10.2)
91
99
  diff-lcs (>= 1.2.0, < 2.0)
92
- rspec-support (~> 3.9.0)
93
- rspec-support (3.9.0)
94
- rubocop (0.78.0)
95
- jaro_winkler (~> 1.5.1)
100
+ rspec-support (~> 3.10.0)
101
+ rspec-support (3.10.2)
102
+ rubocop (1.18.3)
96
103
  parallel (~> 1.10)
97
- parser (>= 2.6)
104
+ parser (>= 3.0.0.0)
98
105
  rainbow (>= 2.2.2, < 4.0)
106
+ regexp_parser (>= 1.8, < 3.0)
107
+ rexml
108
+ rubocop-ast (>= 1.7.0, < 2.0)
99
109
  ruby-progressbar (~> 1.7)
100
- unicode-display_width (>= 1.4.0, < 1.7)
101
- rubocop-performance (1.5.1)
102
- rubocop (>= 0.71.0)
103
- rubocop-rspec (1.37.1)
104
- rubocop (>= 0.68.1)
105
- ruby-progressbar (1.10.1)
106
- ruby_parser (3.14.1)
107
- sexp_processor (~> 4.9)
108
- sexp_processor (4.13.0)
110
+ unicode-display_width (>= 1.4.0, < 3.0)
111
+ rubocop-ast (1.8.0)
112
+ parser (>= 3.0.1.1)
113
+ rubocop-performance (1.11.4)
114
+ rubocop (>= 1.7.0, < 2.0)
115
+ rubocop-ast (>= 0.4.0)
116
+ rubocop-rake (0.6.0)
117
+ rubocop (~> 1.0)
118
+ rubocop-rspec (2.4.0)
119
+ rubocop (~> 1.0)
120
+ rubocop-ast (>= 1.1.0)
121
+ ruby-progressbar (1.11.0)
122
+ ruby_parser (3.16.0)
123
+ sexp_processor (~> 4.15, >= 4.15.1)
124
+ sexp_processor (4.15.3)
109
125
  sqlite3 (1.4.2)
110
- thor (1.0.1)
111
- thread_safe (0.3.6)
112
- tzinfo (1.2.5)
113
- thread_safe (~> 0.1)
114
- unicode-display_width (1.6.0)
115
- zeitwerk (2.2.2)
126
+ thor (1.1.0)
127
+ tzinfo (2.0.4)
128
+ concurrent-ruby (~> 1.0)
129
+ unicode-display_width (2.0.0)
130
+ zeitwerk (2.4.2)
116
131
 
117
132
  PLATFORMS
118
133
  ruby
@@ -128,8 +143,9 @@ DEPENDENCIES
128
143
  rspec
129
144
  rubocop
130
145
  rubocop-performance
146
+ rubocop-rake
131
147
  rubocop-rspec
132
148
  sqlite3
133
149
 
134
150
  BUNDLED WITH
135
- 2.0.2
151
+ 2.2.24
data/README.md CHANGED
@@ -27,6 +27,7 @@ Or install it yourself as:
27
27
  * [Setup](#setup)
28
28
  * [Simple](#simple)
29
29
  * [Complex](#complex)
30
+ * [Procedure](#procedure)
30
31
  * [Extensions](#extensions)
31
32
 
32
33
  ## Setup
@@ -60,8 +61,7 @@ end
60
61
  **Caller**
61
62
 
62
63
  ```ruby
63
- command = SearchMovies.call('Toy Story')
64
- command.call
64
+ SearchMovies.call('Toy Story')
65
65
  ```
66
66
 
67
67
  ## Complex
@@ -130,9 +130,40 @@ command.recall! #=> Clears the call, cache, errors, and then re-performs the cal
130
130
  command.result #=> { 'fingerprint_2' => [ 'Toy Story 2', ... ] }
131
131
  ```
132
132
 
133
+ ## Procedure
134
+
135
+ Procedures run a collection of commands. It uses the the complex procedure API
136
+ so it has access to all the methods. The `execute` method is already defined to
137
+ handle most common procedure steps. It can be use directly or subclassed.
138
+
139
+ ```ruby
140
+ class SearchChannels < Lite::Command::Procedure; end
141
+
142
+ procedure = SearchChannels.call(
143
+ DisneyChannel.new,
144
+ EspnChannel.new(current_station),
145
+ MtvChannel.new
146
+ )
147
+
148
+ procedure.result #=> ['disney: #3', 'espn: #59', 'mtv: #212']
149
+ procedure.steps #=> [<DisneyChannel @result="...">, <EspnChannel @result="...">, <MtvChannel @result="...">]
150
+
151
+ # If the errors extension is added you can stop the procedure at first failure.
152
+ procedure = SearchChannels.new(
153
+ DisneyChannel.new,
154
+ ErrorChannel.new(current_station),
155
+ MtvChannel.new
156
+ )
157
+
158
+ procedure.exit_on_failure = true
159
+ procedure.call
160
+ procedure.result #=> ['disney: #3']
161
+ procedure.failed_steps #=> [{ index: 1, step: 2, name: 'ErrorChannel', args: [current_station], errors: ['field error message'] }]
162
+ ```
163
+
133
164
  ## Extensions
134
165
 
135
- Extend complex base command with any of the following extensions:
166
+ Extend complex (and procedures) base command with any of the following extensions:
136
167
 
137
168
  ### Errors (optional)
138
169
 
data/lib/lite/command.rb CHANGED
@@ -6,7 +6,7 @@ require 'lite/command/version'
6
6
  require "lite/command/extensions/#{name}"
7
7
  end
8
8
 
9
- %w[exceptions states complex simple].each do |name|
9
+ %w[exceptions states simple complex procedure].each do |name|
10
10
  require "lite/command/#{name}"
11
11
  end
12
12
 
@@ -6,22 +6,22 @@ module Lite
6
6
 
7
7
  class << self
8
8
 
9
- def call(*args)
10
- klass = new(*args)
9
+ def call(*args, **kwargs, &block)
10
+ klass = new(*args, **kwargs, &block)
11
11
  raise Lite::Command::NotImplementedError unless klass.respond_to?(:execute)
12
12
 
13
13
  klass.call
14
14
  klass
15
15
  end
16
16
 
17
- def execute(*args)
18
- klass = call(*args)
17
+ def execute(*args, **kwargs, &block)
18
+ klass = call(*args, **kwargs, &block)
19
19
  klass.result
20
20
  end
21
21
 
22
22
  end
23
23
 
24
- attr_reader :result
24
+ attr_reader :args, :result
25
25
 
26
26
  def initialize(*args)
27
27
  @args = args
@@ -4,6 +4,7 @@ module Lite
4
4
  module Command
5
5
 
6
6
  class NotImplementedError < StandardError; end
7
+
7
8
  class ValidationError < StandardError; end
8
9
 
9
10
  end
@@ -9,8 +9,8 @@ module Lite
9
9
 
10
10
  module ClassMethods
11
11
 
12
- def perform(*args)
13
- klass = call(*args)
12
+ def perform(*args, **kwargs, &block)
13
+ klass = call(*args, **kwargs, &block)
14
14
 
15
15
  if klass.success?
16
16
  yield(klass.result, Lite::Command::Success, Lite::Command::Failure)
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Command
5
+ class Procedure < Complex
6
+
7
+ include Lite::Command::Extensions::Errors
8
+
9
+ attr_accessor :exit_on_failure
10
+
11
+ def execute
12
+ steps.each_with_object([]).with_index do |(command, results), i|
13
+ command.call
14
+
15
+ if command.respond_to?(:errors) && command.failure?
16
+ failed_steps << failed_step(i, command)
17
+ merge_errors!(command) if respond_to?(:errors)
18
+ break results if exit_on_failure?
19
+ else
20
+ results << command.result
21
+ end
22
+ end
23
+ end
24
+
25
+ def exit_on_failure?
26
+ @exit_on_failure ||= false
27
+ end
28
+
29
+ def failed_steps
30
+ @failed_steps ||= []
31
+ end
32
+
33
+ def steps
34
+ @steps ||= @args.flatten
35
+ end
36
+
37
+ private
38
+
39
+ def failed_step(index, command)
40
+ {
41
+ index: index,
42
+ step: index + 1,
43
+ name: command.class.name,
44
+ args: command.args,
45
+ errors: command&.errors&.full_messages
46
+ }
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -6,10 +6,10 @@ module Lite
6
6
 
7
7
  class << self
8
8
 
9
- def call(*args)
9
+ def call(*args, **kwargs, &block)
10
10
  raise Lite::Command::NotImplementedError unless defined?(execute)
11
11
 
12
- execute(*args)
12
+ execute(*args, **kwargs, &block)
13
13
  end
14
14
 
15
15
  end
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Command
5
5
 
6
- VERSION ||= '1.0.10'
6
+ VERSION = '1.3.0'
7
7
 
8
8
  end
9
9
  end
data/lite-command.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  )
26
26
  else
27
27
  raise 'RubyGems 2.0 or newer is required to protect against ' \
28
- 'public gem pushes.'
28
+ 'public gem pushes.'
29
29
  end
30
30
 
31
31
  # Specify which files should be added to the gem when it is released.
@@ -49,6 +49,7 @@ Gem::Specification.new do |spec|
49
49
  spec.add_development_dependency 'rspec'
50
50
  spec.add_development_dependency 'rubocop'
51
51
  spec.add_development_dependency 'rubocop-performance'
52
+ spec.add_development_dependency 'rubocop-rake'
52
53
  spec.add_development_dependency 'rubocop-rspec'
53
54
  spec.add_development_dependency 'sqlite3'
54
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lite-command
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-21 00:00:00.000000000 Z
11
+ date: 2021-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lite-errors
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: rubocop-rspec
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -192,7 +206,7 @@ dependencies:
192
206
  - - ">="
193
207
  - !ruby/object:Gem::Version
194
208
  version: '0'
195
- description:
209
+ description:
196
210
  email:
197
211
  - j.gomez@drexed.com
198
212
  executables: []
@@ -224,6 +238,7 @@ files:
224
238
  - lib/lite/command/extensions/errors.rb
225
239
  - lib/lite/command/extensions/memoize.rb
226
240
  - lib/lite/command/extensions/propagation.rb
241
+ - lib/lite/command/procedure.rb
227
242
  - lib/lite/command/simple.rb
228
243
  - lib/lite/command/states.rb
229
244
  - lib/lite/command/version.rb
@@ -232,7 +247,7 @@ homepage: http://drexed.github.io/lite-command
232
247
  licenses:
233
248
  - MIT
234
249
  metadata: {}
235
- post_install_message:
250
+ post_install_message:
236
251
  rdoc_options: []
237
252
  require_paths:
238
253
  - lib
@@ -247,8 +262,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
262
  - !ruby/object:Gem::Version
248
263
  version: '0'
249
264
  requirements: []
250
- rubygems_version: 3.1.1
251
- signing_key:
265
+ rubygems_version: 3.2.24
266
+ signing_key:
252
267
  specification_version: 4
253
268
  summary: Ruby Command based framework (aka service objects)
254
269
  test_files: []