fail_fast 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +2 -0
- data/VERSION +1 -1
- data/fail_fast.gemspec +4 -2
- data/lib/fail_fast/base/messaging.rb +2 -1
- data/lib/fail_fast/extensions/check_active_record_db.rb +7 -6
- data/lib/fail_fast/extensions/check_email.rb +3 -3
- data/lib/fail_fast/extensions/check_file_system.rb +14 -12
- data/lib/fail_fast/extensions/check_is_on_path.rb +7 -9
- data/lib/fail_fast/extensions/check_mongo_db.rb +10 -9
- data/lib/fail_fast/extensions/check_url.rb +3 -4
- data/lib/fail_fast/extensions/check_value.rb +5 -4
- data/lib/fail_fast/support/error_db.rb +4 -0
- data/lib/fail_fast/support/error_details.rb +4 -4
- data/show_all_errors.rb +1 -1
- data/spec/base/error_details_spec.rb +11 -0
- data/spec/extensions/check_active_record_db_spec.rb +14 -0
- data/spec/extensions/check_email_spec.rb +9 -0
- data/spec/extensions/check_file_system_spec.rb +24 -0
- data/spec/extensions/check_is_on_path_spec.rb +9 -0
- data/spec/extensions/check_mongo_db_spec.rb +31 -0
- data/spec/extensions/check_url_spec.rb +10 -0
- data/spec/extensions/check_value_spec.rb +16 -0
- metadata +6 -4
data/CHANGELOG.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/fail_fast.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fail_fast}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alain Ravet"]
|
12
|
-
s.date = %q{2010-07-
|
12
|
+
s.date = %q{2010-07-28}
|
13
13
|
s.description = %q{raises an error if the yaml contents of a config file does not pass a test script.}
|
14
14
|
s.email = %q{alainravet@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -45,6 +45,7 @@ Gem::Specification.new do |s|
|
|
45
45
|
"lib/fail_fast/support/z_only_for_tests.rb",
|
46
46
|
"show_all_errors.rb",
|
47
47
|
"spec/base/base_commands_spec.rb",
|
48
|
+
"spec/base/error_details_spec.rb",
|
48
49
|
"spec/base/errors_storage_spec.rb",
|
49
50
|
"spec/base/file_is_empty_spec.rb",
|
50
51
|
"spec/base/file_is_missing_spec.rb",
|
@@ -71,6 +72,7 @@ Gem::Specification.new do |s|
|
|
71
72
|
s.summary = %q{raises an error if the yaml contents of a config file does pass a test script.}
|
72
73
|
s.test_files = [
|
73
74
|
"spec/base/base_commands_spec.rb",
|
75
|
+
"spec/base/error_details_spec.rb",
|
74
76
|
"spec/base/errors_storage_spec.rb",
|
75
77
|
"spec/base/file_is_empty_spec.rb",
|
76
78
|
"spec/base/file_is_missing_spec.rb",
|
@@ -10,7 +10,7 @@ class FailFast
|
|
10
10
|
else " #{qc_value} for the key #{qc_key}"
|
11
11
|
end
|
12
12
|
|
13
|
-
case e.kind
|
13
|
+
s = case e.kind
|
14
14
|
when :config_file_not_found then mcol("The config file could not be found") + " : #{yellow(e.value)}."
|
15
15
|
when :missing_value then mcol("Missing value") +" #{details}."
|
16
16
|
when :value_does_not_match then mcol("Invalid value") +" #{details}."
|
@@ -27,6 +27,7 @@ class FailFast
|
|
27
27
|
else
|
28
28
|
"%-38s %-35s %-30s \n" % [ e.kind, e.key, qc_value]
|
29
29
|
end
|
30
|
+
e.message ? "#{e.message}\n| #{s}": s
|
30
31
|
end
|
31
32
|
|
32
33
|
def mcol(msg) lred(msg) end
|
@@ -7,6 +7,7 @@ class FailFast
|
|
7
7
|
#
|
8
8
|
# Usage :
|
9
9
|
# has_active_record_db :host => 'localhost', :adapter => 'sqlite3', :database=> 'prod_db'
|
10
|
+
# has_active_record_db :host => 'localhost', :adapter => 'sqlite3', :database=> 'prod_db', :message => 'custom message'
|
10
11
|
#
|
11
12
|
def has_active_record_db(*params)
|
12
13
|
options = params.last.is_a?(Hash) ? params.pop : {}
|
@@ -19,7 +20,7 @@ class FailFast
|
|
19
20
|
@error_message = e.message
|
20
21
|
end
|
21
22
|
unless @success
|
22
|
-
add_error ErrorDetails.new(nil, :active_record_db_connection_error, @error_message)
|
23
|
+
add_error ErrorDetails.new(nil, :active_record_db_connection_error, @error_message, options[:message])
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
@@ -27,14 +28,14 @@ class FailFast
|
|
27
28
|
#
|
28
29
|
# Usage :
|
29
30
|
# has_active_record_db_for 'production/database'
|
31
|
+
# has_active_record_db_for 'production/database', :message => 'custom message'
|
30
32
|
#
|
31
33
|
def has_active_record_db_for(key, *params)
|
32
|
-
return unless has_value_for key
|
33
|
-
return unless has_value_for "#{key}/adapter"
|
34
|
-
return unless has_value_for "#{key}/database"
|
35
|
-
|
36
34
|
p = key_value_regexp_options(key, params)
|
37
35
|
key, options = p.key, p.options
|
36
|
+
return unless has_value_for key , :message => options[:message]
|
37
|
+
return unless has_value_for "#{key}/adapter" , :message => options[:message]
|
38
|
+
return unless has_value_for "#{key}/database", :message => options[:message]
|
38
39
|
|
39
40
|
begin
|
40
41
|
connection_options = p.value
|
@@ -46,7 +47,7 @@ class FailFast
|
|
46
47
|
@error_message = e.message
|
47
48
|
end
|
48
49
|
unless @success
|
49
|
-
add_error ErrorDetails.new(key, :active_record_db_connection_error, @error_message)
|
50
|
+
add_error ErrorDetails.new(key, :active_record_db_connection_error, @error_message, options[:message])
|
50
51
|
end
|
51
52
|
end
|
52
53
|
|
@@ -5,14 +5,14 @@ class FailFast
|
|
5
5
|
# has_email_for 'test/admin_email'
|
6
6
|
#
|
7
7
|
def has_email_for(key, *params)
|
8
|
-
return unless has_value_for key
|
9
|
-
|
10
8
|
p = key_value_regexp_options(key, params)
|
11
9
|
key, options = p.key, p.options
|
12
10
|
|
11
|
+
return unless has_value_for key, :message => options[:message]
|
12
|
+
|
13
13
|
value = value_for_deep_key(key)
|
14
14
|
if EmailValidator.invalid_email_address?(value)
|
15
|
-
add_error ErrorDetails.new(key, :not_an_email, value)
|
15
|
+
add_error ErrorDetails.new(key, :not_an_email, value, options[:message])
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -5,10 +5,11 @@ class FailFast
|
|
5
5
|
#
|
6
6
|
# Usage
|
7
7
|
# directory_exists '/tmp'
|
8
|
+
# directory_exists '/tmp', :message => 'custom message'
|
8
9
|
#
|
9
|
-
def directory_exists(path,
|
10
|
+
def directory_exists(path, options={})
|
10
11
|
unless File.exists?(path) && File.directory?(path)
|
11
|
-
add_error ErrorDetails.new(nil, :directory_not_found, path)
|
12
|
+
add_error ErrorDetails.new(nil, :directory_not_found, path, options[:message])
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
@@ -16,10 +17,11 @@ class FailFast
|
|
16
17
|
#
|
17
18
|
# Usage
|
18
19
|
# file_exists '~/.bash_profile'
|
20
|
+
# file_exists '~/.bash_profile', :message => 'custom message'
|
19
21
|
#
|
20
|
-
def file_exists(path,
|
22
|
+
def file_exists(path, options={})
|
21
23
|
unless File.exists?(path) && File.file?(path)
|
22
|
-
add_error ErrorDetails.new(nil, :file_not_found, path)
|
24
|
+
add_error ErrorDetails.new(nil, :file_not_found, path, options[:message])
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
@@ -27,17 +29,17 @@ class FailFast
|
|
27
29
|
#
|
28
30
|
# Usage
|
29
31
|
# directory_exists_for 'foo/config'
|
32
|
+
# directory_exists_for 'foo/config', :message => 'custom message'
|
30
33
|
#
|
31
34
|
def directory_exists_for(key, *params)
|
32
|
-
return unless has_value_for key
|
33
|
-
|
34
35
|
p = key_value_regexp_options(key, params)
|
35
36
|
key, options = p.key, p.options
|
36
37
|
|
37
|
-
|
38
|
+
return unless has_value_for key, :message => options[:message]
|
38
39
|
|
40
|
+
path = value_for_deep_key(key)
|
39
41
|
unless File.exists?(path) && File.directory?(path)
|
40
|
-
add_error ErrorDetails.new(key, :directory_not_found, p.value)
|
42
|
+
add_error ErrorDetails.new(key, :directory_not_found, p.value, options[:message])
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -45,17 +47,17 @@ class FailFast
|
|
45
47
|
#
|
46
48
|
# Usage
|
47
49
|
# file_exists_for 'foo/config/app.yml'
|
50
|
+
# file_exists_for 'foo/config/app.yml', :message => 'custom message'
|
48
51
|
#
|
49
52
|
def file_exists_for(key, *params)
|
50
|
-
return unless has_value_for key
|
51
|
-
|
52
53
|
p = key_value_regexp_options(key, params)
|
53
54
|
key, options = p.key, p.options
|
54
55
|
|
55
|
-
|
56
|
+
return unless has_value_for key, :message => options[:message]
|
56
57
|
|
58
|
+
path = value_for_deep_key(key)
|
57
59
|
unless File.exists?(path) && File.file?(path)
|
58
|
-
add_error ErrorDetails.new(key, :file_not_found, p.value)
|
60
|
+
add_error ErrorDetails.new(key, :file_not_found, p.value, options[:message])
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
@@ -5,10 +5,11 @@ class FailFast
|
|
5
5
|
#
|
6
6
|
# Usage
|
7
7
|
# is_on_path 'jruby'
|
8
|
+
# is_on_path 'jruby', :message => 'custom message'
|
8
9
|
#
|
9
|
-
def is_on_path(app,
|
10
|
+
def is_on_path(app, options = {})
|
10
11
|
unless found_on_the_path(app)
|
11
|
-
add_error ErrorDetails.new(nil, :not_on_path, app)
|
12
|
+
add_error ErrorDetails.new(nil, :not_on_path, app, options[:message])
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
@@ -16,17 +17,14 @@ class FailFast
|
|
16
17
|
#
|
17
18
|
# Usage
|
18
19
|
# is_on_path_for 'file_compressor'
|
20
|
+
# is_on_path_for 'file_compressor', :message => 'custom message'
|
19
21
|
#
|
20
|
-
def is_on_path_for(key,
|
21
|
-
return unless has_value_for key
|
22
|
-
|
23
|
-
p = key_value_regexp_options(key, params)
|
24
|
-
|
25
|
-
key = p.key
|
22
|
+
def is_on_path_for(key, options = {})
|
23
|
+
return unless has_value_for key, :message => options[:message]
|
26
24
|
app = value_for_deep_key(key)
|
27
25
|
|
28
26
|
unless found_on_the_path(app)
|
29
|
-
add_error ErrorDetails.new(key, :not_on_path, app)
|
27
|
+
add_error ErrorDetails.new(key, :not_on_path, app, options[:message])
|
30
28
|
end
|
31
29
|
end
|
32
30
|
|
@@ -5,8 +5,9 @@ class FailFast
|
|
5
5
|
#
|
6
6
|
# Usage :
|
7
7
|
# has_mongoDB 'localhost'
|
8
|
+
# has_mongoDB 'localhost', :message => 'custom message'
|
8
9
|
# has_mongoDB 'localhost', 'my_db', :port => 1234, :timeout => 2
|
9
|
-
# has_mongoDB 'localhost', :port => 1234, :timeout => 2
|
10
|
+
# has_mongoDB 'localhost', :port => 1234, :timeout => 2, :message => 'custom message'
|
10
11
|
#
|
11
12
|
def has_mongoDB(host, *params)
|
12
13
|
options = params.last.is_a?(Hash) ? params.pop : {}
|
@@ -16,12 +17,12 @@ class FailFast
|
|
16
17
|
port = options.delete(:port)
|
17
18
|
@conn = Mongo::Connection.new(host, port, options)
|
18
19
|
rescue Mongo::ConnectionFailure
|
19
|
-
add_error ErrorDetails.new(nil, :mongoDB_server_not_found, host)
|
20
|
+
add_error ErrorDetails.new(nil, :mongoDB_server_not_found, host, options[:message])
|
20
21
|
return
|
21
22
|
end
|
22
23
|
|
23
24
|
if db && !@conn.database_names.include?(db)
|
24
|
-
add_error ErrorDetails.new(nil, :mongoDB_db_not_found, db)
|
25
|
+
add_error ErrorDetails.new(nil, :mongoDB_db_not_found, db, options[:message])
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
@@ -32,12 +33,12 @@ class FailFast
|
|
32
33
|
# has_mongoDB_for 'test/unknown_mongoDB_db', :check_database => false
|
33
34
|
#
|
34
35
|
def has_mongoDB_for(key, *params)
|
35
|
-
return unless has_value_for key
|
36
|
-
return unless has_value_for "#{key}/host"
|
37
|
-
return unless has_value_for "#{key}/database"
|
38
|
-
|
39
36
|
p = key_value_regexp_options(key, params)
|
40
37
|
key, options = p.key, p.options
|
38
|
+
return unless has_value_for key , :message => options[:message]
|
39
|
+
return unless has_value_for "#{key}/host" , :message => options[:message]
|
40
|
+
return unless has_value_for "#{key}/database", :message => options[:message]
|
41
|
+
|
41
42
|
|
42
43
|
value = value_for_deep_key(key)
|
43
44
|
host, port, db = value['host'], value['port'], value['database']
|
@@ -45,13 +46,13 @@ class FailFast
|
|
45
46
|
begin
|
46
47
|
@conn = Mongo::Connection.new(host, port)
|
47
48
|
rescue Mongo::ConnectionFailure
|
48
|
-
add_error ErrorDetails.new(key, :mongoDB_server_not_found, host)
|
49
|
+
add_error ErrorDetails.new(key, :mongoDB_server_not_found, host, options[:message])
|
49
50
|
return
|
50
51
|
end
|
51
52
|
|
52
53
|
must_check_db = !(false == options[:check_database])
|
53
54
|
if must_check_db && !@conn.database_names.include?(db)
|
54
|
-
add_error ErrorDetails.new(key, :mongoDB_db_not_found, db)
|
55
|
+
add_error ErrorDetails.new(key, :mongoDB_db_not_found, db, options[:message])
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
@@ -11,18 +11,17 @@ class FailFast
|
|
11
11
|
# has_url_for 'test/server_url', :reachable => true, :may_add_trailing_slash => true
|
12
12
|
#
|
13
13
|
def has_url_for(key, *params)
|
14
|
-
return unless has_value_for key
|
15
|
-
|
16
14
|
p = key_value_regexp_options(key, params)
|
17
15
|
key, options = p.key, p.options
|
16
|
+
return unless has_value_for key, :message => options[:message]
|
18
17
|
|
19
18
|
value = value_for_deep_key(key)
|
20
19
|
if UrlValidator.invalid_url?(value)
|
21
|
-
add_error ErrorDetails.new(key, :not_a_url, value)
|
20
|
+
add_error ErrorDetails.new(key, :not_a_url, value, options[:message])
|
22
21
|
return
|
23
22
|
end
|
24
23
|
if true==options.delete(:reachable) && UrlValidator.unreachable_url?(value, options)
|
25
|
-
add_error ErrorDetails.new(key, :url_not_reachable, value)
|
24
|
+
add_error ErrorDetails.new(key, :url_not_reachable, value, options[:message])
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -27,17 +27,18 @@ class FailFast
|
|
27
27
|
key, options = p.key, p.options
|
28
28
|
|
29
29
|
nof_errors = errors.size
|
30
|
+
message = options[:message]
|
30
31
|
if blank?(p.value)
|
31
|
-
add_error ErrorDetails.new(key, :missing_value)
|
32
|
+
add_error ErrorDetails.new(key, :missing_value, nil, message)
|
32
33
|
|
33
34
|
elsif p.regexp
|
34
|
-
add_error ErrorDetails.new(key, :value_does_not_match, p.value) unless p.value =~ p.regexp
|
35
|
+
add_error ErrorDetails.new(key, :value_does_not_match, p.value, message) unless p.value =~ p.regexp
|
35
36
|
|
36
37
|
elsif options.is_a?(Hash) && options[:in].is_a?(Range)
|
37
|
-
add_error ErrorDetails.new(key, :value_not_in_range, p.value) unless options[:in].include?(p.value)
|
38
|
+
add_error ErrorDetails.new(key, :value_not_in_range, p.value, message) unless options[:in].include?(p.value)
|
38
39
|
|
39
40
|
elsif options.is_a?(Hash) && options[:in].is_a?(Array)
|
40
|
-
add_error ErrorDetails.new(key, :value_not_in_array, p.value) unless options[:in].include?(p.value)
|
41
|
+
add_error ErrorDetails.new(key, :value_not_in_array, p.value, message) unless options[:in].include?(p.value)
|
41
42
|
end
|
42
43
|
no_new_error = nof_errors == errors.size
|
43
44
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
class FailFast::ErrorDetails < Struct.new(:key, :kind, :value)
|
1
|
+
class FailFast::ErrorDetails < Struct.new(:key, :kind, :value, :message)
|
2
2
|
|
3
|
-
attr_reader :key, :kind, :value
|
3
|
+
attr_reader :key, :kind, :value, :message
|
4
4
|
|
5
|
-
def initialize(key, kind, value=nil)
|
6
|
-
@key, @kind, @value = key, kind, value
|
5
|
+
def initialize(key, kind, value=nil, message=nil)
|
6
|
+
@key, @kind, @value, @message = key, kind, value, message
|
7
7
|
end
|
8
8
|
|
9
9
|
def has_key_and_kind?(akey, akind)
|
data/show_all_errors.rb
CHANGED
@@ -36,7 +36,7 @@ end
|
|
36
36
|
FailFast(SPEC_DIR + '/fixtures/simple.yml').check_now.but_fail_later do
|
37
37
|
|
38
38
|
#test values :
|
39
|
-
has_value_for :first_keyNOT
|
39
|
+
has_value_for :first_keyNOT , :message => 'this is a custom message' # single absent key
|
40
40
|
has_values_for :last_keyNOT, 'number_sixNOT' # multiple absent keys
|
41
41
|
has_value_for 'testNOT/mongoDB/database' # invalid yaml path
|
42
42
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe FailFast::ErrorDetails do
|
4
|
+
context 'with a static message' do
|
5
|
+
subject {FailFast::ErrorDetails.new(:a_key, :a_kind, 'a_value', 'a_message')}
|
6
|
+
its(:key ){ should == :a_key }
|
7
|
+
its(:kind ){ should == :a_kind }
|
8
|
+
its(:value ){ should == 'a_value' }
|
9
|
+
its(:message){ should == 'a_message'}
|
10
|
+
end
|
11
|
+
end
|
@@ -36,4 +36,18 @@ describe 'has_ar_db' do
|
|
36
36
|
has_active_record_db_for 'invalid_key'
|
37
37
|
}
|
38
38
|
end
|
39
|
+
|
40
|
+
it "should accept a custom message for those 3 cases" do
|
41
|
+
exception = StandardError.new('an-error-message')
|
42
|
+
ActiveRecord::Base.should_receive(:establish_connection).twice.and_raise(exception)
|
43
|
+
|
44
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
45
|
+
has_active_record_db_for 'invalid_key', :message => 'a_custom_message'
|
46
|
+
has_active_record_db_for 'db_connection', :message => 'a_custom_message_2'
|
47
|
+
has_active_record_db valid_connection_options = {}, :message => 'a_custom_message_3'
|
48
|
+
end
|
49
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
50
|
+
messages.should =~ %w(a_custom_message a_custom_message_2 a_custom_message_3)
|
51
|
+
end
|
52
|
+
|
39
53
|
end
|
@@ -10,4 +10,13 @@ describe 'has_email_for()' do
|
|
10
10
|
it_should_raise_an_error('invalid_key', :missing_value, 'when the key is invalid') {
|
11
11
|
has_email_for 'invalid_key'
|
12
12
|
}
|
13
|
+
|
14
|
+
it "should accept a custom message for the 2 cases" do
|
15
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
16
|
+
has_email_for 'invalid_key', :message => 'a_custom_message'
|
17
|
+
has_email_for 'test/url', :message => 'a_custom_message_2'
|
18
|
+
end
|
19
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
20
|
+
messages.should =~ %w(a_custom_message a_custom_message_2)
|
21
|
+
end
|
13
22
|
end
|
@@ -19,6 +19,18 @@ describe 'directory_exists' do
|
|
19
19
|
it_should_raise_an_error('test/email', :directory_not_found, 'when the directory does not exist' ) { directory_exists_for 'test/email' }
|
20
20
|
it_should_raise_an_error('not_a_valid_key',:missing_value, 'when the key is invalid' ) { directory_exists_for 'not_a_valid_key' }
|
21
21
|
end
|
22
|
+
|
23
|
+
it "should accept a custom message for the 5 cases" do
|
24
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
25
|
+
directory_exists_for 'test/a_file', :message => 'a_custom_message'
|
26
|
+
directory_exists_for 'test/email', :message => 'a_custom_message_2'
|
27
|
+
directory_exists_for 'INCONNU', :message => 'a_custom_message_3'
|
28
|
+
directory_exists 'XYZ', :message => 'a_custom_message_4'
|
29
|
+
directory_exists a_file, :message => 'a_custom_message_5'
|
30
|
+
end
|
31
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
32
|
+
messages.should =~ %w(a_custom_message a_custom_message_2 a_custom_message_3 a_custom_message_4 a_custom_message_5)
|
33
|
+
end
|
22
34
|
end
|
23
35
|
|
24
36
|
|
@@ -37,4 +49,16 @@ describe 'file_exists' do
|
|
37
49
|
it_should_raise_an_error('test/email', :file_not_found, 'when the file does not exist' ) { file_exists_for 'test/email' }
|
38
50
|
it_should_raise_an_error('not_a_valid_key', :missing_value, 'when the key is invalid' ) { file_exists_for 'not_a_valid_key' }
|
39
51
|
end
|
52
|
+
|
53
|
+
it "should accept a custom message for the 5 cases" do
|
54
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
55
|
+
file_exists_for 'test/a_directory', :message => 'a_custom_message'
|
56
|
+
file_exists_for 'test/email', :message => 'a_custom_message_2'
|
57
|
+
file_exists_for 'INCONNU', :message => 'a_custom_message_3'
|
58
|
+
file_exists 'XYZ', :message => 'a_custom_message_4'
|
59
|
+
file_exists a_dir, :message => 'a_custom_message_5'
|
60
|
+
end
|
61
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
62
|
+
messages.should =~ %w(a_custom_message a_custom_message_2 a_custom_message_3 a_custom_message_4 a_custom_message_5)
|
63
|
+
end
|
40
64
|
end
|
@@ -23,4 +23,13 @@ describe 'is_on_path' do
|
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
+
it "should accept a custom message for the 3 cases" do
|
27
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
28
|
+
is_on_path 'ls987654321', :message => 'a_custom_message'
|
29
|
+
is_on_path_for 'INCONNU', :message => 'a_custom_message_2'
|
30
|
+
is_on_path_for 'app_not_on_path', :message => 'a_custom_message_3'
|
31
|
+
end
|
32
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
33
|
+
messages.should =~ %w(a_custom_message a_custom_message_2 a_custom_message_3)
|
34
|
+
end
|
26
35
|
end
|
@@ -9,6 +9,15 @@ describe 'has_mongoDB' do
|
|
9
9
|
it_should_raise_a_direct_error('localhost', :mongoDB_server_not_found, 'when the mongoDB server connection failed') {
|
10
10
|
has_mongoDB 'localhost'
|
11
11
|
}
|
12
|
+
|
13
|
+
it "should accept a custom message for this case" do
|
14
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
15
|
+
has_mongoDB 'localhost', :message => 'a_custom_message'
|
16
|
+
has_mongoDB 'localhost', :timeout => 1, :message => 'a_custom_message_2'
|
17
|
+
end
|
18
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
19
|
+
messages.should =~ %w(a_custom_message a_custom_message_2)
|
20
|
+
end
|
12
21
|
end
|
13
22
|
|
14
23
|
context 'when the mongo server can be reached' do
|
@@ -24,6 +33,13 @@ describe 'has_mongoDB' do
|
|
24
33
|
it_should_raise_a_direct_error('not_a_known_db', :mongoDB_db_not_found, 'when the database cannot be found on the mongoDB') {
|
25
34
|
has_mongoDB 'localhost', 'not_a_known_db'
|
26
35
|
}
|
36
|
+
it "should accept a custom message for this case" do
|
37
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
38
|
+
has_mongoDB 'localhost', 'not_a_known_db', :message => 'a_custom_message'
|
39
|
+
end
|
40
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
41
|
+
messages.should =~ %w(a_custom_message)
|
42
|
+
end
|
27
43
|
end
|
28
44
|
end
|
29
45
|
|
@@ -35,6 +51,14 @@ describe 'has_mongoDB' do
|
|
35
51
|
has_mongoDB_for 'test/unreachable_mongoDB_server'
|
36
52
|
}
|
37
53
|
it_should_raise_an_error('not_a_valid_key', :missing_value, 'when the key is invalid') { has_mongoDB_for 'not_a_valid_key' }
|
54
|
+
it "should accept a custom message for those 2 cases" do
|
55
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
56
|
+
has_mongoDB_for 'not_a_valid_key', :message => 'a_custom_message'
|
57
|
+
has_mongoDB_for 'test/unreachable_mongoDB_server', :message => 'a_custom_message_2'
|
58
|
+
end
|
59
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
60
|
+
messages.should =~ %w(a_custom_message a_custom_message_2)
|
61
|
+
end
|
38
62
|
end
|
39
63
|
|
40
64
|
context 'when the mongo server can be reached' do
|
@@ -51,6 +75,13 @@ describe 'has_mongoDB' do
|
|
51
75
|
it_should_raise_an_error('test/unknown_mongoDB_db', :mongoDB_db_not_found,'when the database cannot be found on the mongoDB') {
|
52
76
|
has_mongoDB_for 'test/unknown_mongoDB_db'
|
53
77
|
}
|
78
|
+
it "should accept a custom message for this case" do
|
79
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
80
|
+
has_mongoDB_for 'test/unknown_mongoDB_db', :message => 'a_custom_message'
|
81
|
+
end
|
82
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
83
|
+
messages.should =~ %w(a_custom_message)
|
84
|
+
end
|
54
85
|
|
55
86
|
it_should_not_raise_an_error('when :ignore_database => false desactivate the db check') {
|
56
87
|
has_mongoDB_for 'test/unknown_mongoDB_db', :check_database => false
|
@@ -19,4 +19,14 @@ before(:all) do
|
|
19
19
|
it_should_raise_an_error('test/url_not_reachable', :url_not_reachable ,'when the url is not reachable') {
|
20
20
|
has_url_for 'test/url_not_reachable', :reachable => true
|
21
21
|
}
|
22
|
+
|
23
|
+
it "should accept a custom message for the 3 cases" do
|
24
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
25
|
+
has_url_for 'test/email', :message => 'a_custom_message'
|
26
|
+
has_url_for 'inconnu', :message => 'a_custom_message_2'
|
27
|
+
has_url_for 'test/url_not_reachable', :reachable => true, :message => 'a_custom_message_3'
|
28
|
+
end
|
29
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
30
|
+
messages.should =~ %w(a_custom_message a_custom_message_2 a_custom_message_3)
|
31
|
+
end
|
22
32
|
end
|
@@ -28,7 +28,23 @@ describe 'value_of()' do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
describe 'has_value_for()' do
|
31
|
+
before { capture_stdout }
|
32
|
+
after { restore_stdout }
|
31
33
|
|
34
|
+
it "should accept a custom message for the 4 cases" do
|
35
|
+
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
36
|
+
has_value_for 'inconnu', /localhost/, :message => 'a_custom_message'
|
37
|
+
has_value_for :first_key, /nomatchhere/, :message => 'a_custom_message_2'
|
38
|
+
has_value_for :letter_x, :in => ('a'..'b'), :message => 'a_custom_message_3'
|
39
|
+
has_value_for :letter_x, :in => [6, "a"], :message => 'a_custom_message_4'
|
40
|
+
end
|
41
|
+
|
42
|
+
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
43
|
+
messages.should =~ %w(a_custom_message a_custom_message_2 a_custom_message_3 a_custom_message_4)
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
#-----------------
|
32
48
|
context 'when the value is present' do
|
33
49
|
it_should_not_raise_an_error('when the (string) key has a value') { has_value_for 'first_key' }
|
34
50
|
it_should_not_raise_an_error('when the (symbol) key has a value') { has_value_for :last_key }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fail_fast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 5
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alain Ravet
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-28 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- lib/fail_fast/support/z_only_for_tests.rb
|
101
101
|
- show_all_errors.rb
|
102
102
|
- spec/base/base_commands_spec.rb
|
103
|
+
- spec/base/error_details_spec.rb
|
103
104
|
- spec/base/errors_storage_spec.rb
|
104
105
|
- spec/base/file_is_empty_spec.rb
|
105
106
|
- spec/base/file_is_missing_spec.rb
|
@@ -154,6 +155,7 @@ specification_version: 3
|
|
154
155
|
summary: raises an error if the yaml contents of a config file does pass a test script.
|
155
156
|
test_files:
|
156
157
|
- spec/base/base_commands_spec.rb
|
158
|
+
- spec/base/error_details_spec.rb
|
157
159
|
- spec/base/errors_storage_spec.rb
|
158
160
|
- spec/base/file_is_empty_spec.rb
|
159
161
|
- spec/base/file_is_missing_spec.rb
|