File Coverage

blib/lib/GraphQL/Plugin/Convert.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package GraphQL::Plugin::Convert;
2              
3 1     1   635 use Moo;
  1         3  
  1         5  
4 1     1   319 use strict;
  1         3  
  1         18  
5 1     1   4 use warnings;
  1         4  
  1         56  
6              
7             =head1 NAME
8              
9             GraphQL::Plugin::Convert - GraphQL plugin API abstract class
10              
11             =head1 SYNOPSIS
12              
13             package GraphQL::Plugin::Convert::DBIC;
14             use Moo;
15             extends qw(GraphQL::Plugin::Convert);
16             # ...
17              
18             package main;
19             use Mojolicious::Lite;
20             use Schema;
21             use GraphQL::Plugin::Convert::DBIC;
22             helper db => sub { Schema->connect('dbi:SQLite:test.db') };
23             my $converted = GraphQL::Plugin::Convert::DBIC->to_graphql(sub { app->db });
24             plugin GraphQL => {
25             map { $_ => $converted->{$_} }
26             qw(schema resolver root_value subscribe_resolver)
27             };
28              
29             # OR, for knowledgeable consumers of GraphQL::Plugin::Convert APIs:
30             package main;
31             use Mojolicious::Lite;
32             use Schema;
33             helper db => sub { Schema->connect('dbi:SQLite:test.db') };
34             plugin GraphQL => { convert => [ 'DBIC', sub { app->db } ] };
35              
36             =head1 DESCRIPTION
37              
38             Abstract class for other GraphQL type classes to inherit from and
39             implement.
40              
41             =head1 METHODS
42              
43             =head2 to_graphql(@values)
44              
45             When called with suitable values (as defined by the implementing class),
46             will return a hash-ref with these keys:
47              
48             =over
49              
50             =item schema
51              
52             A L<GraphQL::Schema>.
53              
54             =item resolver
55              
56             A code-ref suitable for using as a resolver by
57             L<GraphQL::Execution/execute>. Optional.
58              
59             =item root_value
60              
61             A hash-ref suitable for using as a C<$root_value> by
62             L<GraphQL::Execution/execute>. Optional.
63              
64             =item subscribe_resolver
65              
66             A code-ref suitable for using as a C<$subscribe_resolver> by
67             L<GraphQL::Subscription/subscribe>. Optional.
68              
69             =back
70              
71             =head2 from_graphql
72              
73             When called with a hash-ref shaped as above, with at least a C<schema>
74             key with a L<GraphQL::Schema>, returns some value(s). Optional to
75             implement. If the plugin does implement this, allows conversion from
76             a GraphQL schema to that plugin's domain.
77              
78             =cut
79              
80             __PACKAGE__->meta->make_immutable();
81              
82             1;