Sha256: 3d5b3ed059b12ef4c9537ac9b0ebfa7aa5f41d5f2e55f1d70b650f2f23cf3eb3

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

module Trailblazer
  class Finder
    module Activity
      class ProcessAdapters < Trailblazer::Activity::Railway
        def set_orm_adapters(ctx, **)
          ctx[:adapters].each do |adapter|
            next unless (ORM_ADAPTERS + ["Basic"]).include?(adapter)

            ctx[:orm] = {}
            ctx[:orm][:adapter] = adapter
            ctx[:orm][:predicates] = "Trailblazer::Finder::Adapters::#{adapter}::Predicates"
            ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
            ctx[:orm][:sorting] = "Trailblazer::Finder::Adapters::#{adapter}::Sorting"
            return true
          end
        end

        def set_paging_adapters(ctx, **)
          ctx[:adapters].each do |adapter|
            next unless PAGING_ADAPTERS.include?(adapter)
            return false if ctx[:adapters].include?("Basic")
            ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
            return true
          end
          true
        end

        def invalid_paging_adapter_error(ctx, **)
          (ctx[:errors] ||= []) << {adapters: "Can't use paging adapters like Kaminari without using an ORM like ActiveRecord or Sequel"}
        end

        step :set_orm_adapters
        step :set_paging_adapters
        fail :invalid_paging_adapter_error
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trailblazer-finder-0.10.0 lib/trailblazer/finder/activity/process_adapters.rb