sprinkle 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.markdown +6 -5
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/bin/sprinkle +5 -0
- data/lib/sprinkle.rb +7 -1
- data/lib/sprinkle/actors/ssh.rb +71 -17
- data/lib/sprinkle/actors/vlad.rb +11 -6
- data/lib/sprinkle/installers/binary.rb +1 -1
- data/lib/sprinkle/installers/deb.rb +4 -1
- data/lib/sprinkle/installers/freebsd_portinstall.rb +1 -1
- data/lib/sprinkle/installers/install_package.rb +79 -0
- data/lib/sprinkle/installers/push_text.rb +1 -1
- data/lib/sprinkle/installers/replace_text.rb +45 -0
- data/lib/sprinkle/installers/runner.rb +18 -0
- data/lib/sprinkle/installers/smart.rb +29 -0
- data/lib/sprinkle/installers/source.rb +10 -6
- data/lib/sprinkle/installers/transfer.rb +18 -4
- data/lib/sprinkle/installers/user.rb +15 -0
- data/lib/sprinkle/installers/zypper.rb +43 -0
- data/lib/sprinkle/package.rb +15 -0
- data/lib/sprinkle/verifiers/apt.rb +21 -0
- data/lib/sprinkle/verifiers/file.rb +9 -1
- data/lib/sprinkle/verifiers/package.rb +26 -0
- data/lib/sprinkle/verifiers/process.rb +2 -2
- data/lib/sprinkle/verifiers/ruby.rb +2 -2
- data/lib/sprinkle/verify.rb +2 -2
- data/spec/sprinkle/installers/push_text_spec.rb +4 -4
- data/spec/sprinkle/installers/replace_text_spec.rb +45 -0
- data/spec/sprinkle/installers/runner_spec.rb +31 -0
- data/spec/sprinkle/installers/source_spec.rb +8 -8
- data/spec/sprinkle/installers/zypper_spec.rb +49 -0
- data/spec/sprinkle/package_spec.rb +8 -0
- data/spec/sprinkle/verify_spec.rb +37 -38
- metadata +72 -21
@@ -339,7 +339,7 @@ describe Sprinkle::Installers::Source do
|
|
339
339
|
|
340
340
|
it 'should support zip archives' do
|
341
341
|
@installer.source = 'blah.zip'
|
342
|
-
@extraction = 'unzip'
|
342
|
+
@extraction = 'unzip -o'
|
343
343
|
end
|
344
344
|
|
345
345
|
after do
|
@@ -347,25 +347,25 @@ describe Sprinkle::Installers::Source do
|
|
347
347
|
end
|
348
348
|
|
349
349
|
end
|
350
|
-
|
350
|
+
|
351
351
|
describe 'base dir calculation' do
|
352
|
-
|
352
|
+
|
353
353
|
%w( tar tar.gz tgz tar.bz2 tb2 zip ).each do |archive|
|
354
|
-
|
354
|
+
|
355
355
|
it "should recognize #{archive} style archives" do
|
356
356
|
@installer.source = "blah.#{archive}"
|
357
357
|
@installer.send(:base_dir).should == 'blah'
|
358
358
|
end
|
359
|
-
|
359
|
+
|
360
360
|
end
|
361
|
-
|
361
|
+
|
362
362
|
# def base_dir #:nodoc:
|
363
363
|
# if archive_name.split('/').last =~ /(.*)\.(tar\.gz|tgz|tar\.bz2|tar|tb2)/
|
364
364
|
# return $1
|
365
365
|
# end
|
366
366
|
# raise "Unknown base path for source archive: #{@source}, please update code knowledge"
|
367
|
-
# end
|
368
|
-
|
367
|
+
# end
|
368
|
+
|
369
369
|
end
|
370
370
|
|
371
371
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe Sprinkle::Installers::Zypper do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@package = mock(Sprinkle::Package, :name => 'package')
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_zypper(*packages, &block)
|
10
|
+
Sprinkle::Installers::Zypper.new(@package, *packages, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'when created' do
|
14
|
+
|
15
|
+
it 'should accept a single package to install' do
|
16
|
+
@installer = create_zypper 'ruby'
|
17
|
+
@installer.packages.should == [ 'ruby' ]
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should accept an array of packages to install' do
|
21
|
+
@installer = create_zypper %w( gcc gdb g++ )
|
22
|
+
@installer.packages.should == ['gcc', 'gdb', 'g++']
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should accept an argument list of packages to install' do
|
26
|
+
@installer = create_zypper "gcc", "gdb", "g++"
|
27
|
+
@installer.packages.should == ['gcc', 'gdb', 'g++']
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'during installation' do
|
32
|
+
|
33
|
+
before do
|
34
|
+
@installer = create_zypper 'ruby', 'rubygems' do
|
35
|
+
pre :install, 'op1'
|
36
|
+
post :install, 'op2'
|
37
|
+
end
|
38
|
+
@install_commands = @installer.send :install_commands
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should invoke the zypper installer for all specified packages' do
|
42
|
+
@install_commands.should =~ /zypper -n install -l -R ruby rubygems/
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should automatically insert pre/post commands for the specified package' do
|
46
|
+
@installer.send(:install_sequence).should == [ 'op1', 'zypper -n install -l -R ruby rubygems', 'op2' ]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -160,6 +160,14 @@ CODE
|
|
160
160
|
pkg.installers[0].class.should == Sprinkle::Installers::Source
|
161
161
|
pkg.installers[1].class.should == Sprinkle::Installers::Gem
|
162
162
|
end
|
163
|
+
|
164
|
+
it 'should optionally accept a runner installer' do
|
165
|
+
pkg = package @name do
|
166
|
+
runner 'obscure_installer_by_custom_cmd'
|
167
|
+
end
|
168
|
+
pkg.should respond_to(:runner)
|
169
|
+
pkg.installers.first.class.should == Sprinkle::Installers::Runner
|
170
|
+
end
|
163
171
|
end
|
164
172
|
|
165
173
|
describe 'with a source installer' do
|
@@ -8,35 +8,35 @@ describe Sprinkle::Verify do
|
|
8
8
|
verify 'moo' do
|
9
9
|
# Check a file exists
|
10
10
|
has_file 'my_file.txt'
|
11
|
-
|
11
|
+
|
12
12
|
# Check that a file contains a substring
|
13
13
|
file_contains 'my_file.txt', 'A sunny day on the lower east-side'
|
14
|
-
|
14
|
+
|
15
15
|
# Check a directory exists
|
16
16
|
has_directory 'mydir'
|
17
|
-
|
17
|
+
|
18
18
|
# Check a symlink exists
|
19
19
|
has_symlink 'mypointer'
|
20
|
-
|
20
|
+
|
21
21
|
# Check a symlink points to a certain file
|
22
22
|
has_symlink 'mypointer', 'myfile'
|
23
|
-
|
23
|
+
|
24
24
|
# Check if an executable exists
|
25
25
|
has_executable '/usr/bin/ruby'
|
26
|
-
|
26
|
+
|
27
27
|
# Check if a global executable exists (in PATH)
|
28
28
|
has_executable 'rails'
|
29
|
-
|
29
|
+
|
30
30
|
# Check for a process
|
31
31
|
has_process 'httpd'
|
32
|
-
|
32
|
+
|
33
33
|
# Check that ruby can include files
|
34
34
|
ruby_can_load 'a', 'b', 'c'
|
35
|
-
|
35
|
+
|
36
36
|
# Check that a gem exists
|
37
37
|
has_gem 'rails'
|
38
38
|
has_gem 'rails', '2.1.0'
|
39
|
-
|
39
|
+
|
40
40
|
# Check for a certain RPM package
|
41
41
|
has_rpm 'ntp'
|
42
42
|
end
|
@@ -45,88 +45,87 @@ describe Sprinkle::Verify do
|
|
45
45
|
@delivery = mock(Sprinkle::Deployment, :process => true)
|
46
46
|
@verification.delivery = @delivery
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
describe 'when created' do
|
50
50
|
it 'should raise error without a block' do
|
51
51
|
lambda { Verify.new(nil, '') }.should raise_error
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
describe 'with checks' do
|
56
56
|
it 'should do a "test -f" on the has_file check' do
|
57
57
|
@verification.commands.should include('test -f my_file.txt')
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
it 'should do a grep to see if a file contains a text string' do
|
61
61
|
@verification.commands.should include("grep 'A sunny day on the lower east-side' my_file.txt")
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
it 'should do a "test -d" on the has_directory check' do
|
65
65
|
@verification.commands.should include('test -d mydir')
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
it 'should do a "test -L" to check something is a symbolic link' do
|
69
69
|
@verification.commands.should include('test -L mypointer')
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
it 'should do a test equality to check a symlink points to a specific file' do
|
73
73
|
@verification.commands.should include("test 'myfile' = `readlink mypointer`")
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
it 'should do a "test -x" to check for an executable' do
|
77
77
|
@verification.commands.should include("test -x /usr/bin/ruby")
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
it 'should test the "which" command to look for a global executable' do
|
81
81
|
@verification.commands.should include('[ -n "`echo \`which rails\``" ]')
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
it 'should test the process list to find a process' do
|
85
|
-
@verification.commands.should include("ps
|
85
|
+
@verification.commands.should include("ps -C httpd")
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
it 'should check if ruby can include a, b, c' do
|
89
89
|
@verification.commands.should include("ruby -e \"require 'rubygems';require 'a';require 'b';require 'c'\"")
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
it 'should check that a ruby gem is installed' do
|
93
|
-
@verification.commands.should include("sudo gem list
|
94
|
-
@verification.commands.should include("sudo gem list | grep -e '^rails (.*2\\.1\\.0.*)$'")
|
93
|
+
@verification.commands.should include("sudo gem list 'rails' --installed --version '2.1.0' > /dev/null")
|
95
94
|
end
|
96
|
-
|
95
|
+
|
97
96
|
it 'should check that an RPM is installed' do
|
98
97
|
@verification.commands.should include("rpm -qa | grep ntp")
|
99
98
|
end
|
100
99
|
end
|
101
|
-
|
100
|
+
|
102
101
|
describe 'with configurations' do
|
103
102
|
# Make sure it includes Sprinkle::Configurable
|
104
103
|
it 'should respond to configurable methods' do
|
105
104
|
@verification.should respond_to(:defaults)
|
106
105
|
end
|
107
|
-
|
106
|
+
|
108
107
|
it 'should default padding option to 4' do
|
109
108
|
@verification.padding.should eql(4)
|
110
109
|
end
|
111
110
|
end
|
112
|
-
|
111
|
+
|
113
112
|
describe 'with process' do
|
114
113
|
it 'should raise an error when no delivery mechanism is set' do
|
115
114
|
@verification.instance_variable_set(:@delivery, nil)
|
116
115
|
lambda { @verification.process([]) }.should raise_error
|
117
116
|
end
|
118
|
-
|
117
|
+
|
119
118
|
describe 'when not testing' do
|
120
119
|
before do
|
121
120
|
# To be explicit
|
122
121
|
Sprinkle::OPTIONS[:testing] = false
|
123
122
|
end
|
124
|
-
|
123
|
+
|
125
124
|
it 'should call process on the delivery with the correct parameters' do
|
126
125
|
@delivery.should_receive(:process).with(@name, @verification.commands, [:app], true).once.and_return(true)
|
127
126
|
@verification.process([:app])
|
128
127
|
end
|
129
|
-
|
128
|
+
|
130
129
|
it 'should raise Sprinkle::VerificationFailed exception when commands fail' do
|
131
130
|
@delivery.should_receive(:process).once.and_return(false)
|
132
131
|
lambda { @verification.process([:app]) }.should raise_error(Sprinkle::VerificationFailed) do |error|
|
@@ -135,13 +134,13 @@ describe Sprinkle::Verify do
|
|
135
134
|
end
|
136
135
|
end
|
137
136
|
end
|
138
|
-
|
137
|
+
|
139
138
|
describe 'when testing' do
|
140
139
|
before do
|
141
140
|
Sprinkle::OPTIONS[:testing] = true
|
142
141
|
@logger = mock(ActiveSupport::BufferedLogger, :debug => true, :debug? => true)
|
143
142
|
end
|
144
|
-
|
143
|
+
|
145
144
|
it 'should not call process on the delivery' do
|
146
145
|
@delivery.should_not_receive(:process)
|
147
146
|
end
|
@@ -149,26 +148,26 @@ describe Sprinkle::Verify do
|
|
149
148
|
it 'should print the install sequence to the console' do
|
150
149
|
@verification.should_receive(:logger).twice.and_return(@logger)
|
151
150
|
end
|
152
|
-
|
151
|
+
|
153
152
|
after do
|
154
153
|
@verification.process([:app])
|
155
154
|
Sprinkle::OPTIONS[:testing] = false
|
156
155
|
end
|
157
156
|
end
|
158
157
|
end
|
159
|
-
|
158
|
+
|
160
159
|
describe 'with registering new verification modules' do
|
161
160
|
module MyModule
|
162
161
|
def rawr; end
|
163
162
|
end
|
164
|
-
|
163
|
+
|
165
164
|
it 'should not respond to rawr initially' do
|
166
165
|
@verification.should_not respond_to(:rawr)
|
167
166
|
end
|
168
|
-
|
167
|
+
|
169
168
|
it 'should respond to rawr after registering the module' do
|
170
169
|
Sprinkle::Verify.register(MyModule)
|
171
170
|
@verification.should respond_to(:rawr)
|
172
171
|
end
|
173
172
|
end
|
174
|
-
end
|
173
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprinkle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 2
|
10
|
+
version: 0.3.2
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Marcus Crafter
|
@@ -9,49 +15,73 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-12-11 00:00:00 +11:00
|
13
19
|
default_executable: sprinkle
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 2
|
33
|
+
- 9
|
23
34
|
version: 1.2.9
|
24
|
-
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: activesupport
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
43
|
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 11
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 0
|
49
|
+
- 2
|
33
50
|
version: 2.0.2
|
34
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
35
53
|
- !ruby/object:Gem::Dependency
|
36
54
|
name: highline
|
37
|
-
|
38
|
-
|
39
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
40
58
|
requirements:
|
41
59
|
- - ">="
|
42
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 7
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 4
|
65
|
+
- 0
|
43
66
|
version: 1.4.0
|
44
|
-
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
45
69
|
- !ruby/object:Gem::Dependency
|
46
70
|
name: capistrano
|
47
|
-
|
48
|
-
|
49
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
50
74
|
requirements:
|
51
75
|
- - ">="
|
52
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 17
|
78
|
+
segments:
|
79
|
+
- 2
|
80
|
+
- 5
|
81
|
+
- 5
|
53
82
|
version: 2.5.5
|
54
|
-
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: *id004
|
55
85
|
description: Ruby DSL based software provisioning tool
|
56
86
|
email: crafterm@redartisan.com
|
57
87
|
executables:
|
@@ -110,6 +140,7 @@ files:
|
|
110
140
|
- lib/sprinkle/installers/freebsd_pkg.rb
|
111
141
|
- lib/sprinkle/installers/freebsd_portinstall.rb
|
112
142
|
- lib/sprinkle/installers/gem.rb
|
143
|
+
- lib/sprinkle/installers/install_package.rb
|
113
144
|
- lib/sprinkle/installers/installer.rb
|
114
145
|
- lib/sprinkle/installers/mac_port.rb
|
115
146
|
- lib/sprinkle/installers/noop.rb
|
@@ -117,16 +148,23 @@ files:
|
|
117
148
|
- lib/sprinkle/installers/opensolaris_pkg.rb
|
118
149
|
- lib/sprinkle/installers/push_text.rb
|
119
150
|
- lib/sprinkle/installers/rake.rb
|
151
|
+
- lib/sprinkle/installers/replace_text.rb
|
120
152
|
- lib/sprinkle/installers/rpm.rb
|
153
|
+
- lib/sprinkle/installers/runner.rb
|
154
|
+
- lib/sprinkle/installers/smart.rb
|
121
155
|
- lib/sprinkle/installers/source.rb
|
122
156
|
- lib/sprinkle/installers/transfer.rb
|
157
|
+
- lib/sprinkle/installers/user.rb
|
123
158
|
- lib/sprinkle/installers/yum.rb
|
159
|
+
- lib/sprinkle/installers/zypper.rb
|
124
160
|
- lib/sprinkle/package.rb
|
125
161
|
- lib/sprinkle/policy.rb
|
126
162
|
- lib/sprinkle/script.rb
|
163
|
+
- lib/sprinkle/verifiers/apt.rb
|
127
164
|
- lib/sprinkle/verifiers/directory.rb
|
128
165
|
- lib/sprinkle/verifiers/executable.rb
|
129
166
|
- lib/sprinkle/verifiers/file.rb
|
167
|
+
- lib/sprinkle/verifiers/package.rb
|
130
168
|
- lib/sprinkle/verifiers/process.rb
|
131
169
|
- lib/sprinkle/verifiers/rpm.rb
|
132
170
|
- lib/sprinkle/verifiers/ruby.rb
|
@@ -155,16 +193,20 @@ files:
|
|
155
193
|
- spec/sprinkle/installers/opensolaris_pkg_spec.rb
|
156
194
|
- spec/sprinkle/installers/push_text_spec.rb
|
157
195
|
- spec/sprinkle/installers/rake_spec.rb
|
196
|
+
- spec/sprinkle/installers/replace_text_spec.rb
|
158
197
|
- spec/sprinkle/installers/rpm_spec.rb
|
198
|
+
- spec/sprinkle/installers/runner_spec.rb
|
159
199
|
- spec/sprinkle/installers/source_spec.rb
|
160
200
|
- spec/sprinkle/installers/transfer_spec.rb
|
161
201
|
- spec/sprinkle/installers/yum_spec.rb
|
202
|
+
- spec/sprinkle/installers/zypper_spec.rb
|
162
203
|
- spec/sprinkle/package_spec.rb
|
163
204
|
- spec/sprinkle/policy_spec.rb
|
164
205
|
- spec/sprinkle/script_spec.rb
|
165
206
|
- spec/sprinkle/sprinkle_spec.rb
|
166
207
|
- spec/sprinkle/verify_spec.rb
|
167
208
|
- TODO
|
209
|
+
- spec/sprinkle/sequence_spec.rb
|
168
210
|
has_rdoc: true
|
169
211
|
homepage: http://github.com/crafterm/sprinkle
|
170
212
|
licenses: []
|
@@ -175,21 +217,27 @@ rdoc_options:
|
|
175
217
|
require_paths:
|
176
218
|
- lib
|
177
219
|
required_ruby_version: !ruby/object:Gem::Requirement
|
220
|
+
none: false
|
178
221
|
requirements:
|
179
222
|
- - ">="
|
180
223
|
- !ruby/object:Gem::Version
|
224
|
+
hash: 3
|
225
|
+
segments:
|
226
|
+
- 0
|
181
227
|
version: "0"
|
182
|
-
version:
|
183
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
229
|
+
none: false
|
184
230
|
requirements:
|
185
231
|
- - ">="
|
186
232
|
- !ruby/object:Gem::Version
|
233
|
+
hash: 3
|
234
|
+
segments:
|
235
|
+
- 0
|
187
236
|
version: "0"
|
188
|
-
version:
|
189
237
|
requirements: []
|
190
238
|
|
191
239
|
rubyforge_project: sprinkle
|
192
|
-
rubygems_version: 1.3.
|
240
|
+
rubygems_version: 1.3.7
|
193
241
|
signing_key:
|
194
242
|
specification_version: 3
|
195
243
|
summary: Ruby DSL based software provisioning tool
|
@@ -213,10 +261,13 @@ test_files:
|
|
213
261
|
- spec/sprinkle/installers/opensolaris_pkg_spec.rb
|
214
262
|
- spec/sprinkle/installers/push_text_spec.rb
|
215
263
|
- spec/sprinkle/installers/rake_spec.rb
|
264
|
+
- spec/sprinkle/installers/replace_text_spec.rb
|
216
265
|
- spec/sprinkle/installers/rpm_spec.rb
|
266
|
+
- spec/sprinkle/installers/runner_spec.rb
|
217
267
|
- spec/sprinkle/installers/source_spec.rb
|
218
268
|
- spec/sprinkle/installers/transfer_spec.rb
|
219
269
|
- spec/sprinkle/installers/yum_spec.rb
|
270
|
+
- spec/sprinkle/installers/zypper_spec.rb
|
220
271
|
- spec/sprinkle/package_spec.rb
|
221
272
|
- spec/sprinkle/policy_spec.rb
|
222
273
|
- spec/sprinkle/script_spec.rb
|