Sha256: e40db6aa4bbc7616894baa736f41c121c694fa2bb36ec695b1c0a579b9d55dbc

Contents?: true

Size: 1.53 KB

Versions: 13

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

module Esse
  module Search
    class Query
      module DSL
        def limit(value)
          return self if value.to_i <= 0

          mutate do |defn|
            defn.delete(:size)
            if (body = defn[:body]).is_a?(Hash)
              body[body.key?('size') ? 'size' : :size] = value.to_i
            else
              defn.update(size: value.to_i)
            end
          end
        end

        def offset(value)
          return self if value.to_i < 0

          mutate do |defn|
            defn.delete(:from)
            if (body = defn[:body]).is_a?(Hash)
              body[body.key?('from') ? 'from' : :from] = value.to_i
            else
              defn.update(from: value.to_i)
            end
          end
        end

        def limit_value
          raw_limit_value || 10
        end

        def offset_value
          raw_offset_value || 0
        end

        private

        def mutate(&block)
          relation = clone
          relation.send(:reset!)
          relation.instance_variable_set(:@definition, HashUtils.deep_dup(definition))
          relation.instance_exec(relation.definition, &block) if block
          relation
        end

        def raw_limit_value
          definition.dig(:body, :size) || definition.dig(:body, 'size') || definition.dig(:size) || definition.dig('size')
        end

        def raw_offset_value
          definition.dig(:body, :from) || definition.dig(:body, 'from') || definition.dig(:from) || definition.dig('from')
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
esse-0.4.0.rc4 lib/esse/search/query/dsl.rb
esse-0.4.0.rc3 lib/esse/search/query/dsl.rb
esse-0.4.0.rc2 lib/esse/search/query/dsl.rb
esse-0.4.0.rc1 lib/esse/search/query/dsl.rb
esse-0.3.5 lib/esse/search/query/dsl.rb
esse-0.3.4 lib/esse/search/query/dsl.rb
esse-0.3.3 lib/esse/search/query/dsl.rb
esse-0.3.2 lib/esse/search/query/dsl.rb
esse-0.3.1 lib/esse/search/query/dsl.rb
esse-0.3.0 lib/esse/search/query/dsl.rb
esse-0.2.6 lib/esse/search/query/dsl.rb
esse-0.2.5 lib/esse/search/query/dsl.rb
esse-0.2.4 lib/esse/search/query/dsl.rb