fail_fast 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.txt CHANGED
@@ -1,3 +1,5 @@
1
+ 0.4
2
+ - added `is_on_path`
1
3
  0.3.0
2
4
  - added value_of()
3
5
  - added checks not linked to a config file (FailFast().check do .. end)
data/README.markdown CHANGED
@@ -7,13 +7,14 @@
7
7
  ## How to use :
8
8
 
9
9
 
10
- ### Example 0 : don't start the application if '_why' cannot be found (on the PATH).
10
+ ### Example 0 : don't start the application on Sunday or if '_why' cannot be found (on the PATH).
11
11
 
12
12
  Insert this code early in your program starting sequence :
13
13
 
14
14
  require 'fail_fast'
15
15
  FailFast().check do
16
- fail '_why could not be found on the path' unless `which _why` =~ /_why$/
16
+ is_on_path '_why'
17
+ fail "I don't work on Sunday" if 0 == Time.now.wday
17
18
  end
18
19
 
19
20
 
@@ -195,11 +196,19 @@ You can also add custom rules, not related to any config files :
195
196
  nda_file = value_of(:nda_file)
196
197
  fail 'NDA is too old' if (Time.now - File.mtime(nda_file)) > (24 * 60 * 60) * 365
197
198
 
198
- Test the file system :
199
+ Test the file system and .. :
199
200
 
201
+ directory_exists '/home/ci/uploads'
202
+ file_exists '/home/ci/config/secret.key'
203
+
204
+ # the keyed version :
200
205
  directory_exists_for 'assets-upload_dir'
201
206
  file_exists_for 'assets-nda_pdf_file'
202
207
 
208
+ is_on_path 'jruby' # fail if jruby cannot be found
209
+ is_on_path_for :ruby_engine
210
+
211
+
203
212
  Test external services :
204
213
 
205
214
  # is a webserver up ?
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.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.3.0"
8
+ s.version = "0.4.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-17}
12
+ s.date = %q{2010-07-22}
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 = [
@@ -27,12 +27,14 @@ Gem::Specification.new do |s|
27
27
  "fail_fast.gemspec",
28
28
  "lib/fail_fast.rb",
29
29
  "lib/fail_fast/base/base.rb",
30
+ "lib/fail_fast/base/messaging.rb",
30
31
  "lib/fail_fast/base/utils.rb",
31
32
  "lib/fail_fast/base/z_only_for_tests.rb",
32
33
  "lib/fail_fast/extensions/base_commands.rb",
33
34
  "lib/fail_fast/extensions/check_active_record_db.rb",
34
35
  "lib/fail_fast/extensions/check_email.rb",
35
36
  "lib/fail_fast/extensions/check_file_system.rb",
37
+ "lib/fail_fast/extensions/check_is_on_path.rb",
36
38
  "lib/fail_fast/extensions/check_mongo_db.rb",
37
39
  "lib/fail_fast/extensions/check_url.rb",
38
40
  "lib/fail_fast/extensions/check_value.rb",
@@ -52,6 +54,7 @@ Gem::Specification.new do |s|
52
54
  "spec/extensions/check_active_record_db_spec.rb",
53
55
  "spec/extensions/check_email_spec.rb",
54
56
  "spec/extensions/check_file_system_spec.rb",
57
+ "spec/extensions/check_is_on_path_spec.rb",
55
58
  "spec/extensions/check_mongo_db_spec.rb",
56
59
  "spec/extensions/check_url_spec.rb",
57
60
  "spec/extensions/check_value_spec.rb",
@@ -77,6 +80,7 @@ Gem::Specification.new do |s|
77
80
  "spec/extensions/check_active_record_db_spec.rb",
78
81
  "spec/extensions/check_email_spec.rb",
79
82
  "spec/extensions/check_file_system_spec.rb",
83
+ "spec/extensions/check_is_on_path_spec.rb",
80
84
  "spec/extensions/check_mongo_db_spec.rb",
81
85
  "spec/extensions/check_url_spec.rb",
82
86
  "spec/extensions/check_value_spec.rb",
@@ -0,0 +1,39 @@
1
+ class FailFast
2
+
3
+ module Messaging
4
+
5
+ def default_message_for(e)
6
+ qc_value = "'#{vcol(e.value)}'"
7
+ qc_key = "'#{kcol(e.key)}'"
8
+ details = if e.value.nil? then " for the key #{qc_key}"
9
+ elsif e.key.nil? then " #{qc_value}"
10
+ else " #{qc_value} for the key #{qc_key}"
11
+ end
12
+
13
+ case e.kind
14
+ when :config_file_not_found then mcol("The config file could not be found") + " : #{yellow(e.value)}."
15
+ when :missing_value then mcol("Missing value") +" #{details}."
16
+ when :value_does_not_match then mcol("Invalid value") +" #{details}."
17
+ when :not_an_email then mcol("Invalid email address") + " #{details}."
18
+ when :not_a_url then mcol("Invalid url") + " #{details}."
19
+ when :url_not_reachable then mcol("Could not reach the url") + " #{details}."
20
+ when :directory_not_found then mcol("Missing directory") + " #{details}."
21
+ when :file_not_found then mcol("Missing file") + " #{details}."
22
+ when :not_on_path then mcol("App not on path : ") + " #{details}."
23
+ when :mongoDB_server_not_found then mcol("Could not connect to the mongoDb server") + " #{details}."
24
+ when :mongoDB_db_not_found then mcol("Could not open the mongoDb db") + " #{details}."
25
+ when :active_record_db_connection_error then mcol("Could not connect to the DB server") + " #{details}."
26
+ when :fail then mcol(e.value)
27
+ else
28
+ "%-38s %-35s %-30s \n" % [ e.kind, e.key, qc_value]
29
+ end
30
+ end
31
+
32
+ def mcol(msg) lred(msg) end
33
+ def kcol(key) yellow(key) end
34
+ def vcol(val) yellow(val) end
35
+
36
+ end
37
+ end
38
+
39
+ FailFast.send :include, FailFast::Messaging
@@ -0,0 +1,40 @@
1
+ class FailFast
2
+ module CheckIsOnPath
3
+
4
+ # Ensure the application is on the path
5
+ #
6
+ # Usage
7
+ # is_on_path 'jruby'
8
+ #
9
+ def is_on_path(app, *params)
10
+ unless found_on_the_path(app)
11
+ add_error ErrorDetails.new(nil, :not_on_path, app)
12
+ end
13
+ end
14
+
15
+ # Ensure the key value can be found on the path
16
+ #
17
+ # Usage
18
+ # is_on_path_for 'file_compressor'
19
+ #
20
+ def is_on_path_for(key, *params)
21
+ return unless has_value_for key
22
+
23
+ p = key_value_regexp_options(key, params)
24
+
25
+ key = p.key
26
+ app = value_for_deep_key(key)
27
+
28
+ unless found_on_the_path(app)
29
+ add_error ErrorDetails.new(key, :not_on_path, app)
30
+ end
31
+ end
32
+
33
+ private
34
+ def found_on_the_path(app)
35
+ `which #{app}` =~ /#{app}$/
36
+ end
37
+ end
38
+ end
39
+
40
+ FailFast.send :include, FailFast::CheckIsOnPath
@@ -28,7 +28,7 @@ class FailFast
28
28
 
29
29
  nof_errors = errors.size
30
30
  if blank?(p.value)
31
- add_error ErrorDetails.new(key, :missing_value, nil)
31
+ add_error ErrorDetails.new(key, :missing_value)
32
32
 
33
33
  elsif p.regexp
34
34
  add_error ErrorDetails.new(key, :value_does_not_match, p.value) unless p.value =~ p.regexp
@@ -1,52 +1,13 @@
1
1
  <% if @config_file_path %>
2
2
  +------------------------------------------------------------------------------------------
3
- | FAIL_FAST error : precondition(s) not met in
3
+ | <%= lred 'FAIL_FAST error' %> : precondition(s) not met in
4
4
  | -----------------
5
- | file : "<%= @config_file_path %>"
6
- <% if @keys_prefix%>| keys prefix : <%= @keys_prefix ? @keys_prefix.inspect : 'none' %>
5
+ | file : "<%= @config_file_path %>"
6
+ <% if @keys_prefix%>| keys prefix : <%= @keys_prefix.inspect %>
7
7
  <% end %>+------------------------------------------------------------------------------------------
8
8
  <% else %>
9
9
  +------------------------------------------------------------------------------------------
10
- | FAIL_FAST error : precondition(s) not met.
10
+ | <%= lred 'FAIL_FAST error' %> : precondition(s) not met.
11
11
  +------------------------------------------------------------------------------------------
12
- <% end %><% @errors.each do |e|
13
- @msg = case e.kind
14
- when :config_file_not_found
15
- red("The config file could not be found") + " : '#{yellow(lred(e.value))}'."
16
- when :missing_value
17
- red("Missing value") +" for the key '#{yellow(e.key)}'."
18
- when :value_does_not_match
19
- red("Invalid value") +" '#{lred(e.value)}' for the key '#{yellow(e.key)}'."
20
- when :not_an_email
21
- red("Invalid email address") + " '#{lred(e.value)}' for the key '#{yellow(e.key)}'."
22
- when :not_a_url
23
- red("Invalid url") + " '#{lred(e.value)}' for the key '#{yellow(e.key)}'."
24
- when :url_not_reachable
25
- red("Could not reach the url") + " '#{lred(e.value)}' for the key '#{yellow(e.key)}'."
26
- when :directory_not_found
27
- e.key ?
28
- red("Missing directory") + " '#{lred(e.value)}' for the key '#{yellow(e.key)}'." :
29
- red("Missing directory") + " '#{lred(e.value)}'."
30
- when :file_not_found
31
- e.key ?
32
- red("Missing file") + " '#{lred(e.value)}' for the key '#{yellow(e.key)}'." :
33
- red("Missing file") + " '#{lred(e.value)}'."
34
- when :mongoDB_server_not_found
35
- e.key ?
36
- red("Could not connect to the mongoDb server") + " '#{lred(e.value)} for the key '#{yellow(e.key)}'." :
37
- red("Could not connect to the mongoDb server") + " '#{lred(e.value)}."
38
- when :mongoDB_db_not_found
39
- e.key ?
40
- red("Could not open the mongoDb db") + " '#{lred(e.value)} for the key '#{yellow(e.key)}'." :
41
- red("Could not open the mongoDb db") + " '#{lred(e.value)}."
42
- when :active_record_db_connection_error
43
- e.key ?
44
- red("Could not connect to the DB server") + " '#{lred(e.value)} for the key '#{yellow(e.key)}'." :
45
- red("Could not connect to the DB server") + " '#{lred(e.value)}."
46
- when :fail
47
- red(lred(e.value))
48
- else "%-38s %-35s %-30s \n" % [ e.kind, e.key, lred(e.value)]
49
- end
50
-
51
- %>| <%= @msg + "\n"%><% end
52
- %>+------------------------------------------------------------------------------------------
12
+ <% end %>| <%= @errors.collect{|e| default_message_for(e)}.join("\n| ") %>
13
+ +------------------------------------------------------------------------------------------
@@ -1,5 +1,11 @@
1
1
  class FailFast::ErrorDetails < Struct.new(:key, :kind, :value)
2
2
 
3
+ attr_reader :key, :kind, :value
4
+
5
+ def initialize(key, kind, value=nil)
6
+ @key, @kind, @value = key, kind, value
7
+ end
8
+
3
9
  def has_key_and_kind?(akey, akind)
4
10
  (key.to_s == akey.to_s) && kind.to_sym == akind.to_sym
5
11
  end
data/show_all_errors.rb CHANGED
@@ -60,6 +60,9 @@ FailFast(SPEC_DIR + '/fixtures/simple.yml').check_now.but_fail_later do
60
60
  file_exists '/tmp/foo/bar/??nOTaFile' # not a file
61
61
  file_exists_for 'test/a_directory' # not a file
62
62
 
63
+ is_on_path '_why'
64
+ is_on_path_for 'app_not_on_path'
65
+
63
66
  #test mondoDB
64
67
  fake_mongo_server_absent
65
68
  has_mongoDB '10.0.0.123', :timeout => 1 # no mongo server at this address
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+
4
+ describe 'is_on_path' do
5
+
6
+ context '' do
7
+ it_should_not_raise_an_error('when the app is on the path') {
8
+ is_on_path 'ls'
9
+ }
10
+
11
+ it_should_raise_a_direct_error('ls987654321', :not_on_path, 'when the app is not on the path' ) {
12
+ is_on_path 'ls987654321'
13
+ }
14
+ end
15
+
16
+ context '_for' do
17
+ it_should_not_raise_an_error('when the app is on the path') {
18
+ is_on_path_for 'app_on_path'
19
+ }
20
+
21
+ it_should_raise_an_error('app_not_on_path', :not_on_path, 'when the app is not on the path' ) {
22
+ is_on_path_for 'app_not_on_path'
23
+ }
24
+ end
25
+
26
+ end
@@ -1,6 +1,8 @@
1
1
  first_key: premier
2
2
  key_with_blank_value: <%= '' %>
3
3
  last_key: dernier
4
+ app_on_path: ls
5
+ app_not_on_path: ls0123
4
6
  test:
5
7
  host: localhost
6
8
  url: http://example.com/index.html
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: 19
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.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-17 00:00:00 +02:00
18
+ date: 2010-07-22 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -82,12 +82,14 @@ files:
82
82
  - fail_fast.gemspec
83
83
  - lib/fail_fast.rb
84
84
  - lib/fail_fast/base/base.rb
85
+ - lib/fail_fast/base/messaging.rb
85
86
  - lib/fail_fast/base/utils.rb
86
87
  - lib/fail_fast/base/z_only_for_tests.rb
87
88
  - lib/fail_fast/extensions/base_commands.rb
88
89
  - lib/fail_fast/extensions/check_active_record_db.rb
89
90
  - lib/fail_fast/extensions/check_email.rb
90
91
  - lib/fail_fast/extensions/check_file_system.rb
92
+ - lib/fail_fast/extensions/check_is_on_path.rb
91
93
  - lib/fail_fast/extensions/check_mongo_db.rb
92
94
  - lib/fail_fast/extensions/check_url.rb
93
95
  - lib/fail_fast/extensions/check_value.rb
@@ -107,6 +109,7 @@ files:
107
109
  - spec/extensions/check_active_record_db_spec.rb
108
110
  - spec/extensions/check_email_spec.rb
109
111
  - spec/extensions/check_file_system_spec.rb
112
+ - spec/extensions/check_is_on_path_spec.rb
110
113
  - spec/extensions/check_mongo_db_spec.rb
111
114
  - spec/extensions/check_url_spec.rb
112
115
  - spec/extensions/check_value_spec.rb
@@ -160,6 +163,7 @@ test_files:
160
163
  - spec/extensions/check_active_record_db_spec.rb
161
164
  - spec/extensions/check_email_spec.rb
162
165
  - spec/extensions/check_file_system_spec.rb
166
+ - spec/extensions/check_is_on_path_spec.rb
163
167
  - spec/extensions/check_mongo_db_spec.rb
164
168
  - spec/extensions/check_url_spec.rb
165
169
  - spec/extensions/check_value_spec.rb