Sha256: 2e9cefa607a582803028cf6f5cfd20c76947858a0d8391a2b3f9e28beb64c755
Contents?: true
Size: 1.21 KB
Versions: 13
Compression:
Stored size: 1.21 KB
Contents
module Hashie2 module Extensions # The Structure extension provides facilities for declaring # properties that a Hash can have. This provides for the # creation of structures that still behave like hashes but # do not allow setting non-allowed keys. # # @example # class RestrictedHash < Hash # include Hashie2::Extensions::MergeInitializer # include Hashie2::Extensions::Structure # # key :first # key :second, :default => 'foo' # end # # h = RestrictedHash.new(:first => 1) # h[:first] # => 1 # h[:second] # => 'foo' # h[:third] # => ArgumentError # module Structure def self.included(base) base.extend ClassMethods base.class_eval do @permitted_keys = superclass.permitted_keys if superclass.respond_to?(:permitted_keys) end end module ClassMethods def key(key, options = {}) (@permitted_keys ||= []) << key if options[:default] (@default_values ||= {})[key] = options.delete(:default) end permitted_keys end def permitted_keys @permitted_keys end end end end end
Version data entries
13 entries across 13 versions & 1 rubygems