Sha256: 98779a4bd878548a1be54f3462e41cfb2113e297c02dfaa12310b9bb9d3b2bc2

Contents?: true

Size: 975 Bytes

Versions: 2

Compression:

Stored size: 975 Bytes

Contents

# frozen_string_literal: true

module Pragma
  module Macro
    def self.Filtering
      step = ->(input, options) { Filtering.for(input, options) }
      [step, name: 'filtering']
    end

    module Filtering
      class << self
        def for(_input, options)
          set_defaults(options)

          options['model'] = apply_filtering(options)

          true
        end

        private

        def set_defaults(options)
          {
            'filtering.filters' => []
          }.each_pair do |key, value|
            options[key] = value unless options[key]
          end
        end

        def apply_filtering(options)
          relation = options['model']

          options['filtering.filters'].each do |filter|
            value = options['params'][filter.param]
            next unless value.present?

            relation = filter.apply(relation: options['model'], value: value)
          end

          relation
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pragma-2.3.0 lib/pragma/macro/filtering.rb
pragma-2.2.0 lib/pragma/macro/filtering.rb