polishgeeks-dev-tools 1.2.0 → 1.2.1

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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile.lock +27 -30
  5. data/Rakefile +1 -1
  6. data/lib/polishgeeks-dev-tools.rb +26 -20
  7. data/lib/polishgeeks/dev-tools/{command → commands}/allowed_extensions.rb +1 -1
  8. data/lib/polishgeeks/dev-tools/{command → commands}/base.rb +15 -25
  9. data/lib/polishgeeks/dev-tools/{command → commands}/brakeman.rb +4 -2
  10. data/lib/polishgeeks/dev-tools/{command → commands}/empty_method.rb +1 -1
  11. data/lib/polishgeeks/dev-tools/{command → commands}/empty_method/file_parser.rb +1 -1
  12. data/lib/polishgeeks/dev-tools/{command → commands}/empty_method/string_refinements.rb +1 -1
  13. data/lib/polishgeeks/dev-tools/{command → commands}/examples_comparator.rb +1 -1
  14. data/lib/polishgeeks/dev-tools/{command → commands}/expires_in.rb +1 -1
  15. data/lib/polishgeeks/dev-tools/{command → commands}/final_blank_line.rb +1 -1
  16. data/lib/polishgeeks/dev-tools/{command → commands}/haml_lint.rb +1 -1
  17. data/lib/polishgeeks/dev-tools/{command → commands}/readme.rb +1 -1
  18. data/lib/polishgeeks/dev-tools/{command → commands}/rspec.rb +1 -1
  19. data/lib/polishgeeks/dev-tools/{command → commands}/rspec_files_names.rb +1 -1
  20. data/lib/polishgeeks/dev-tools/{command → commands}/rspec_files_structure.rb +1 -1
  21. data/lib/polishgeeks/dev-tools/{command → commands}/rubocop.rb +1 -1
  22. data/lib/polishgeeks/dev-tools/{command → commands}/rubycritic.rb +1 -1
  23. data/lib/polishgeeks/dev-tools/{command/coverage.rb → commands/simplecov.rb} +22 -9
  24. data/lib/polishgeeks/dev-tools/{command → commands}/tasks_files_names.rb +1 -1
  25. data/lib/polishgeeks/dev-tools/{command → commands}/yard.rb +1 -1
  26. data/lib/polishgeeks/dev-tools/{command → commands}/yml_parser.rb +1 -1
  27. data/lib/polishgeeks/dev-tools/config.rb +0 -16
  28. data/lib/polishgeeks/dev-tools/errors.rb +25 -0
  29. data/lib/polishgeeks/dev-tools/logger.rb +7 -12
  30. data/lib/polishgeeks/dev-tools/runner.rb +2 -1
  31. data/lib/polishgeeks/dev-tools/validators/base.rb +26 -0
  32. data/lib/polishgeeks/dev-tools/validators/rails.rb +12 -0
  33. data/lib/polishgeeks/dev-tools/validators/simplecov.rb +20 -0
  34. data/lib/polishgeeks/dev-tools/version.rb +1 -1
  35. data/polishgeeks_dev_tools.gemspec +1 -1
  36. data/spec/lib/polishgeeks/dev-tools/{command → commands}/allowed_extensions_spec.rb +1 -1
  37. data/spec/lib/polishgeeks/dev-tools/commands/base_spec.rb +55 -0
  38. data/spec/lib/polishgeeks/dev-tools/{command → commands}/brakeman_spec.rb +10 -9
  39. data/spec/lib/polishgeeks/dev-tools/{command → commands}/empty_method/file_parser_spec.rb +1 -1
  40. data/spec/lib/polishgeeks/dev-tools/{command → commands}/empty_method/string_refinements_spec.rb +1 -1
  41. data/spec/lib/polishgeeks/dev-tools/{command → commands}/empty_method_spec.rb +1 -1
  42. data/spec/lib/polishgeeks/dev-tools/{command → commands}/examples_comparator_spec.rb +1 -1
  43. data/spec/lib/polishgeeks/dev-tools/{command → commands}/expires_in_spec.rb +1 -1
  44. data/spec/lib/polishgeeks/dev-tools/{command → commands}/final_blank_line_spec.rb +1 -1
  45. data/spec/lib/polishgeeks/dev-tools/{command → commands}/haml_lint_spec.rb +1 -1
  46. data/spec/lib/polishgeeks/dev-tools/{command → commands}/readme_spec.rb +1 -1
  47. data/spec/lib/polishgeeks/dev-tools/{command → commands}/rspec_files_names_spec.rb +1 -1
  48. data/spec/lib/polishgeeks/dev-tools/{command → commands}/rspec_files_structure_spec.rb +1 -1
  49. data/spec/lib/polishgeeks/dev-tools/{command → commands}/rspec_spec.rb +1 -1
  50. data/spec/lib/polishgeeks/dev-tools/{command → commands}/rubocop_spec.rb +1 -1
  51. data/spec/lib/polishgeeks/dev-tools/{command → commands}/rubycritic_spec.rb +1 -1
  52. data/spec/lib/polishgeeks/dev-tools/{command/coverage_spec.rb → commands/simplecov_spec.rb} +28 -15
  53. data/spec/lib/polishgeeks/dev-tools/{command → commands}/tasks_files_names_spec.rb +1 -1
  54. data/spec/lib/polishgeeks/dev-tools/{command → commands}/yard_spec.rb +1 -1
  55. data/spec/lib/polishgeeks/dev-tools/{command → commands}/yml_parser_spec.rb +1 -1
  56. data/spec/lib/polishgeeks/dev-tools/config_spec.rb +0 -18
  57. data/spec/lib/polishgeeks/dev-tools/errors_spec.rb +15 -0
  58. data/spec/lib/polishgeeks/dev-tools/logger_spec.rb +3 -3
  59. data/spec/lib/polishgeeks/dev-tools/runner_spec.rb +4 -1
  60. data/spec/lib/polishgeeks/dev-tools/validators/base_spec.rb +34 -0
  61. data/spec/lib/polishgeeks/dev-tools/validators/rails_spec.rb +21 -0
  62. data/spec/lib/polishgeeks/dev-tools/validators/simplecov_spec.rb +34 -0
  63. metadata +78 -69
  64. data/lib/polishgeeks/dev-tools/command/simplecov.rb +0 -32
  65. data/spec/lib/polishgeeks/dev-tools/command/base_spec.rb +0 -127
  66. data/spec/lib/polishgeeks/dev-tools/command/simplecov_spec.rb +0 -53
@@ -1,13 +1,14 @@
1
1
  module PolishGeeks
2
2
  module DevTools
3
- module Command
3
+ module Commands
4
4
  # Command wrapper for Simple code coverage analysing
5
5
  # It informs us if we didn't reach a proper code coverage level
6
- class Coverage < Base
6
+ class Simplecov < Base
7
7
  self.type = :validator
8
+ self.validators = [
9
+ Validators::Simplecov
10
+ ]
8
11
 
9
- # Regexp used to match code coverage level
10
- MATCH_REGEXP = /\(\d+.\d+\%\) covered/
11
12
  # Regexp used to match float number from coverage
12
13
  NUMBER_REGEXP = /(\d+[.]\d+)/
13
14
 
@@ -19,23 +20,35 @@ module PolishGeeks
19
20
  # Executes this command
20
21
  # @return [String] command output
21
22
  def execute
22
- @output = stored_output.rspec[*MATCH_REGEXP]
23
+ @output = stored_output.rspec[*Validators::Simplecov::MATCH_REGEXP]
23
24
  end
24
25
 
25
26
  # @return [Boolean] true if code coverage level is higher or equal to expected
26
27
  def valid?
27
- to_f >= DevTools.config.simplecov_threshold
28
+ to_f >= threshold
28
29
  end
29
30
 
30
31
  # @return [String] default label for this command
31
32
  def label
32
- "Coverage #{to_f}% covered - #{DevTools.config.simplecov_threshold}% required"
33
+ "SimpleCov covered #{to_f}%, required #{threshold}%"
33
34
  end
34
35
 
35
36
  # @return [String] message that should be printed when code coverage level is not met
36
37
  def error_message
37
- threshold = DevTools.config.simplecov_threshold
38
- "Coverage level should more or equal to #{threshold}%. was: #{to_f}"
38
+ 'SimpleCov coverage level needs to be ' \
39
+ "#{threshold}%#{threshold == limit ? '' : ' or more'}, was #{to_f}%"
40
+ end
41
+
42
+ private
43
+
44
+ # @return [Float] desired threshold
45
+ def threshold
46
+ DevTools.config.simplecov_threshold.to_f
47
+ end
48
+
49
+ # @return [Float] maximum threshold value
50
+ def limit
51
+ 100.0
39
52
  end
40
53
  end
41
54
  end
@@ -1,6 +1,6 @@
1
1
  module PolishGeeks
2
2
  module DevTools
3
- module Command
3
+ module Commands
4
4
  # Checks if tasks files (rake and capistrano) have proper extensions
5
5
  class TasksFilesNames < Base
6
6
  self.type = :validator
@@ -1,6 +1,6 @@
1
1
  module PolishGeeks
2
2
  module DevTools
3
- module Command
3
+ module Commands
4
4
  # Command wrapper for Yard statistics
5
5
  # @note It validates if everything is well documented
6
6
  class Yard < Base
@@ -1,6 +1,6 @@
1
1
  module PolishGeeks
2
2
  module DevTools
3
- module Command
3
+ module Commands
4
4
  # Verifying parameters in example YAML config files
5
5
  class YmlParser < Base
6
6
  self.type = :validator
@@ -48,7 +48,6 @@ module PolishGeeks
48
48
  tasks_files_names
49
49
  rspec
50
50
  simplecov
51
- coverage
52
51
  yard
53
52
  examples_comparator
54
53
  rubycritic
@@ -77,24 +76,9 @@ module PolishGeeks
77
76
  def self.setup(&block)
78
77
  self.config = new
79
78
 
80
- config.detect_framework
81
-
82
79
  block.call(config)
83
80
  config.freeze
84
81
  end
85
-
86
- # Detects if we use Rails, Sinatra or nothing
87
- # We need to set it because some of the commands might work only for Rails
88
- # or Sinatra (like brakeman for example - only Rails)
89
- def detect_framework
90
- define_singleton_method :rails? do
91
- !defined?(Rails).nil?
92
- end
93
-
94
- define_singleton_method :sinatra? do
95
- !defined?(App).nil?
96
- end
97
- end
98
82
  end
99
83
  end
100
84
  end
@@ -0,0 +1,25 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ # Module that encapsulates all the DevTools errrors
4
+ module Errors
5
+ # Base class for all DevTools errors
6
+ class BaseError < StandardError; end
7
+
8
+ # Raised when we want to run method that was not implemented and we have just a stub
9
+ # from parent class
10
+ class NotImplementedError < BaseError; end
11
+
12
+ # Raised when we want to run an command for which pre validation does not pass
13
+ class PreCommandValidationError < BaseError; end
14
+
15
+ # Raised when validators are defined with an unsupported type
16
+ class InvalidValidatorsTypeError < BaseError; end
17
+
18
+ # Raised when it is a type of task that we don't recognize
19
+ class UnknownTaskType < BaseError; end
20
+
21
+ # Raised when any of tasks fail
22
+ class RequirementsError < BaseError; end
23
+ end
24
+ end
25
+ end
@@ -5,13 +5,8 @@ module PolishGeeks
5
5
  # Regexp used to get only the class name without module names
6
6
  CLASS_NAME_REGEXP = /^.*::/
7
7
 
8
- # Raised when it is a type of task that we don't recognize
9
- class UnknownTaskType < StandardError; end
10
- # Raised when any of tasks fail
11
- class RequirementsError < StandardError; end
12
-
13
8
  # Method will print appropriate output with colors and comments
14
- # @param [PolishGeeks::DevTools::Command::Base] task that was executed
9
+ # @param [PolishGeeks::DevTools::Commands::Base] task that was executed
15
10
  # @raise [PolishGeeks::DevTools::Logger::RequirementsError] raised when task
16
11
  # has failed
17
12
  # @example Log output of a current_task
@@ -21,7 +16,7 @@ module PolishGeeks
21
16
  info(task)
22
17
  else
23
18
  fatal(task)
24
- fail RequirementsError
19
+ fail Errors::RequirementsError
25
20
  end
26
21
  end
27
22
 
@@ -29,20 +24,20 @@ module PolishGeeks
29
24
 
30
25
  # Will print message when task didn't fail while running
31
26
  # @note Handles also generators that never fail
32
- # @param [PolishGeeks::DevTools::Command::Base] task that was executed
33
- # @raise [PolishGeeks::DevTools::Logger::UnknownTaskType] raised when task type is
27
+ # @param [PolishGeeks::DevTools::Commands::Base] task that was executed
28
+ # @raise [PolishGeeks::DevTools::Errors::UnknownTaskType] raised when task type is
34
29
  # not supported (we don't know how to handle it)
35
30
  def info(task)
36
31
  msg = 'GENERATED' if task.class.generator?
37
32
  msg = 'OK' if task.class.validator?
38
33
 
39
- fail UnknownTaskType unless msg
34
+ fail Errors::UnknownTaskType unless msg
40
35
 
41
36
  printf('%-40s %2s', "#{label(task)} ", "\e[32m#{msg}\e[0m\n")
42
37
  end
43
38
 
44
39
  # Will print message when task did fail while running
45
- # @param [PolishGeeks::DevTools::Command::Base] task that was executed
40
+ # @param [PolishGeeks::DevTools::Commands::Base] task that was executed
46
41
  def fatal(task)
47
42
  printf('%-30s %20s', "#{label(task)} ", "\e[31mFAILURE\e[0m\n\n")
48
43
  puts task.error_message + "\n"
@@ -50,7 +45,7 @@ module PolishGeeks
50
45
 
51
46
  # Generates a label describing a given task
52
47
  # @note Will use a task class name if task doesn't respond to label method
53
- # @param [PolishGeeks::DevTools::Command::Base] task that was executed
48
+ # @param [PolishGeeks::DevTools::Commands::Base] task that was executed
54
49
  # @return [String] label describing task
55
50
  # @example Get label for a current_task task
56
51
  # label(current_task) #=> 'Rubocop'
@@ -15,8 +15,9 @@ module PolishGeeks
15
15
  next unless DevTools.config.public_send(:"#{command}?")
16
16
 
17
17
  klass = command.to_s.gsub(/(?<=_|^)(\w)/, &:upcase).gsub(/(?:_)(\w)/, '\1')
18
- cmd = Object.const_get("PolishGeeks::DevTools::Command::#{klass}").new
18
+ cmd = Object.const_get("PolishGeeks::DevTools::Commands::#{klass}").new
19
19
  cmd.stored_output = output
20
+ cmd.ensure_executable!
20
21
  cmd.execute
21
22
  output.public_send(:"#{command}=", cmd.output)
22
23
  logger.log(cmd)
@@ -0,0 +1,26 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ # Module encapsulating all the validators that we use to check/verify code
4
+ module Validators
5
+ # Base class for all the validators
6
+ # @abstract Subclass and use
7
+ class Base
8
+ def initialize(stored_output)
9
+ @stored_output = stored_output
10
+ end
11
+
12
+ # This should be implemented in a subclass
13
+ # @return [Boolean] if validation check is valid or not
14
+ def valid?
15
+ fail Errors::NotImplementedError
16
+ end
17
+
18
+ # @raise [PreCommandValidationError] when valid? return false
19
+ # @return [Boolean] if validation check is valid or not
20
+ def validate!
21
+ fail Errors::PreCommandValidationError unless valid?
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ module Validators
4
+ # It verifies if Rails is available
5
+ class Rails < Base
6
+ def valid?
7
+ Object.const_defined?('Rails')
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ module Validators
4
+ # It verifies if SimpleCov is available
5
+ class Simplecov < Base
6
+ # Regexp used to match code coverage from Simplecov generated output
7
+ MATCH_REGEXP = /\(\d+.\d+\%\) covered/
8
+
9
+ def valid?
10
+ Object.const_defined?('SimpleCov') || (!output.nil? && output.length > 0)
11
+ end
12
+
13
+ # Searches if we have SimpleCov hooked to rspec
14
+ def output
15
+ @output ||= @stored_output.rspec[*MATCH_REGEXP]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,6 +3,6 @@ module PolishGeeks
3
3
  # Dev Tools for PolishGeeks developers
4
4
  module DevTools
5
5
  # Current version of dev tools
6
- VERSION = '1.2.0'
6
+ VERSION = '1.2.1'
7
7
  end
8
8
  end
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_development_dependency 'rake'
18
18
 
19
19
  s.add_dependency 'simplecov'
20
- s.add_dependency 'rubycritic', '1.2.1'
20
+ s.add_dependency 'rubycritic'
21
21
  s.add_dependency 'pry'
22
22
  s.add_dependency 'yard'
23
23
  s.add_dependency 'faker'
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe PolishGeeks::DevTools::Command::AllowedExtensions do
3
+ RSpec.describe PolishGeeks::DevTools::Commands::AllowedExtensions do
4
4
  subject { described_class.new }
5
5
 
6
6
  describe '#execute' do
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PolishGeeks::DevTools::Commands::Base do
4
+ subject { described_class.new }
5
+
6
+ describe '#execute' do
7
+ let(:error) { PolishGeeks::DevTools::Errors::NotImplementedError }
8
+ it { expect { subject.execute }. to raise_error(error) }
9
+ end
10
+
11
+ describe '#valid?' do
12
+ let(:error) { PolishGeeks::DevTools::Errors::NotImplementedError }
13
+ it { expect { subject.valid? }. to raise_error(error) }
14
+ end
15
+
16
+ describe '#error_message' do
17
+ let(:output) { rand.to_s }
18
+
19
+ before do
20
+ subject.instance_variable_set('@output', output)
21
+ end
22
+
23
+ it 'by default should equal raw output' do
24
+ expect(subject.error_message).to eq output
25
+ end
26
+ end
27
+
28
+ describe '#ensure_executable!' do
29
+ context 'when there are validators' do
30
+ let(:validator_class) { PolishGeeks::DevTools::Validators::Base }
31
+
32
+ before do
33
+ expect(described_class)
34
+ .to receive(:validators)
35
+ .and_return([validator_class])
36
+
37
+ expect_any_instance_of(validator_class)
38
+ .to receive(:valid?)
39
+ .and_return(true)
40
+ end
41
+
42
+ it { expect { subject.ensure_executable! }.not_to raise_error }
43
+ end
44
+
45
+ context 'when we dont require any validators' do
46
+ before do
47
+ expect(described_class)
48
+ .to receive(:validators)
49
+ .and_return([])
50
+ end
51
+
52
+ it { expect { subject.ensure_executable! }.not_to raise_error }
53
+ end
54
+ end
55
+ end
@@ -1,16 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe PolishGeeks::DevTools::Command::Brakeman do
4
- subject { described_class.new }
5
- let(:config) { double(rails?: true) }
6
-
7
- before do
8
- expect(PolishGeeks::DevTools)
9
- .to receive(:config)
10
- .and_return(config)
3
+ RSpec.describe PolishGeeks::DevTools::Commands::Brakeman do
4
+ subject { described_class }
11
5
 
12
- subject
6
+ describe '#validators' do
7
+ it 'should work only when we have Rails framework' do
8
+ expect(subject.validators).to eq [PolishGeeks::DevTools::Validators::Rails]
9
+ end
13
10
  end
11
+ end
12
+
13
+ RSpec.describe PolishGeeks::DevTools::Commands::Brakeman do
14
+ subject { described_class.new }
14
15
 
15
16
  describe '#execute' do
16
17
  context 'when we run brakeman' do
@@ -1,4 +1,4 @@
1
- RSpec.describe PolishGeeks::DevTools::Command::EmptyMethod::FileParser do
1
+ RSpec.describe PolishGeeks::DevTools::Commands::EmptyMethod::FileParser do
2
2
  let(:file) { Tempfile.new('foo') }
3
3
  subject { described_class.new(file) }
4
4
 
@@ -1,4 +1,4 @@
1
- RSpec.describe PolishGeeks::DevTools::Command::EmptyMethod::StringRefinements do
1
+ RSpec.describe PolishGeeks::DevTools::Commands::EmptyMethod::StringRefinements do
2
2
  using described_class
3
3
 
4
4
  describe '#defines_method?' do
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'tempfile'
3
3
 
4
- RSpec.describe PolishGeeks::DevTools::Command::EmptyMethod do
4
+ RSpec.describe PolishGeeks::DevTools::Commands::EmptyMethod do
5
5
  subject { described_class.new }
6
6
  describe '#execute' do
7
7
  let(:file) { [rand.to_s] }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe PolishGeeks::DevTools::Command::ExamplesComparator do
3
+ RSpec.describe PolishGeeks::DevTools::Commands::ExamplesComparator do
4
4
  subject { described_class.new }
5
5
 
6
6
  let(:example_file) { rand.to_s }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe PolishGeeks::DevTools::Command::ExpiresIn do
3
+ RSpec.describe PolishGeeks::DevTools::Commands::ExpiresIn do
4
4
  subject { described_class.new }
5
5
 
6
6
  let(:config) { double }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe PolishGeeks::DevTools::Command::FinalBlankLine do
3
+ RSpec.describe PolishGeeks::DevTools::Commands::FinalBlankLine do
4
4
  subject { described_class.new }
5
5
 
6
6
  describe '#execute' do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe PolishGeeks::DevTools::Command::HamlLint do
3
+ RSpec.describe PolishGeeks::DevTools::Commands::HamlLint do
4
4
  subject { described_class.new }
5
5
 
6
6
  describe '#execute' do