Guest User

Untitled

a guest
Feb 20th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. module Blackbox
  2.  
  3. class Registry
  4. module Query
  5. def registry
  6. @registry ||= Blackbox::Registry.new
  7. end
  8.  
  9. def configure
  10. yield registry
  11. registry
  12. end
  13. end
  14.  
  15. extend Blackbox::Registry::Query
  16.  
  17. def initialize(default={})
  18. @data = default.with_indifferent_access
  19. end
  20.  
  21. def include?(*fields)
  22. field = fields.shift
  23. return @data.has_key?(field) if fields.empty?
  24. @data[field].include?(*fields)
  25. end
  26.  
  27. def set!(field, value)
  28. @data[field] = value
  29. define_hash_accessor! field
  30. value
  31. end
  32.  
  33. private
  34.  
  35. def define_hash_accessor!(field)
  36. self.instance_eval <<-EODEF
  37. def #{field}
  38. if block_given?
  39. returning(Blackbox::Registry.new) do |registry|
  40. @data[:#{field}] = registry
  41. yield registry
  42. end
  43. else
  44. return @data[:#{field}]
  45. end
  46. end
  47.  
  48. def #{field}=(value)
  49. @data[:#{field}] = value
  50. end
  51. EODEF
  52. end
  53.  
  54. def method_missing(method, *args)
  55. if method.to_s =~ /=$/
  56. method = method.to_s.gsub('=', '').to_sym
  57. set! method, args.first
  58. elsif block_given?
  59. registry = Blackbox::Registry.new
  60. yield registry
  61. set! method, registry
  62. else
  63. set! method, nil
  64. end
  65. end
  66. end
  67. end
Add Comment
Please, Sign In to add comment