Sha256: b6b083354f4baffa37fb04410837c3fa3e9db8e29118d2cb700f0928aa594434
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
module Plucky module Normalizers class SortValue # Public: Initializes a Plucky::Normalizers::SortValue # # args - The hash of arguments # :key_normalizer - What to use to normalize keys, must # respond to call. # def initialize(args = {}) @key_normalizer = args.fetch(:key_normalizer) { raise ArgumentError, "Missing required key :key_normalizer" } end # Public: Given a value returns it normalized for Mongo's sort option def call(value) case value when Array if value.size == 1 && value[0].is_a?(String) normalized_sort_piece(value[0]) else value.compact.inject({}) { |acc, v| acc.merge(normalized_sort_piece(v)) } end else normalized_sort_piece(value) end end # Private def normalized_sort_piece(value) case value when SymbolOperator normalized_direction(value.field, value.operator) when String value.split(',').inject({}) do |acc, piece| acc.merge(normalized_direction(*piece.split(' '))) end when Symbol normalized_direction(value) when Array Hash[*value] else value end end # Private def normalized_direction(field, direction=nil) direction ||= 'ASC' direction = direction.upcase == 'ASC' ? 1 : -1 {@key_normalizer.call(field).to_s => direction} end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
plucky-0.8.0 | lib/plucky/normalizers/sort_value.rb |