0.0
No commit activity in last 3 years
No release in over 3 years
Provides some conveniences for validating and manipulating hash-like data.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

 Project Readme

HashControl

Build Status Code Climate

gem install hash_control

This Ruby library provides some conveniences for using and manipulating hash-like data.

Features

HashControl::Model is a class with

  • validation checking
  • getting and setting properties with both [] and accessor methods
  • setter methods can be omitted to prevent mutation
  • AwesomePrint support

Want just a single-use validator? Use HashControl::Validator.

Examples

Model

require 'hash_control'
class Comment
 include ::HashControl::Model
 require_key :author, :body, :date
 permit_key :image
end

require 'hash_control'
class Something
 include ::HashControl::Model
 require_key :id
 permit_all_keys
end

Comment.new(author: 'me', body: 'interesting stuff', date: Time.now)

Comment.new(body: "this ain't gonna fly")
# ArgumentError: extra params [:extra]
#   in {:body=>"this ain't gonna fly", :author=>"me", :date=>2014-01-01 00:00:00 -0000, :extra=>"hullo"}

Something.new(body: "this, however, will")
# ArgumentError: required params [:id] missing
#   in {:body=>"this, however, will"}

Something.new(id: 1, body: "oops my bad")

Validator

require 'hash_control'
get_request = {
  get: '/api/article/23/comment/34/show'
}
post_request = {
  post: '/api/article/23/comment/34/update',
  body: {
    date: Time.new,
    body: 'hullo',
    meta: 'fsdkfsifhdsfsdhkj'
  }
}
validator = ::HashControl::Validator.new(post_request)
validator.require(:post).permit(:body).only
# `permit` marks keys as allowed but doesn't do any verification
# `only` ensures no other keys are present

class CustomValidator < ::HashControl::Validator
  def validate_request
    require_one_of(:get, :post)
  end

  def validate_get_request
    validate_request.only
  end

  def validate_post_request
    validate_request.permit(:body).only
  end
end

CustomValidator.new(get_request).validate_get_request
CustomValidator.new(post_request).validate_post_request

Credit

HashControl was originally designed and written by @szhu at @IFTTT.