lite-command 1.1.1 → 1.3.2

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: beadcca1b29f3daf78ef1b066fde11e3ec7906b1b077c1e1db69502ac1e3b11a
4
- data.tar.gz: ef3c8db30d607dd73b6c44775c79e7d9df06cc8c364a8bac763ce0fcc0a167d6
3
+ metadata.gz: 449d74c82b272492c3f8e2b4da2a0fd9c40a11ec06305feac435e89adf7090f4
4
+ data.tar.gz: b52f0808caa73dfdb5b17b234c575c52857ecc4275fd409a66aeb24901410127
5
5
  SHA512:
6
- metadata.gz: 49b3733322873804f0ea4bc858ff8ca65f6be400338e1f4604d5dba313da8ee6aabc5361b07b1e28631e9a8802ecfa04cb730e472341fc863ae538e29561b484
7
- data.tar.gz: 0f2f7ff8d8d5bf9198763f6f3d33cf0bae77e43b32705060008bda68019a8759968c87d865d24939ddc956923216b41171e19acf52d4ce274c5a1307630f66f2
6
+ metadata.gz: a2a0a961dd1789a2f464e3348bdf78c3e8a26d1b507c586a2e7c996d33829dbba4150090701cfe1363dcc400db1c5d2cecd2de81e43916d93a34600749062304
7
+ data.tar.gz: 2f4ed6a45cd968e430924e039b9cd74babfed6bad3833f78d074fd7c11c7113cf1441e2393ed6bade77ce8f0fe484de5ba828eacc50e7bb2b4a32ea99203a0e6
data/.rubocop.yml CHANGED
@@ -1,8 +1,9 @@
1
1
  require:
2
2
  - rubocop-performance
3
+ - rubocop-rake
3
4
  - rubocop-rspec
4
5
  AllCops:
5
- TargetRubyVersion: 2.7
6
+ TargetRubyVersion: 3.0
6
7
  NewCops: enable
7
8
  DisplayCopNames: true
8
9
  DisplayStyleGuide: true
@@ -35,6 +36,8 @@ RSpec/ExampleLength:
35
36
  Enabled: false
36
37
  RSpec/MultipleExpectations:
37
38
  Enabled: false
39
+ Style/ArgumentsForwarding:
40
+ Enabled: false
38
41
  Style/Documentation:
39
42
  Enabled: false
40
43
  Style/ExpandPathArguments:
data/CHANGELOG.md CHANGED
@@ -6,11 +6,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- ## [1.1.1] - 2019-06-08
9
+ ## [1.3.2] - 2021-07-21
10
+ ### Changed
11
+ - Improved setup
12
+
13
+ ## [1.3.1] - 2021-07-21
14
+ ### Changed
15
+ - Improved Railtie support
16
+
17
+ ## [1.3.0] - 2021-07-19
18
+ ### Added
19
+ - Added Ruby 3.0 support
20
+
21
+ ## [1.2.0] - 2021-02-04
22
+ ### Changed
23
+ - Add failed_steps to procedure
24
+
25
+ ## [1.1.1] - 2019-12-08
10
26
  ### Changed
11
27
  - Improve procedure error merging
12
28
 
13
- ## [1.1.0] - 2019-06-06
29
+ ## [1.1.0] - 2019-12-06
14
30
  ### Added
15
31
  - Added procedure support for running multiple commands
16
32
 
data/Gemfile.lock CHANGED
@@ -1,66 +1,73 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-command (1.1.1)
4
+ lite-command (1.3.2)
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.3.4)
12
- actionview (= 6.0.3.4)
13
- activesupport (= 6.0.3.4)
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.3.4)
19
- activesupport (= 6.0.3.4)
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.3.4)
25
- activesupport (= 6.0.3.4)
26
- activerecord (6.0.3.4)
27
- activemodel (= 6.0.3.4)
28
- activesupport (= 6.0.3.4)
29
- activesupport (6.0.3.4)
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, >= 2.2.2)
35
- ast (2.4.1)
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.7)
38
+ concurrent-ruby (1.1.9)
39
39
  crass (1.0.6)
40
- database_cleaner (1.8.5)
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)
41
46
  diff-lcs (1.4.4)
42
- erubi (1.9.0)
43
- fasterer (0.8.3)
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.8.5)
54
+ i18n (1.8.10)
50
55
  concurrent-ruby (~> 1.0)
51
- lite-errors (1.0.1)
52
- lite-memoize (1.0.3)
53
- loofah (2.7.0)
56
+ lite-errors (1.2.0)
57
+ lite-memoize (1.1.0)
58
+ loofah (2.10.0)
54
59
  crass (~> 1.0.2)
55
60
  nokogiri (>= 1.5.9)
56
61
  method_source (1.0.0)
57
- mini_portile2 (2.4.0)
58
- minitest (5.14.2)
59
- nokogiri (1.10.10)
60
- mini_portile2 (~> 2.4.0)
61
- parallel (1.20.0)
62
- parser (2.7.2.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)
63
69
  ast (~> 2.4.1)
70
+ racc (1.5.2)
64
71
  rack (2.2.3)
65
72
  rack-test (1.1.0)
66
73
  rack (>= 1.0, < 3)
@@ -69,57 +76,58 @@ GEM
69
76
  nokogiri (>= 1.6)
70
77
  rails-html-sanitizer (1.3.0)
71
78
  loofah (~> 2.3)
72
- railties (6.0.3.4)
73
- actionpack (= 6.0.3.4)
74
- activesupport (= 6.0.3.4)
79
+ railties (6.1.4)
80
+ actionpack (= 6.1.4)
81
+ activesupport (= 6.1.4)
75
82
  method_source
76
- rake (>= 0.8.7)
77
- thor (>= 0.20.3, < 2.0)
83
+ rake (>= 0.13)
84
+ thor (~> 1.0)
78
85
  rainbow (3.0.0)
79
- rake (13.0.1)
80
- regexp_parser (1.8.2)
81
- rexml (3.2.4)
86
+ rake (13.0.6)
87
+ regexp_parser (2.1.1)
88
+ rexml (3.2.5)
82
89
  rspec (3.10.0)
83
90
  rspec-core (~> 3.10.0)
84
91
  rspec-expectations (~> 3.10.0)
85
92
  rspec-mocks (~> 3.10.0)
86
- rspec-core (3.10.0)
93
+ rspec-core (3.10.1)
87
94
  rspec-support (~> 3.10.0)
88
- rspec-expectations (3.10.0)
95
+ rspec-expectations (3.10.1)
89
96
  diff-lcs (>= 1.2.0, < 2.0)
90
97
  rspec-support (~> 3.10.0)
91
- rspec-mocks (3.10.0)
98
+ rspec-mocks (3.10.2)
92
99
  diff-lcs (>= 1.2.0, < 2.0)
93
100
  rspec-support (~> 3.10.0)
94
- rspec-support (3.10.0)
95
- rubocop (1.2.0)
101
+ rspec-support (3.10.2)
102
+ rubocop (1.18.3)
96
103
  parallel (~> 1.10)
97
- parser (>= 2.7.1.5)
104
+ parser (>= 3.0.0.0)
98
105
  rainbow (>= 2.2.2, < 4.0)
99
- regexp_parser (>= 1.8)
106
+ regexp_parser (>= 1.8, < 3.0)
100
107
  rexml
101
- rubocop-ast (>= 1.0.1)
108
+ rubocop-ast (>= 1.7.0, < 2.0)
102
109
  ruby-progressbar (~> 1.7)
103
- unicode-display_width (>= 1.4.0, < 2.0)
104
- rubocop-ast (1.1.1)
105
- parser (>= 2.7.1.5)
106
- rubocop-performance (1.8.1)
107
- rubocop (>= 0.87.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)
108
115
  rubocop-ast (>= 0.4.0)
109
- rubocop-rspec (2.0.0)
116
+ rubocop-rake (0.6.0)
117
+ rubocop (~> 1.0)
118
+ rubocop-rspec (2.4.0)
110
119
  rubocop (~> 1.0)
111
120
  rubocop-ast (>= 1.1.0)
112
- ruby-progressbar (1.10.1)
113
- ruby_parser (3.15.0)
114
- sexp_processor (~> 4.9)
115
- sexp_processor (4.15.1)
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)
116
125
  sqlite3 (1.4.2)
117
- thor (1.0.1)
118
- thread_safe (0.3.6)
119
- tzinfo (1.2.8)
120
- thread_safe (~> 0.1)
121
- unicode-display_width (1.7.0)
122
- zeitwerk (2.4.1)
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)
123
131
 
124
132
  PLATFORMS
125
133
  ruby
@@ -135,8 +143,9 @@ DEPENDENCIES
135
143
  rspec
136
144
  rubocop
137
145
  rubocop-performance
146
+ rubocop-rake
138
147
  rubocop-rspec
139
148
  sqlite3
140
149
 
141
150
  BUNDLED WITH
142
- 2.1.4
151
+ 2.2.24
data/README.md CHANGED
@@ -141,7 +141,7 @@ class SearchChannels < Lite::Command::Procedure; end
141
141
 
142
142
  procedure = SearchChannels.call(
143
143
  DisneyChannel.new,
144
- EspnChannel.new,
144
+ EspnChannel.new(current_station),
145
145
  MtvChannel.new
146
146
  )
147
147
 
@@ -151,13 +151,14 @@ procedure.steps #=> [<DisneyChannel @result="...">, <EspnChannel @result="..."
151
151
  # If the errors extension is added you can stop the procedure at first failure.
152
152
  procedure = SearchChannels.new(
153
153
  DisneyChannel.new,
154
- ErrorChannel.new,
154
+ ErrorChannel.new(current_station),
155
155
  MtvChannel.new
156
156
  )
157
157
 
158
158
  procedure.exit_on_failure = true
159
159
  procedure.call
160
160
  procedure.result #=> ['disney: #3']
161
+ procedure.failed_steps #=> [{ index: 1, step: 2, name: 'ErrorChannel', args: [current_station], errors: ['field error message'] }]
161
162
  ```
162
163
 
163
164
  ## Extensions
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rails/generators'
4
-
5
3
  module Rails
6
4
  class CommandGenerator < Rails::Generators::NamedBase
7
5
 
data/lib/lite/command.rb CHANGED
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'lite/command/version'
3
+ require 'generators/rails/command_generator' if defined?(Rails::Generators)
4
4
 
5
- %w[errors memoize propagation].each do |name|
6
- require "lite/command/extensions/#{name}"
7
- end
5
+ require 'lite/command/version'
8
6
 
9
- %w[exceptions states simple complex procedure].each do |name|
10
- require "lite/command/#{name}"
11
- end
7
+ require 'lite/command/extensions/errors'
8
+ require 'lite/command/extensions/memoize'
9
+ require 'lite/command/extensions/propagation'
12
10
 
13
- require 'generators/rails/command_generator'
11
+ require 'lite/command/exceptions'
12
+ require 'lite/command/states'
13
+ require 'lite/command/simple'
14
+ require 'lite/command/complex'
15
+ require 'lite/command/procedure'
@@ -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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'lite/errors'
3
+ require 'lite/errors' unless defined?(Lite::Errors)
4
4
 
5
5
  module Lite
6
6
  module Command
@@ -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)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'lite/memoize'
3
+ require 'lite/memoize' unless defined?(Lite::Memoize)
4
4
 
5
5
  module Lite
6
6
  module Command
@@ -9,10 +9,11 @@ module Lite
9
9
  attr_accessor :exit_on_failure
10
10
 
11
11
  def execute
12
- steps.each_with_object([]) do |command, results|
12
+ steps.each_with_object([]).with_index do |(command, results), i|
13
13
  command.call
14
14
 
15
15
  if command.respond_to?(:errors) && command.failure?
16
+ failed_steps << failed_step(i, command)
16
17
  merge_errors!(command) if respond_to?(:errors)
17
18
  break results if exit_on_failure?
18
19
  else
@@ -25,10 +26,26 @@ module Lite
25
26
  @exit_on_failure ||= false
26
27
  end
27
28
 
29
+ def failed_steps
30
+ @failed_steps ||= []
31
+ end
32
+
28
33
  def steps
29
34
  @steps ||= @args.flatten
30
35
  end
31
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
+
32
49
  end
33
50
  end
34
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.1.1'
6
+ VERSION = '1.3.2'
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.1.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-08 00:00:00.000000000 Z
11
+ date: 2021-07-22 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
@@ -248,7 +262,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
262
  - !ruby/object:Gem::Version
249
263
  version: '0'
250
264
  requirements: []
251
- rubygems_version: 3.1.4
265
+ rubygems_version: 3.2.24
252
266
  signing_key:
253
267
  specification_version: 4
254
268
  summary: Ruby Command based framework (aka service objects)