Skip to content

Instantly share code, notes, and snippets.

@bguthrie
Created September 16, 2008 23:56
Show Gist options
  • Save bguthrie/11168 to your computer and use it in GitHub Desktop.
Save bguthrie/11168 to your computer and use it in GitHub Desktop.
module Blackbox
class Registry
module Query
def registry
@registry ||= Blackbox::Registry.new
end
def configure
yield registry
registry
end
end
extend Blackbox::Registry::Query
def initialize(default={})
@data = default.with_indifferent_access
end
def include?(*fields)
field = fields.shift
return @data.has_key?(field) if fields.empty?
@data[field].include?(*fields)
end
def set!(field, value)
@data[field] = value
define_hash_accessor! field
value
end
private
def define_hash_accessor!(field)
self.instance_eval <<-EODEF
def #{field}
if block_given?
returning(Blackbox::Registry.new) do |registry|
@data[:#{field}] = registry
yield registry
end
else
return @data[:#{field}]
end
end
def #{field}=(value)
@data[:#{field}] = value
end
EODEF
end
def method_missing(method, *args)
if method.to_s =~ /=$/
method = method.to_s.gsub('=', '').to_sym
set! method, args.first
elsif block_given?
registry = Blackbox::Registry.new
yield registry
set! method, registry
else
set! method, nil
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment