test_changes 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
2
  SHA1:
3
- metadata.gz: d706999477bb9b59090625e9fe646702fc744ce7
4
- data.tar.gz: c892a055438367a3b58936fdd33d0354bf821d18
3
+ metadata.gz: 2df6a30cc05c9b8f553a8669986694b2572ca420
4
+ data.tar.gz: 71c96602d2c338981e6afe322da2431165fb7ff6
5
5
  SHA512:
6
- metadata.gz: 78a39c46163217fea3b393a96655d20cdb7a6066dfec21711e57e048529acce0ef6be15a2ce0a9f570a7e05f4075716b63c74db948799a751a465cfcb5a77bc7
7
- data.tar.gz: 1822de2d1711f7fd48582b560df865e6eb18ee0c3055eaf6bc94a5196ae1b59d0178f8b44e4e26278991e5312805add64c0ad8f5f6746d3aa3bdc51a5de2a892
6
+ metadata.gz: 0743c92860832fca6d404bbae31c5b0faedb52df44616190052652eb3c410eabadab8c19236be295cc1a03ae070cac040b9c1ccc7e43f0c0d1a861be7a86f942
7
+ data.tar.gz: 701f39dd0669df793fc6d292f20cc88c2cfd161a12f10fbc0a0eea22a540727f0ca7a9a2051103538d90adc4c0ea567e3bbcf5086658507fbeb2d73c6503ec38
data/.rubocop.yml CHANGED
@@ -12,3 +12,7 @@ StringLiterals:
12
12
 
13
13
  Style/AlignParameters:
14
14
  Enabled: false
15
+
16
+ Style/FileName:
17
+ Exclude:
18
+ - exe/*
@@ -1,7 +1,5 @@
1
- ---
2
- test_tool_command: rspec
3
- finding_patterns:
1
+ rspec:
4
2
  ^lib/(.+)\.rb: spec/\1_spec.rb
5
3
  ^spec/(.+)_spec.rb: spec/\1_spec.rb
6
-
7
- verbose: true
4
+ rubocop:
5
+ ^(.+)\.rb: \1.rb
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
- script: bundle exec rspec
1
+ script:
2
+ - bundle exec rspec
3
+ - bundle exec rubocop
2
4
  rvm:
3
5
  - 2.0.0
4
6
  cache: bundler
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  ## master
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Breaking changes
6
+
7
+ * Command line API changed. See README and `test-changes -h` for more information. #4
8
+ * Config file renamed to `test-changes.yml`. #4
9
+ * Config file format changed. See README for more info. #4
10
+
11
+ ### New features
12
+
13
+ * You can now put multiple runners in the config file. #8
14
+
3
15
  ## 0.1.1
4
16
 
5
17
  * Infer configuration automatically (#2 @rstacruz).
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Test files that have changed since a given commit.
4
4
 
5
+ [![Status](https://travis-ci.org/gsmendoza/test_changes.svg?branch=master)](https://travis-ci.org/gsmendoza/test_changes "See test builds")
6
+
5
7
  ## Requirements
6
8
 
7
9
  * [Git](https://git-scm.com)
@@ -24,51 +26,49 @@ Or install it yourself as:
24
26
 
25
27
  ## Configuration
26
28
 
27
- Add a `.test_changes.yaml` configuration file to your repo. Example:
29
+ Add a `.test-changes.yml` configuration file to your repo. Example:
28
30
 
29
31
  ```yaml
30
32
  ---
31
- test_tool_command: rspec
32
-
33
- finding_patterns:
33
+ rspec:
34
34
  ^lib/(.+)\.rb: spec/\1_spec.rb
35
35
  ^spec/(.+)_spec.rb: spec/\1_spec.rb
36
-
37
- verbose: true
36
+ rubocop:
37
+ ^(.+)\.rb: \1.rb
38
38
  ```
39
39
 
40
40
  The options
41
41
 
42
- * `test_tool_command` - The command for running the tests.
43
- Example: `rspec`, `zeus rspec`.
42
+ * The keys - The commands for running the tests.
43
+ Example: `rspec`, `zeus rspec`, `rubocop`.
44
44
 
45
- * `finding_patterns` - If the name of a changed file matches the regular expression,
46
- `test_changes` will test the file's matching tests. Can accept an array
47
- of tests:
45
+ * The values - The finding patterns. If the name of a changed file matches
46
+ the regular expression, `test_changes` will test the file's matching tests.
47
+ Can accept an array of tests:
48
48
 
49
49
  ```yaml
50
- finding_patterns:
50
+ rspec:
51
51
  ^lib/test_changes\.rb:
52
52
  - spec/test_changes_spec.rb
53
53
  - spec/test_changes/client_spec.rb
54
54
  ```
55
55
 
56
- * `verbose` - Set the verbose level of output.
57
-
58
56
  ## Usage
59
57
 
60
- `test_changes [test_tool_arguments] [commit]`
58
+ `test-changes -c [commit] -- [test_tool_arguments]`
61
59
 
62
60
  * `test_tool_arguments` - Arguments that can be passed to the test tool.
63
61
 
64
62
  * `commit` - Test change from this commit. Defaults to HEAD.
65
63
 
64
+ See `test-changes -h` for more options.
65
+
66
66
  Examples:
67
67
 
68
68
  ```
69
- test_changes
70
- test_changes master
71
- test_changes --format=documentation HEAD^
69
+ test-changes
70
+ test-changes -c master
71
+ test-changes -c HEAD^ -- --format=documentation
72
72
  ```
73
73
 
74
74
  ## Known to work on
data/exe/test-changes ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test_changes/argv_wrapper'
4
+ require 'test_changes/client'
5
+ require 'test_changes/find_runner_service'
6
+
7
+ argv_wrapper = TestChanges::ARGVWrapper.new(ARGV)
8
+ runner = TestChanges::FindRunnerService.new(argv_wrapper).call
9
+
10
+ client = TestChanges::Client.new(
11
+ runner_name: runner.name,
12
+ finding_patterns: runner.finding_patterns,
13
+ commit: argv_wrapper.commit,
14
+ runner_call_options: argv_wrapper.runner_call_options,
15
+ verbose: argv_wrapper.verbose?)
16
+
17
+ client.call
data/lib/test_changes.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "test_changes/version"
2
2
 
3
3
  module TestChanges
4
- # Your code goes here...
4
+ SUMMARY = 'Test Changes'.freeze
5
+ DESCRIPTION =
6
+ 'Run only the tests affected by files changed since a given commit.'.freeze
5
7
  end
@@ -1,19 +1,50 @@
1
+ require 'slop'
2
+ require 'test_changes'
3
+
1
4
  module TestChanges
2
5
  class ARGVWrapper
6
+ attr_reader :argv
7
+
3
8
  def initialize(argv)
4
9
  @argv = argv
5
10
  end
6
11
 
7
12
  def commit
8
- argv.last || 'HEAD'
13
+ slop_options[:commit]
9
14
  end
10
15
 
11
- def test_tool_call_options
12
- argv[0, argv.size - 1] || []
16
+ def runner_call_options
17
+ runner_call_options_delimiter_index = argv.index('--')
18
+
19
+ if runner_call_options_delimiter_index
20
+ argv.slice(runner_call_options_delimiter_index + 1, argv.size)
21
+ else
22
+ []
23
+ end
24
+ end
25
+
26
+ def runner_name
27
+ slop_options[:runner]
28
+ end
29
+
30
+ def verbose?
31
+ !slop_options.quiet?
13
32
  end
14
33
 
15
34
  private
16
35
 
17
- attr_reader :argv
36
+ def slop_options
37
+ Slop.parse(argv, help: true, strict: true, banner: banner) do
38
+ on 'c', 'commit=', 'Git commit. Default: HEAD.', default: 'HEAD'
39
+ on 'q', 'quiet', 'Do not print output. Default: false.', default: false
40
+
41
+ on 'r', 'runner=',
42
+ 'The test tool to run. Default: the first runner of the config file.'
43
+ end
44
+ end
45
+
46
+ def banner
47
+ "Usage: test-changes [options] -- [test tool arguments]"
48
+ end
18
49
  end
19
50
  end
@@ -3,10 +3,10 @@ require 'test_changes/finding_pattern'
3
3
  module TestChanges
4
4
  class Client
5
5
  def initialize(options)
6
- @test_tool_command = options[:test_tool_command]
6
+ @runner_name = options[:runner_name]
7
7
  @finding_patterns = options[:finding_patterns]
8
8
  @commit = options[:commit]
9
- @test_tool_call_options = options[:test_tool_call_options]
9
+ @runner_call_options = options[:runner_call_options]
10
10
  @verbose = options[:verbose]
11
11
  end
12
12
 
@@ -30,8 +30,8 @@ module TestChanges
30
30
 
31
31
  attr_reader :commit,
32
32
  :finding_patterns,
33
- :test_tool_command,
34
- :test_tool_call_options,
33
+ :runner_name,
34
+ :runner_call_options,
35
35
  :verbose
36
36
 
37
37
  def log(header, message)
@@ -52,8 +52,8 @@ module TestChanges
52
52
 
53
53
  def test_tool_call
54
54
  @test_tool_call ||= [
55
- test_tool_command,
56
- test_tool_call_options,
55
+ runner_name,
56
+ runner_call_options,
57
57
  existing_matches
58
58
  ].flatten.compact.join(' ')
59
59
  end
@@ -11,16 +11,12 @@ module TestChanges
11
11
  File.exist?(@config_path)
12
12
  end
13
13
 
14
- def finding_patterns
15
- FindingPattern.build config['finding_patterns']
16
- end
17
-
18
- def test_tool_command
19
- config['test_tool_command']
20
- end
21
-
22
- def verbose
23
- config['verbose']
14
+ def runners
15
+ config.map do |runner_name, finding_pattern_maps|
16
+ Runner.new(
17
+ name: runner_name,
18
+ finding_patterns: FindingPattern.build(finding_pattern_maps))
19
+ end
24
20
  end
25
21
 
26
22
  private
@@ -1,9 +1,11 @@
1
+ require 'test_changes/config'
1
2
  require 'test_changes/inferred_config'
2
3
 
3
4
  module TestChanges
4
5
  module ConfigSetupService
5
6
  def self.call
6
- config = Config.new('.test_changes.yaml')
7
+ config_file_name = '.test-changes.yml'
8
+ config = Config.new(config_file_name)
7
9
 
8
10
  return config if config.exists?
9
11
 
@@ -13,31 +15,31 @@ module TestChanges
13
15
  return use_testunit_rails('bundle exec ruby -Itest') if File.directory?('./test')
14
16
  end
15
17
 
16
- fail TestChanges::Error, "No .test_changes.yaml found"
18
+ fail TestChanges::Error, "No #{config_file_name} found"
17
19
  end
18
20
 
19
21
  private
20
22
 
21
23
  def self.use_rspec_rails(bin)
22
- InferredConfig.new(
23
- test_tool_command: bin,
24
+ runner = Runner.new(
25
+ name: bin,
24
26
  project_type_name: 'rspec_rails',
25
- finding_patterns_map: {
27
+ finding_patterns: FindingPattern.build(
26
28
  '^app/(models)/(.+).rb' => 'spec/\1/\2_spec.rb',
27
- '^app/(controller|helper|view)s/(.+).rb' => 'spec/controllers/\2_\1_spec.rb'
28
- }
29
- )
29
+ '^app/(controller|helper|view)s/(.+).rb' => 'spec/controllers/\2_\1_spec.rb'))
30
+
31
+ InferredConfig.new([runner])
30
32
  end
31
33
 
32
34
  def self.use_testunit_rails(bin)
33
- InferredConfig.new(
34
- test_tool_command: bin,
35
+ runner = Runner.new(
36
+ name: bin,
35
37
  project_type_name: 'testunit_rails',
36
- finding_patterns_map: {
38
+ finding_patterns: FindingPattern.build(
37
39
  '^app/(models)/(.+).rb' => 'test/\1/\2_test.rb',
38
- '^app/(controller|helper|view)s/(.+).rb' => 'test/controllers/\2_\1_test.rb'
39
- }
40
- )
40
+ '^app/(controller|helper|view)s/(.+).rb' => 'test/controllers/\2_\1_test.rb'))
41
+
42
+ InferredConfig.new([runner])
41
43
  end
42
44
  end
43
45
  end
@@ -0,0 +1,23 @@
1
+ require 'test_changes/config_setup_service'
2
+ require 'test_changes/runner'
3
+
4
+ module TestChanges
5
+ class FindRunnerService
6
+ def initialize(argv_wrapper)
7
+ @config = ConfigSetupService.call
8
+ @argv_wrapper = argv_wrapper
9
+ end
10
+
11
+ def call
12
+ return config.runners.first unless argv_wrapper.runner_name
13
+
14
+ config.runners.find do |runner|
15
+ runner.name == argv_wrapper.runner_name
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :config, :argv_wrapper
22
+ end
23
+ end
@@ -1,25 +1,5 @@
1
1
  require 'test_changes/error'
2
2
 
3
3
  module TestChanges
4
- class InferredConfig
5
- attr_reader :finding_patterns_map
6
- attr_reader :test_tool_command
7
- attr_reader :project_type_name
8
-
9
- def initialize(test_tool_command: nil,
10
- project_type_name: nil, finding_patterns_map: nil)
11
-
12
- @test_tool_command = test_tool_command
13
- @project_type_name = project_type_name
14
- @finding_patterns_map = finding_patterns_map
15
- end
16
-
17
- def finding_patterns
18
- FindingPattern.build finding_patterns_map
19
- end
20
-
21
- def verbose
22
- true
23
- end
24
- end
4
+ InferredConfig = Struct.new(:runners)
25
5
  end
@@ -0,0 +1,13 @@
1
+ require 'test_changes/config_setup_service'
2
+
3
+ module TestChanges
4
+ class Runner
5
+ def initialize(name: nil, finding_patterns: nil, project_type_name: nil)
6
+ @name = name
7
+ @finding_patterns = finding_patterns
8
+ @project_type_name = project_type_name
9
+ end
10
+
11
+ attr_reader :name, :finding_patterns, :project_type_name
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module TestChanges
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/test_changes.gemspec CHANGED
@@ -1,6 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'test_changes'
4
5
  require 'test_changes/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
@@ -9,10 +10,8 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ["George Mendoza"]
10
11
  spec.email = ["gsmendoza@gmail.com"]
11
12
 
12
- spec.summary = %(Test Changes)
13
-
14
- spec.description =
15
- %(Run only the tests affected by files changed since a given commit.)
13
+ spec.summary = TestChanges::SUMMARY
14
+ spec.description = TestChanges::DESCRIPTION
16
15
 
17
16
  spec.homepage = "https://github.com/gsmendoza/test_changes"
18
17
  spec.license = "MIT"
@@ -25,7 +24,10 @@ Gem::Specification.new do |spec|
25
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
25
  spec.require_paths = ["lib"]
27
26
 
28
- spec.add_development_dependency "pry"
27
+ spec.add_dependency "slop", '~> 3.4.0'
28
+
29
+ spec.add_development_dependency "pry", '~> 0.10.1'
29
30
  spec.add_development_dependency "rake", "~> 10.0"
30
31
  spec.add_development_dependency "rspec"
32
+ spec.add_development_dependency "rubocop"
31
33
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_changes
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
  - George Mendoza
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-22 00:00:00.000000000 Z
11
+ date: 2015-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: slop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.4.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.4.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: pry
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ">="
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '0'
33
+ version: 0.10.1
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ">="
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '0'
40
+ version: 0.10.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,11 +66,25 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Run only the tests affected by files changed since a given commit.
56
84
  email:
57
85
  - gsmendoza@gmail.com
58
86
  executables:
59
- - test_changes
87
+ - test-changes
60
88
  extensions: []
61
89
  extra_rdoc_files: []
62
90
  files:
@@ -64,7 +92,7 @@ files:
64
92
  - ".overcommit.yml"
65
93
  - ".rspec"
66
94
  - ".rubocop.yml"
67
- - ".test_changes.yaml"
95
+ - ".test-changes.yml"
68
96
  - ".travis.yml"
69
97
  - CHANGELOG.md
70
98
  - CODE_OF_CONDUCT.md
@@ -74,15 +102,17 @@ files:
74
102
  - Rakefile
75
103
  - bin/console
76
104
  - bin/setup
77
- - exe/test_changes
105
+ - exe/test-changes
78
106
  - lib/test_changes.rb
79
107
  - lib/test_changes/argv_wrapper.rb
80
108
  - lib/test_changes/client.rb
81
109
  - lib/test_changes/config.rb
82
110
  - lib/test_changes/config_setup_service.rb
83
111
  - lib/test_changes/error.rb
112
+ - lib/test_changes/find_runner_service.rb
84
113
  - lib/test_changes/finding_pattern.rb
85
114
  - lib/test_changes/inferred_config.rb
115
+ - lib/test_changes/runner.rb
86
116
  - lib/test_changes/version.rb
87
117
  - test_changes.gemspec
88
118
  homepage: https://github.com/gsmendoza/test_changes
data/exe/test_changes DELETED
@@ -1,20 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test_changes/argv_wrapper'
4
- require 'test_changes/client'
5
- require 'test_changes/config'
6
- require 'test_changes/inferred_config'
7
- require 'test_changes/config_setup_service'
8
-
9
- argv_wrapper = TestChanges::ARGVWrapper.new(ARGV)
10
-
11
- config = TestChanges::ConfigSetupService.call
12
-
13
- client = TestChanges::Client.new(
14
- test_tool_command: config.test_tool_command,
15
- finding_patterns: config.finding_patterns,
16
- commit: argv_wrapper.commit,
17
- test_tool_call_options: argv_wrapper.test_tool_call_options,
18
- verbose: config.verbose)
19
-
20
- client.call