eat_your_vegetables 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f8738ad0032c17b980daedaf010e6efcc474e2916123cc09d3259af219f9829
4
- data.tar.gz: 5432ad196459817c96e02752657823d93198ea958b5af6b9ddc1b3eef38acdf1
3
+ metadata.gz: c7866981bdf47ceca5aceebd1333e265b27f63ee59a7d7dddf4d0b3c317326f2
4
+ data.tar.gz: 965d18fe6d1b29f07378761b8beca7c713adb63450f3cb7083c0e9e71493cb93
5
5
  SHA512:
6
- metadata.gz: 6f3b84923f31277bb37c2e4918bdb259f144e7f9ebacd7db293b1c5414771890cb693a65143918404971532d65e928193a6dda3aef4427ed3007689dcffc39b0
7
- data.tar.gz: 4195f71b37d18ec5a4542d4b8a6413c4281ba1da13155144e08a5ad30631d43b915910b128dee57170385710ffcdef8fc104b16196950b6e81aeabc9a66f9097
6
+ metadata.gz: 374cecbb22296387508a0f2c088d9727adb95a4d065a5ec62383cbebdf0d2de46adf16027d9d5561b023d14be323162a8c36820929aec639fdddb2f0cadd0a36
7
+ data.tar.gz: 999905d875acec18e496d611baea5951c60038719e33072f40623d0dd23261ab4f9a35544af1e420e7aa01604fd7eede9c7e645026df0441457363a958b8a618
data/Dockerfile ADDED
@@ -0,0 +1,9 @@
1
+ FROM ruby:2.6-alpine
2
+
3
+ RUN apk add git alpine-sdk
4
+ RUN bundle config --global frozen 1
5
+
6
+ WORKDIR /data
7
+ RUN gem install eat_your_vegetables
8
+
9
+ CMD eat_your_vegetables
data/Gemfile CHANGED
@@ -5,3 +5,7 @@ gemspec
5
5
  group :development do
6
6
  gem 'kramdown'
7
7
  end
8
+
9
+ group :development, :test do
10
+ gem 'pry'
11
+ end
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  * [Email](mailto:cfeckardt@gmail.com)
4
4
 
5
- _NOTE THIS IS A WORK IN PROGRESS. DOCUMENTATION AND SOFTWARE IS INCOMPLETE_
5
+ _NOTE THIS IS A WORK IN PROGRESS. DOCUMENTATION AND SOFTWARE IS INCOMPLETE AND IS PROVIDED ON AS IS. PLEASE HELP MY CONTRIBUTING_
6
6
 
7
7
  ## Description
8
8
  Eat Your Vegetables is a tool that aims to help you improve your codebase over
@@ -18,10 +18,10 @@ that number hasn't decreased.
18
18
 
19
19
  ## Features
20
20
  Support for linters, coverage and test tools. For a full list of support tools
21
- see SUPPORTED_TOOLS.md
21
+ see [SUPPORTED_TOOLS.md](docs/SUPPORTED_TOOLS.md)
22
22
 
23
23
  This project is still in early days so _please_ add support for your framework
24
- if it is missing. There is a simple guide here: ADDING_FRAMEWORKS.md
24
+ if it is missing. There is a simple guide here: [ADDING_ADAPTERS.md](docs/ADDING_ADAPTERS.md)
25
25
 
26
26
  ## Requirements
27
27
 
@@ -37,9 +37,12 @@ be executing your environment with git available.
37
37
  Eat Your Vegetables is intended to be run with
38
38
 
39
39
  ### With docker
40
+
40
41
  For all you hip kids out there, there's a Dockerfile!
41
42
 
42
- `docker run eat_your_vegetables:latest`
43
+ ```bash
44
+ $ docker run --mount type=bind,source=`pwd`,target=/data cfeckardt/eat_your_vegetables:latest
45
+ ```
43
46
 
44
47
  ## Configuration
45
48
 
@@ -56,12 +59,27 @@ simplecov
56
59
 
57
60
  ### Setting up CI
58
61
 
59
- #### Gitlab
62
+ #### Travis
63
+
64
+ ```yaml
65
+ ---
66
+ language: ruby
67
+ before_script:
68
+ - gem install eat_your_vegetables
69
+ script:
70
+ - bundle exec eat_your_vegetables
60
71
 
61
- #### Circle CI
72
+ ```
62
73
 
63
74
  #### Other
64
75
 
76
+ In order to run _eyv_ in your CI suite you need to:
77
+
78
+ 1. Ensure git is installed
79
+ 2. Ensure ruby is installed
80
+ 3. Run `gem intall eat_your_vegetables`
81
+ 4. Run `bundle exec eat_your_vegetables` or just `eat_your_vegetables`
82
+
65
83
  Please contribute by adding set up instructions for other CIs.
66
84
 
67
85
  ## Contributing
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'eat_your_vegetables'
3
+ $LOAD_PATH.unshift(File.expand_path('../lib'))
4
+
5
+ require_relative '../lib/eat_your_vegetables.rb'
4
6
 
5
7
  EatYourVegetables::Runner.new.run
@@ -0,0 +1,31 @@
1
+ # Adding support for more adapters
2
+
3
+ Currently there is only support for a small number of tools, in ruby, but adding support for _any_ language is easy, and will only take a couple of minutes.
4
+
5
+ You may use the example below to implement your own adapter:
6
+
7
+ ```ruby
8
+ require_relative 'base'
9
+
10
+ module EatYourVegetables
11
+ module Tools # Create your tool in this namespace
12
+ class MyTool < Base # Inherit from the base tool
13
+ attr_writer :config_file # Add attr_writers for configurable values
14
+ protected
15
+ # Will get called when running the tool to determine
16
+ # the location of the config file (across branches)
17
+ def config_file # You need to implement this method
18
+ @config_file || '.mytoolignore.yml' # Default value
19
+ end
20
+
21
+ # Will get called with the contents of the config_file, for the valid branches.
22
+ # Should return an array of files excluded by the content
23
+ def excluded_files(content) # You need to implement this method
24
+ content.split("\n")
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ ```
31
+
@@ -0,0 +1,46 @@
1
+ # Supported Tools
2
+
3
+ Currently there is only support for a small number of tools, in ruby, but adding support for _any_ language is easy, and will only take a couple of minutes. See [ADDING_ADAPTERS.md](ADDING_ADAPTERS.md) for instructions.
4
+
5
+ ## Ruby
6
+
7
+ ### Rubocop
8
+
9
+ The rubocop adapter supports the following options:
10
+
11
+ ```ruby
12
+ rubocop do
13
+ config_file ".rubocop.yml" # relative path to the config file, defaults to .rubocop.yml
14
+ end
15
+ ```
16
+
17
+ Any and all files matched under an `Exclude:` key are considered excluded by this adapter. This means that both `file1.rb` and `file2.rb` are matched.
18
+
19
+ ```yaml
20
+ AllCops:
21
+ Exclude:
22
+ - file1.rb
23
+ Style/Indentation:
24
+ Exclude:
25
+ - file2.rb
26
+ ```
27
+
28
+ ### Simplecov
29
+
30
+ The simplecov adapter supports the following options:
31
+
32
+ ```ruby
33
+ simplecov do
34
+ config_file 'spec/spec_helper.rb' # relative path of config file, defaults to spec/spec_helper.rb
35
+ end
36
+ ```
37
+
38
+ The simplecov adapter will look for _any_ lines in the provided file that includes the line `add_filter "some_file.rb"` and match on `some_file.rb`
39
+
40
+ Typically you will have something like:
41
+
42
+ ```ruby
43
+ Simplecov.start do
44
+ add_filter "file1.rb"
45
+ end
46
+ ```
@@ -28,10 +28,11 @@ Force your team to incrementally improve your code base with every commit to mas
28
28
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
29
29
  gem.require_paths = ['lib']
30
30
 
31
- gem.add_dependency 'rake', '~> 12.3.2'
31
+ gem.add_dependency 'colorize', '~> 0.8'
32
32
 
33
33
  gem.add_development_dependency 'bundler', '~> 1.10'
34
34
  gem.add_development_dependency 'pry', '~> 0.12'
35
+ gem.add_development_dependency 'rake', '~> 12.3.2'
35
36
  gem.add_development_dependency 'rspec', '~> 3.0'
36
37
  gem.add_development_dependency 'rubocop', '~> 0.63'
37
38
  gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
@@ -1,6 +1,8 @@
1
1
  require 'eat_your_vegetables/version'
2
2
  require 'eat_your_vegetables/tools/rubocop'
3
3
 
4
+ require 'colorize'
5
+
4
6
  module EatYourVegetables
5
7
  class Runner
6
8
  def initialize
@@ -17,14 +19,21 @@ module EatYourVegetables
17
19
 
18
20
  if @tools.any? &:is_configed?
19
21
  if step_difference == 0
20
- puts "Sorry, I can't let you do that"
22
+ puts "Sorry, I can't let you do that".yellow
23
+ puts "Please, fix one of the ignored files and try again!".yellow
24
+ puts "For example:".yellow
25
+
26
+ @tools.flat_map(&:current_exclusions).flatten.sort.sample(10).each do |excluded_file|
27
+ puts excluded_file.red
28
+ end
29
+
21
30
  exit 1
22
31
  else
23
- puts "Thanks, for eating your veggies."
32
+ puts "Thanks, for eating your veggies.".green
24
33
  exit 0
25
34
  end
26
35
  else
27
- puts 'It appears there are no vegetables to eat'
36
+ puts 'It appears there are no vegetables to eat'.blue
28
37
  exit 0
29
38
  end
30
39
  end
@@ -6,30 +6,24 @@ module EatYourVegetables
6
6
  class Base
7
7
  def initialize(parent_branch:)
8
8
  @parent_branch = parent_branch
9
- @ambition_filter = []
10
- end
11
-
12
- def filter(file)
13
- if file.is_a? Array
14
- file.each do |f|
15
- filter f
16
- end
17
- end
18
-
19
- @ambition_filter << file
20
9
  end
21
10
 
22
11
  def step_difference
23
12
  return 0 unless is_configed?
24
13
 
25
- parent_exclusions = excluded_files(parent_file_contents)
26
- current_exclusions = excluded_files(current_file_contents)
27
-
28
14
  (parent_exclusions - current_exclusions).count
29
15
  end
30
16
 
17
+ def parent_exclusions
18
+ @parent_exclusions ||= excluded_files(parent_file_contents)
19
+ end
20
+
21
+ def current_exclusions
22
+ @current_exclusions ||= excluded_files(current_file_contents)
23
+ end
24
+
31
25
  def parent_file_contents
32
- cmdstr = "git show origin/master:#{config_file}"
26
+ cmdstr = "git show origin/#{@parent_branch}:#{config_file}"
33
27
  stdout, stderr, status = Open3.capture3(cmdstr)
34
28
 
35
29
  stdout
@@ -4,16 +4,20 @@ require_relative 'base'
4
4
  module EatYourVegetables
5
5
  module Tools
6
6
  class Rubocop < Base
7
+ attr_writer :config_file
8
+
7
9
  protected
8
10
 
9
11
  def config_file
10
- '.rubocop.yml'
12
+ @config_file || '.rubocop.yml'
11
13
  end
12
14
 
13
15
  def excluded_files(content)
14
16
  yaml = YAML.load(content)
15
17
 
16
- yaml['AllCops']['Exclude']
18
+ yaml.values.reduce([]) do |acc, hash|
19
+ acc << hash['Exclude']
20
+ end.compact.sort.uniq
17
21
  end
18
22
  end
19
23
  end
@@ -0,0 +1,24 @@
1
+ module EatYourVegetables
2
+ module Tools
3
+ # Simplecov provides integration with the Simplecov coverage framework
4
+ class Simplecov < Base
5
+ attr_writer :config_file
6
+
7
+ protected
8
+
9
+ def config_file
10
+ @config_file || 'spec/spec_helper.rb'
11
+ end
12
+
13
+ def excluded_files(content)
14
+ # Matches all add_filter in the file.
15
+ # It's imperfect but works for now.
16
+ content.split("\n").select do |line|
17
+ line.include? 'add_filter'
18
+ end.map do |line|
19
+ /[\"'](\S+)[\"']/.match(line.strip).to_s
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,4 +1,4 @@
1
1
  module EatYourVegetables
2
2
  # eat_your_vegetables version
3
- VERSION = '0.1.1'.freeze
3
+ VERSION = '0.1.2'.freeze
4
4
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eat_your_vegetables
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fredrik Eckardt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-05 00:00:00.000000000 Z
11
+ date: 2019-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 12.3.2
19
+ version: '0.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 12.3.2
26
+ version: '0.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 12.3.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 12.3.2
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -124,17 +138,21 @@ files:
124
138
  - ".travis.yml"
125
139
  - ".yardopts"
126
140
  - ChangeLog.md
141
+ - Dockerfile
127
142
  - Gemfile
128
143
  - LICENSE.txt
129
144
  - README.md
130
145
  - Rakefile
131
146
  - Veggiefile
132
147
  - bin/eat_your_vegetables
148
+ - docs/ADDING_ADAPTERS.md
149
+ - docs/SUPPORTED_TOOLS.md
133
150
  - eat_your_vegetables.gemspec
134
151
  - lib/eat_your_vegetables.rb
135
152
  - lib/eat_your_vegetables/ambition.rb
136
153
  - lib/eat_your_vegetables/tools/base.rb
137
154
  - lib/eat_your_vegetables/tools/rubocop.rb
155
+ - lib/eat_your_vegetables/tools/simplecov.rb
138
156
  - lib/eat_your_vegetables/version.rb
139
157
  - spec/eat_your_vegetables_spec.rb
140
158
  - spec/spec_helper.rb