polishgeeks-dev-tools 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +3 -2
  4. data/CHANGELOG.md +69 -0
  5. data/Gemfile.lock +76 -81
  6. data/README.md +28 -22
  7. data/Rakefile +4 -3
  8. data/config/rubocop.yml +16 -16
  9. data/config/rubocop_todo.yml +14 -0
  10. data/lib/polish_geeks/dev_tools.rb +26 -0
  11. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/allowed_extensions.rb +4 -4
  12. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/base.rb +18 -3
  13. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/brakeman.rb +5 -2
  14. data/lib/polish_geeks/dev_tools/commands/bundler_audit.rb +23 -0
  15. data/lib/{polishgeeks/dev-tools/commands/empty_method.rb → polish_geeks/dev_tools/commands/empty_methods.rb} +3 -13
  16. data/lib/{polishgeeks/dev-tools/commands/empty_method → polish_geeks/dev_tools/commands/empty_methods}/file_parser.rb +1 -1
  17. data/lib/{polishgeeks/dev-tools/commands/empty_method → polish_geeks/dev_tools/commands/empty_methods}/string_refinements.rb +2 -2
  18. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/examples_comparator.rb +13 -7
  19. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/expires_in.rb +6 -6
  20. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/final_blank_line.rb +1 -11
  21. data/lib/polish_geeks/dev_tools/commands/gemfile.rb +39 -0
  22. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/haml_lint.rb +0 -0
  23. data/lib/polish_geeks/dev_tools/commands/required_files.rb +38 -0
  24. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rspec.rb +24 -5
  25. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rspec_files_names.rb +1 -1
  26. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rspec_files_structure.rb +22 -9
  27. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rubocop.rb +10 -8
  28. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rubycritic.rb +0 -0
  29. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/simplecov.rb +0 -0
  30. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/tasks_files_names.rb +0 -0
  31. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/yard.rb +0 -0
  32. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/yml_parser.rb +0 -0
  33. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/config.rb +24 -16
  34. data/lib/polish_geeks/dev_tools/config_manager.rb +68 -0
  35. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/errors.rb +0 -0
  36. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/hash.rb +0 -0
  37. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/logger.rb +3 -3
  38. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/output_storer.rb +0 -0
  39. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/runner.rb +0 -0
  40. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/shell.rb +0 -0
  41. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/tasks/dev-tools.rake +0 -0
  42. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/validators/base.rb +2 -2
  43. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/validators/rails.rb +0 -0
  44. data/lib/polish_geeks/dev_tools/validators/rubocop.rb +12 -0
  45. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/validators/simplecov.rb +1 -1
  46. data/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/version.rb +1 -1
  47. data/lib/polishgeeks-dev-tools.rb +6 -31
  48. data/polishgeeks_dev_tools.gemspec +6 -5
  49. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/allowed_extensions_spec.rb +5 -17
  50. data/spec/lib/polish_geeks/dev_tools/commands/base_spec.rb +90 -0
  51. data/spec/lib/polish_geeks/dev_tools/commands/brakeman_spec.rb +99 -0
  52. data/spec/lib/polish_geeks/dev_tools/commands/bundler_audit_spec.rb +52 -0
  53. data/spec/lib/{polishgeeks/dev-tools/commands/empty_method → polish_geeks/dev_tools/commands/empty_methods}/file_parser_spec.rb +1 -1
  54. data/spec/lib/{polishgeeks/dev-tools/commands/empty_method → polish_geeks/dev_tools/commands/empty_methods}/string_refinements_spec.rb +1 -1
  55. data/spec/lib/{polishgeeks/dev-tools/commands/empty_method_spec.rb → polish_geeks/dev_tools/commands/empty_methods_spec.rb} +7 -54
  56. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/examples_comparator_spec.rb +8 -8
  57. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/expires_in_spec.rb +1 -1
  58. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/final_blank_line_spec.rb +2 -45
  59. data/spec/lib/polish_geeks/dev_tools/commands/gemfile_spec.rb +91 -0
  60. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/haml_lint_spec.rb +13 -21
  61. data/spec/lib/polish_geeks/dev_tools/commands/required_files_spec.rb +51 -0
  62. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rspec_files_names_spec.rb +2 -2
  63. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rspec_files_structure_spec.rb +19 -32
  64. data/spec/lib/polish_geeks/dev_tools/commands/rspec_spec.rb +106 -0
  65. data/spec/lib/polish_geeks/dev_tools/commands/rubocop_spec.rb +131 -0
  66. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/rubycritic_spec.rb +5 -3
  67. data/spec/lib/polish_geeks/dev_tools/commands/simplecov_spec.rb +136 -0
  68. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/tasks_files_names_spec.rb +8 -8
  69. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/yard_spec.rb +10 -10
  70. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/commands/yml_parser_spec.rb +2 -2
  71. data/spec/lib/polish_geeks/dev_tools/config_manager_spec.rb +124 -0
  72. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/config_spec.rb +3 -3
  73. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/errors_spec.rb +0 -0
  74. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/hash_spec.rb +8 -8
  75. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/logger_spec.rb +9 -9
  76. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/output_storer_spec.rb +1 -1
  77. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/runner_spec.rb +0 -0
  78. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/shell_spec.rb +1 -1
  79. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/validators/base_spec.rb +0 -0
  80. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/validators/rails_spec.rb +0 -0
  81. data/spec/lib/polish_geeks/dev_tools/validators/rubocop_spec.rb +29 -0
  82. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/validators/simplecov_spec.rb +1 -1
  83. data/spec/lib/{polishgeeks/dev-tools → polish_geeks/dev_tools}/version_spec.rb +0 -0
  84. data/spec/lib/{polishgeeks-dev-tools_spec.rb → polish_geeks/dev_tools_spec.rb} +2 -2
  85. data/spec/spec_helper.rb +1 -1
  86. metadata +141 -99
  87. data/lib/polishgeeks/dev-tools/commands/readme.rb +0 -32
  88. data/spec/lib/polishgeeks/dev-tools/commands/base_spec.rb +0 -55
  89. data/spec/lib/polishgeeks/dev-tools/commands/brakeman_spec.rb +0 -96
  90. data/spec/lib/polishgeeks/dev-tools/commands/readme_spec.rb +0 -38
  91. data/spec/lib/polishgeeks/dev-tools/commands/rspec_spec.rb +0 -63
  92. data/spec/lib/polishgeeks/dev-tools/commands/rubocop_spec.rb +0 -127
  93. data/spec/lib/polishgeeks/dev-tools/commands/simplecov_spec.rb +0 -134
data/config/rubocop.yml CHANGED
@@ -1,16 +1,5 @@
1
- AlignParameters:
2
- Enabled: false
3
- ClassLength:
4
- CountComments: false
5
- Max: 200
6
- LineLength:
7
- Max: 99
8
- MethodLength:
9
- CountComments: false
10
- Max: 15
11
- Metrics/AbcSize:
12
- Max: 25
13
1
  AllCops:
2
+ TargetRubyVersion: 2.3
14
3
  Exclude:
15
4
  - bin/**/*
16
5
  - db/**/*
@@ -23,13 +12,24 @@ AllCops:
23
12
  - !ruby/regexp /polishgeeks-[^\/]{2,}\.rb/
24
13
  Include:
25
14
  - '**/Rakefile'
26
- - config.ru
15
+ - '**/config.ru'
27
16
  - lib/tasks/**/*.rake
28
17
  - lib/tasks/**/*.rb
29
18
  - lib/capistrano/**/*.rb
30
19
  - lib/capistrano/**/*.cap
20
+ AlignParameters:
21
+ Enabled: false
22
+ ClassLength:
23
+ CountComments: false
24
+ Max: 200
25
+ LineLength:
26
+ Max: 99
27
+ MethodLength:
28
+ CountComments: false
29
+ Max: 15
30
+ Metrics/AbcSize:
31
+ Max: 25
31
32
  Style/MultilineOperationIndentation:
32
33
  EnforcedStyle: indented
33
- SupportedStyles:
34
- - aligned
35
- - indented
34
+
35
+ inherit_from: rubocop_todo.yml
@@ -0,0 +1,14 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-02-18 19:14:30 +0100 using RuboCop version 0.37.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 74
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
12
+ # SupportedStyles: when_needed, always
13
+ Style/FrozenStringLiteralComment:
14
+ Enabled: false
@@ -0,0 +1,26 @@
1
+ module PolishGeeks
2
+ # Allows us to get config, gem_root, app_root and setup
3
+ module DevTools
4
+ # This is just an alias so we can use it from DevTools directly
5
+ # @return [PolishGeeks::DevTools::Config.config]
6
+ def self.config
7
+ Config.config
8
+ end
9
+
10
+ # @return [String] root path of this gem
11
+ def self.gem_root
12
+ File.expand_path('../../..', __FILE__)
13
+ end
14
+
15
+ # @return [String] app root path
16
+ def self.app_root
17
+ File.dirname(ENV['BUNDLE_GEMFILE'])
18
+ end
19
+
20
+ # Sets up the whole configuration
21
+ # @param [Block] block
22
+ def self.setup(&block)
23
+ Config.setup(&block)
24
+ end
25
+ end
26
+ end
@@ -11,7 +11,7 @@ module PolishGeeks
11
11
  yml
12
12
  rb.example
13
13
  yml.example
14
- )
14
+ ).freeze
15
15
 
16
16
  # Executes this command
17
17
  # @return [Array] command output array with list of
@@ -20,9 +20,9 @@ module PolishGeeks
20
20
  results = Dir[config_path]
21
21
 
22
22
  @output = results
23
- .flatten
24
- .map { |line| line.gsub!(PolishGeeks::DevTools.app_root + '/config/', '') }
25
- .uniq
23
+ .flatten
24
+ .map { |line| line.gsub!(PolishGeeks::DevTools.app_root + '/config/', '') }
25
+ .uniq
26
26
  @output.delete_if do |line|
27
27
  ALLOWED_EXTENSIONS.any? { |allow| line =~ /^.*\.#{allow}$/i }
28
28
  end
@@ -14,9 +14,12 @@ module PolishGeeks
14
14
  # Available command types. We have validators that check something
15
15
  # and that should have a 'valid?' method and that check for errors, etc
16
16
  # and generators that are executed to generate some stats, docs, etc
17
- TYPES = %i( validator generator )
17
+ TYPES = %i( validator generator ).freeze
18
18
 
19
19
  class << self
20
+ # ConfigManager instance can be provided, which allows us to find a
21
+ # config file for a command
22
+ attr_accessor :config_manager
20
23
  attr_accessor :type
21
24
  attr_accessor :validators
22
25
 
@@ -30,14 +33,14 @@ module PolishGeeks
30
33
 
31
34
  # @raise [NotImplementedError] this should be implemented in a subclass
32
35
  def execute
33
- fail Errors::NotImplementedError
36
+ raise Errors::NotImplementedError
34
37
  end
35
38
 
36
39
  # @raise [NotImplementedError] this should be implemented in a subclass
37
40
  # if it is a validator type (or no implementation required when
38
41
  # it is a validator)
39
42
  def valid?
40
- fail Errors::NotImplementedError
43
+ raise Errors::NotImplementedError
41
44
  end
42
45
 
43
46
  # @return [String] what message should be printed when error occures
@@ -57,6 +60,18 @@ module PolishGeeks
57
60
  validator_class.new(stored_output).validate!
58
61
  end
59
62
  end
63
+
64
+ private
65
+
66
+ # @param [String] path from which we want take files
67
+ # @return [Array<String>] list of files in path with app prefix path
68
+ # @note if path is a file return array with file path with app prefix path
69
+ def files_from_path(path)
70
+ full_path = "#{::PolishGeeks::DevTools.app_root}/#{path}"
71
+ return [full_path] if File.file?(full_path)
72
+
73
+ Dir.glob(full_path).select { |f| File.file? f }
74
+ end
60
75
  end
61
76
  end
62
77
  end
@@ -4,6 +4,7 @@ module PolishGeeks
4
4
  # A static analysis security vulnerability scanner for Ruby on Rails applications
5
5
  # @see https://github.com/presidentbeef/brakeman
6
6
  class Brakeman < Base
7
+ self.config_manager = ConfigManager.new('brakeman.yml')
7
8
  self.type = :validator
8
9
  self.validators = [
9
10
  Validators::Rails
@@ -16,12 +17,14 @@ module PolishGeeks
16
17
  templates: /Template.* (\d+)/,
17
18
  errors: /Error.* (\d+)/,
18
19
  warnings: /Warning.* (\d+)/
19
- }
20
+ }.freeze
20
21
 
21
22
  # Executes this command
22
23
  # @return [String] command output
23
24
  def execute
24
- @output = Shell.new.execute('bundle exec brakeman -q')
25
+ cmd = ['bundle exec brakeman -q']
26
+ cmd << "-c #{self.class.config_manager.path}" if self.class.config_manager.present?
27
+ @output = Shell.new.execute(cmd.join(' '))
25
28
  end
26
29
 
27
30
  # @return [Boolean] true if we didn't have any vulnerabilities detected
@@ -0,0 +1,23 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ module Commands
4
+ # Command wrapper for Bundler Audit
5
+ # Checks for vulnerable versions of gems in Gemfile.lock.
6
+ # @see https://github.com/rubysec/bundler-audit
7
+ class BundlerAudit < Base
8
+ self.type = :validator
9
+
10
+ # Executes this command
11
+ # @return [String] command output
12
+ def execute
13
+ @output = Shell.new.execute('bundle-audit update 2>&1 > /dev/null; bundle-audit check')
14
+ end
15
+
16
+ # @return [Boolean] true if there were no vulnerabilities found
17
+ def valid?
18
+ @output.match(/Unpatched versions found/).nil?
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -2,7 +2,7 @@ module PolishGeeks
2
2
  module DevTools
3
3
  module Commands
4
4
  # Validator used to check if all '.rb' files don't have empty methods
5
- class EmptyMethod < Base
5
+ class EmptyMethods < Base
6
6
  self.type = :validator
7
7
 
8
8
  attr_reader :counter
@@ -17,7 +17,7 @@ module PolishGeeks
17
17
  public
18
18
  app/assets/images
19
19
  app/assets/fonts
20
- )
20
+ ).freeze
21
21
 
22
22
  # Executes this command and set output and counter variables
23
23
  def execute
@@ -76,17 +76,7 @@ module PolishGeeks
76
76
 
77
77
  # @return [Array<String>] list of excluded files/directories from config file
78
78
  def config_excludes
79
- DevTools.config.empty_method_ignored || []
80
- end
81
-
82
- # @param [String] path from which we want take files
83
- # @return [Array<String>] list of files in path with app prefix path
84
- # @note if path is a file return array with file path with app prefix path
85
- def files_from_path(path)
86
- full_path = "#{::PolishGeeks::DevTools.app_root}/#{path}"
87
- return [full_path] if File.file?(full_path)
88
-
89
- Dir.glob(full_path).select { |f| File.file? f }
79
+ DevTools.config.empty_methods_ignored || []
90
80
  end
91
81
 
92
82
  # @param [String] file name that we want to sanitize
@@ -1,7 +1,7 @@
1
1
  module PolishGeeks
2
2
  module DevTools
3
3
  module Commands
4
- class EmptyMethod
4
+ class EmptyMethods
5
5
  # Parse file and search whether it contain empty methods
6
6
  class FileParser
7
7
  attr_reader :empty_methods
@@ -1,7 +1,7 @@
1
1
  module PolishGeeks
2
2
  module DevTools
3
3
  module Commands
4
- class EmptyMethod
4
+ class EmptyMethods
5
5
  # Adds ability to check strings on specific regex matching
6
6
  module StringRefinements
7
7
  # Regex to determine commented or empty string
@@ -13,7 +13,7 @@ module PolishGeeks
13
13
  # Regex to determine end of method
14
14
  END_REGEX = /^\s*end(\.\w+(\s+|$)|\s*#.+|\s+|$)\s*/
15
15
  # Regex to determine begin of method definition through define_method
16
- DEFINE_METHOD = '^\s*(define_method|define_singleton_method)'
16
+ DEFINE_METHOD = '^\s*(define_method|define_singleton_method)'.freeze
17
17
  # Regex to determine definition of method with do-end block
18
18
  DEFINE_METHOD_WITH_DO_END =
19
19
  /#{DEFINE_METHOD}(\s+|\().*do(\s*(\s*|.*\|\s*))(\s*|#.*)$/
@@ -13,14 +13,8 @@ module PolishGeeks
13
13
 
14
14
  Dir[config_path].each do |example_file|
15
15
  dedicated_file = example_file.gsub('.example', '')
16
-
17
16
  header = compare_header(example_file, dedicated_file)
18
-
19
- if same_key_structure?(example_file, dedicated_file)
20
- @output << successful_compare(header)
21
- else
22
- @output << failed_compare(header)
23
- end
17
+ @output << compare_output(header, example_file, dedicated_file)
24
18
  end
25
19
  end
26
20
 
@@ -58,6 +52,18 @@ module PolishGeeks
58
52
  "#{File.basename(example_file)} and #{File.basename(dedicated_file)}"
59
53
  end
60
54
 
55
+ # @param [String] header output message
56
+ # @param [File] example_file which we compare with dedicated one
57
+ # @param [File] dedicated_file which is compared with example one
58
+ # @return [String] success/failure message for single file
59
+ def compare_output(header, example_file, dedicated_file)
60
+ if same_key_structure?(example_file, dedicated_file)
61
+ successful_compare(header)
62
+ else
63
+ failed_compare(header)
64
+ end
65
+ end
66
+
61
67
  # @param [String] compare_header output message
62
68
  # @return [String] success message for single file
63
69
  def successful_compare(compare_header)
@@ -9,11 +9,11 @@ module PolishGeeks
9
9
  CHECKED_DIRS = %w(
10
10
  app
11
11
  lib
12
- )
12
+ ).freeze
13
13
 
14
14
  # Regexp that we want to use to catch invalid things that occur
15
15
  # instead of expires_in
16
- CHECKED_REGEXP = 'expire_in\|expir_in'
16
+ CHECKED_REGEXP = 'expire_in\|expir_in'.freeze
17
17
 
18
18
  # Executes this command
19
19
  def execute
@@ -23,10 +23,10 @@ module PolishGeeks
23
23
  end
24
24
 
25
25
  @output = results
26
- .flatten
27
- .map { |line| line.split(':').first }
28
- .map { |line| line.gsub!(PolishGeeks::DevTools.app_root, '') }
29
- .uniq
26
+ .flatten
27
+ .map { |line| line.split(':').first }
28
+ .map { |line| line.gsub!(PolishGeeks::DevTools.app_root, '') }
29
+ .uniq
30
30
 
31
31
  @output.delete_if do |line|
32
32
  excludes.any? { |exclude| line =~ /#{exclude}/ }
@@ -19,7 +19,7 @@ module PolishGeeks
19
19
  app/assets/fonts
20
20
  .DS_Store
21
21
  .gem
22
- )
22
+ ).freeze
23
23
 
24
24
  # Executes this command and set output and counter variables
25
25
  def execute
@@ -80,16 +80,6 @@ module PolishGeeks
80
80
  DevTools.config.final_blank_line_ignored || []
81
81
  end
82
82
 
83
- # @param [String] path from which we want take files
84
- # @return [Array<String>] list of files in path with app prefix path
85
- # @note if path is a file return array with file path with app prefix path
86
- def files_from_path(path)
87
- full_path = "#{::PolishGeeks::DevTools.app_root}/#{path}"
88
- return [full_path] if File.file?(full_path)
89
-
90
- Dir.glob(full_path).select { |f| File.file? f }
91
- end
92
-
93
83
  # @param [String] file name that we want to sanitize
94
84
  # @return [String] sanitized file name
95
85
  # @example
@@ -0,0 +1,39 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ module Commands
4
+ # Checks if Gemfile contains local gems
5
+ class Gemfile < Base
6
+ self.type = :validator
7
+
8
+ # Regex which check if Gemfile has local gem
9
+ # ex:
10
+ # gem 'example_gem', path: '/Users/Projects/gems/example_gem'
11
+ # gem 'example_gem', :path => '/Users/Projects/gems/example_gem'
12
+ CHECKED_REGEXP = /^[^#]*((\bpath:)|(:path[ \t]*=>))/
13
+
14
+ # Executes this command
15
+ def execute
16
+ @output = []
17
+ gemfile = File.join(::PolishGeeks::DevTools.app_root, 'Gemfile')
18
+ return unless File.exist?(gemfile)
19
+ @output = IO.readlines(gemfile).select { |l| l.match(CHECKED_REGEXP) }
20
+ end
21
+
22
+ # @return [String] label with this validator description
23
+ def label
24
+ 'Gemfile checking'
25
+ end
26
+
27
+ # @return [String] message with local gems
28
+ def error_message
29
+ "Gemfile contains gems from local path: \n#{output.join('')}"
30
+ end
31
+
32
+ # @return [Boolean] true if output doesn't contain any local gems
33
+ def valid?
34
+ @output.empty?
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,38 @@
1
+ module PolishGeeks
2
+ module DevTools
3
+ module Commands
4
+ # Checks for required files
5
+ class RequiredFiles < Base
6
+ self.type = :validator
7
+
8
+ # Executes this command
9
+ # @return [String] command output
10
+ def execute
11
+ output = []
12
+ required_files = ['README.md']
13
+ required_files.concat(::PolishGeeks::DevTools.config.required_files_include || [])
14
+ required_files.each do |required_file|
15
+ file_path = File.join(::PolishGeeks::DevTools.app_root, required_file)
16
+ output << "#{file_path} not exist" unless File.exist?(file_path)
17
+ output << "#{file_path} is empty" if File.zero?(file_path)
18
+ end
19
+ @output = output
20
+ end
21
+
22
+ # @return [String] error message
23
+ def error_message
24
+ return if @output.nil?
25
+ err = 'Following files does not exist or are empty:'
26
+ err << "\n"
27
+ err << @output.join("\n")
28
+ err << "\n"
29
+ end
30
+
31
+ # @return [Boolean] true if files exist and are not empty
32
+ def valid?
33
+ @output.empty?
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end