Sha256: f3ec594770c7ad76788027457c2b6a65701ef10aa6233d994a83e88257730484

Contents?: true

Size: 1.35 KB

Versions: 62

Compression:

Stored size: 1.35 KB

Contents

module Workarea
  class AdminQueryOperation
    include Enumerable

    attr_reader :options, :query_id, :ids, :exclude_ids
    delegate :params, :results, to: :query

    def initialize(options = {})
      @options = options.with_indifferent_access
      @query_id = @options[:query_id]
      @ids = Array.wrap(@options[:ids])
      @exclude_ids = Array.wrap(@options[:exclude_ids])
    end

    def query
      @query ||= GlobalID.find(query_id).tap do |query|
        query.params.merge!(options)
      end
    end

    def count
      if ids.any?
        (ids - exclude_ids).size
      else
        query.total - exclude_ids.size
      end
    end

    def use_query?
      ids.blank?
    end

    def each
      if use_query?
        create_query_to_perform_with.scroll do |results|
          results.each { |model| yield(model) unless exclude?(model) }
        end
      else
        GlobalID::Locator.locate_many(ids).each do |model|
          yield(model) unless exclude?(model)
        end
      end
    end

    private

    def create_query_to_perform_with(overrides = {})
      params = query.params.merge(overrides).merge(per_page: Workarea.config.bulk_action_per_page)
      query.class.new(params)
    end

    def exclude?(model)
      model.blank? ||
        model.to_global_id.to_param.in?(exclude_ids) ||
        model.to_global_id.in?(exclude_ids)
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.5.27 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.26 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.45 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.25 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.23 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.44 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.22 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.43 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.21 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.42 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.20 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.41 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.19 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.40 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.18 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.39 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.17 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.38 app/queries/workarea/admin_query_operation.rb
workarea-core-3.5.16 app/queries/workarea/admin_query_operation.rb
workarea-core-3.4.37 app/queries/workarea/admin_query_operation.rb