Sha256: 3a1beafab9c913b34f6c89a3998ed8dcc7882bc26dec5be437476d51f2eaf819

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

require_relative '../controller/build_controller_action_resolver'

module GraphqlRails
  class Router
    # Generic class for any type graphql action. Should not be used directly
    class Route
      attr_reader :name, :module_name, :on, :relative_path, :groups, :scope_names

      def initialize(name, on:, to: '', groups: nil, scope_names: [], **options) # rubocop:disable Metrics/ParameterLists
        @name = name.to_s.camelize(:lower)
        @module_name = options[:module].to_s
        @function = options[:function]
        @groups = groups
        @relative_path = to
        @on = on.to_sym
        @scope_names = scope_names
      end

      def path
        return relative_path if module_name.empty?

        [module_name, relative_path].join('/')
      end

      def collection?
        on == :collection
      end

      def show_in_group?(group_name)
        return true if groups.nil? || groups.empty?

        groups.include?(group_name&.to_sym)
      end

      def field_options
        if function
          { function: function }
        else
          { resolver: resolver, extras: [:lookahead] }
        end
      end

      private

      attr_reader :function

      def resolver
        @resolver ||= Controller::BuildControllerActionResolver.call(route: self)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql_rails-2.4.0 lib/graphql_rails/router/route.rb