Sha256: 0e9b7078b30344e6a8022629dea27c74654e8b53f19f3e7ecc1ce39660dc086f

Contents?: true

Size: 1.1 KB

Versions: 8

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module Decidim
  module Core
    # An abstract class with the logic for the GraphQL endpoint for a single component to be searchable.
    # Normal components (such as Proposal) can inherit from this class and just
    # add the needed search arguments
    #
    # Usually something like:
    #
    #   class ProposalFinderHelper < Decidim::Core::ComponentFinderBase
    #     argument :id, !types.ID, "The ID of the proposal"
    #   end
    #
    # For an example check
    # decidim-proposals/app/types/decidim/proposals/proposals_type.rb
    class ComponentFinderBase
      attr_reader :model_class

      def initialize(model_class:)
        @model_class = model_class
      end

      def call(component, args, _ctx)
        @query = { component: }
        args.keys.each do |key|
          @query[key] = args[key]
        end
        query_scope.find_by(@query)
      end

      # By default, any model in its defaul scope
      # Particular implementations may restrict this by adding
      # additional constrains
      def query_scope
        model_class
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
decidim-core-0.28.5 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.4 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.3 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.2 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.1 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.0 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.0.rc5 lib/decidim/api/functions/component_finder_base.rb
decidim-core-0.28.0.rc4 lib/decidim/api/functions/component_finder_base.rb