module Hawkei::Util

Constants

DATE_FORMAT
DEFAULT_OBJECT_DEF
OBFUSCATED

Public Class Methods

camelize(string) click to toggle source

Convert string to camelize

@param [String]

@example

camelize('my_model') => 'MyModel'
# File lib/hawkei/util.rb, line 27
def camelize(string)
  string.split('_').map(&:capitalize).join
end
compact(hash) click to toggle source

Remove nil value from hash

@return [Hash]

# File lib/hawkei/util.rb, line 35
def compact(hash)
  hash.reject { |_, value| value.nil? }
end
deep_compact(object) click to toggle source

Remove nil value from hash recursively

@return [Hash]

# File lib/hawkei/util.rb, line 43
def deep_compact(object)
  object.each_with_object({}) do |(key, value), result|
    if value.is_a?(Hash)
      value = deep_compact(value)
      result[key] = value if !value.nil? && !value.empty?
    else
      result[key] = value unless value.nil?
    end
  end
end
deep_obfuscate_value(object, fields, obfuscate_name = OBFUSCATED) click to toggle source

Deep remove key from hash

@param [Hash] hash to obfuscate

@return [Hash] hash obfuscated

# File lib/hawkei/util.rb, line 141
def deep_obfuscate_value(object, fields, obfuscate_name = OBFUSCATED)
  case object
  when Hash
    object.each_with_object({}) do |(key, value), result|
      result[key] = fields.include?(key.to_s) ? obfuscate_name : deep_obfuscate_value(value, fields)
    end
  when Array
    object.map { |e| deep_obfuscate_value(e, fields) }
  else
    object
  end
end
deep_stringify_key(hash_object) click to toggle source

Deep convert hash to string keys

@param [Hash] hash to transform

@return [Hash] transformed

# File lib/hawkei/util.rb, line 109
def deep_stringify_key(hash_object)
  deep_transform_keys_in_object(hash_object) do |key|
    begin
      key.to_s
    rescue StandardError => _e
      key
    end
  end
end
deep_symbolize_key(hash_object) click to toggle source

Deep convert hash to symbol keys

@param [Hash] hash to transform

@return [Hash] transformed

# File lib/hawkei/util.rb, line 125
def deep_symbolize_key(hash_object)
  deep_transform_keys_in_object(hash_object) do |key|
    begin
      key.to_sym
    rescue StandardError => _e
      key
    end
  end
end
deep_underscore_key(hash_object) click to toggle source

Deep convert hash to underscore case keys

@param [Hash] hash to transform

@return [Hash] transformed

# File lib/hawkei/util.rb, line 93
def deep_underscore_key(hash_object)
  deep_transform_keys_in_object(hash_object) do |key|
    begin
      underscore(key).to_sym
    rescue StandardError => _e
      key
    end
  end
end
encode_parameters(params = {}) click to toggle source

Encodes a hash of parameters in a way that's suitable for use as query parameters in a URI or as form parameters in a request body. This mainly involves escaping special characters from parameter keys and values (e.g. `&`).

# File lib/hawkei/util.rb, line 59
def encode_parameters(params = {})
  params.map { |k, v| "#{url_encode(k)}=#{url_encode(v)}" }.join('&')
end
except_keys(hash, *keys) click to toggle source

Remove keys from a Hash

@param [Hash] to be excepted @param [List] to be excepted

@return [Hash]

# File lib/hawkei/util.rb, line 16
def except_keys(hash, *keys)
  hash.dup.delete_if { |(key, _value)| keys.include?(key) }
end
safe_json_parse(data) click to toggle source

Parse JSON without raise

# File lib/hawkei/util.rb, line 157
def safe_json_parse(data)
  JSON.parse(data.to_s)
rescue JSON::ParserError
  {}
end
underscore(string) click to toggle source

Convert string to underscore

@param [String]

@example

underscore('MyModel') => 'my_model'
# File lib/hawkei/util.rb, line 78
def underscore(string)
  string
    .gsub(/::/, '/')
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .tr('-', '_')
    .downcase
end
url_encode(key) click to toggle source

Encodes a string in a way that makes it suitable for use in a set of query parameters in a URI or in a set of form parameters in a request body.

# File lib/hawkei/util.rb, line 67
def url_encode(key)
  CGI.escape(key.to_s).gsub('%5B', '[').gsub('%5D', ']')
end

Private Class Methods

deep_transform_keys_in_object(object) { |key| ... } click to toggle source
# File lib/hawkei/util.rb, line 165
def deep_transform_keys_in_object(object, &block)
  case object
  when Hash
    object.each_with_object({}) do |(key, value), result|
      result[yield(key)] = deep_transform_keys_in_object(value, &block)
    end
  when Array
    object.map { |e| deep_transform_keys_in_object(e, &block) }
  else
    object
  end
end