caesars 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +4 -0
- data/caesars.gemspec +1 -2
- data/lib/caesars.rb +59 -14
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
CAESARS -- CHANGES
|
2
2
|
|
3
3
|
|
4
|
+
#### 0.6.1 (2009-05-02) ###############################
|
5
|
+
|
6
|
+
* ADDED: known_symbol? and known_symbol_by_glass?
|
7
|
+
|
4
8
|
#### 0.6.0 (2009-04-30) ###############################
|
5
9
|
|
6
10
|
* ADDED: Forced reloading for Caesars::Config.refresh. This allows
|
data/caesars.gemspec
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
@spec = Gem::Specification.new do |s|
|
2
2
|
s.name = "caesars"
|
3
3
|
s.rubyforge_project = "caesars"
|
4
|
-
s.version = "0.6.
|
5
|
-
s.date = "2009-04-30"
|
4
|
+
s.version = "0.6.1"
|
6
5
|
s.specification_version = 1 if s.respond_to? :specification_version=
|
7
6
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
7
|
|
data/lib/caesars.rb
CHANGED
@@ -12,6 +12,8 @@ class Caesars
|
|
12
12
|
@@chilled = {}
|
13
13
|
@@forced_array = {}
|
14
14
|
@@forced_ignore = {}
|
15
|
+
@@known_symbols = []
|
16
|
+
@@known_symbols_by_glass = {}
|
15
17
|
|
16
18
|
def Caesars.enable_debug; @@debug = true; end
|
17
19
|
def Caesars.disable_debug; @@debug = false; end
|
@@ -35,6 +37,24 @@ class Caesars
|
|
35
37
|
@@forced_ignore.has_key?(name.to_sym)
|
36
38
|
end
|
37
39
|
|
40
|
+
# Add +s+ to the list of global symbols (across all instances of Caesars)
|
41
|
+
def Caesars.add_known_symbol(g, s)
|
42
|
+
g = Caesars.glass(g)
|
43
|
+
STDERR.puts "add_symbol: #{g} => #{s}" if Caesars.debug?
|
44
|
+
@@known_symbols << s.to_sym
|
45
|
+
@@known_symbols_by_glass[g] ||= []
|
46
|
+
@@known_symbols_by_glass[g] << s.to_sym
|
47
|
+
end
|
48
|
+
|
49
|
+
# Is +s+ in the global keyword list? (accross all instances of Caesars)
|
50
|
+
def Caesars.known_symbol?(s); @@known_symbols.member?(s.to_sym); end
|
51
|
+
# Is +s+ in the keyword list for glass +g+?
|
52
|
+
def Caesars.known_symbol_by_glass?(g, s)
|
53
|
+
g &&= g.to_sym
|
54
|
+
@@known_symbols_by_glass[g] ||= []
|
55
|
+
@@known_symbols_by_glass[g].member?(s.to_sym)
|
56
|
+
end
|
57
|
+
|
38
58
|
# A subclass of ::Hash that provides method names for hash parameters.
|
39
59
|
# It's like a lightweight OpenStruct.
|
40
60
|
# ch = Caesars::Hash[:tabasco => :lots!]
|
@@ -79,14 +99,11 @@ class Caesars
|
|
79
99
|
init if respond_to?(:init)
|
80
100
|
end
|
81
101
|
|
82
|
-
# Returns an array of the available
|
83
|
-
def keys
|
84
|
-
@caesars_properties.keys
|
85
|
-
end
|
102
|
+
# Returns an array of the available top-level attributes
|
103
|
+
def keys; @caesars_properties.keys; end
|
86
104
|
|
87
|
-
|
88
|
-
|
89
|
-
end
|
105
|
+
# Returns the parsed tree as a regular hash (instead of a Caesars::Hash)
|
106
|
+
def to_hash; @caesars_properties.to_hash; end
|
90
107
|
|
91
108
|
# DEPRECATED -- use find_deferred
|
92
109
|
#
|
@@ -233,11 +250,31 @@ class Caesars
|
|
233
250
|
@caesars_properties[name] = value
|
234
251
|
end
|
235
252
|
|
253
|
+
# Add +keyword+ to the list of known symbols for this instances
|
254
|
+
# as well as to the master known symbols list. See: known_symbol?
|
255
|
+
def add_known_symbol(s)
|
256
|
+
@@known_symbols << s.to_sym
|
257
|
+
@@known_symbols_by_glass[glass] ||= []
|
258
|
+
@@known_symbols_by_glass[glass] << s.to_sym
|
259
|
+
end
|
260
|
+
|
261
|
+
# Has +s+ already appeared as a keyword in the DSL for this glass type?
|
262
|
+
def known_symbol?(s)
|
263
|
+
@@known_symbols_by_glass[glass] && @@known_symbols_by_glass[glass].member?(s)
|
264
|
+
end
|
265
|
+
|
266
|
+
# Returns the lowercase name of the class. i.e. Some::Taste # => taste
|
267
|
+
def glass; @glass ||= (self.class.to_s.split(/::/))[-1].downcase.to_sym; end
|
268
|
+
|
269
|
+
# Returns the lowercase name of +klass+. i.e. Some::Taste # => taste
|
270
|
+
def self.glass(klass); (klass.to_s.split(/::/))[-1].downcase.to_sym; end
|
271
|
+
|
236
272
|
# This method handles all of the attributes that are not forced hashes
|
237
273
|
# It's used in the DSL for handling attributes dyanamically (that weren't defined
|
238
274
|
# previously) and also in subclasses of Caesars for returning the appropriate
|
239
275
|
# attribute values.
|
240
276
|
def method_missing(meth, *args, &b)
|
277
|
+
add_known_symbol(meth)
|
241
278
|
if Caesars.forced_ignore?(meth)
|
242
279
|
STDERR.puts "Forced ignore: #{meth}" if Caesars.debug?
|
243
280
|
return
|
@@ -322,9 +359,12 @@ class Caesars
|
|
322
359
|
# end
|
323
360
|
#
|
324
361
|
def self.forced_hash(caesars_meth, &b)
|
362
|
+
STDERR.puts "forced_hash: #{caesars_meth}" if Caesars.debug?
|
363
|
+
Caesars.add_known_symbol(self, caesars_meth)
|
325
364
|
module_eval %Q{
|
326
365
|
def #{caesars_meth}(*caesars_names,&b)
|
327
366
|
this_meth = :'#{caesars_meth}'
|
367
|
+
add_known_symbol(this_meth)
|
328
368
|
if Caesars.forced_ignore?(this_meth)
|
329
369
|
STDERR.puts "Forced ignore: \#{this_meth}" if Caesars.debug?
|
330
370
|
return
|
@@ -380,6 +420,8 @@ class Caesars
|
|
380
420
|
# @food.count.call(3) # => 5
|
381
421
|
#
|
382
422
|
def self.chill(caesars_meth)
|
423
|
+
STDERR.puts "chill: #{caesars_meth}" if Caesars.debug?
|
424
|
+
Caesars.add_known_symbol(self, caesars_meth)
|
383
425
|
@@chilled[caesars_meth.to_sym] = true
|
384
426
|
nil
|
385
427
|
end
|
@@ -401,6 +443,7 @@ class Caesars
|
|
401
443
|
#
|
402
444
|
def self.forced_array(caesars_meth)
|
403
445
|
STDERR.puts "forced_array: #{caesars_meth}" if Caesars.debug?
|
446
|
+
Caesars.add_known_symbol(self, caesars_meth)
|
404
447
|
@@forced_array[caesars_meth.to_sym] = true
|
405
448
|
nil
|
406
449
|
end
|
@@ -420,6 +463,7 @@ class Caesars
|
|
420
463
|
#
|
421
464
|
def self.forced_ignore(caesars_meth)
|
422
465
|
STDERR.puts "forced_ignore: #{caesars_meth}" if Caesars.debug?
|
466
|
+
Caesars.add_known_symbol(self, caesars_meth)
|
423
467
|
@@forced_ignore[caesars_meth.to_sym] = true
|
424
468
|
nil
|
425
469
|
end
|
@@ -438,6 +482,7 @@ class Caesars
|
|
438
482
|
def self.inherited(modname)
|
439
483
|
# NOTE: We may be able to replace this without an eval using Module.nesting
|
440
484
|
meth = (modname.to_s.split(/::/))[-1].downcase # Some::HighBall => highball
|
485
|
+
Caesars.add_known_symbol(meth, meth)
|
441
486
|
module_eval %Q{
|
442
487
|
module #{modname}::DSL
|
443
488
|
def #{meth}(*args, &b)
|
@@ -550,7 +595,9 @@ class Caesars::Config
|
|
550
595
|
@@glasses.each { |glass| extend glass }
|
551
596
|
|
552
597
|
begin
|
598
|
+
current_path = nil # used in error messages
|
553
599
|
@paths.each do |path|
|
600
|
+
current_path = path
|
554
601
|
puts "Loading config from #{path}" if @verbose || Caesars.debug?
|
555
602
|
dsl = File.read path
|
556
603
|
# eval so the DSL code can be executed in this namespace.
|
@@ -568,14 +615,12 @@ class Caesars::Config
|
|
568
615
|
STDERR.puts ex.message if Caesars.debug?
|
569
616
|
refresh
|
570
617
|
|
571
|
-
rescue Caesars::Error => ex
|
572
|
-
|
573
|
-
|
618
|
+
#rescue Caesars::Error => ex
|
619
|
+
# STDERR.puts ex.message
|
620
|
+
# STDERR.puts ex.backtrace if Caesars.debug?
|
574
621
|
rescue ArgumentError, SyntaxError => ex
|
575
|
-
STDERR.puts "Syntax error in #{
|
576
|
-
|
577
|
-
STDERR.puts ex.backtrace if Caesars.debug?
|
578
|
-
exit 1
|
622
|
+
STDERR.puts "Syntax error in #{current_path}."
|
623
|
+
raise ex
|
579
624
|
end
|
580
625
|
end
|
581
626
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caesars
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delano Mandelbaum
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-02 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|