umarell 1.1.0 → 1.2.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: 15598f8e5d0a9e202a5b5a794ce7a41e9745915b3107b553923b51840ad81ff4
4
- data.tar.gz: 9c5344b6f68e2c5d37eda47d7596d2c6b69e1a6e6d1bf6775526d54f00b5506a
3
+ metadata.gz: ef5048068ece7c6751a487e6ac24aea679ff95887041ecb5f216f78d3462ac2e
4
+ data.tar.gz: b071681a9849c7619459c2966e2d6373950eb38fe6e8d602292f8bfd7d0a0cbb
5
5
  SHA512:
6
- metadata.gz: 5b023bb874fbe2d2f2ff93fbafcda0228194a6a7775402403636694772b7233d3d05bbb054d78a2db609ac73bb011ee65dd5cf3a0d42c966c840eefbe3d4e59b
7
- data.tar.gz: a0c021b90036c659de421943fb2f9466ccf0dc38841e15f72a448c84dc50e48c50f063c3468c23e112c63e3003f75f0ac7340de42e3e02acb89e4e5b4d44b225
6
+ metadata.gz: 1f98de58f255d491a759296b0e7e58365c477e2323027fbcdb7959e526296ffb708ab384a18fdab16489bdcf74311d860f1153b5294e8ce518c10e8c81ba3cbe
7
+ data.tar.gz: 49bf2435d7b4ff029d1b424e2359c13a89e6fac5f463273207ca8806a79d800f0e23485a2c0d57acf3c6403c36c0f467d4bb3422825ba655804851e2104351da
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+
5
+ module Umarell
6
+ # The class responsible of parsing command line arguments
7
+ class Arguments
8
+ attr_reader :autofix, :target
9
+
10
+ alias autofix? autofix
11
+
12
+ MODIFIED_FILES_TARGET = '`git ls-files -mo --exclude-standard %s`'
13
+
14
+ def initialize
15
+ @autofix = false
16
+ @modified = false
17
+ @target = nil
18
+ end
19
+
20
+ # Parse command line arguments
21
+ def parse
22
+ parse_options
23
+ parse_target
24
+ end
25
+
26
+ private
27
+
28
+ def parse_options
29
+ OptionParser.new do |opts|
30
+ opts.banner = 'Usage: umarell [options] [target]'
31
+ on_autofix(opts)
32
+ on_modified(opts)
33
+ on_version(opts)
34
+ end.parse!
35
+ rescue OptionParser::InvalidOption => e
36
+ exit_with_message("#{e.message}, see 'umarell --help'", 1)
37
+ end
38
+
39
+ def parse_target
40
+ last_argument = ARGV.pop
41
+ @target = if @modified
42
+ MODIFIED_FILES_TARGET % last_argument
43
+ else
44
+ last_argument
45
+ end
46
+ end
47
+
48
+ def on_autofix(opts)
49
+ opts.on('-a', '--autofix', 'Autofix violations (if supported)') do
50
+ @autofix = true
51
+ end
52
+ end
53
+
54
+ def on_modified(opts)
55
+ opts.on('-m', '--modified', 'Run on modified files') do
56
+ @modified = true
57
+ end
58
+ end
59
+
60
+ def on_version(opts)
61
+ opts.on_tail('-v', '--version', 'Show version') do
62
+ exit_with_message(Version::STRING)
63
+ end
64
+ end
65
+
66
+ def exit_with_message(message, code = 0)
67
+ puts "umarell: #{message}"
68
+ exit code
69
+ end
70
+ end
71
+ end
data/lib/umarell/cli.rb CHANGED
@@ -1,70 +1,53 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'optparse'
3
+ require_relative 'arguments'
4
+ require_relative 'command'
4
5
 
5
6
  module Umarell
6
7
  TOOLS = {
7
- bundler_audit: 'bundler-audit check --update',
8
- brakeman: 'brakeman -w2 -q',
9
- rubocop: 'rubocop',
10
- reek: 'reek',
11
- rails_best_practices: 'rails_best_practices',
12
- fasterer: 'fasterer'
8
+ 'bundler-audit' => ['check', '--update'],
9
+ 'brakeman' => ['-w2', '-q'],
10
+ 'rubocop' => [],
11
+ 'reek' => [],
12
+ 'rails_best_practices': [],
13
+ 'fasterer' => []
13
14
  }.freeze
14
15
 
16
+ AUTOFIX_SUPPORT = ['rubocop'].freeze
17
+
15
18
  # The class responsible of handling command line logic
16
19
  class CLI
17
- def initialize(tools = TOOLS)
20
+ def initialize(tools = TOOLS, arguments = Arguments.new)
18
21
  @tools = tools
19
- @autofix = false
20
- @args = {}
21
- @target = ''
22
+ @arguments = arguments
22
23
  end
23
24
 
24
25
  # Entry point to start the application
25
26
  def run
26
- parse_args
27
+ @arguments.parse
27
28
  run_commands
28
29
  end
29
30
 
30
31
  private
31
32
 
32
- def parse_args
33
- parse_options
34
- @target = ARGV.pop
35
- @args[:rubocop] = ['-a'] if @autofix
36
- end
37
-
38
- def parse_options
39
- OptionParser.new do |opts|
40
- opts.banner = 'Usage: umarell [options] [target]'
41
-
42
- opts.on('-a', '--autofix', 'Autofix violations (if supported)') do
43
- @autofix = true
44
- end
45
- opts.on_tail('-v', '--version', 'Show version') do
46
- puts Version::STRING
47
- exit
48
- end
49
- end.parse!
50
- end
51
-
52
33
  def run_commands
53
- @tools.each do |name, command|
54
- run_command(name, command, @args.fetch(name) { [] })
34
+ @tools.each do |name, options|
35
+ arguments = command_arguments(name, options)
36
+ Command.new(name, arguments).run
55
37
  end
56
38
  end
57
39
 
58
- def run_command(name, command, args)
59
- header = decorate_message("Running #{name}")
60
- footer = decorate_message("#{name} run complete\n")
61
- full_command = "#{command} #{args.join(' ')} #{@target}"
40
+ def command_arguments(name, options)
41
+ command_arguments = command_options(name, options)
42
+ return command_arguments unless @arguments.target
62
43
 
63
- system "echo '#{header}'; #{full_command}; echo '#{footer}'"
44
+ command_arguments + [@arguments.target]
64
45
  end
65
46
 
66
- def decorate_message(string)
67
- "\e[1;94m~~~~~~~ [Umarell] #{string}\e[0m"
47
+ def command_options(name, base_options)
48
+ return base_options unless AUTOFIX_SUPPORT.include?(name)
49
+
50
+ base_options + ['-a']
68
51
  end
69
52
  end
70
53
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umarell
4
+ # The class responsible for running commands
5
+ class Command
6
+ def initialize(name, arguments = [])
7
+ @name = name
8
+ @arguments = arguments
9
+ end
10
+
11
+ # Run the command
12
+ def run
13
+ system "echo '#{header}'; #{self}; echo '#{footer}'"
14
+ end
15
+
16
+ def to_s
17
+ "#{@name} #{@arguments.join(' ')}"
18
+ end
19
+
20
+ private
21
+
22
+ def header
23
+ decorate_message("Running #{@name}")
24
+ end
25
+
26
+ def footer
27
+ decorate_message("#{@name} run complete\n")
28
+ end
29
+
30
+ def decorate_message(string)
31
+ "\e[1;94m~~~~~~~ [Umarell] #{string}\e[0m"
32
+ end
33
+ end
34
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Umarell
4
4
  module Version
5
- STRING = '1.1.0'
5
+ STRING = '1.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umarell
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Filippo Liverani
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-06 00:00:00.000000000 Z
11
+ date: 2019-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: brakeman
@@ -205,7 +205,9 @@ files:
205
205
  - README.md
206
206
  - exe/umarell
207
207
  - lib/umarell.rb
208
+ - lib/umarell/arguments.rb
208
209
  - lib/umarell/cli.rb
210
+ - lib/umarell/command.rb
209
211
  - lib/umarell/version.rb
210
212
  homepage: https://github.com/nebulab/umarell
211
213
  licenses: