Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

hashr

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hashr

  • 2.0.1
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

Build Status

Hashr

Hashr is a very simple and tiny class which makes using nested hashes for configuration (and other purposes) easier.

It supports the following features:

  • method read and write access
  • automatic predicate (boolean, i.e. ?) methods
  • easy defaults
  • indifferent (strings vs symbols) keys

Usage

Directly use Hashr instances like this:

config = Hashr.new(foo: { bar: 'bar' })

config.foo?     # => true
config.foo      # => { bar: 'bar' }

config.foo.bar? # => true
config.foo.bar  # => 'bar'

config.foo.bar = 'bar'
config.foo.bar # => 'bar'

config.foo.baz = 'baz'
config.foo.baz # => 'baz'

Hash core methods are not available but assume you mean to look up keys with the same name:

config = Hashr.new(count: 1, key: 'key')
config.count # => 1
config.key   # => 'key'

In order to check a hash stored on a certain key you can convert it to a Ruby Hash:

config = Hashr.new(count: 1, key: 'key')
config.to_h.count # => 2
config.to_h.key   # => raises ArgumentError: "wrong number of arguments (0 for 1)"

Missing keys won't raise an exception but instead behave like Hash access:

config = Hashr.new
config.foo? # => false
config.foo  # => nil

Defaults

Defaults can be defined per class:

class Config < Hashr
  default boxes: { memory: '1024' }
end

config = Config.new
config.boxes.memory # => 1024

Or passed to the instance:

data = {}
defaults = { boxes: { memory: '1024' } }

config = Hashr.new(data, defaults)
config.boxes.memory # => 1024

Environment defaults

Hashr includes a simple module that makes it easy to overwrite configuration defaults from environment variables:

class Config < Hashr
  extend Hashr::Env

  self.env_namespace = 'foo'

  default boxes: { memory: '1024' }
end

Now when an environment variable is defined then it will overwrite the default:

ENV['FOO_BOXES_MEMORY'] = '2048'
config = Config.new
config.boxes.memory # => '2048'

Other libraries

You also might want to check out OpenStruct and Hashie.

  • OpenStruct does less but comes as a Ruby standard library.
  • Hashie has a bunch of support classes (like Mash, Dash, Trash) which all support different features that you might need.

License

MIT License

FAQs

Package last updated on 11 Apr 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc