cook 2.0.3 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cook.rb +1 -1
- data/lib/rake/config.rb +141 -1
- metadata +2 -2
data/lib/cook.rb
CHANGED
data/lib/rake/config.rb
CHANGED
@@ -11,6 +11,107 @@ require 'fileutils';
|
|
11
11
|
require 'cook';
|
12
12
|
#require 'regexp';
|
13
13
|
|
14
|
+
class ConfStack
|
15
|
+
|
16
|
+
def initialize(object, method, *args)
|
17
|
+
@confStack = Array.new;
|
18
|
+
calling(object, method, args);
|
19
|
+
end
|
20
|
+
|
21
|
+
def calling(object, method, where, *args)
|
22
|
+
@confStack.push([object, method, where, args]) unless
|
23
|
+
!@confStack.empty? &&
|
24
|
+
@confStack.last[0] == object &&
|
25
|
+
@confStack.last[1] == method;
|
26
|
+
end
|
27
|
+
|
28
|
+
def reportNoMethodError(errorObject)
|
29
|
+
|
30
|
+
# Take off the base object (Conf) so that we can use it later to
|
31
|
+
# get the missingKey messages
|
32
|
+
#
|
33
|
+
confObj = @confStack.shift()[0];
|
34
|
+
|
35
|
+
# Take of the top of the configure stack so we can treat it as the
|
36
|
+
# message which was not found.
|
37
|
+
#
|
38
|
+
top = @confStack.pop();
|
39
|
+
|
40
|
+
# Compute the full configuration path to report to the user
|
41
|
+
#
|
42
|
+
confPath = "Conf";
|
43
|
+
@confStack.each do | aStackLevel |
|
44
|
+
confPath << '.' + aStackLevel[1].to_s;
|
45
|
+
end
|
46
|
+
|
47
|
+
# Start by dumping the problem together with the FULL backtrace for
|
48
|
+
# any experienced user.
|
49
|
+
#
|
50
|
+
Rake::Application.mesg ""
|
51
|
+
Rake::Application.mesg "Could not find the key [#{top[1].to_s}]";
|
52
|
+
Rake::Application.mesg "in the configuration path [#{confPath}]\n\n";
|
53
|
+
|
54
|
+
Rake::Application.mesg errorObject.backtrace.join("\n");
|
55
|
+
|
56
|
+
# Now construct a more user friendly discussion of the problem for
|
57
|
+
# novice users.
|
58
|
+
#
|
59
|
+
# Start with the problem...
|
60
|
+
#
|
61
|
+
Rake::Application.mesg ""
|
62
|
+
Rake::Application.mesg "=================================================================";
|
63
|
+
Rake::Application.mesg ""
|
64
|
+
Rake::Application.mesg "Could not find the key [#{top[1].to_s}]";
|
65
|
+
Rake::Application.mesg "in the configuration path [#{confPath}]\n\n";
|
66
|
+
|
67
|
+
# Now collect the parameter lines they will need to specify
|
68
|
+
# together with any missingKey messages (in reverse order) that the
|
69
|
+
# configuration might have specified.
|
70
|
+
#
|
71
|
+
missingKey = confObj.missingKey;
|
72
|
+
messages = Array.new;
|
73
|
+
parameterLines = Array.new;
|
74
|
+
indent = "";
|
75
|
+
@confStack.each do | aStackLevel |
|
76
|
+
parameterLines.push(indent + aStackLevel[1].to_s + ':');
|
77
|
+
indent += " ";
|
78
|
+
missingKey = missingKey[aStackLevel[1]] if missingKey.has_key?(aStackLevel[1]);
|
79
|
+
messages.unshift(missingKey.delete(:message)) if missingKey.has_key?(:message);
|
80
|
+
end
|
81
|
+
|
82
|
+
# Start by printing out any missingKey messages for the missing key
|
83
|
+
# itself.
|
84
|
+
#
|
85
|
+
missingKey = missingKey[top[1]] if missingKey.has_key?(top[1]);
|
86
|
+
Rake::Application.mesg missingKey[:message] if missingKey.has_key?(:message);
|
87
|
+
|
88
|
+
# Now provide a template of the configuration path that seems to be
|
89
|
+
# missing together with any specific valueMessage associated with
|
90
|
+
# the missing key.
|
91
|
+
#
|
92
|
+
Rake::Application.mesg ""
|
93
|
+
Rake::Application.mesg "Please ensure your configuration contains the following lines"
|
94
|
+
parameterLines.push(indent + top[1].to_s + ': <<value>>');
|
95
|
+
Rake::Application.mesg "-----------------------------------------------------------------";
|
96
|
+
Rake::Application.mesg parameterLines.join("\n");
|
97
|
+
Rake::Application.mesg "-----------------------------------------------------------------";
|
98
|
+
Rake::Application.mesg missingKey[:valueMessage] if missingKey.has_key?(:valueMessage);
|
99
|
+
|
100
|
+
# Now provide any additional configuration messages found most
|
101
|
+
# specific first.
|
102
|
+
#
|
103
|
+
Rake::Application.mesg ""
|
104
|
+
Rake::Application.mesg messages.join("\n\n");
|
105
|
+
Rake::Application.mesg ""
|
106
|
+
|
107
|
+
# Now exit since there is nothing else we can usefully do to
|
108
|
+
# recover
|
109
|
+
#
|
110
|
+
exit(-1);
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
14
115
|
class Construct
|
15
116
|
|
16
117
|
def empty?()
|
@@ -29,6 +130,23 @@ class Construct
|
|
29
130
|
@data.each_key(*args, &block)
|
30
131
|
end
|
31
132
|
|
133
|
+
alias_method :orig_method_missing, :method_missing;
|
134
|
+
def method_missing(meth, *args)
|
135
|
+
Thread.current[:confStack].calling(self, meth, :method_missing, args);
|
136
|
+
begin
|
137
|
+
resultObject = orig_method_missing(meth, *args);
|
138
|
+
rescue NoMethodError => errorObject
|
139
|
+
Thread.current[:confStack].reportNoMethodError(errorObject);
|
140
|
+
end
|
141
|
+
resultObject
|
142
|
+
end
|
143
|
+
|
144
|
+
alias_method :orig_key_lookup, :[] ;
|
145
|
+
def [](key)
|
146
|
+
Thread.current[:confStack].calling(self, key, :key_lookup);
|
147
|
+
orig_key_lookup(key)
|
148
|
+
end
|
149
|
+
|
32
150
|
alias_method :orig_key_value_assignment, :[]= ;
|
33
151
|
def []=(key, value)
|
34
152
|
value = Hash.new() if value.nil?;
|
@@ -114,10 +232,14 @@ class Conf
|
|
114
232
|
end
|
115
233
|
|
116
234
|
def self.data
|
235
|
+
Thread.current[:confStack] = ConfStack.new(self, :Conf);
|
236
|
+
Thread.current[:confStack].calling(@@data, :data, :data);
|
117
237
|
return @@data;
|
118
238
|
end
|
119
239
|
|
120
240
|
def self.encryptedData
|
241
|
+
Thread.current[:confStack] = ConfStack.new(self, :Conf);
|
242
|
+
Thread.current[:confStack].calling(@@encryptedData, :encryptedData, :encryptedData);
|
121
243
|
return @@encryptedData;
|
122
244
|
end
|
123
245
|
|
@@ -175,6 +297,7 @@ class Conf
|
|
175
297
|
end
|
176
298
|
|
177
299
|
def self.method_missing(meth, *args)
|
300
|
+
Thread.current[:confStack] = ConfStack.new(self, :Conf, args);
|
178
301
|
meth_s = meth.to_s
|
179
302
|
if @@data.respond_to?(meth) ||
|
180
303
|
@@data.data.has_key?(meth) ||
|
@@ -182,7 +305,8 @@ class Conf
|
|
182
305
|
meth_s[-1..-1] == '='then
|
183
306
|
@@data.method_missing(meth, *args);
|
184
307
|
else
|
185
|
-
|
308
|
+
self.reportNoMethodError();
|
309
|
+
#raise ConfigurationError, "No configuation value specified for Conf[#{meth.to_s}]";
|
186
310
|
end
|
187
311
|
end
|
188
312
|
|
@@ -650,6 +774,22 @@ self.extend Rake::DSL
|
|
650
774
|
#Conf.rsync.cmdOptions = Array.new;
|
651
775
|
set_command_options(:all);
|
652
776
|
|
777
|
+
# Ensure we have the basic missingKey error messages
|
778
|
+
Conf.missingKey = Hash.new;
|
779
|
+
Conf.missingKey.global = Hash.new;
|
780
|
+
Conf.missingKey.global.message = <<END_OF_MESSAGE
|
781
|
+
Global parameters are usually set in the cookbook.conf YAML file
|
782
|
+
contained in the .cookbook directory in your home directory.
|
783
|
+
END_OF_MESSAGE
|
784
|
+
Conf.missingKey.global.cookbook = Hash.new;
|
785
|
+
Conf.missingKey.global.cookbook.message = <<END_OF_MESSAGE
|
786
|
+
The cookbook configuration parameter needs to be set to the location of
|
787
|
+
the appropriate cookbook.
|
788
|
+
END_OF_MESSAGE
|
789
|
+
Conf.missingKey.global.cookbook.valueMessage = <<END_OF_MESSAGE
|
790
|
+
where <<value>> is the full path to the approprate cookbook directory.
|
791
|
+
END_OF_MESSAGE
|
792
|
+
|
653
793
|
# Ensure the gpg hash exists (but may be empty)
|
654
794
|
Conf.gpg = Hash.new;
|
655
795
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|