class GraphqlRails::Router
graphql router that mimics Rails.application.routes
Constants
- RAW_ACTION_NAMES
Attributes
group_names[R]
module_name[R]
namespace_name[R]
raw_graphql_actions[R]
routes[R]
Public Class Methods
draw(&block)
click to toggle source
# File lib/graphql_rails/router.rb, line 17 def self.draw(&block) new.tap do |router| router.instance_eval(&block) end end
new(module_name: '', group_names: [])
click to toggle source
# File lib/graphql_rails/router.rb, line 25 def initialize(module_name: '', group_names: []) @module_name = module_name @group_names = group_names @routes ||= Set.new @raw_graphql_actions ||= [] end
Public Instance Methods
graphql_schema(group = nil)
click to toggle source
# File lib/graphql_rails/router.rb, line 66 def graphql_schema(group = nil) @graphql_schema ||= {} @graphql_schema[group&.to_sym] ||= SchemaBuilder.new( queries: routes.select(&:query?), mutations: routes.select(&:mutation?), raw_actions: raw_graphql_actions, group: group ).call end
group(*group_names, &block)
click to toggle source
# File lib/graphql_rails/router.rb, line 32 def group(*group_names, &block) scoped_router = router_with(group_names: group_names) scoped_router.instance_eval(&block) routes.merge(scoped_router.routes) end
mutation(name, **options)
click to toggle source
# File lib/graphql_rails/router.rb, line 56 def mutation(name, **options) routes << build_route(MutationRoute, name, **options) end
query(name, **options)
click to toggle source
# File lib/graphql_rails/router.rb, line 52 def query(name, **options) routes << build_route(QueryRoute, name, **options) end
reload_schema()
click to toggle source
# File lib/graphql_rails/router.rb, line 76 def reload_schema @graphql_schema = nil end
resources(name, **options, &block)
click to toggle source
# File lib/graphql_rails/router.rb, line 45 def resources(name, **options, &block) builder_options = full_route_options(options) routes_builder = ResourceRoutesBuilder.new(name, **builder_options) routes_builder.instance_eval(&block) if block routes.merge(routes_builder.routes) end
scope(**options, &block)
click to toggle source
# File lib/graphql_rails/router.rb, line 38 def scope(**options, &block) full_module_name = [module_name, options[:module]].reject(&:empty?).join('/') scoped_router = router_with(module_name: full_module_name) scoped_router.instance_eval(&block) routes.merge(scoped_router.routes) end
Private Instance Methods
add_raw_action(name, *args, &block)
click to toggle source
# File lib/graphql_rails/router.rb, line 91 def add_raw_action(name, *args, &block) raw_graphql_actions << { name: name, args: args, block: block } end
build_route(route_builder, name, **options)
click to toggle source
# File lib/graphql_rails/router.rb, line 95 def build_route(route_builder, name, **options) route_builder.new(name, **full_route_options(options)) end
default_route_options()
click to toggle source
# File lib/graphql_rails/router.rb, line 107 def default_route_options { module: module_name, on: :member } end
full_route_options(extra_options)
click to toggle source
# File lib/graphql_rails/router.rb, line 99 def full_route_options(extra_options) extra_groups = Array(extra_options[:group]) + Array(extra_options[:groups]) extra_options = extra_options.except(:group, :groups) groups = (group_names + extra_groups).uniq default_route_options.merge(extra_options).merge(groups: groups) end
router_with(new_router_options = {})
click to toggle source
# File lib/graphql_rails/router.rb, line 84 def router_with(new_router_options = {}) default_options = { module_name: module_name, group_names: group_names } full_options = default_options.merge(new_router_options) self.class.new(**full_options) end