Sha256: 2ceaee66a9e565d8957b52bf94101edbdc5ab45fe8094d3133ad000b0cbb9c17

Contents?: true

Size: 1.42 KB

Versions: 13

Compression:

Stored size: 1.42 KB

Contents

module RocketJobMissionControl
  class Query
    attr_reader :scope
    attr_accessor :search_term, :order_by, :start, :page_size,
                  :search_columns, :display_columns

    def initialize(scope, order_by = nil)
      @scope           = scope
      @order_by        = order_by
      @search_columns  = []
      @display_columns = []
    end

    # Returns the filtered query expression with the sort applied
    def query
      # Sort must be applied last
      order_by ? unsorted_query.sort(order_by) : unsorted_query
    end

    # Count after applying search_term.
    # Pagination settings do not affect this count.
    def count
      unsorted_query.count
    end

    # Count before applying search term
    # Pagination settings do not affect this count.
    def unfiltered_count
      scope.count
    end

    private

    # Returns the filtered query expression
    def unsorted_query
      records = scope
      # Text Search
      if search_term
        escaped = Regexp.escape(search_term)
        regexp  = Regexp.new(escaped, Regexp::IGNORECASE)
        if search_columns.size == 1
          records = records.where(search_columns.first => regexp)
        else
          cols    = search_columns.collect { |col| {col => regexp} }
          records = records.where("$or" => cols)
        end
      end

      # Pagination
      records = records.skip(start).limit(page_size) if start && page_size
      records
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
rocketjob_mission_control-6.1.0 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.7 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.6 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.5 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.4 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.3 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.2 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.1 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.0 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-6.0.0.beta app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-5.0.1 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-5.0.0 app/models/rocket_job_mission_control/query.rb
rocketjob_mission_control-5.0.0.beta1 app/models/rocket_job_mission_control/query.rb