Sha256: cc4e0b2011791696226a5a1b77bfd540b242bc086662182e307b6d395308c804

Contents?: true

Size: 1.43 KB

Versions: 10

Compression:

Stored size: 1.43 KB

Contents

module Postmark
  module HashHelper

    extend self

    def to_postmark(object, options = {})
      deep = options.fetch(:deep, false)

      case object
      when Hash
        object.reduce({}) do |m, (k, v)|
          m.tap do |h|
            h[Inflector.to_postmark(k)] = deep ? to_postmark(v, options) : v
          end
        end
      when Array
        deep ? object.map { |v| to_postmark(v, options) } : object
      else
        object
      end
    end

    def to_ruby(object, options = {})
      compatible = options.fetch(:compatible, false)
      deep = options.fetch(:deep, false)

      case object
      when Hash
        object.reduce({}) do |m, (k, v)|
          m.tap do |h|
            h[Inflector.to_ruby(k)] = deep ? to_ruby(v, options) : v
          end
        end.tap do |result|
          if compatible
            result.merge!(object)
            enhance_with_compatibility_warning(result)
          end
        end
      when Array
        deep ? object.map { |v| to_ruby(v, options) } : object
      else
        object
      end
    end

    private

    def enhance_with_compatibility_warning(hash)
      def hash.[](key)
        if key.is_a? String
          Kernel.warn("Postmark: the CamelCased String keys of response are " \
                      "deprecated in favor of underscored symbols. The " \
                      "support will be dropped in the future.")
        end
        super
      end
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
postmark-1.25.1 lib/postmark/helpers/hash_helper.rb
postmark-1.25.0 lib/postmark/helpers/hash_helper.rb
postmark-1.24.1 lib/postmark/helpers/hash_helper.rb
postmark-1.24.0 lib/postmark/helpers/hash_helper.rb
postmark-1.23.0 lib/postmark/helpers/hash_helper.rb
postmark-1.22.3 lib/postmark/helpers/hash_helper.rb
postmark-1.22.2 lib/postmark/helpers/hash_helper.rb
postmark-1.22.1 lib/postmark/helpers/hash_helper.rb
postmark-1.22.0 lib/postmark/helpers/hash_helper.rb
postmark-1.21.8 lib/postmark/helpers/hash_helper.rb