Sha256: 20d52c8495fa70227ea073f795d31486750dd89c28325aca79ea2b9e39d03905

Contents?: true

Size: 1.72 KB

Versions: 3

Compression:

Stored size: 1.72 KB

Contents

module Mollie
  module Util
    extend self

    def nested_underscore_keys(obj)
      if obj.is_a?(Hash)
        obj.each_with_object({}) do |(key, value), underscored|
          underscored[underscore(key)] = nested_underscore_keys(value)
        end
      elsif obj.is_a?(Array)
        obj.map { |v| nested_underscore_keys(v) }
      else
        obj
      end
    end

    def camelize_keys(hash)
      hash.each_with_object({}) do |(key, value), camelized|
        camelized[camelize(key)] = value
      end
    end

    def underscore(string)
      string.to_s.gsub(/::/, '/').
        gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
        gsub(/([a-z\d])([A-Z])/, '\1_\2').
        tr("-", "_").
        downcase.to_s
    end

    # Dirty pluralize function, but currently holds for all required plurals
    # Not worth to include another library like ActiveSupport
    def pluralize(string)
      "#{string}s"
    end

    def camelize(term)
      string = term.to_s
      string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { |match| match.downcase }
      string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }
      string.gsub!('/'.freeze, '::'.freeze)
      string
    end

    def nested_openstruct(obj)
      if obj.is_a?(Hash)
        obj.each_with_object(OpenStruct.new) do |(key, value), openstructed|
          openstructed[key] = nested_openstruct(value)
        end
      elsif obj.is_a?(Array)
        obj.map { |v| nested_openstruct(v) }
      else
        obj
      end
    end

    def extract_url(links, type)
      links && links[type] && links[type]['href']
    end

    def extract_id(links, type)
      href = extract_url(links, type)
      return if href.nil?
      uri = URI.parse(href)
      File.basename(uri.path)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mollie-api-ruby-4.0.0.pre.alpha.2 lib/mollie/util.rb
mollie-api-ruby-4.0.0 lib/mollie/util.rb
mollie-api-ruby-4.0.0.pre.alpha.1 lib/mollie/util.rb