Sha256: e70227cf49a4869f66dbbd5cda68087b96e65e2717a03929018f6a318f9a31b3

Contents?: true

Size: 812 Bytes

Versions: 2

Compression:

Stored size: 812 Bytes

Contents

require 'delegate'

module Saneitized

  class Hash < ::SimpleDelegator

    def initialize(hash = {}, options = {})
      @options = options
      @key_blacklist = Array(options.fetch(:key_blacklist){[]})
      new_hash = {}
      hash.each do |key, value|
        new_hash[sane_key(key)] = convert_key_value(key, value)
      end
      super(new_hash)
      self
    end

    def []=(key, value)
      super key, Saneitized.convert(value, @options)
    end

    def merge!(*args, &block)
      raise NotImplementedError
    end

    private

    def sane_key(key)
      @options[:saneitize_keys] ? Saneitized.convert(key) : key
    end

    def convert_key_value(key, value)
      if @key_blacklist.include? key
        value
      else
        Saneitized.convert(value, @options)
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
saneitized-2.0.0 lib/saneitized/hash.rb
saneitized-1.5.0 lib/saneitized/hash.rb