git-hooks 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.git_hooks.yml +8 -0
- data/.travis.yml +2 -0
- data/README.md +10 -6
- data/Rakefile +4 -0
- data/git_hooks.yml.example +6 -5
- data/hook.sample +2 -0
- data/lib/git-hooks.rb +19 -2
- data/lib/git_hooks/pre_commit/prevent_debugger.rb +1 -1
- data/lib/git_hooks/pre_commit/prevent_master.rb +1 -1
- data/lib/git_hooks/pre_commit/rspec.rb +9 -5
- data/lib/git_hooks/pre_commit/rubocop.rb +49 -8
- data/lib/git_hooks/pre_commit/trailing_whitespace.rb +1 -1
- data/lib/git_hooks/version.rb +1 -1
- data/spec/fixtures/git_hooks.yml +3 -2
- data/spec/git-hooks_spec.rb +121 -0
- data/spec/git_hooks/config_file_spec.rb +8 -3
- data/spec/git_hooks/pre_commit/rspec_spec.rb +1 -1
- data/spec/git_hooks/pre_commit/rubocop_spec.rb +39 -1
- metadata +6 -4
- data/spec/git_hooks_spec.rb +0 -89
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1eb1b43db79e2fee7f1e80b606a5f179d9ef6e01
|
4
|
+
data.tar.gz: 4c406f7fa4c304979c38479a7b7e3aee4e3775d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e738a492bf589e366da29a5355a85c54c5d7990e369b0479f2cd3a325b7c78b619bd1d0df26fb25932fdcc19ca30ae600699ffd9b9689f58b26d57f897a4eb8
|
7
|
+
data.tar.gz: ce5edbedf28705755913ef38b183ad64d8e60fe58dec7837be37350ff0779aad3c49213932ced1c7d755f476bc9e355b1142150702ee9904c05374c902dcebbe
|
data/.git_hooks.yml
ADDED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
|
7
7
|
# GitHooks
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
This gem provides an interface to write useful git hooks in Ruby. Those hooks
|
10
|
+
can be used when working in projects in any programming language.
|
11
11
|
|
12
12
|
## Installation
|
13
13
|
|
@@ -48,17 +48,21 @@ By now you will find the following built-in hooks:
|
|
48
48
|
- Prevent commits with debugger.
|
49
49
|
- Prevent commits with trailing white space.
|
50
50
|
|
51
|
+
### Warning about `Rubocop` pre-commit `use_stash` option:
|
52
|
+
|
53
|
+
This feature is yet experimental. Be aware that in some odd circumstances you
|
54
|
+
may encounter merge conflicts when applying the stash.
|
55
|
+
|
51
56
|
### Ensure hooks existence
|
52
57
|
|
53
|
-
To ensure that hooks exists on `.git/hooks`, include
|
58
|
+
To ensure that hooks exists on `.git/hooks`, include the following line on your
|
59
|
+
application's start-up code (e.g. `config/environments/development.rb` or
|
60
|
+
`config/environments/test.rb` for a rails app).
|
54
61
|
|
55
62
|
```ruby
|
56
63
|
GitHooks.validate_hooks!
|
57
64
|
```
|
58
65
|
|
59
|
-
on your application's start up (e.g. `config/environments/development.rb` or
|
60
|
-
`config/environments/test.rb` for a rails app).
|
61
|
-
|
62
66
|
This will force `git_hooks` installation before your application's start.
|
63
67
|
|
64
68
|
## Contributing
|
data/Rakefile
ADDED
data/git_hooks.yml.example
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
---
|
2
2
|
pre_commits:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
GitHooks::PreCommit::TrailingWhitespace:
|
4
|
+
GitHooks::PreCommit::PreventDebugger:
|
5
|
+
GitHooks::PreCommit::PreventMaster:
|
6
|
+
GitHooks::PreCommit::Rubocop:
|
7
|
+
use_stash: false
|
8
|
+
GitHooks::PreCommit::Rspec:
|
data/hook.sample
CHANGED
data/lib/git-hooks.rb
CHANGED
@@ -24,9 +24,10 @@ module GitHooks
|
|
24
24
|
attr_writer :configurations
|
25
25
|
|
26
26
|
def execute_pre_commits
|
27
|
-
configurations.pre_commits.each do |pre_commit|
|
27
|
+
configurations.pre_commits.each do |pre_commit, options|
|
28
28
|
puts "Executing #{pre_commit}"
|
29
|
-
GitHooks::PreCommit.const_get(pre_commit)
|
29
|
+
pre_commit_checker = GitHooks::PreCommit.const_get(pre_commit)
|
30
|
+
pre_commit_checker.validate(options)
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
@@ -54,3 +55,19 @@ module GitHooks
|
|
54
55
|
end
|
55
56
|
end
|
56
57
|
end
|
58
|
+
|
59
|
+
# TODO: Fix this in the ruby-git gem.
|
60
|
+
|
61
|
+
# Since the `Git` gem does not provide us with an api that allows you to use the
|
62
|
+
# '--keep-index' option when stashing, we are stuck with this monkey patch.
|
63
|
+
module Git
|
64
|
+
class Lib
|
65
|
+
def stash_pop(_ = nil)
|
66
|
+
command('stash pop')
|
67
|
+
end
|
68
|
+
|
69
|
+
def stash_save(message)
|
70
|
+
command('stash save', ['--keep-index', message])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
module GitHooks
|
2
2
|
module PreCommit
|
3
3
|
class Rspec
|
4
|
-
|
5
|
-
|
6
|
-
def self.validate
|
4
|
+
def self.validate(*)
|
7
5
|
new(
|
8
|
-
GitHooks.configurations.git_repository,
|
6
|
+
GitHooks.configurations.git_repository,
|
7
|
+
RspecExecutor.new
|
9
8
|
).validate
|
10
9
|
end
|
11
10
|
|
12
11
|
def initialize(git_repository, rspec_executor)
|
13
|
-
@git_repository
|
12
|
+
@git_repository = git_repository
|
13
|
+
@rspec_executor = rspec_executor
|
14
14
|
end
|
15
15
|
|
16
16
|
def validate
|
@@ -18,6 +18,10 @@ module GitHooks
|
|
18
18
|
|
19
19
|
abort 'Prevented broken commit' if rspec_executor.errors?
|
20
20
|
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
attr_reader :git_repository, :rspec_executor
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
@@ -1,32 +1,73 @@
|
|
1
1
|
module GitHooks
|
2
2
|
module PreCommit
|
3
3
|
class Rubocop
|
4
|
-
|
4
|
+
RUBOCOP_STASH_NAME = 'rubocop-stash'
|
5
5
|
|
6
|
-
def self.validate
|
6
|
+
def self.validate(options = {})
|
7
7
|
new(
|
8
|
-
GitHooks.configurations.git_repository,
|
8
|
+
GitHooks.configurations.git_repository,
|
9
|
+
RubocopValidator.new,
|
10
|
+
options
|
9
11
|
).validate
|
10
12
|
end
|
11
13
|
|
12
|
-
def initialize(
|
13
|
-
@
|
14
|
+
def initialize(git, rubocop_validator, options = {})
|
15
|
+
@git = git
|
16
|
+
@rubocop_validator = rubocop_validator
|
17
|
+
@options = options
|
14
18
|
end
|
15
19
|
|
16
20
|
def validate
|
17
21
|
abort 'Check rubocop offences' if offences?
|
18
22
|
end
|
19
23
|
|
24
|
+
protected
|
25
|
+
|
26
|
+
attr_reader :git, :rubocop_validator, :options
|
27
|
+
|
20
28
|
private
|
21
29
|
|
22
30
|
def changed_files
|
23
|
-
|
31
|
+
git
|
24
32
|
.added_or_modified
|
25
|
-
.select
|
33
|
+
.select(&ruby_files)
|
26
34
|
end
|
27
35
|
|
28
36
|
def offences?
|
29
|
-
rubocop_validator.errors?(changed_files)
|
37
|
+
stash_me_maybe { rubocop_validator.errors?(changed_files) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def ruby_files
|
41
|
+
-> (file) { File.extname(file) == '.rb' }
|
42
|
+
end
|
43
|
+
|
44
|
+
def stash_me_maybe(&blk)
|
45
|
+
return yield unless stash_around?
|
46
|
+
|
47
|
+
stash_around(&blk)
|
48
|
+
end
|
49
|
+
|
50
|
+
def stash_around
|
51
|
+
git.repository.lib.stash_save(RUBOCOP_STASH_NAME)
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
git.repository.lib.stash_pop(rubocop_stash_id) if rubocop_stash?
|
55
|
+
end
|
56
|
+
|
57
|
+
def stash_around?
|
58
|
+
options['use_stash']
|
59
|
+
end
|
60
|
+
|
61
|
+
def rubocop_stash?
|
62
|
+
rubocop_stash_id
|
63
|
+
end
|
64
|
+
|
65
|
+
def rubocop_stash_id
|
66
|
+
Array(
|
67
|
+
git.repository.lib
|
68
|
+
.stashes_all
|
69
|
+
.rassoc(RUBOCOP_STASH_NAME)
|
70
|
+
).first
|
30
71
|
end
|
31
72
|
end
|
32
73
|
end
|
data/lib/git_hooks/version.rb
CHANGED
data/spec/fixtures/git_hooks.yml
CHANGED
@@ -0,0 +1,121 @@
|
|
1
|
+
describe GitHooks do
|
2
|
+
subject(:git_hooks) { described_class }
|
3
|
+
|
4
|
+
let(:configs) do
|
5
|
+
GitHooks::Configurations.new(config_file: config_file)
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:config_file) do
|
9
|
+
GitHooks::ConfigFile.new(fixture_path('git_hooks.yml'))
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
GitHooks.configurations = configs
|
14
|
+
allow($stdout).to receive(:write)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#validate_hooks!' do
|
18
|
+
subject { -> { git_hooks.validate_hooks! } }
|
19
|
+
|
20
|
+
let(:installed?) { true }
|
21
|
+
let(:installer) { instance_double(GitHooks::Installer) }
|
22
|
+
|
23
|
+
before do
|
24
|
+
allow(GitHooks::Installer)
|
25
|
+
.to receive(:new)
|
26
|
+
.with(GitHooks::PRE_COMMIT)
|
27
|
+
.and_return(installer)
|
28
|
+
end
|
29
|
+
|
30
|
+
before do
|
31
|
+
allow(installer).to receive(:installed?).and_return(installed?)
|
32
|
+
end
|
33
|
+
|
34
|
+
it { is_expected.to_not raise_error }
|
35
|
+
|
36
|
+
context 'but without pre-commit installed' do
|
37
|
+
let(:installed?) { false }
|
38
|
+
|
39
|
+
let(:message) do
|
40
|
+
"Please install pre-commit hook with `git_hooks install pre-commit'"
|
41
|
+
end
|
42
|
+
|
43
|
+
it do
|
44
|
+
is_expected.to raise_error(GitHooks::Exceptions::MissingHook, message)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.base_path' do
|
50
|
+
subject { described_class.base_path }
|
51
|
+
|
52
|
+
it "has gem's root path" do
|
53
|
+
is_expected.to eq(
|
54
|
+
File.absolute_path(
|
55
|
+
File.join(File.expand_path(__FILE__), '..', '..')
|
56
|
+
)
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '.configurations' do
|
62
|
+
subject(:configurations) { described_class.configurations }
|
63
|
+
|
64
|
+
before { GitHooks.configurations = nil }
|
65
|
+
|
66
|
+
let(:configs) { double(:probe) }
|
67
|
+
|
68
|
+
it 'creates with default params' do
|
69
|
+
expect(GitHooks::Configurations)
|
70
|
+
.to receive(:new)
|
71
|
+
.with(no_args)
|
72
|
+
.and_return(configs)
|
73
|
+
|
74
|
+
is_expected.to eq(configs)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'configurations=' do
|
79
|
+
subject { -> { GitHooks.configurations = configs } }
|
80
|
+
|
81
|
+
let!(:configs) { double(:probe) }
|
82
|
+
|
83
|
+
before { GitHooks.configurations = nil }
|
84
|
+
after { GitHooks.configurations = nil }
|
85
|
+
|
86
|
+
it 'updates configurations' do
|
87
|
+
is_expected.to change { GitHooks.configurations }.to(configs)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#execute_pre_commits' do
|
92
|
+
subject(:execute_pre_commits) { GitHooks.execute_pre_commits }
|
93
|
+
|
94
|
+
let(:rubocop_options) do
|
95
|
+
{ 'use_stash' => true }
|
96
|
+
end
|
97
|
+
|
98
|
+
before do
|
99
|
+
allow(GitHooks::PreCommit::Rspec).to receive(:validate)
|
100
|
+
allow(GitHooks::PreCommit::Rubocop).to receive(:validate)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'instantiates each pre commit' do
|
104
|
+
expect(GitHooks::PreCommit).to receive(:const_get)
|
105
|
+
.with('Rubocop').and_call_original
|
106
|
+
expect(GitHooks::PreCommit).to receive(:const_get)
|
107
|
+
.with('Rspec').and_call_original
|
108
|
+
|
109
|
+
execute_pre_commits
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'validates the hook, passing its options when available' do
|
113
|
+
expect(GitHooks::PreCommit::Rubocop).to receive(:validate)
|
114
|
+
.with(rubocop_options)
|
115
|
+
expect(GitHooks::PreCommit::Rspec).to receive(:validate)
|
116
|
+
.with(nil)
|
117
|
+
|
118
|
+
execute_pre_commits
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -4,7 +4,12 @@ module GitHooks
|
|
4
4
|
|
5
5
|
let(:path) { 'some-not-existent-file' }
|
6
6
|
let(:content) { { 'pre_commits' => pre_commits } }
|
7
|
-
let(:pre_commits)
|
7
|
+
let(:pre_commits) do
|
8
|
+
{
|
9
|
+
'Rubocop' => { 'use_stash' => true },
|
10
|
+
'Rspec' => nil
|
11
|
+
}
|
12
|
+
end
|
8
13
|
|
9
14
|
describe '#pre_commits' do
|
10
15
|
subject { config.pre_commits }
|
@@ -12,11 +17,11 @@ module GitHooks
|
|
12
17
|
let(:path) { fixture_path('git_hooks.yml') }
|
13
18
|
|
14
19
|
it 'has the pre commits specified on hook file' do
|
15
|
-
is_expected.to eq(
|
20
|
+
is_expected.to eq(pre_commits)
|
16
21
|
end
|
17
22
|
|
18
23
|
context 'when the given file does not exist' do
|
19
|
-
let(:path) { 'some-
|
24
|
+
let(:path) { 'some-non-existing-file' }
|
20
25
|
|
21
26
|
it { is_expected.to eq([]) }
|
22
27
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module GitHooks
|
2
2
|
module PreCommit
|
3
3
|
describe Rspec do
|
4
|
-
subject(:rspec) { described_class.new
|
4
|
+
subject(:rspec) { described_class.new(git_repository, rspec_executor) }
|
5
5
|
|
6
6
|
let(:git_repository) do
|
7
7
|
instance_double(GitHooks::Git, clean?: clean?)
|
@@ -44,6 +44,44 @@ module GitHooks
|
|
44
44
|
|
45
45
|
it { expect(-> { validate }).to_not raise_error }
|
46
46
|
end
|
47
|
+
|
48
|
+
context 'with stash option' do
|
49
|
+
let(:rubocop) do
|
50
|
+
described_class.new(
|
51
|
+
git_repository, rubocop_validator, 'use_stash' => true
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
let(:repository) { instance_double(::Git::Base) }
|
56
|
+
let(:lib) { instance_double(::Git::Lib) }
|
57
|
+
|
58
|
+
before do
|
59
|
+
allow(repository).to receive(:lib).and_return(lib)
|
60
|
+
allow(git_repository).to receive(:repository).and_return(repository)
|
61
|
+
allow(lib).to receive(:stash_save).and_return(true)
|
62
|
+
allow(lib).to receive(:stash_pop).and_return(true)
|
63
|
+
allow(lib).to receive(:stashes_all).and_return([[0, 'rubocop-stash']])
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'stashes working directory changes and reapplies them' do
|
67
|
+
expect(lib).to receive(:stash_save).with('rubocop-stash')
|
68
|
+
expect(lib).to receive(:stash_pop)
|
69
|
+
|
70
|
+
expect(-> { validate }).not_to raise_error
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with validation error' do
|
74
|
+
let(:errors?) { true }
|
75
|
+
|
76
|
+
it 'stashes working directory changes and reapplies them' do
|
77
|
+
expect(lib).to receive(:stash_save).with('rubocop-stash')
|
78
|
+
expect(lib).to receive(:stash_pop)
|
79
|
+
|
80
|
+
expect(-> { validate }).to raise_error(SystemExit)
|
81
|
+
.and output("Check rubocop offences\n").to_stderr
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
47
85
|
end
|
48
86
|
|
49
87
|
describe '.validate' do
|
@@ -62,7 +100,7 @@ module GitHooks
|
|
62
100
|
end
|
63
101
|
|
64
102
|
it 'creates object with git_repository and rubocop_validator' do
|
65
|
-
expect(Rubocop).to receive(:new).with(git, rubocop_validator)
|
103
|
+
expect(Rubocop).to receive(:new).with(git, rubocop_validator, {})
|
66
104
|
|
67
105
|
validate
|
68
106
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-hooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael da Silva Almeida
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -130,6 +130,7 @@ executables:
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
+
- ".git_hooks.yml"
|
133
134
|
- ".gitignore"
|
134
135
|
- ".rspec"
|
135
136
|
- ".rubocop.yml"
|
@@ -138,6 +139,7 @@ files:
|
|
138
139
|
- CHANGELOG
|
139
140
|
- Gemfile
|
140
141
|
- README.md
|
142
|
+
- Rakefile
|
141
143
|
- bin/git_hooks
|
142
144
|
- git-hooks.gemspec
|
143
145
|
- git_hooks.yml.example
|
@@ -162,6 +164,7 @@ files:
|
|
162
164
|
- lib/git_hooks/trailing_whitespace_validator.rb
|
163
165
|
- lib/git_hooks/version.rb
|
164
166
|
- spec/fixtures/git_hooks.yml
|
167
|
+
- spec/git-hooks_spec.rb
|
165
168
|
- spec/git_hooks/config_file_spec.rb
|
166
169
|
- spec/git_hooks/configurations_spec.rb
|
167
170
|
- spec/git_hooks/git_spec.rb
|
@@ -174,7 +177,6 @@ files:
|
|
174
177
|
- spec/git_hooks/rspec_executor_spec.rb
|
175
178
|
- spec/git_hooks/rubocop_validator_spec.rb
|
176
179
|
- spec/git_hooks/trailing_space_validator.rb
|
177
|
-
- spec/git_hooks_spec.rb
|
178
180
|
- spec/spec_helper.rb
|
179
181
|
homepage: http://github.com/stupied4ever/ruby-git-hooks
|
180
182
|
licenses:
|
@@ -202,6 +204,7 @@ specification_version: 4
|
|
202
204
|
summary: Help to keep git hooks organized.
|
203
205
|
test_files:
|
204
206
|
- spec/fixtures/git_hooks.yml
|
207
|
+
- spec/git-hooks_spec.rb
|
205
208
|
- spec/git_hooks/config_file_spec.rb
|
206
209
|
- spec/git_hooks/configurations_spec.rb
|
207
210
|
- spec/git_hooks/git_spec.rb
|
@@ -214,6 +217,5 @@ test_files:
|
|
214
217
|
- spec/git_hooks/rspec_executor_spec.rb
|
215
218
|
- spec/git_hooks/rubocop_validator_spec.rb
|
216
219
|
- spec/git_hooks/trailing_space_validator.rb
|
217
|
-
- spec/git_hooks_spec.rb
|
218
220
|
- spec/spec_helper.rb
|
219
221
|
has_rdoc:
|
data/spec/git_hooks_spec.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
describe GitHooks do
|
2
|
-
describe '#validate_hooks!' do
|
3
|
-
subject { -> { described_class.validate_hooks! } }
|
4
|
-
|
5
|
-
before do
|
6
|
-
allow(GitHooks::Installer)
|
7
|
-
.to receive(:new)
|
8
|
-
.with(GitHooks::PRE_COMMIT)
|
9
|
-
.and_return(installer)
|
10
|
-
|
11
|
-
GitHooks.configurations = configs
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:configs) do
|
15
|
-
GitHooks::Configurations.new(config_file: config_file)
|
16
|
-
end
|
17
|
-
|
18
|
-
let(:config_file) do
|
19
|
-
GitHooks::ConfigFile.new(fixture_path('git_hooks.yml'))
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:installed?) { true }
|
23
|
-
let(:installer) { instance_double(GitHooks::Installer) }
|
24
|
-
|
25
|
-
before do
|
26
|
-
allow(installer).to receive(:installed?).and_return(installed?)
|
27
|
-
end
|
28
|
-
|
29
|
-
it { is_expected.to_not raise_error }
|
30
|
-
|
31
|
-
context 'but without pre-commit installed' do
|
32
|
-
let(:installed?) { false }
|
33
|
-
|
34
|
-
let(:message) do
|
35
|
-
"Please install pre-commit hook with `git_hooks install pre-commit'"
|
36
|
-
end
|
37
|
-
|
38
|
-
it do
|
39
|
-
is_expected.to raise_error(GitHooks::Exceptions::MissingHook, message)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '.base_path' do
|
45
|
-
subject { described_class.base_path }
|
46
|
-
|
47
|
-
it "has gem's root path" do
|
48
|
-
is_expected.to eq(
|
49
|
-
File.absolute_path(
|
50
|
-
File.join(File.expand_path(__FILE__), '..', '..')
|
51
|
-
)
|
52
|
-
)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '.configurations' do
|
57
|
-
subject(:configurations) { described_class.configurations }
|
58
|
-
|
59
|
-
before { GitHooks.configurations = nil }
|
60
|
-
|
61
|
-
let(:configs) { instance_double(GitHooks::Configurations) }
|
62
|
-
|
63
|
-
it 'creates with default params' do
|
64
|
-
expect(GitHooks::Configurations)
|
65
|
-
.to receive(:new)
|
66
|
-
.with(no_args)
|
67
|
-
.and_return(configs)
|
68
|
-
|
69
|
-
is_expected.to eq(configs)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe 'configurations=' do
|
74
|
-
subject(:set_configurations) { GitHooks.configurations = configs }
|
75
|
-
|
76
|
-
let(:configs) { instance_double(GitHooks::Configurations) }
|
77
|
-
|
78
|
-
before do
|
79
|
-
GitHooks.configurations = nil
|
80
|
-
allow(GitHooks::Configurations).to receive(:new).and_return(nil)
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'updates configurations' do
|
84
|
-
expect { set_configurations }.to change {
|
85
|
-
GitHooks.configurations
|
86
|
-
}.to(configs)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|