trailblazer-finder 0.10.1 → 0.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +16 -0
- data/.rubocop.yml +7 -1
- data/CHANGES.md +15 -0
- data/Gemfile +3 -1
- data/README.md +4 -4
- data/Rakefile +0 -6
- data/lib/trailblazer/finder/activities/find.rb +20 -21
- data/lib/trailblazer/finder/activities/prepare.rb +2 -3
- data/lib/trailblazer/finder/activities/prepare_adapter.rb +25 -0
- data/lib/trailblazer/finder/activities/prepare_entity.rb +5 -5
- data/lib/trailblazer/finder/activities/prepare_paging.rb +5 -11
- data/lib/trailblazer/finder/activities/prepare_params.rb +3 -3
- data/lib/trailblazer/finder/activities/prepare_properties.rb +1 -5
- data/lib/trailblazer/finder/activities/prepare_sorting.rb +3 -8
- data/lib/trailblazer/finder/activities/process.rb +0 -1
- data/lib/trailblazer/finder/activities/process_adapters.rb +25 -23
- data/lib/trailblazer/finder/adapters/active_record/paging.rb +1 -1
- data/lib/trailblazer/finder/adapters/active_record/predicates.rb +14 -14
- data/lib/trailblazer/finder/adapters/active_record/sorting.rb +1 -1
- data/lib/trailblazer/finder/adapters/basic/paging.rb +1 -1
- data/lib/trailblazer/finder/adapters/basic/predicates.rb +14 -14
- data/lib/trailblazer/finder/adapters/basic/sorting.rb +1 -1
- data/lib/trailblazer/finder/adapters/kaminari/paging.rb +2 -3
- data/lib/trailblazer/finder/adapters/sequel/paging.rb +1 -1
- data/lib/trailblazer/finder/adapters/sequel/predicates.rb +14 -14
- data/lib/trailblazer/finder/adapters/sequel/sorting.rb +1 -1
- data/lib/trailblazer/finder/adapters/will_paginate/paging.rb +2 -3
- data/lib/trailblazer/finder/dsl.rb +12 -9
- data/lib/trailblazer/finder/find.rb +4 -2
- data/lib/trailblazer/finder/helpers/sorting.rb +4 -1
- data/lib/trailblazer/finder/version.rb +1 -1
- data/lib/trailblazer/finder.rb +1 -7
- data/lib/trailblazer/operation/finder.rb +3 -3
- data/spec/spec_helper.rb +0 -1
- data/spec/trailblazer/finder/adapters/active_record_spec.rb +5 -5
- data/spec/trailblazer/finder/adapters/basic_spec.rb +12 -3
- data/spec/trailblazer/finder/adapters/kaminari_spec.rb +13 -8
- data/spec/trailblazer/finder/adapters/sequel_spec.rb +5 -5
- data/spec/trailblazer/finder/adapters/will_paginate_spec.rb +12 -7
- data/spec/trailblazer/finder/dsl_spec.rb +4 -13
- data/spec/trailblazer/operation/finder_spec.rb +18 -3
- data/trailblazer-finder.gemspec +4 -5
- metadata +21 -36
- data/.rubocop_todo.yml +0 -78
- data/.travis.yml +0 -7
- data/lib/trailblazer/finder/activities/prepare_adapters.rb +0 -52
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 39f554fa2720ae7fe8f7bdc61eb44e636167a7ec85cb4c0b47da5027f80d4c3e
         | 
| 4 | 
            +
              data.tar.gz: 83e4e41732b0c4fef9d4d5793e3f6de7ad6b66086c906854127e6018f7a7eaa5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d8e69bb8c68980e657d2399fb1e6b50d63b1538e38346eb1a40465e60737940f431c052689a29c3b4ca9fdfc69b6e7d26f49f59db015e30beb5ba736522e81e5
         | 
| 7 | 
            +
              data.tar.gz: 9fe89ed1a67614bff0a9d5a69242972ce4bd219b0d20e72bb0d356637f7dbc9c2f3ea6e27fd32eb42c32e5502e67716545f4be5e9498a3d94c3863c92e4db1e0
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            name: CI
         | 
| 2 | 
            +
            on: [push, pull_request]
         | 
| 3 | 
            +
            jobs:
         | 
| 4 | 
            +
              test:
         | 
| 5 | 
            +
                strategy:
         | 
| 6 | 
            +
                  fail-fast: false
         | 
| 7 | 
            +
                  matrix:
         | 
| 8 | 
            +
                    ruby: [2.5, 2.6, 2.7, '3.0']
         | 
| 9 | 
            +
                runs-on: ubuntu-latest
         | 
| 10 | 
            +
                steps:
         | 
| 11 | 
            +
                - uses: actions/checkout@v2
         | 
| 12 | 
            +
                - uses: ruby/setup-ruby@v1
         | 
| 13 | 
            +
                  with:
         | 
| 14 | 
            +
                    ruby-version: ${{ matrix.ruby }}
         | 
| 15 | 
            +
                    bundler-cache: true # runs 'bundle install' and caches installed gems automatically
         | 
| 16 | 
            +
                - run: bundle exec rake
         | 
    
        data/.rubocop.yml
    CHANGED
    
    | @@ -2,4 +2,10 @@ require: rubocop-rspec | |
| 2 2 |  | 
| 3 3 | 
             
            inherit_from:
         | 
| 4 4 | 
             
              - https://raw.githubusercontent.com/trailblazer/meta/master/rubocop.yml
         | 
| 5 | 
            -
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            RSpec/ExampleLength:
         | 
| 7 | 
            +
              Enabled: false
         | 
| 8 | 
            +
            RSpec/MultipleExpectations:
         | 
| 9 | 
            +
              Enabled: false
         | 
| 10 | 
            +
            Layout/LineLength:
         | 
| 11 | 
            +
              Enabled: false
         | 
    
        data/CHANGES.md
    CHANGED
    
    | @@ -1,3 +1,18 @@ | |
| 1 | 
            +
            # 0.70.0
         | 
| 2 | 
            +
            * Drop Support Legacy Dry-types
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            # 0.60.0
         | 
| 5 | 
            +
            * Support Ruby 3.0
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # 0.50.0
         | 
| 8 | 
            +
            * Breaking change: Use adapter and paginator configs instead of mixing them in adapters config.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            # 0.10.3
         | 
| 11 | 
            +
            * Add support for strings in filters keys.
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # 0.10.2
         | 
| 14 | 
            +
            * Add support for ActiveSupport::Hash as params
         | 
| 15 | 
            +
             | 
| 1 16 | 
             
            # 0.10.1
         | 
| 2 17 | 
             
            * Move activities to Activities folder to avoid conflict with Activity Class.
         | 
| 3 18 |  | 
    
        data/Gemfile
    CHANGED
    
    | @@ -4,7 +4,9 @@ source "https://rubygems.org" | |
| 4 4 |  | 
| 5 5 | 
             
            gemspec
         | 
| 6 6 |  | 
| 7 | 
            -
            gem " | 
| 7 | 
            +
            gem "debug", platform: :mri
         | 
| 8 | 
            +
            gem "jdbc-sqlite3", :platform => :jruby
         | 
| 9 | 
            +
            gem "sqlite3", platform: :mri
         | 
| 8 10 |  | 
| 9 11 | 
             
            # Had to add this for a bit, since none of the latest changes have been pushed to gems yet
         | 
| 10 12 | 
             
            # gem "trailblazer", github: "trailblazer/trailblazer"
         | 
    
        data/README.md
    CHANGED
    
    | @@ -78,7 +78,7 @@ Basically for most use cases, Entity is the entity/model/array of hashes you wis | |
| 78 78 | 
             
            ```ruby
         | 
| 79 79 | 
             
            class Post::Finder < Trailblazer::Finder
         | 
| 80 80 | 
             
              # Without defining an ORM everything defaults to dealing with hash objects
         | 
| 81 | 
            -
               | 
| 81 | 
            +
              adapter :ActiveRecord
         | 
| 82 82 |  | 
| 83 83 | 
             
              # Optional if you use it as option in the caller, Model/Entity or Array with Hashes
         | 
| 84 84 | 
             
              entity { Post }
         | 
| @@ -364,7 +364,7 @@ You can specify the adapters you wish to use inside your enherited Finder class. | |
| 364 364 | 
             
            ### Adapters Example
         | 
| 365 365 | 
             
            ```ruby
         | 
| 366 366 | 
             
            class Post::Finder < Trailblazer::Finder
         | 
| 367 | 
            -
               | 
| 367 | 
            +
              adapter "ActiveRecord"
         | 
| 368 368 | 
             
            end
         | 
| 369 369 | 
             
            ```
         | 
| 370 370 |  | 
| @@ -374,7 +374,7 @@ The only thing the [ActiveRecord](https://github.com/rails/rails/tree/master/act | |
| 374 374 | 
             
            #### Active Record Example
         | 
| 375 375 | 
             
            ```ruby
         | 
| 376 376 | 
             
            class Post::Finder < Trailblazer::Finder
         | 
| 377 | 
            -
               | 
| 377 | 
            +
              adapter "ActiveRecord"
         | 
| 378 378 | 
             
            end
         | 
| 379 379 | 
             
            ```
         | 
| 380 380 |  | 
| @@ -384,7 +384,7 @@ The only thing the [Sequel](https://github.com/jeremyevans/sequel) adapter does, | |
| 384 384 | 
             
            #### Sequel Example
         | 
| 385 385 | 
             
            ```ruby
         | 
| 386 386 | 
             
            class Post::Finder < Trailblazer::Finder
         | 
| 387 | 
            -
               | 
| 387 | 
            +
              adapter "Sequel"
         | 
| 388 388 | 
             
            end
         | 
| 389 389 | 
             
            ```
         | 
| 390 390 |  | 
    
        data/Rakefile
    CHANGED
    
    | @@ -16,12 +16,6 @@ end | |
| 16 16 |  | 
| 17 17 | 
             
            RuboCop::RakeTask.new(:rubocop)
         | 
| 18 18 |  | 
| 19 | 
            -
            desc "Remove temporary files"
         | 
| 20 | 
            -
            task :clean do
         | 
| 21 | 
            -
              `rm -rf *.gem doc pkg coverage test-reports`
         | 
| 22 | 
            -
              %x(rm -f `find . -name '*.rbc'`)
         | 
| 23 | 
            -
            end
         | 
| 24 | 
            -
             | 
| 25 19 | 
             
            desc "Build the gem"
         | 
| 26 20 | 
             
            task :gem do
         | 
| 27 21 | 
             
              `gem build trailblazer-finder.gemspec`
         | 
| @@ -3,21 +3,19 @@ | |
| 3 3 | 
             
            module Trailblazer
         | 
| 4 4 | 
             
              class Finder
         | 
| 5 5 | 
             
                module Activities
         | 
| 6 | 
            -
                  # Find Activity
         | 
| 7 6 | 
             
                  class Find < Trailblazer::Activity::Railway
         | 
| 8 7 | 
             
                    PREDICATES = %w[eq not_eq blank not_blank lt lte gt gte sw not_sw ew not_ew cont not_cont].freeze
         | 
| 9 8 |  | 
| 10 | 
            -
             | 
| 11 | 
            -
                    def process_params(ctx, params:,  **)
         | 
| 9 | 
            +
                    def process_params(ctx, params:, **)
         | 
| 12 10 | 
             
                      params.each do |attribute, value|
         | 
| 13 11 | 
             
                        result = {}
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                        fetch_filters(ctx, result,  | 
| 16 | 
            -
                        fetch_properties(result,  | 
| 12 | 
            +
                        filter_attribute = attribute.to_sym
         | 
| 13 | 
            +
                        fetch_filters(ctx, result, filter_attribute) || result if ctx[:filters].include?(filter_attribute)
         | 
| 14 | 
            +
                        fetch_properties(result, filter_attribute, value, ctx[:properties]) || result
         | 
| 17 15 | 
             
                        next ctx[:params].delete(attribute) if result.empty?
         | 
| 18 16 |  | 
| 19 17 | 
             
                        ctx[:process] ||= {}
         | 
| 20 | 
            -
                        ctx[:process][ | 
| 18 | 
            +
                        ctx[:process][filter_attribute] = result.merge!(value: value)
         | 
| 21 19 | 
             
                      end
         | 
| 22 20 | 
             
                      true
         | 
| 23 21 | 
             
                    end
         | 
| @@ -32,23 +30,24 @@ module Trailblazer | |
| 32 30 | 
             
                    step :set_finder
         | 
| 33 31 |  | 
| 34 32 | 
             
                    private
         | 
| 35 | 
            -
                      def fetch_filters(ctx, result, attribute)
         | 
| 36 | 
            -
                        filter_attribute = ctx[:filters][attribute]
         | 
| 37 | 
            -
                        result[:filter] = {}
         | 
| 38 | 
            -
                        result[:name] = attribute
         | 
| 39 | 
            -
                        result[:filter][:handler] = filter_attribute[:with] || filter_attribute[:block]
         | 
| 40 | 
            -
                      end
         | 
| 41 33 |  | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 34 | 
            +
                    def fetch_filters(ctx, result, attribute)
         | 
| 35 | 
            +
                      filter_attribute = ctx[:filters][attribute]
         | 
| 36 | 
            +
                      result[:filter] = {}
         | 
| 37 | 
            +
                      result[:name] = attribute
         | 
| 38 | 
            +
                      result[:filter][:handler] = filter_attribute[:with] || filter_attribute[:block]
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    def fetch_properties(result, attribute, value, properties)
         | 
| 42 | 
            +
                      splitter = Utils::Splitter.new attribute, value
         | 
| 43 | 
            +
                      PREDICATES.each do |predicate|
         | 
| 44 | 
            +
                        next unless splitter.split_key predicate
         | 
| 45 | 
            +
                        next unless properties.include?(splitter.field.to_sym)
         | 
| 47 46 |  | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
                        end
         | 
| 47 | 
            +
                        result[:name] = splitter.field
         | 
| 48 | 
            +
                        result[:predicate] = predicate
         | 
| 51 49 | 
             
                      end
         | 
| 50 | 
            +
                    end
         | 
| 52 51 | 
             
                  end
         | 
| 53 52 | 
             
                end
         | 
| 54 53 | 
             
              end
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require_relative " | 
| 3 | 
            +
            require_relative "prepare_adapter"
         | 
| 4 4 | 
             
            require_relative "prepare_entity"
         | 
| 5 5 | 
             
            require_relative "prepare_properties"
         | 
| 6 6 | 
             
            require_relative "prepare_filters"
         | 
| @@ -11,14 +11,13 @@ require_relative "prepare_sorting" | |
| 11 11 | 
             
            module Trailblazer
         | 
| 12 12 | 
             
              class Finder
         | 
| 13 13 | 
             
                module Activities
         | 
| 14 | 
            -
                  # Prepare Activity
         | 
| 15 14 | 
             
                  class Prepare < Trailblazer::Activity::Railway
         | 
| 16 15 | 
             
                    def clean_ctx((ctx, flow_options), **)
         | 
| 17 16 | 
             
                      ctx.delete(:options)
         | 
| 18 17 | 
             
                      [Activity::Right, [ctx, flow_options]]
         | 
| 19 18 | 
             
                    end
         | 
| 20 19 |  | 
| 21 | 
            -
                    step Subprocess( | 
| 20 | 
            +
                    step Subprocess(PrepareAdapter)
         | 
| 22 21 | 
             
                    step Subprocess(PrepareEntity)
         | 
| 23 22 | 
             
                    step Subprocess(PrepareProperties)
         | 
| 24 23 | 
             
                    step Subprocess(PrepareFilters)
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Trailblazer
         | 
| 4 | 
            +
              class Finder
         | 
| 5 | 
            +
                module Activities
         | 
| 6 | 
            +
                  class PrepareAdapter < Trailblazer::Activity::Railway
         | 
| 7 | 
            +
                    def set_adapter(ctx, **)
         | 
| 8 | 
            +
                      ctx[:adapter] = ctx.dig(:config, :adapter) || "Basic"
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def validate_adapter(_ctx, adapter:, **)
         | 
| 12 | 
            +
                      (ORM_ADAPTERS + ["Basic"]).include? adapter.to_s
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def invalid?((ctx, _flow_options), **_circuit_options)
         | 
| 16 | 
            +
                      (ctx[:errors] ||= []) << {adapter: "The specified adapter are invalid"}
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    step :set_adapter
         | 
| 20 | 
            +
                    step :validate_adapter
         | 
| 21 | 
            +
                    fail :invalid?
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -5,7 +5,7 @@ module Trailblazer | |
| 5 5 | 
             
                module Activities
         | 
| 6 6 | 
             
                  class PrepareEntity < Trailblazer::Activity::Railway
         | 
| 7 7 | 
             
                    def validate_entity(ctx, **)
         | 
| 8 | 
            -
                      ctx.dig(:options | 
| 8 | 
            +
                      ctx.dig(:options, :entity) || ctx.dig(:config, :entity)
         | 
| 9 9 | 
             
                    end
         | 
| 10 10 |  | 
| 11 11 | 
             
                    def invalid_entity_error(ctx, **)
         | 
| @@ -13,12 +13,12 @@ module Trailblazer | |
| 13 13 | 
             
                    end
         | 
| 14 14 |  | 
| 15 15 | 
             
                    def set_entity(ctx, **)
         | 
| 16 | 
            -
                      ctx[:entity] = ctx.dig(:options | 
| 16 | 
            +
                      ctx[:entity] = ctx.dig(:options, :entity) || instance_eval(&ctx[:config][:entity])
         | 
| 17 17 | 
             
                    end
         | 
| 18 18 |  | 
| 19 | 
            -
                    step  | 
| 20 | 
            -
                    fail  | 
| 21 | 
            -
                    step  | 
| 19 | 
            +
                    step :validate_entity
         | 
| 20 | 
            +
                    fail :invalid_entity_error
         | 
| 21 | 
            +
                    step :set_entity
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 | 
             
                end
         | 
| 24 24 | 
             
              end
         | 
| @@ -12,8 +12,8 @@ module Trailblazer | |
| 12 12 | 
             
                    end
         | 
| 13 13 |  | 
| 14 14 | 
             
                    def set_paging(ctx, **)
         | 
| 15 | 
            -
                      ctx[:paging] = ctx.dig(:config | 
| 16 | 
            -
                      ctx[:paging][:current_page] = ctx.dig(:params | 
| 15 | 
            +
                      ctx[:paging] = ctx.dig(:config, :paging) || {}
         | 
| 16 | 
            +
                      ctx[:paging][:current_page] = ctx.dig(:params, :page) || 1
         | 
| 17 17 | 
             
                      return true unless ctx[:params][:per_page]
         | 
| 18 18 |  | 
| 19 19 | 
             
                      ctx[:paging][:per_page] = ctx[:params][:per_page].to_i || ctx[:paging][:per_page]
         | 
| @@ -27,15 +27,9 @@ module Trailblazer | |
| 27 27 | 
             
                      true
         | 
| 28 28 | 
             
                    end
         | 
| 29 29 |  | 
| 30 | 
            -
                    step (: | 
| 31 | 
            -
             | 
| 32 | 
            -
                    step  | 
| 33 | 
            -
                         Output(:success) => Track(:end_paging),
         | 
| 34 | 
            -
                         Output(:failure) => Track(:failure)
         | 
| 35 | 
            -
                    step (:clear_paging),
         | 
| 36 | 
            -
                         magnetic_to: :end_paging,
         | 
| 37 | 
            -
                         Output(:success) => Track(:success),
         | 
| 38 | 
            -
                         Output(:failure) => Track(:failure)
         | 
| 30 | 
            +
                    step :check_paging, Output(:failure) => Track(:end_paging)
         | 
| 31 | 
            +
                    step :set_paging
         | 
| 32 | 
            +
                    step :clear_paging, magnetic_to: :end_paging
         | 
| 39 33 | 
             
                  end
         | 
| 40 34 | 
             
                end
         | 
| 41 35 | 
             
              end
         | 
| @@ -18,9 +18,9 @@ module Trailblazer | |
| 18 18 | 
             
                      ctx[:params] = ctx[:options][:params] || {}
         | 
| 19 19 | 
             
                    end
         | 
| 20 20 |  | 
| 21 | 
            -
                    step  | 
| 22 | 
            -
                    fail  | 
| 23 | 
            -
                    step  | 
| 21 | 
            +
                    step :validate_params
         | 
| 22 | 
            +
                    fail :invalid_params_error
         | 
| 23 | 
            +
                    step :set_params
         | 
| 24 24 | 
             
                  end
         | 
| 25 25 | 
             
                end
         | 
| 26 26 | 
             
              end
         | 
| @@ -18,11 +18,7 @@ module Trailblazer | |
| 18 18 | 
             
                      return true if properties.empty?
         | 
| 19 19 |  | 
| 20 20 | 
             
                      properties.each do |key, _value|
         | 
| 21 | 
            -
                         | 
| 22 | 
            -
                          return properties[key][:type].class.ancestors.include?(::Dry::Types::Definition)
         | 
| 23 | 
            -
                        else
         | 
| 24 | 
            -
                          return properties[key][:type].class.ancestors.include?(::Dry::Types::Nominal)
         | 
| 25 | 
            -
                        end
         | 
| 21 | 
            +
                        return properties[key][:type].class.ancestors.include?(::Dry::Types::Nominal)
         | 
| 26 22 | 
             
                      end
         | 
| 27 23 | 
             
                    end
         | 
| 28 24 |  | 
| @@ -37,15 +37,10 @@ module Trailblazer | |
| 37 37 | 
             
                      true
         | 
| 38 38 | 
             
                    end
         | 
| 39 39 |  | 
| 40 | 
            -
                    step  | 
| 41 | 
            -
                         Output(:success) => Track(:paging),
         | 
| 40 | 
            +
                    step :check_sorting,
         | 
| 42 41 | 
             
                         Output(:failure) => Track(:end_sorting)
         | 
| 43 | 
            -
                    step  | 
| 44 | 
            -
             | 
| 45 | 
            -
                         Output(:success) => Track(:end_sorting),
         | 
| 46 | 
            -
                         Output(:failure) => Track(:failure)
         | 
| 47 | 
            -
                    step (:clear_sorting),
         | 
| 48 | 
            -
                         magnetic_to: :end_sorting
         | 
| 42 | 
            +
                    step :set_sorting
         | 
| 43 | 
            +
                    step :clear_sorting, magnetic_to: :end_sorting
         | 
| 49 44 | 
             
                  end
         | 
| 50 45 | 
             
                end
         | 
| 51 46 | 
             
              end
         | 
| @@ -4,36 +4,38 @@ module Trailblazer | |
| 4 4 | 
             
              class Finder
         | 
| 5 5 | 
             
                module Activities
         | 
| 6 6 | 
             
                  class ProcessAdapters < Trailblazer::Activity::Railway
         | 
| 7 | 
            -
                    def  | 
| 8 | 
            -
                      ctx[: | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                        ctx[:orm][:sorting] = "Trailblazer::Finder::Adapters::#{adapter}::Sorting"
         | 
| 16 | 
            -
                        return true
         | 
| 17 | 
            -
                      end
         | 
| 7 | 
            +
                    def set_adapter((ctx, _flow_options), **)
         | 
| 8 | 
            +
                      adapter = ctx[:adapter]
         | 
| 9 | 
            +
                      ctx[:orm] = {}
         | 
| 10 | 
            +
                      ctx[:orm][:adapter] = adapter
         | 
| 11 | 
            +
                      ctx[:orm][:predicates] = "Trailblazer::Finder::Adapters::#{adapter}::Predicates"
         | 
| 12 | 
            +
                      ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
         | 
| 13 | 
            +
                      ctx[:orm][:sorting] = "Trailblazer::Finder::Adapters::#{adapter}::Sorting"
         | 
| 14 | 
            +
                      true
         | 
| 18 15 | 
             
                    end
         | 
| 19 16 |  | 
| 20 | 
            -
                    def  | 
| 21 | 
            -
                      ctx | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                       | 
| 17 | 
            +
                    def set_paginator(ctx, **)
         | 
| 18 | 
            +
                      paginator = ctx.dig(:config, :paginator)
         | 
| 19 | 
            +
                      return true unless paginator
         | 
| 20 | 
            +
                      return false unless ORM_ADAPTERS.include?(ctx[:orm][:adapter])
         | 
| 21 | 
            +
                      return false unless PAGING_ADAPTERS.include?(paginator)
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                      ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{paginator}::Paging"
         | 
| 27 24 | 
             
                      true
         | 
| 28 25 | 
             
                    end
         | 
| 29 26 |  | 
| 30 | 
            -
                    def  | 
| 31 | 
            -
                      (ctx[:errors] ||= []) << { | 
| 27 | 
            +
                    def invalid_paginator_error(ctx, **)
         | 
| 28 | 
            +
                      (ctx[:errors] ||= []) << {
         | 
| 29 | 
            +
                        paginator: "Can't use paginator #{ctx.dig(
         | 
| 30 | 
            +
                          :config,
         | 
| 31 | 
            +
                          :paginator
         | 
| 32 | 
            +
                        )} without using an ORM like ActiveRecord or Sequel"
         | 
| 33 | 
            +
                      }
         | 
| 32 34 | 
             
                    end
         | 
| 33 35 |  | 
| 34 | 
            -
                    step : | 
| 35 | 
            -
                    step : | 
| 36 | 
            -
                    fail : | 
| 36 | 
            +
                    step :set_adapter, fast_track: true
         | 
| 37 | 
            +
                    step :set_paginator
         | 
| 38 | 
            +
                    fail :invalid_paginator_error
         | 
| 37 39 | 
             
                  end
         | 
| 38 40 | 
             
                end
         | 
| 39 41 | 
             
              end
         | 
| @@ -10,7 +10,7 @@ module Trailblazer | |
| 10 10 | 
             
                      module_function
         | 
| 11 11 |  | 
| 12 12 | 
             
                      def set_eq_handler
         | 
| 13 | 
            -
                         | 
| 13 | 
            +
                        ->(entity, attribute, value) do
         | 
| 14 14 | 
             
                          return if Utils::String.blank?(value.to_s)
         | 
| 15 15 |  | 
| 16 16 | 
             
                          entity.where(attribute => value)
         | 
| @@ -18,7 +18,7 @@ module Trailblazer | |
| 18 18 | 
             
                      end
         | 
| 19 19 |  | 
| 20 20 | 
             
                      def set_not_eq_handler
         | 
| 21 | 
            -
                         | 
| 21 | 
            +
                        ->(entity, attribute, value) do
         | 
| 22 22 | 
             
                          return if Utils::String.blank?(value.to_s)
         | 
| 23 23 |  | 
| 24 24 | 
             
                          entity.where.not(attribute => value)
         | 
| @@ -26,73 +26,73 @@ module Trailblazer | |
| 26 26 | 
             
                      end
         | 
| 27 27 |  | 
| 28 28 | 
             
                      def set_blank_handler
         | 
| 29 | 
            -
                         | 
| 29 | 
            +
                        ->(entity, attribute, _value) do
         | 
| 30 30 | 
             
                          entity.where(attribute.to_sym => [nil, ""])
         | 
| 31 31 | 
             
                        end
         | 
| 32 32 | 
             
                      end
         | 
| 33 33 |  | 
| 34 34 | 
             
                      def set_not_blank_handler
         | 
| 35 | 
            -
                         | 
| 35 | 
            +
                        ->(entity, attribute, _value) do
         | 
| 36 36 | 
             
                          entity.where.not(attribute.to_sym => [nil, ""])
         | 
| 37 37 | 
             
                        end
         | 
| 38 38 | 
             
                      end
         | 
| 39 39 |  | 
| 40 40 | 
             
                      def set_gt_handler
         | 
| 41 | 
            -
                         | 
| 41 | 
            +
                        ->(entity, attribute, value) do
         | 
| 42 42 | 
             
                          entity.where("#{attribute} > ?", value.to_f)
         | 
| 43 43 | 
             
                        end
         | 
| 44 44 | 
             
                      end
         | 
| 45 45 |  | 
| 46 46 | 
             
                      def set_gte_handler
         | 
| 47 | 
            -
                         | 
| 47 | 
            +
                        ->(entity, attribute, value) do
         | 
| 48 48 | 
             
                          entity.where("#{attribute} >= ?", value.to_f)
         | 
| 49 49 | 
             
                        end
         | 
| 50 50 | 
             
                      end
         | 
| 51 51 |  | 
| 52 52 | 
             
                      def set_lt_handler
         | 
| 53 | 
            -
                         | 
| 53 | 
            +
                        ->(entity, attribute, value) do
         | 
| 54 54 | 
             
                          entity.where("#{attribute} < ?", value.to_f)
         | 
| 55 55 | 
             
                        end
         | 
| 56 56 | 
             
                      end
         | 
| 57 57 |  | 
| 58 58 | 
             
                      def set_lte_handler
         | 
| 59 | 
            -
                         | 
| 59 | 
            +
                        ->(entity, attribute, value) do
         | 
| 60 60 | 
             
                          entity.where("#{attribute} <= ?", value.to_f)
         | 
| 61 61 | 
             
                        end
         | 
| 62 62 | 
             
                      end
         | 
| 63 63 |  | 
| 64 64 | 
             
                      def set_cont_handler
         | 
| 65 | 
            -
                         | 
| 65 | 
            +
                        ->(entity, attribute, value) do
         | 
| 66 66 | 
             
                          entity.where("#{attribute} LIKE ?", "%#{value}%")
         | 
| 67 67 | 
             
                        end
         | 
| 68 68 | 
             
                      end
         | 
| 69 69 |  | 
| 70 70 | 
             
                      def set_not_cont_handler
         | 
| 71 | 
            -
                         | 
| 71 | 
            +
                        ->(entity, attribute, value) do
         | 
| 72 72 | 
             
                          entity.where("#{attribute} NOT LIKE ?", "%#{value}%")
         | 
| 73 73 | 
             
                        end
         | 
| 74 74 | 
             
                      end
         | 
| 75 75 |  | 
| 76 76 | 
             
                      def set_sw_handler
         | 
| 77 | 
            -
                         | 
| 77 | 
            +
                        ->(entity, attribute, value) do
         | 
| 78 78 | 
             
                          entity.where("#{attribute} LIKE ?", "#{value}%")
         | 
| 79 79 | 
             
                        end
         | 
| 80 80 | 
             
                      end
         | 
| 81 81 |  | 
| 82 82 | 
             
                      def set_not_sw_handler
         | 
| 83 | 
            -
                         | 
| 83 | 
            +
                        ->(entity, attribute, value) do
         | 
| 84 84 | 
             
                          entity.where("#{attribute} NOT LIKE ?", "#{value}%")
         | 
| 85 85 | 
             
                        end
         | 
| 86 86 | 
             
                      end
         | 
| 87 87 |  | 
| 88 88 | 
             
                      def set_ew_handler
         | 
| 89 | 
            -
                         | 
| 89 | 
            +
                        ->(entity, attribute, value) do
         | 
| 90 90 | 
             
                          entity.where("#{attribute} LIKE ?", "%#{value}")
         | 
| 91 91 | 
             
                        end
         | 
| 92 92 | 
             
                      end
         | 
| 93 93 |  | 
| 94 94 | 
             
                      def set_not_ew_handler
         | 
| 95 | 
            -
                         | 
| 95 | 
            +
                        ->(entity, attribute, value) do
         | 
| 96 96 | 
             
                          entity.where("#{attribute} NOT LIKE ?", "%#{value}")
         | 
| 97 97 | 
             
                        end
         | 
| 98 98 | 
             
                      end
         |