Module: GraphQL::Types::Relay::ConnectionBehaviors::ClassMethods
- Defined in:
- lib/graphql/types/relay/connection_behaviors.rb
Instance Attribute Summary collapse
-
#edge_class ⇒ Class
readonly
-
#edge_type(edge_type_class, edge_class: GraphQL::Pagination::Connection::Edge, node_type: edge_type_class.node_type, nodes_field: self.has_nodes_field, node_nullable: self.node_nullable, edges_nullable: self.edges_nullable, edge_nullable: self.edge_nullable, field_options: nil) ⇒ Object
readonly
Configure this connection to return
edges
andnodes
based onedge_type_class
. -
#node_type ⇒ Class
readonly
Instance Method Summary collapse
-
#authorized?(obj, ctx) ⇒ Boolean
-
#default_broadcastable(new_value) ⇒ Object
-
#default_broadcastable? ⇒ Boolean
-
#default_relay? ⇒ Boolean
-
#edge_nullable(new_value = nil) ⇒ Object
Set the default
edge_nullable
for this class and its child classes. -
#edges_nullable(new_value = nil) ⇒ Object
Set the default
edges_nullable
for this class and its child classes. -
#has_nodes_field(new_value = nil) ⇒ Object
Set the default
nodes_field
for this class and its child classes. -
#inherited(child_class) ⇒ Object
-
#node_nullable(new_value = nil) ⇒ Object
Set the default
node_nullable
for this class and its child classes. -
#nodes_field(node_nullable: self.node_nullable, field_options: nil) ⇒ Object
Add the shortcut
nodes
field to this connection and its subclasses. -
#reauthorize_scoped_objects(new_value = nil) ⇒ Object
The connection will skip auth on its nodes if the node_type is configured for that.
-
#scope_items(items, context) ⇒ Object
Filter this list according to the way its node type would scope them.
-
#visible?(ctx) ⇒ Boolean
Instance Attribute Details
#edge_class ⇒ Class
54 55 56 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 54 def edge_class @edge_class end |
#edge_type(edge_type_class, edge_class: GraphQL::Pagination::Connection::Edge, node_type: edge_type_class.node_type, nodes_field: self.has_nodes_field, node_nullable: self.node_nullable, edges_nullable: self.edges_nullable, edge_nullable: self.edge_nullable, field_options: nil) ⇒ Object
Configure this connection to return edges
and nodes
based on edge_type_class
.
This method will use the inputs to create:
- edges
field
- nodes
field
- description
It’s called when you subclass this base connection, trying to use the class name to set defaults. You can call it again in the class definition to override the default (or provide a value, if the default lookup failed).
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 67 def edge_type(edge_type_class, edge_class: GraphQL::Pagination::Connection::Edge, node_type: edge_type_class.node_type, nodes_field: self.has_nodes_field, node_nullable: self.node_nullable, edges_nullable: self.edges_nullable, edge_nullable: self.edge_nullable, field_options: nil) # Set this connection's graphql name node_type_name = node_type.graphql_name @node_type = node_type @edge_type = edge_type_class @edge_class = edge_class = { name: :edges, type: [edge_type_class, null: edge_nullable], null: edges_nullable, description: "A list of edges.", scope: false, # Assume that the connection was already scoped. connection: false, } if .merge!() end field(**) define_nodes_field(node_nullable, field_options: ) if nodes_field description("The connection type for #{node_type_name}.") end |
#node_type ⇒ Class
51 52 53 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 51 def node_type @node_type end |
Instance Method Details
#authorized?(obj, ctx) ⇒ Boolean
118 119 120 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 118 def (obj, ctx) true # Let nodes be filtered out end |
#default_broadcastable(new_value) ⇒ Object
46 47 48 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 46 def default_broadcastable(new_value) @default_broadcastable = new_value end |
#default_broadcastable? ⇒ Boolean
42 43 44 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 42 def default_broadcastable? @default_broadcastable end |
#default_relay? ⇒ Boolean
38 39 40 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 38 def default_relay? true end |
#edge_nullable(new_value = nil) ⇒ Object
Set the default edge_nullable
for this class and its child classes. (Defaults to true
.)
Use edge_nullable(false)
in your base class to make non-null edge
fields.
149 150 151 152 153 154 155 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 149 def edge_nullable(new_value = nil) if new_value.nil? defined?(@edge_nullable) ? @edge_nullable : superclass.edge_nullable else @edge_nullable = new_value end end |
#edges_nullable(new_value = nil) ⇒ Object
Set the default edges_nullable
for this class and its child classes. (Defaults to true
.)
Use edges_nullable(false)
in your base class to make non-null edges
fields.
139 140 141 142 143 144 145 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 139 def edges_nullable(new_value = nil) if new_value.nil? defined?(@edges_nullable) ? @edges_nullable : superclass.edges_nullable else @edges_nullable = new_value end end |
#has_nodes_field(new_value = nil) ⇒ Object
Set the default nodes_field
for this class and its child classes. (Defaults to true
.)
Use nodes_field(false)
in your base class to prevent adding of a nodes field.
159 160 161 162 163 164 165 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 159 def has_nodes_field(new_value = nil) if new_value.nil? defined?(@nodes_field) ? @nodes_field : superclass.has_nodes_field else @nodes_field = new_value end end |
#inherited(child_class) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 26 def inherited(child_class) super child_class.has_nodes_field(has_nodes_field) child_class.node_nullable(node_nullable) child_class.edges_nullable(edges_nullable) child_class.edge_nullable(edge_nullable) child_class.edge_type = nil child_class.node_type = nil child_class.edge_class = nil child_class.default_broadcastable(default_broadcastable?) end |
#node_nullable(new_value = nil) ⇒ Object
Set the default node_nullable
for this class and its child classes. (Defaults to true
.)
Use node_nullable(false)
in your base class to make non-null node
and nodes
fields.
129 130 131 132 133 134 135 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 129 def node_nullable(new_value = nil) if new_value.nil? defined?(@node_nullable) ? @node_nullable : superclass.node_nullable else @node_nullable = new_value end end |
#nodes_field(node_nullable: self.node_nullable, field_options: nil) ⇒ Object
Add the shortcut nodes
field to this connection and its subclasses
114 115 116 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 114 def nodes_field(node_nullable: self.node_nullable, field_options: nil) define_nodes_field(node_nullable, field_options: ) end |
#reauthorize_scoped_objects(new_value = nil) ⇒ Object
The connection will skip auth on its nodes if the node_type is configured for that
101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 101 def (new_value = nil) if new_value.nil? if @reauthorize_scoped_objects != nil @reauthorize_scoped_objects else node_type. end else @reauthorize_scoped_objects = new_value end end |
#scope_items(items, context) ⇒ Object
Filter this list according to the way its node type would scope them
96 97 98 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 96 def scope_items(items, context) node_type.scope_items(items, context) end |
#visible?(ctx) ⇒ Boolean
122 123 124 125 |
# File 'lib/graphql/types/relay/connection_behaviors.rb', line 122 def visible?(ctx) # if this is an abstract base class, there may be no `node_type` node_type ? node_type.visible?(ctx) : super end |