BlackHoleStruct is a data structure similar to an OpenStruct
that allows:
- infinite chaining of attributes or autovivification
- deep merging of BlackHoleStruct/Hash
Add it to your Gemfile:
gem "black_hole_struct"
Or install the gem manually:
$ gem install black_hole_struct
require "black_hole_struct"
config = BlackHoleStruct.new
config.dashboard.theme = "white"
config.dashboard.time.from = "now-1h"
config.dashboard.time.to = "now"
puts config.dashboard.theme # "white"
puts config.dashboard.time # #<BlackHoleStruct :from="now-1h" :to="now">
puts config.dashboard.time.from # "now-1h"
config[:connection][:host] = "localhost"
config[:connection][:port] = 3000
puts config.to_h
# {
# connection: {
# host: "localhost",
# port: 3000
# }
# dashboard: {
# theme: "white",
# time: {
# from: "now-1h",
# to: "now"
# }
# }
# }
config = BlackHoleStruct.new(theme: "white", connection: {port: 3000})
config.deep_merge!(connection: {host: 'localhost'})
puts config.to_h
# {
# connection: {
# host: "localhost",
# port: 3000
# }
# theme: "white"
# }
Check the documentation.