CircleCI

BlackHoleStruct

BlackHoleStruct is a data structure similar to an OpenStruct that allows:

  • infinite chaining of attributes or autovivification
  • deep merging of BlackHoleStruct/Hash

Installation

Add it to your Gemfile:

gem "black_hole_struct"

Or install the gem manually:

$ gem install black_hole_struct

Basic Usage

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"
# }

Is it any good

Yes

Advanced usage

Check the documentation.