Sha256: 67f4cb770a7386f055ad3b9fc542b018d635790aed7d86be4be3efe440170f98

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

require 'hashie/mash'

module Hashie
  class Mash::Rash < Mash
    protected

    def convert_key(key) #:nodoc:
      underscore_string(key.to_s)
    end

    # Unlike its parent Mash, a Rash will convert other Hashie::Hash values to a Rash when assigning
    # instead of respecting the existing subclass
    def convert_value(val, duping = false) #:nodoc:
      case val
      when self.class
        val.dup
      when ::Hash
        val = val.dup if duping
        self.class.new(val)
      when Array
        val.collect { |e| convert_value(e) }
      else
        val
      end
    end

    # converts a camel_cased string to a underscore string
    # subs spaces with underscores, strips whitespace
    # Same way ActiveSupport does string.underscore
    def underscore_string(str)
      str.to_s.strip
        .gsub(' ', '_')
        .gsub(/::/, '/')
        .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
        .gsub(/([a-z\d])([A-Z])/, '\1_\2')
        .tr('-', '_')
        .squeeze('_')
        .downcase
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nexmos-0.3 lib/hashie/mash/rash.rb