Sha256: 210be9c12e49ab708038328d49b8be7d71fa694183ce8750b636ea27cca72ba5

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

module SearchObject
  # :api: private
  module Helper
    class << self
      def stringify_keys(hash)
        # Note(rstankov): From Rails 5+ ActionController::Parameters aren't Hash
        #   In a lot of cases `stringify_keys` is used on action params
        hash = hash.to_unsafe_h if hash.respond_to? :to_unsafe_h
        Hash[(hash || {}).map { |k, v| [k.to_s, v] }]
      end

      def slice_keys(hash, keys)
        keys.inject({}) do |memo, key|
          memo[key] = hash[key] if hash.key? key
          memo
        end
      end

      def camelize(text)
        text.to_s.gsub(/(?:^|_)(.)/) { Regexp.last_match[1].upcase }
      end

      def ensure_included(item, collection)
        if collection.include? item
          item
        else
          collection.first
        end
      end

      def define_module(&block)
        Module.new do
          define_singleton_method :included do |base|
            base.class_eval(&block)
          end
        end
      end

      def normalize_search_handler(handler, name)
        case handler
        when Symbol then ->(scope, value) { method(handler).call scope, value }
        when Proc then handler
        else ->(scope, value) { scope.where name => value unless value.blank? }
        end
      end

      def deep_copy(object) # rubocop:disable Metrics/MethodLength
        case object
        when Array
          object.map { |element| deep_copy(element) }
        when Hash
          object.inject({}) do |result, (key, value)|
            result[key] = deep_copy(value)
            result
          end
        when NilClass, FalseClass, TrueClass, Symbol, Method, Numeric
          object
        else
          object.dup
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
search_object-1.1.2 lib/search_object/helper.rb