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

Version Path
hashie-model-1.4.2 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.4.1 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.4.0 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.9 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.8 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.7 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.6 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.5 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.4 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.3 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.2 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.1 vendor/hashie2/lib/hashie2/extensions/structure.rb
hashie-model-1.3.0 vendor/hashie2/lib/hashie2/extensions/structure.rb