Sha256: aab3e7f46c1b0dbb94fb67a020c833e433289d55ce3e56784e82a62649ce945e

Contents?: true

Size: 1.82 KB

Versions: 5

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Tables
    module Collection
      module Query # :nodoc:
        extend ActiveSupport::Concern

        include Filtering

        class_methods do
          def search_attribute
            _default_attributes.each_value do |attribute|
              return attribute.name if attribute.type.type == :search
            end

            nil
          end
        end

        included do
          attribute :q, :query, default: ""
          alias_attribute :query, :q

          attribute :p, :integer, filter: false
          alias_attribute :position, :p
        end

        using Type::Helpers::Extensions

        def examples_for(key)
          key = key.to_s
          examples_method = "#{key.parameterize.underscore}_examples"
          if respond_to?(examples_method)
            public_send(examples_method)&.map { |e| e.is_a?(Example) ? e : Example.new(example) }
          elsif @attributes.key?(key)
            @attributes[key].type.examples_for(unscoped_items, @attributes[key])
          end
        end

        def query_active?(attribute)
          @attributes[attribute].query_range&.cover?(position)
        end

        private

        def _assign_attributes(new_attributes)
          result = super

          if query_changed?
            parser = Parser.new(self).parse(query)

            parser.tagged.each do |k, p|
              if @attributes.key?(k)
                _assign_attribute(k, p.value)
                @attributes[k].query_range = p.range
              else
                errors.add(k, :unknown)
              end
            end

            if parser.untagged.any? && (search = self.class.search_attribute)
              _assign_attribute(search, parser.untagged.join(" "))
            end
          end

          result
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
katalyst-tables-3.4.6 app/models/concerns/katalyst/tables/collection/query.rb
katalyst-tables-3.4.5 app/models/concerns/katalyst/tables/collection/query.rb
katalyst-tables-3.4.4 app/models/concerns/katalyst/tables/collection/query.rb
katalyst-tables-3.4.3 app/models/concerns/katalyst/tables/collection/query.rb
katalyst-tables-3.4.2 app/models/concerns/katalyst/tables/collection/query.rb