grspec 0.2.1 → 0.3.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: 37e98f517772ef358da9d9eb36f553d571ae17204eeb7c47dfd45bbc2f9868ac
4
- data.tar.gz: 5e14f29212bc6a384418ef5f2aa16429a10b166b2a6a4f2c744a79227871dd90
3
+ metadata.gz: 16610e47bcb0c299bbff11a44ff15b8467014fc9f29047b661db9f9234fdfb5f
4
+ data.tar.gz: a0eb0ce7a49c84384d916dd259c2af74b1e7afd2d7b82f89a846f3e9bca47fce
5
5
  SHA512:
6
- metadata.gz: f50f800264cc862c3f666ef47441e0fb051d99d31bf35ea41f62395378bb6727140b3dc89b7034f44f20ae0445f3bb700ff1374007362d6990962d6a3b1f9b16
7
- data.tar.gz: b221ca121a365098c6edfc1e26e80e77049453636f9413752c3529fe954ee330272916fc3ebad3bb06abe60eed8120467d0fa130c8e17042827aa128b5d1eb57
6
+ metadata.gz: 19f518d2092c2a7282183aef5e8d6698944c3b0ec1540b7704b271543a7f2daca8d38f547165d1f37cb7a54dd188117e8cf504bf3788133a996a1bbe3e9b7c8f
7
+ data.tar.gz: 47cf4410ebdebb27d3211640d160790c7ee12cb601f87c55c415d8ca87a537810bfa92f7106241379c20fd48bca44fd4e19ad22d87a04d65e10b3362b1a5bb75
data/bin/grspec CHANGED
@@ -1,36 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
+ require_relative '../lib/arg_parser'
3
+ require_relative '../lib/grspec'
2
4
 
3
- require 'active_support/core_ext/array/access'
5
+ options = ArgParser.parse(ARGV)
6
+ base_ref, diff_ref = ARGV.first(2)
4
7
 
5
- require_relative '../lib/find_changed_files'
6
- require_relative '../lib/find_matching_specs'
7
- require_relative '../lib/spec_runner'
8
-
9
- def display_listing(header, listing)
10
- puts
11
- puts header
12
- puts listing
13
- end
14
-
15
- git_diff_args = ARGV.first(2)
16
-
17
- changed_files = FindChangedFiles.new(
18
- base_ref: git_diff_args.first,
19
- diff_ref: git_diff_args.second
20
- ).call
21
-
22
- if changed_files.any?
23
- display_listing('Changed files:', changed_files)
24
-
25
- matching_specs = FindMatchingSpecs.new(changed_files).call
26
-
27
- if matching_specs.any?
28
- display_listing('Matching specs:', matching_specs.map {|matching_spec| matching_spec.join(' -> ') })
29
-
30
- SpecRunner.run(matching_specs.map(&:second).uniq)
31
- else
32
- puts "No matching specs found"
33
- end
34
- else
35
- puts "No changed files found"
36
- end
8
+ Grspec.new(
9
+ base_ref: base_ref,
10
+ diff_ref: diff_ref,
11
+ options: options
12
+ ).run
data/lib/arg_parser.rb ADDED
@@ -0,0 +1,29 @@
1
+ require 'ostruct'
2
+ require 'optparse'
3
+
4
+ class ArgParser
5
+ def self.parse(options)
6
+ args = OpenStruct.new
7
+
8
+ opt_parser = OptionParser.new do |opts|
9
+ opts.banner = "Usage: grspec [git ref] [git ref] [options]"
10
+
11
+ opts.on("-rSPEC_REGEX", "--regex=SPEC_REGEX", Regexp, "Regex to filter specs") do |regex|
12
+ args.spec_regex = regex
13
+ end
14
+
15
+ opts.on("-d", "--dry", "Performs a dry run for a listing that would be passed through to RSpec") do
16
+ args.dry_run = true
17
+ end
18
+
19
+ opts.on("-h", "--help", "Prints this help") do
20
+ puts opts
21
+ exit
22
+ end
23
+ end
24
+
25
+ opt_parser.parse!(options)
26
+
27
+ args
28
+ end
29
+ end
@@ -13,7 +13,7 @@ class FindMatchingSpecs
13
13
  ruby_files = files.select { |filename| ruby_file?(filename) }
14
14
  spec_files = ruby_files.map { |filename| specs_for(filename) }
15
15
 
16
- spec_files.compact.uniq
16
+ spec_files.uniq
17
17
  end
18
18
 
19
19
  private
@@ -41,6 +41,6 @@ class FindMatchingSpecs
41
41
  file_for_spec == filename
42
42
  end
43
43
 
44
- [filename, spec_match] unless spec_match.nil?
44
+ [filename, spec_match]
45
45
  end
46
- end
46
+ end
data/lib/grspec.rb ADDED
@@ -0,0 +1,88 @@
1
+ require 'active_support/core_ext/array/access'
2
+
3
+ require_relative '../lib/find_changed_files'
4
+ require_relative '../lib/find_matching_specs'
5
+ require_relative '../lib/spec_runner'
6
+
7
+ class Grspec
8
+ attr_reader :base_ref, :diff_ref, :options
9
+
10
+ def initialize(base_ref:, diff_ref:, options: OpenStruct.new)
11
+ @base_ref = base_ref
12
+ @diff_ref = diff_ref
13
+ @options = options
14
+ end
15
+
16
+ def run
17
+ if changed_files.empty?
18
+ display("No changed files found")
19
+ return
20
+ end
21
+
22
+ display_listing('Changed files:', changed_files)
23
+
24
+ display_listing(
25
+ 'Files without specs:',
26
+ mismatching_files.map(&:first)
27
+ ) if mismatching_files.any?
28
+
29
+ if matching_specs.any?
30
+ display_listing(
31
+ 'Matching specs:',
32
+ matching_specs.map { |matching_spec| matching_spec.join(' -> ') }
33
+ )
34
+
35
+ if dry_run?
36
+ puts matching_specs.map(&:second).uniq
37
+ else
38
+ SpecRunner.run(matching_specs.map(&:second).uniq)
39
+ end
40
+ else
41
+ display("No matching specs found")
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def dry_run?
48
+ options.dry_run
49
+ end
50
+
51
+ def changed_files
52
+ @changed_files ||= FindChangedFiles.new(
53
+ base_ref: base_ref,
54
+ diff_ref: diff_ref
55
+ ).call
56
+ end
57
+
58
+ def file_spec_pairs
59
+ @file_spec_pairs ||= FindMatchingSpecs.new(changed_files).call
60
+ end
61
+
62
+ def mismatching_files
63
+ @mismatching_files ||= file_spec_pairs.select { |_, spec| spec.nil? }
64
+ end
65
+
66
+ def matching_specs
67
+ @matching_specs ||= file_spec_pairs - mismatching_files
68
+ end
69
+
70
+ def display_output?
71
+ !dry_run?
72
+ end
73
+
74
+ def display(string)
75
+ return unless display_output?
76
+
77
+ puts
78
+ puts string
79
+ end
80
+
81
+ def display_listing(header, listing)
82
+ return unless display_output?
83
+
84
+ puts
85
+ puts header
86
+ puts listing
87
+ end
88
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordane Lew
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-11 00:00:00.000000000 Z
11
+ date: 2018-02-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: GRSpec is a tiny gem that can quickly and easily run specs for files
14
14
  that git has detected changes for, allowing for quick and easy regression checking
@@ -20,11 +20,13 @@ extensions: []
20
20
  extra_rdoc_files: []
21
21
  files:
22
22
  - bin/grspec
23
+ - lib/arg_parser.rb
23
24
  - lib/find_changed_files.rb
24
25
  - lib/find_changed_files/between_refs.rb
25
26
  - lib/find_changed_files/simple_diff.rb
26
27
  - lib/find_changed_files/since_ref.rb
27
28
  - lib/find_matching_specs.rb
29
+ - lib/grspec.rb
28
30
  - lib/spec_runner.rb
29
31
  homepage: https://rubygems.org/gems/grspec
30
32
  licenses: