grspec 0.1.1 → 0.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
- SHA1:
3
- metadata.gz: 5fed8d85358aba0b5235c0d7a67829830e916fdd
4
- data.tar.gz: dc77a91cebad89157204954bf70484bc7dbea222
2
+ SHA256:
3
+ metadata.gz: 4abdcf7f8708b6c96caa5d31a34921ae17a9477eca30a5b690eaf7bcc5a83d60
4
+ data.tar.gz: c413562adce5015317e3baf2cbce2b54a2b9a4d03ff31f5e59865ed33f56d219
5
5
  SHA512:
6
- metadata.gz: aedfb223a5019cb25983ac80c5d79eea97264fee32c4d9f0b66cc5a013878cc7e7b6394c248700d7e67ecfb7ea6543ec7cf25cc569e46dbfc80d43899da3ee2e
7
- data.tar.gz: 3c81c5e91bbdaef83e4a1721b004d906e46687ca873db2b3a747f940a6a4ccc9ad09063e432a98ca094b9cf5aeb5bb7f92feb0cc11354c6b563f021dc7eb461a
6
+ metadata.gz: 230116a9de943ff6081a22cdd188e6cf3b1b897f1a460a4e673785c22c46a1b4f4b041bde0aeb3a7880aa55fcb3df25e3e9da258b2d44fec4ae4d7f0326b7d01
7
+ data.tar.gz: 2ac42186c768e92bfb4334068968b248197dabc7ee864e2f395ed57780feb44cf0cd11818dd4f8f5853fe7f4fe7411a5d67805748cab721e6bdfb1ed8d3612d7
data/bin/grspec CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'active_support/core_ext/array/access'
2
3
 
3
4
  require 'find_changed_files'
4
5
  require 'find_matching_specs'
@@ -10,8 +11,12 @@ def display_listing(header, listing)
10
11
  puts listing
11
12
  end
12
13
 
13
- git_diff_args = ARGV.join(' ')
14
- changed_files = FindChangedFiles.new(ARGV).call
14
+ git_diff_args = ARGV.first(2)
15
+
16
+ changed_files = FindChangedFiles.new(
17
+ base_ref: git_diff_args.first,
18
+ diff_ref: git_diff_args.second
19
+ ).call
15
20
 
16
21
  if changed_files.any?
17
22
  display_listing('Changed files:', changed_files)
@@ -0,0 +1,34 @@
1
+ class FindChangedFiles::BetweenRefs < FindChangedFiles
2
+ attr_reader :base_ref, :diff_ref
3
+
4
+ GIT_MERGE_BASE_COMMAND = 'git merge-base'.freeze
5
+
6
+ def initialize(base_ref:, diff_ref:)
7
+ @base_ref = base_ref
8
+ @diff_ref = diff_ref
9
+ end
10
+
11
+ def call
12
+ differed_files(merge_base_ref, diff_ref)
13
+ end
14
+
15
+ private
16
+
17
+ def merge_base_ref
18
+ merge_base = `#{GIT_MERGE_BASE_COMMAND} #{base_ref} #{diff_ref} #{REDIRECT_STDERR_TO_STDOUT}`
19
+
20
+ raise ArgumentError.new("Bad git diff arguments; #{base_ref} #{diff_ref}") unless $?.success?
21
+
22
+ merge_base.strip
23
+ end
24
+
25
+ def differed_files(from_ref, to_ref)
26
+ @differed_files ||= begin
27
+ diff_output = `#{GIT_DIFF_COMMAND} #{from_ref} #{to_ref} #{GIT_DIFF_OPTIONS} #{REDIRECT_STDERR_TO_STDOUT}`
28
+
29
+ raise ArgumentError.new("Bad git diff arguments; #{base_ref} #{diff_ref}") unless $?.success?
30
+
31
+ diff_output.split("\n")
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ class FindChangedFiles::SimpleDiff < FindChangedFiles
2
+ def call
3
+ differed_files +
4
+ untracked_files +
5
+ staged_files
6
+ end
7
+
8
+ private
9
+
10
+ def differed_files
11
+ `#{GIT_DIFF_COMMAND} #{GIT_DIFF_OPTIONS} #{REDIRECT_STDERR_TO_STDOUT}`.split("\n")
12
+ end
13
+
14
+ def untracked_files
15
+ `git ls-files . --exclude-standard --others`.split("\n")
16
+ end
17
+
18
+ def staged_files
19
+ `#{GIT_DIFF_COMMAND} --staged #{GIT_DIFF_OPTIONS}`.split("\n")
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ class FindChangedFiles::SinceRef < FindChangedFiles
2
+ attr_reader :base_ref
3
+
4
+ CURRENT_REF = 'HEAD'
5
+
6
+ def initialize(base_ref:)
7
+ @base_ref = base_ref
8
+ end
9
+
10
+ def call
11
+ changed_files_between_commits +
12
+ changed_files_in_diff
13
+ end
14
+
15
+ private
16
+
17
+ def changed_files_in_diff
18
+ SimpleDiff.new.call
19
+ end
20
+
21
+ def changed_files_between_commits
22
+ BetweenRefs.new(
23
+ base_ref: base_ref,
24
+ diff_ref: CURRENT_REF
25
+ ).call
26
+ end
27
+ end
@@ -1,52 +1,50 @@
1
1
  class FindChangedFiles
2
- class GitDiffError < StandardError; end
2
+ require 'active_support/core_ext/object/blank'
3
3
 
4
- attr_reader :args
4
+ require_relative 'find_changed_files/simple_diff'
5
+ require_relative 'find_changed_files/since_ref'
6
+ require_relative 'find_changed_files/between_refs'
7
+
8
+ attr_reader :base_ref, :diff_ref
5
9
 
6
10
  GIT_DIFF_COMMAND = 'git diff'.freeze
7
11
  GIT_DIFF_OPTIONS = '--name-only'.freeze
12
+
8
13
  REDIRECT_STDERR_TO_STDOUT = '2>&1'.freeze
9
14
 
10
- def initialize(args)
11
- @args = args
15
+ def initialize(base_ref: nil, diff_ref: nil)
16
+ @base_ref = base_ref
17
+ @diff_ref = diff_ref
12
18
  end
13
19
 
14
20
  def call
15
- changed_files = differed_files
16
-
17
21
  if simple_diff?
18
- changed_files += untracked_files
19
- changed_files += staged_files
22
+ SimpleDiff.new.call
23
+ elsif since_ref?
24
+ SinceRef.new(
25
+ base_ref: base_ref
26
+ ).call
27
+ elsif between_refs?
28
+ BetweenRefs.new(
29
+ base_ref: base_ref,
30
+ diff_ref: diff_ref
31
+ ).call
32
+ else
33
+ raise ArgumentError.new('A base ref must be supplied with a diff ref')
20
34
  end
21
-
22
- changed_files
23
35
  end
24
36
 
25
37
  private
26
38
 
27
39
  def simple_diff?
28
- args.none?
29
- end
30
-
31
- def stringified_args
32
- args.join(' ')
33
- end
34
-
35
- def differed_files
36
- @differed_files ||= begin
37
- diff_output = `#{GIT_DIFF_COMMAND} #{stringified_args} #{GIT_DIFF_OPTIONS} #{REDIRECT_STDERR_TO_STDOUT}`
38
-
39
- raise GitDiffError.new("Bad git diff arguments; #{stringified_args}") unless $?.success?
40
-
41
- diff_output.split("\n")
42
- end
40
+ base_ref.blank? && diff_ref.blank?
43
41
  end
44
42
 
45
- def untracked_files
46
- `git ls-files . --exclude-standard --others`.split("\n")
43
+ def since_ref?
44
+ base_ref.present? && diff_ref.blank?
47
45
  end
48
46
 
49
- def staged_files
50
- `#{GIT_DIFF_COMMAND} --staged #{GIT_DIFF_OPTIONS}`.split("\n")
47
+ def between_refs?
48
+ base_ref.present? && diff_ref.present?
51
49
  end
52
50
  end
File without changes
data/lib/spec_runner.rb CHANGED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordane Lew
@@ -21,6 +21,9 @@ extra_rdoc_files: []
21
21
  files:
22
22
  - bin/grspec
23
23
  - lib/find_changed_files.rb
24
+ - lib/find_changed_files/between_refs.rb
25
+ - lib/find_changed_files/simple_diff.rb
26
+ - lib/find_changed_files/since_ref.rb
24
27
  - lib/find_matching_specs.rb
25
28
  - lib/spec_runner.rb
26
29
  homepage: https://rubygems.org/gems/grspec
@@ -46,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
49
  version: '0'
47
50
  requirements: []
48
51
  rubyforge_project:
49
- rubygems_version: 2.5.2
52
+ rubygems_version: 2.7.3
50
53
  signing_key:
51
54
  specification_version: 4
52
55
  summary: A simple spec runner for differed files