module Hashie::Extensions::Dash::IndifferentAccess

def self.included(base)

def self.included(base)
  base.extend ClassMethods
  base.send :include, Hashie::Extensions::IndifferentAccess
end

def self.maybe_extend(base)

def self.maybe_extend(base)
  return unless requires_class_methods?(base)
  base.extend(ClassMethods)
end

def self.requires_class_methods?(klass)

def self.requires_class_methods?(klass)
  klass <= Hashie::Dash &&
    !klass.singleton_class.included_modules.include?(ClassMethods)
end

def to_h

def to_h
  defaults = ::Hash[self.class.properties.map do |prop|
    [Hashie::Extensions::IndifferentAccess.convert_key(prop), self.class.defaults[prop]]
  end]
  defaults.merge(self)
end