Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Add Comment
Please, Sign In to add comment