fail_fast 0.5.1 → 0.5.2

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.
Files changed (44) hide show
  1. data/.gitignore +2 -0
  2. data/.rvmrc +1 -0
  3. data/CHANGELOG.txt +9 -0
  4. data/Gemfile +3 -0
  5. data/README.markdown +15 -1
  6. data/Rakefile +8 -36
  7. data/fail_fast.gemspec +22 -107
  8. data/lib/fail_fast/base/base.rb +1 -1
  9. data/lib/fail_fast/base/messaging.rb +1 -1
  10. data/lib/fail_fast/base/utils.rb +3 -2
  11. data/lib/fail_fast/base/z_only_for_tests.rb +2 -2
  12. data/lib/fail_fast/extensions/directory_exists.rb +41 -0
  13. data/lib/fail_fast/extensions/file_exists.rb +41 -0
  14. data/lib/fail_fast/extensions/{check_active_record_db.rb → has_active_record_db.rb} +4 -2
  15. data/lib/fail_fast/extensions/{check_email.rb → has_email.rb} +7 -5
  16. data/lib/fail_fast/extensions/{check_mongo_db.rb → has_mongo_db.rb} +13 -9
  17. data/lib/fail_fast/extensions/{check_url.rb → has_url.rb} +8 -6
  18. data/lib/fail_fast/extensions/{check_value.rb → has_value.rb} +3 -3
  19. data/lib/fail_fast/extensions/{check_is_on_path.rb → is_on_path.rb} +10 -6
  20. data/lib/fail_fast/main.rb +1 -1
  21. data/lib/fail_fast/support/error_db.rb +1 -1
  22. data/lib/fail_fast/support/error_details.rb +2 -2
  23. data/lib/fail_fast/support/z_only_for_tests.rb +1 -1
  24. data/spec/base/base_commands/fail_spec.rb +7 -0
  25. data/spec/base/base_commands/failed_spec.rb +19 -0
  26. data/spec/base/base_commands/only_if_spec.rb +15 -0
  27. data/spec/base/base_commands/skip_if_spec.rb +29 -0
  28. data/spec/base/errors_storage_spec.rb +1 -1
  29. data/spec/base/multiple_blocks_support_spec.rb +3 -3
  30. data/spec/base/{not_linked_to_a_file_spec.rb → not_linked_to_a_config_file_spec.rb} +3 -3
  31. data/spec/base/{file_is_empty_spec.rb → when_config_file_is_empty_spec.rb} +3 -3
  32. data/spec/base/{file_is_missing_spec.rb → when_config_file_is_missing_spec.rb} +2 -2
  33. data/spec/extensions/{check_file_system_spec.rb → file_or_directory_exists_spec.rb} +18 -2
  34. data/spec/extensions/{check_active_record_db_spec.rb → has_active_record_db_spec.rb} +11 -6
  35. data/spec/extensions/{check_email_spec.rb → has_email_spec.rb} +11 -6
  36. data/spec/extensions/{check_mongo_db_spec.rb → has_mongoDB_spec.rb} +28 -9
  37. data/spec/extensions/{check_url_spec.rb → has_url_spec.rb} +4 -1
  38. data/spec/extensions/{check_value_spec.rb → has_value_spec.rb} +15 -11
  39. data/spec/extensions/{check_is_on_path_spec.rb → is_on_path_spec.rb} +9 -5
  40. data/spec/spec_helper.rb +39 -4
  41. metadata +78 -55
  42. data/VERSION +0 -1
  43. data/lib/fail_fast/extensions/check_file_system.rb +0 -67
  44. data/spec/base/base_commands_spec.rb +0 -67
data/.gitignore CHANGED
@@ -19,3 +19,5 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+
23
+ /Gemfile.lock
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@failfast
data/CHANGELOG.txt CHANGED
@@ -1,3 +1,12 @@
1
+ 0.5.2
2
+ - changed: replace Jeweler & Rubygems by Bundler
3
+ - add: all checkers methods return a success status (true/false)
4
+ ex:
5
+ ...
6
+ unless directory_exists_for '/log' # now returns true/false
7
+ puts "The /log directory is missing" # ...
8
+ puts "create it with $ mkdir /log" # ...
9
+ end # ...
1
10
  0.5.1
2
11
  - fixed .failed? bug
3
12
  - fixed key prefixes (broken in 0.5.0)
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+ gem 'rake'
3
+ gemspec
data/README.markdown CHANGED
@@ -135,7 +135,21 @@ If it fails, you'll get a report like this :
135
135
  | * fail a custom failure message
136
136
  +------------------------------------------------------------------------------------------
137
137
 
138
- ### Example 3 : print an additional custom message if errors were detected
138
+ ### Example 3 : capture - and handle - individual errors
139
+
140
+ FailFast().check_now.but_fail_later do
141
+ directory_exists_for '/cache' # default error handling/message
142
+
143
+ unless directory_exists_for '/log' # custom error handling
144
+ puts "The /log directory is missing" # ...
145
+ puts "create it with $ mkdir /log" # ...
146
+ end # ...
147
+ end
148
+
149
+ FailFast.fail_now # exit it an error was detected in any of the 3 blocks above.
150
+
151
+
152
+ ### Example 4 : print an additional custom message if errors were detected
139
153
 
140
154
  ... # code like in the cases above.
141
155
 
data/Rakefile CHANGED
@@ -1,47 +1,19 @@
1
- require 'rubygems'
2
- require 'rake'
1
+ # encoding: UTF-8
2
+ require 'bundler'
3
+ Bundler::GemHelper.install_tasks
3
4
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "fail_fast"
8
- gem.summary = %Q{raises an error if the yaml contents of a config file does pass a test script.}
9
- gem.description = %Q{raises an error if the yaml contents of a config file does not pass a test script.}
10
- gem.email = "alainravet@gmail.com"
11
- gem.homepage = "http://github.com/alainravet/fail_fast"
12
- gem.authors = ["Alain Ravet"]
13
- gem.add_development_dependency "rspec", ">= 1.2.9"
14
- gem.add_development_dependency "activerecord"
15
- gem.add_development_dependency "mongo"
16
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
- end
18
- Jeweler::GemcutterTasks.new
19
- rescue LoadError
20
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
- end
5
+ require 'rake'
6
+ require 'rake/rdoctask'
22
7
 
23
8
  require 'spec/rake/spectask'
24
9
  Spec::Rake::SpecTask.new(:spec) do |spec|
25
10
  spec.libs << 'lib' << 'spec'
26
11
  spec.spec_files = FileList['spec/**/*_spec.rb']
27
12
  end
13
+ task :default => :spec
28
14
 
29
15
  Spec::Rake::SpecTask.new(:rcov) do |spec|
30
- spec.libs << 'lib' << 'spec'
16
+ spec.libs << 'lib' << 'spec'
31
17
  spec.pattern = 'spec/**/*_spec.rb'
32
- spec.rcov = true
33
- end
34
-
35
- task :spec => :check_dependencies
36
-
37
- task :default => :spec
38
-
39
- require 'rake/rdoctask'
40
- Rake::RDocTask.new do |rdoc|
41
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
42
-
43
- rdoc.rdoc_dir = 'rdoc'
44
- rdoc.title = "config_file_check #{version}"
45
- rdoc.rdoc_files.include('README*')
46
- rdoc.rdoc_files.include('lib/**/*.rb')
18
+ spec.rcov = true
47
19
  end
data/fail_fast.gemspec CHANGED
@@ -1,114 +1,29 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
5
2
 
3
+ $:.push File.expand_path("../lib", __FILE__)
4
+
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{fail_fast}
8
- s.version = "0.5.1"
6
+ s.name = 'fail_fast'
7
+ s.version = '0.5.2'
9
8
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Alain Ravet"]
12
- s.date = %q{2010-07-29}
13
- s.description = %q{raises an error if the yaml contents of a config file does not pass a test script.}
14
- s.email = %q{alainravet@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.markdown"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "CHANGELOG.txt",
23
- "LICENSE",
24
- "README.markdown",
25
- "Rakefile",
26
- "VERSION",
27
- "fail_fast.gemspec",
28
- "lib/fail_fast.rb",
29
- "lib/fail_fast/base/base.rb",
30
- "lib/fail_fast/base/messaging.rb",
31
- "lib/fail_fast/base/utils.rb",
32
- "lib/fail_fast/base/z_only_for_tests.rb",
33
- "lib/fail_fast/extensions/base_commands.rb",
34
- "lib/fail_fast/extensions/check_active_record_db.rb",
35
- "lib/fail_fast/extensions/check_email.rb",
36
- "lib/fail_fast/extensions/check_file_system.rb",
37
- "lib/fail_fast/extensions/check_is_on_path.rb",
38
- "lib/fail_fast/extensions/check_mongo_db.rb",
39
- "lib/fail_fast/extensions/check_url.rb",
40
- "lib/fail_fast/extensions/check_value.rb",
41
- "lib/fail_fast/main.rb",
42
- "lib/fail_fast/report.txt.erb",
43
- "lib/fail_fast/support/error_db.rb",
44
- "lib/fail_fast/support/error_details.rb",
45
- "lib/fail_fast/support/z_only_for_tests.rb",
46
- "show_all_errors.rb",
47
- "spec/base/base_commands_spec.rb",
48
- "spec/base/error_details_spec.rb",
49
- "spec/base/errors_storage_spec.rb",
50
- "spec/base/file_is_empty_spec.rb",
51
- "spec/base/file_is_missing_spec.rb",
52
- "spec/base/multiple_blocks_support_spec.rb",
53
- "spec/base/not_linked_to_a_file_spec.rb",
54
- "spec/base/report_printing_spec.rb",
55
- "spec/extensions/check_active_record_db_spec.rb",
56
- "spec/extensions/check_email_spec.rb",
57
- "spec/extensions/check_file_system_spec.rb",
58
- "spec/extensions/check_is_on_path_spec.rb",
59
- "spec/extensions/check_mongo_db_spec.rb",
60
- "spec/extensions/check_url_spec.rb",
61
- "spec/extensions/check_value_spec.rb",
62
- "spec/extensions/key_prefix_spec.rb",
63
- "spec/fixtures/empty.yml",
64
- "spec/fixtures/simple.yml",
65
- "spec/how_to_use_spec.rb",
66
- "spec/spec.opts",
67
- "spec/spec_helper.rb"
68
- ]
69
- s.homepage = %q{http://github.com/alainravet/fail_fast}
70
- s.rdoc_options = ["--charset=UTF-8"]
71
- s.require_paths = ["lib"]
72
- s.rubygems_version = %q{1.3.7}
73
- s.summary = %q{raises an error if the yaml contents of a config file does pass a test script.}
74
- s.test_files = [
75
- "spec/base/base_commands_spec.rb",
76
- "spec/base/error_details_spec.rb",
77
- "spec/base/errors_storage_spec.rb",
78
- "spec/base/file_is_empty_spec.rb",
79
- "spec/base/file_is_missing_spec.rb",
80
- "spec/base/multiple_blocks_support_spec.rb",
81
- "spec/base/not_linked_to_a_file_spec.rb",
82
- "spec/base/report_printing_spec.rb",
83
- "spec/extensions/check_active_record_db_spec.rb",
84
- "spec/extensions/check_email_spec.rb",
85
- "spec/extensions/check_file_system_spec.rb",
86
- "spec/extensions/check_is_on_path_spec.rb",
87
- "spec/extensions/check_mongo_db_spec.rb",
88
- "spec/extensions/check_url_spec.rb",
89
- "spec/extensions/check_value_spec.rb",
90
- "spec/extensions/key_prefix_spec.rb",
91
- "spec/how_to_use_spec.rb",
92
- "spec/spec_helper.rb"
93
- ]
9
+ s.date = Time.now.utc.strftime("%Y-%m-%d")
10
+ s.homepage = 'http://github.com/alainravet/fail_fast'
94
11
 
95
- if s.respond_to? :specification_version then
96
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
97
- s.specification_version = 3
12
+ s.summary = 'raises an error if the yaml contents of a config file does pass a test script.'
13
+ s.description = 'raises an error if the yaml contents of a config file does pass a test script.'
98
14
 
99
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
100
- s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
101
- s.add_development_dependency(%q<activerecord>, [">= 0"])
102
- s.add_development_dependency(%q<mongo>, [">= 0"])
103
- else
104
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
105
- s.add_dependency(%q<activerecord>, [">= 0"])
106
- s.add_dependency(%q<mongo>, [">= 0"])
107
- end
108
- else
109
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
110
- s.add_dependency(%q<activerecord>, [">= 0"])
111
- s.add_dependency(%q<mongo>, [">= 0"])
112
- end
113
- end
15
+ s.authors = 'Alain Ravet'
16
+ s.email = 'alain.ravet@gmail.com'
17
+ s.extra_rdoc_files = %w(LICENSE README.markdown)
18
+ s.rdoc_options = ["--charset=UTF-8"]
114
19
 
20
+ s.platform = Gem::Platform::RUBY
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.require_paths = %w(lib)
24
+
25
+ s.add_development_dependency 'rspec', '= 1.3.2'
26
+ s.add_development_dependency 'activerecord', '>= 0'
27
+ s.add_development_dependency 'mongo', '>= 0'
28
+ s.add_development_dependency 'fakeweb'
29
+ end
@@ -34,7 +34,7 @@ class FailFast
34
34
  self.instance_eval(&block)
35
35
  end
36
36
 
37
- def print_errors
37
+ def print_errors #:nodoc:
38
38
  @errors = errors
39
39
  puts "\n\n\n" + ERB.new(File.read(ERB_TEMPLATE)).result(binding) + "\n\n"
40
40
  end
@@ -1,6 +1,6 @@
1
1
  class FailFast
2
2
 
3
- module Messaging
3
+ module Messaging #:nodoc:
4
4
 
5
5
  def default_message_for(e)
6
6
  qc_value = "'#{vcol(e.value)}'"
@@ -1,8 +1,9 @@
1
1
  class FailFast
2
2
 
3
- class Params < Struct.new(:key, :value, :regexp, :options) ; end
3
+ class Params < Struct.new(:key, :value, :regexp, :options) #:nodoc:
4
+ end
4
5
 
5
- module Utils
6
+ module Utils #:nodoc:
6
7
 
7
8
  def blank?(value)
8
9
  value.nil? || (value.is_a?(String) && '' == value.strip)
@@ -1,10 +1,10 @@
1
1
  # ONLY USED BY TESTS !!
2
2
  class FailFast
3
- def self.global_errors
3
+ def self.global_errors #:nodoc:
4
4
  @@_errors_db.global_data
5
5
  end
6
6
 
7
- def self.reset_error_db!
7
+ def self.reset_error_db! #:nodoc:
8
8
  @@_errors_db = ErrorDb.new
9
9
  end
10
10
  end
@@ -0,0 +1,41 @@
1
+ class FailFast
2
+ module DirectoryExists
3
+
4
+ # Ensure the value is an existing directory
5
+ #
6
+ # Usage
7
+ # directory_exists '/tmp'
8
+ # directory_exists '/tmp', :message => 'custom message'
9
+ #
10
+ def directory_exists(path, options={})
11
+ success = File.exists?(path) && File.directory?(path)
12
+ unless success
13
+ add_error ErrorDetails.new(nil, :directory_not_found, path, options[:message])
14
+ end
15
+ success
16
+ end
17
+
18
+ # Ensure the key value is an existing directory
19
+ #
20
+ # Usage
21
+ # directory_exists_for 'foo/config'
22
+ # directory_exists_for 'foo/config', :message => 'custom message'
23
+ #
24
+ def directory_exists_for(raw_key, *params)
25
+ p = key_value_regexp_options(raw_key, params)
26
+ key, options = p.key, p.options
27
+
28
+ return false unless has_value_for raw_key, :message => options[:message]
29
+
30
+ path = value_for_deep_key(key)
31
+ success = File.exists?(path) && File.directory?(path)
32
+ unless success
33
+ add_error ErrorDetails.new(key, :directory_not_found, p.value, options[:message])
34
+ end
35
+ success
36
+ end
37
+
38
+ end
39
+ end
40
+
41
+ FailFast.send :include, FailFast::DirectoryExists
@@ -0,0 +1,41 @@
1
+ class FailFast
2
+ module FileExists
3
+
4
+ # Ensure the value is an existing file
5
+ #
6
+ # Usage
7
+ # file_exists '~/.bash_profile'
8
+ # file_exists '~/.bash_profile', :message => 'custom message'
9
+ #
10
+ def file_exists(path, options={})
11
+ success = File.exists?(path) && File.file?(path)
12
+ unless success
13
+ add_error ErrorDetails.new(nil, :file_not_found, path, options[:message])
14
+ end
15
+ success
16
+ end
17
+
18
+ # Ensure the key value is an existing file exists
19
+ #
20
+ # Usage
21
+ # file_exists_for 'foo/config/app.yml'
22
+ # file_exists_for 'foo/config/app.yml', :message => 'custom message'
23
+ #
24
+ def file_exists_for(raw_key, *params)
25
+ p = key_value_regexp_options(raw_key, params)
26
+ key, options = p.key, p.options
27
+
28
+ return false unless has_value_for raw_key, :message => options[:message]
29
+
30
+ path = value_for_deep_key(key)
31
+ success = File.exists?(path) && File.file?(path)
32
+ unless success
33
+ add_error ErrorDetails.new(key, :file_not_found, p.value, options[:message])
34
+ end
35
+ success
36
+ end
37
+
38
+ end
39
+ end
40
+
41
+ FailFast.send :include, FailFast::FileExists
@@ -1,7 +1,7 @@
1
1
  require 'active_record'
2
2
 
3
3
  class FailFast
4
- module CheckActiveRecordDB
4
+ module HasActiveRecordDB
5
5
 
6
6
  # Ensure the ActiveRecord connection can be established :
7
7
  #
@@ -22,6 +22,7 @@ class FailFast
22
22
  unless @success
23
23
  add_error ErrorDetails.new(nil, :active_record_db_connection_error, @error_message, options[:message])
24
24
  end
25
+ @success
25
26
  end
26
27
 
27
28
  # Ensure the ActiveRecord connection can be established :
@@ -49,12 +50,13 @@ class FailFast
49
50
  unless @success
50
51
  add_error ErrorDetails.new(key, :active_record_db_connection_error, @error_message, options[:message])
51
52
  end
53
+ @success
52
54
  end
53
55
 
54
56
  end
55
57
  end
56
58
 
57
- FailFast.send :include, FailFast::CheckActiveRecordDB
59
+ FailFast.send :include, FailFast::HasActiveRecordDB
58
60
 
59
61
  # ActiveRecord::Base.establish_connection(
60
62
  # :adapter => "mysql",
@@ -1,6 +1,6 @@
1
1
  class FailFast
2
2
 
3
- module CheckEmail
3
+ module HasEmail
4
4
  # Usage
5
5
  # has_email_for 'test/admin_email'
6
6
  #
@@ -8,16 +8,18 @@ class FailFast
8
8
  p = key_value_regexp_options(raw_key, params)
9
9
  key, options = p.key, p.options
10
10
 
11
- return unless has_value_for raw_key, :message => options[:message]
11
+ return false unless has_value_for raw_key, :message => options[:message]
12
12
 
13
13
  value = value_for_deep_key(key)
14
- if EmailValidator.invalid_email_address?(value)
14
+ failure = EmailValidator.invalid_email_address?(value)
15
+ if failure
15
16
  add_error ErrorDetails.new(key, :not_an_email, value, options[:message])
16
17
  end
18
+ !failure
17
19
  end
18
20
  end
19
21
 
20
- module EmailValidator
22
+ module EmailValidator #:nodoc:
21
23
  VALID_EMAIL_ADDRESS_REGEXP = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
22
24
 
23
25
  def self.valid_email_address?(email)
@@ -31,4 +33,4 @@ class FailFast
31
33
  end
32
34
  end
33
35
 
34
- FailFast.send :include, FailFast::CheckEmail
36
+ FailFast.send :include, FailFast::HasEmail
@@ -1,5 +1,5 @@
1
1
  class FailFast
2
- module CheckMongoDB
2
+ module HasMongoDB
3
3
 
4
4
  # Ensure the mongoDB server can be reached, and the db could be opened :
5
5
  #
@@ -18,12 +18,14 @@ class FailFast
18
18
  @conn = Mongo::Connection.new(host, port, options)
19
19
  rescue Mongo::ConnectionFailure
20
20
  add_error ErrorDetails.new(nil, :mongoDB_server_not_found, host, options[:message])
21
- return
21
+ return false
22
22
  end
23
23
 
24
- if db && !@conn.database_names.include?(db)
24
+ failure = db && !@conn.database_names.include?(db)
25
+ if failure
25
26
  add_error ErrorDetails.new(nil, :mongoDB_db_not_found, db, options[:message])
26
27
  end
28
+ !failure
27
29
  end
28
30
 
29
31
  # Ensure the mongoDB server can be reached, and the db could be opened :
@@ -35,9 +37,9 @@ class FailFast
35
37
  def has_mongoDB_for(key, *params)
36
38
  p = key_value_regexp_options(key, params)
37
39
  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]
40
+ return false unless has_value_for key , :message => options[:message]
41
+ return false unless has_value_for "#{key}/host" , :message => options[:message]
42
+ return false unless has_value_for "#{key}/database", :message => options[:message]
41
43
 
42
44
 
43
45
  value = value_for_deep_key(key)
@@ -47,16 +49,18 @@ class FailFast
47
49
  @conn = Mongo::Connection.new(host, port)
48
50
  rescue Mongo::ConnectionFailure
49
51
  add_error ErrorDetails.new(key, :mongoDB_server_not_found, host, options[:message])
50
- return
52
+ return false
51
53
  end
52
54
 
53
55
  must_check_db = !(false == options[:check_database])
54
- if must_check_db && !@conn.database_names.include?(db)
56
+ failure = must_check_db && !@conn.database_names.include?(db)
57
+ if failure
55
58
  add_error ErrorDetails.new(key, :mongoDB_db_not_found, db, options[:message])
56
59
  end
60
+ !failure
57
61
  end
58
62
 
59
63
  end
60
64
  end
61
65
 
62
- FailFast.send :include, FailFast::CheckMongoDB
66
+ FailFast.send :include, FailFast::HasMongoDB
@@ -1,6 +1,6 @@
1
1
  class FailFast
2
2
 
3
- module CheckUrl
3
+ module HasUrl
4
4
  # Usage
5
5
  # test if the url is valid :
6
6
  # has_url_for 'test/server_url'
@@ -13,20 +13,22 @@ class FailFast
13
13
  def has_url_for(raw_key, *params)
14
14
  p = key_value_regexp_options(raw_key, params)
15
15
  key, options = p.key, p.options
16
- return unless has_value_for raw_key, :message => options[:message]
16
+ return false unless has_value_for raw_key, :message => options[:message]
17
17
 
18
18
  value = value_for_deep_key(key)
19
19
  if UrlValidator.invalid_url?(value)
20
20
  add_error ErrorDetails.new(key, :not_a_url, value, options[:message])
21
- return
21
+ return false
22
22
  end
23
- if true==options.delete(:reachable) && UrlValidator.unreachable_url?(value, options)
23
+ failure = true==options.delete(:reachable) && UrlValidator.unreachable_url?(value, options)
24
+ if failure
24
25
  add_error ErrorDetails.new(key, :url_not_reachable, value, options[:message])
25
26
  end
27
+ !failure
26
28
  end
27
29
  end
28
30
 
29
- module UrlValidator
31
+ module UrlValidator #:nodoc:
30
32
  IPv4_PART = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/ # 0-255
31
33
  VALID_URL_REGEXP = %r{
32
34
  \A
@@ -69,4 +71,4 @@ class FailFast
69
71
  end
70
72
  end
71
73
 
72
- FailFast.send :include, FailFast::CheckUrl
74
+ FailFast.send :include, FailFast::HasUrl
@@ -1,5 +1,5 @@
1
1
  class FailFast
2
- module CheckValue
2
+ module HasValue
3
3
 
4
4
  # Usage
5
5
  # nda_file = value_of(:nda_file)
@@ -40,10 +40,10 @@ class FailFast
40
40
  elsif options.is_a?(Hash) && options[:in].is_a?(Array)
41
41
  add_error ErrorDetails.new(key, :value_not_in_array, p.value, message) unless options[:in].include?(p.value)
42
42
  end
43
- no_new_error = nof_errors == errors.size
43
+ success = no_new_error = nof_errors == errors.size
44
44
  end
45
45
 
46
46
  end
47
47
  end
48
48
 
49
- FailFast.send :include, FailFast::CheckValue
49
+ FailFast.send :include, FailFast::HasValue
@@ -1,5 +1,5 @@
1
1
  class FailFast
2
- module CheckIsOnPath
2
+ module IsOnPath
3
3
 
4
4
  # Ensure the application is on the path
5
5
  #
@@ -8,9 +8,11 @@ class FailFast
8
8
  # is_on_path 'jruby', :message => 'custom message'
9
9
  #
10
10
  def is_on_path(app, options = {})
11
- unless found_on_the_path(app)
11
+ success = found_on_the_path(app)
12
+ unless success
12
13
  add_error ErrorDetails.new(nil, :not_on_path, app, options[:message])
13
14
  end
15
+ success
14
16
  end
15
17
 
16
18
  # Ensure the key value can be found on the path
@@ -20,19 +22,21 @@ class FailFast
20
22
  # is_on_path_for 'file_compressor', :message => 'custom message'
21
23
  #
22
24
  def is_on_path_for(key, options = {})
23
- return unless has_value_for key, :message => options[:message]
25
+ return false unless has_value_for key, :message => options[:message]
24
26
  app = value_for_deep_key(key)
25
27
 
26
- unless found_on_the_path(app)
28
+ success = found_on_the_path(app)
29
+ unless success
27
30
  add_error ErrorDetails.new(key, :not_on_path, app, options[:message])
28
31
  end
32
+ success
29
33
  end
30
34
 
31
35
  private
32
36
  def found_on_the_path(app)
33
- `which #{app}` =~ /#{app}$/
37
+ !!(`which #{app}` =~ /#{app}$/)
34
38
  end
35
39
  end
36
40
  end
37
41
 
38
- FailFast.send :include, FailFast::CheckIsOnPath
42
+ FailFast.send :include, FailFast::IsOnPath
@@ -20,7 +20,7 @@ class FailFast
20
20
  !global_errors.empty?
21
21
  end
22
22
 
23
- def self.errors_db
23
+ def self.errors_db #:nodoc:
24
24
  @@_errors_db
25
25
  end
26
26
 
@@ -1,5 +1,5 @@
1
1
  class FailFast
2
- class ErrorDb
2
+ class ErrorDb #:nodoc:
3
3
  def initialize
4
4
  @@hash = {}
5
5
  end
@@ -6,11 +6,11 @@ class FailFast::ErrorDetails < Struct.new(:key, :kind, :value, :message)
6
6
  @key, @kind, @value, @message = key, kind, value, message
7
7
  end
8
8
 
9
- def has_key_and_kind?(akey, akind)
9
+ def has_key_and_kind?(akey, akind) #:nodoc:
10
10
  (key.to_s == akey.to_s) && kind.to_sym == akind.to_sym
11
11
  end
12
12
 
13
- def has_value_and_kind?(avalue, akind)
13
+ def has_value_and_kind?(avalue, akind) #:nodoc:
14
14
  (value.to_s == avalue.to_s) && kind.to_sym == akind.to_sym
15
15
  end
16
16
  end
@@ -1,6 +1,6 @@
1
1
  # ONLY USED BY TESTS !!
2
2
  class FailFast::ErrorDb
3
- def global_data
3
+ def global_data #:nodoc:
4
4
  @@hash.keys.collect {|key|errors_for(key)}.flatten
5
5
  end
6
6
  end
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe "fail()" do
4
+ it_should_raise_a_direct_error('message-123', :fail, 'when fail() is called') {
5
+ fail 'message-123'
6
+ }
7
+ end