lighthouse-graphql 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +47 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +134 -0
  5. data/docs/authorization.md +109 -0
  6. data/docs/best-practices.md +75 -0
  7. data/docs/configuration.md +70 -0
  8. data/docs/custom-directives.md +129 -0
  9. data/docs/directives.md +298 -0
  10. data/docs/federation.md +108 -0
  11. data/docs/filtering-and-ordering.md +128 -0
  12. data/docs/getting-started.md +152 -0
  13. data/docs/relationships.md +95 -0
  14. data/lib/lighthouse/config.rb +112 -0
  15. data/lib/lighthouse/contracts/arg_builder.rb +17 -0
  16. data/lib/lighthouse/contracts/arg_manipulator.rb +17 -0
  17. data/lib/lighthouse/contracts/directive.rb +17 -0
  18. data/lib/lighthouse/contracts/field_manipulator.rb +17 -0
  19. data/lib/lighthouse/contracts/field_middleware.rb +16 -0
  20. data/lib/lighthouse/contracts/field_resolver.rb +18 -0
  21. data/lib/lighthouse/dataloader_sources/association_loader.rb +25 -0
  22. data/lib/lighthouse/dataloader_sources/model_loader.rb +19 -0
  23. data/lib/lighthouse/directive_resolvers/aggregate_resolver.rb +86 -0
  24. data/lib/lighthouse/directive_resolvers/all_resolver.rb +73 -0
  25. data/lib/lighthouse/directive_resolvers/auth_resolver.rb +44 -0
  26. data/lib/lighthouse/directive_resolvers/base.rb +92 -0
  27. data/lib/lighthouse/directive_resolvers/belongs_to_many_resolver.rb +56 -0
  28. data/lib/lighthouse/directive_resolvers/belongs_to_resolver.rb +47 -0
  29. data/lib/lighthouse/directive_resolvers/builder_applier.rb +63 -0
  30. data/lib/lighthouse/directive_resolvers/can_resolver.rb +86 -0
  31. data/lib/lighthouse/directive_resolvers/count_resolver.rb +56 -0
  32. data/lib/lighthouse/directive_resolvers/field_resolver.rb +78 -0
  33. data/lib/lighthouse/directive_resolvers/find_resolver.rb +65 -0
  34. data/lib/lighthouse/directive_resolvers/first_resolver.rb +53 -0
  35. data/lib/lighthouse/directive_resolvers/guard_resolver.rb +32 -0
  36. data/lib/lighthouse/directive_resolvers/has_many_resolver.rb +109 -0
  37. data/lib/lighthouse/directive_resolvers/has_one_resolver.rb +43 -0
  38. data/lib/lighthouse/directive_resolvers/method_resolver.rb +35 -0
  39. data/lib/lighthouse/directive_resolvers/paginate_resolver.rb +147 -0
  40. data/lib/lighthouse/directive_resolvers/rename_resolver.rb +35 -0
  41. data/lib/lighthouse/directive_resolvers/resolution.rb +35 -0
  42. data/lib/lighthouse/directive_resolvers/where_conditions_applier.rb +169 -0
  43. data/lib/lighthouse/directives/arguments/base.rb +40 -0
  44. data/lib/lighthouse/directives/arguments/filters.rb +101 -0
  45. data/lib/lighthouse/directives/arguments/order_by.rb +48 -0
  46. data/lib/lighthouse/directives/registry.rb +168 -0
  47. data/lib/lighthouse/directives/relation_directive.rb +332 -0
  48. data/lib/lighthouse/directives/where_conditions_directive.rb +208 -0
  49. data/lib/lighthouse/graphql/version.rb +7 -0
  50. data/lib/lighthouse/graphql.rb +8 -0
  51. data/lib/lighthouse/rb_lighthouse.rb +88 -0
  52. data/lib/lighthouse/reference_resolver.rb +24 -0
  53. data/lib/lighthouse/schema_factory.rb +46 -0
  54. data/lib/lighthouse/schema_generator.rb +244 -0
  55. data/lib/lighthouse/schema_implementation.rb +119 -0
  56. data/lib/lighthouse/sdl_loader.rb +27 -0
  57. data/lib/lighthouse/support/authorization.rb +26 -0
  58. data/lib/lighthouse/support/directive_args.rb +33 -0
  59. data/lib/lighthouse/support/model_resolver.rb +61 -0
  60. data/lib/lighthouse/support/naming.rb +71 -0
  61. data/lib/lighthouse/where_conditions/operator_map.rb +35 -0
  62. data/lib/lighthouse-graphql.rb +10 -0
  63. metadata +195 -0
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Minimal SchemaImplementation used when the app doesn't provide one.
4
+ # It delegates runtime resolution to either:
5
+ # - singleton resolver methods attached to schema types (e.g. `Inbox.resolve_field_conversations`),
6
+ # - the field's resolve proc (if present),
7
+ # - or the object's method matching the field name.
8
+ class SchemaImplementation
9
+ attr_accessor :schema
10
+
11
+ def initialize
12
+ @schema = nil
13
+ end
14
+
15
+ # Called by graphql-ruby as the default resolver: (type, field, obj, args, ctx)
16
+ def call(type, field, obj, args, ctx)
17
+ field_name = extract_field_name(field)
18
+
19
+ # Prefer singleton resolver methods attached during post_process
20
+ owner_candidates = [type]
21
+ if type.respond_to?(:metadata) && type.metadata.is_a?(Hash) && type.metadata[:type_class]
22
+ owner_candidates << type.metadata[:type_class]
23
+ end
24
+ owner_candidates << lookup_owner_type(type)
25
+
26
+ resolver_method_name = "resolve_field_#{field_name}"
27
+ owner = owner_candidates.compact.find do |cand|
28
+ next false unless cand.respond_to?(resolver_method_name)
29
+ m = cand.method(resolver_method_name)
30
+ source_file, = m.source_location
31
+ source_file && source_file.include?('/lib/lighthouse/')
32
+ end
33
+
34
+ if owner
35
+ resolver = owner.method(resolver_method_name)
36
+ param_count = resolver.parameters.length
37
+ return resolver.call(obj, args) if param_count == 2
38
+ resolver.call(obj, args, ctx)
39
+ end
40
+
41
+ # Use field-level resolve proc if available
42
+ if field.respond_to?(:resolve_proc) && field.resolve_proc
43
+ return field.resolve_proc.call(obj, args, ctx)
44
+ end
45
+
46
+ if obj.is_a?(Hash)
47
+ return obj[field_name.to_s] if obj.key?(field_name.to_s)
48
+ return obj[field_name.to_sym] if obj.key?(field_name.to_sym)
49
+
50
+ snake = naming_attribute(field_name)
51
+ return obj[snake] if obj.key?(snake)
52
+ return obj[snake.to_sym] if obj.key?(snake.to_sym)
53
+
54
+ return nil
55
+ end
56
+
57
+ # Fallback to reading the attribute off the Ruby object. Map the GraphQL
58
+ # field name (camelCase) to the Rails attribute (snake_case) when the object
59
+ # does not respond to the literal name, so e.g. `customAttributes` resolves
60
+ # to `custom_attributes` without a per-field resolver.
61
+ return obj.public_send(field_name) if obj.respond_to?(field_name)
62
+
63
+ snake = naming_attribute(field_name)
64
+ return obj.public_send(snake) if snake != field_name.to_s && obj.respond_to?(snake)
65
+
66
+ nil
67
+ end
68
+
69
+ def resolve_type(abstract_type, obj, ctx)
70
+ # Try to resolve to a Ruby type class under Types::<Name>Type
71
+ type_name = abstract_type.respond_to?(:name) ? abstract_type.name : abstract_type.to_s
72
+ begin
73
+ Object.const_get("Types::#{type_name}Type")
74
+ rescue StandardError
75
+ nil
76
+ end
77
+ end
78
+
79
+ def coerce_input(type, value, ctx)
80
+ value
81
+ end
82
+
83
+ def coerce_result(type, value, ctx)
84
+ value
85
+ end
86
+
87
+ private
88
+
89
+ def naming_attribute(field_name)
90
+ if defined?(Lighthouse::Support::Naming)
91
+ Lighthouse::Support::Naming.attribute(field_name)
92
+ else
93
+ field_name.to_s.underscore
94
+ end
95
+ end
96
+
97
+ def extract_field_name(field)
98
+ if field.respond_to?(:graphql_name)
99
+ field.graphql_name.to_s
100
+ elsif field.respond_to?(:name)
101
+ field.name.to_s
102
+ else
103
+ field.to_s
104
+ end
105
+ end
106
+
107
+ def lookup_owner_type(type)
108
+ return nil unless @schema
109
+ type_name = if type.respond_to?(:graphql_name)
110
+ type.graphql_name
111
+ elsif type.respond_to?(:name)
112
+ type.name.to_s
113
+ else
114
+ type.to_s
115
+ end
116
+
117
+ @schema.types[type_name]
118
+ end
119
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lighthouse
4
+ module GraphQL
5
+ module SDLLoader
6
+ module_function
7
+
8
+ def load_from_folder(folder)
9
+ files = Dir[File.join(folder, '**', '*.graphql')].sort
10
+ if files.empty?
11
+ # fallback to the monolithic schema.graphql in apps/chatwoot
12
+ # schema.graphql is located at apps/chatwoot/schema.graphql
13
+ default = File.expand_path('../../..//schema.graphql', __dir__)
14
+ return File.read(default) if File.exist?(default)
15
+ return ''
16
+ end
17
+
18
+ files.map! { |f| File.read(f) }
19
+ files.join("\n\n")
20
+ end
21
+
22
+ def load_from_file(path)
23
+ File.read(path)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lighthouse
4
+ module Support
5
+ # Thin wrapper over the configurable authorization seams, used by the @guard
6
+ # and @can directives so they stay framework-agnostic.
7
+ module Authorization
8
+ module_function
9
+
10
+ def authenticated_user(context)
11
+ Lighthouse::Config.authenticated_user.call(context)
12
+ end
13
+
14
+ def authenticated?(context)
15
+ !authenticated_user(context).nil?
16
+ end
17
+
18
+ # Returns true/false for `ability` against `record` for the current policy
19
+ # user. Defaults to Pundit (see Config#authorizer).
20
+ def authorized?(context, record, ability)
21
+ user = Lighthouse::Config.policy_user.call(context)
22
+ Lighthouse::Config.authorizer.call(user, record, ability)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lighthouse
4
+ module Support
5
+ # Extracts argument values from a GraphQL directive AST node, unwrapping the
6
+ # various value-node shapes (scalar literals, enums, lists) into plain Ruby
7
+ # values. Consolidates the repeated
8
+ # `arg.value.respond_to?(:value) ? arg.value.value : arg.value` pattern.
9
+ module DirectiveArgs
10
+ module_function
11
+
12
+ # Return the literal value of directive argument `name`, or nil.
13
+ def literal(directive_node, name)
14
+ return nil unless directive_node.respond_to?(:arguments)
15
+
16
+ arg = directive_node.arguments&.find { |a| a.name == name.to_s }
17
+ return nil unless arg
18
+
19
+ unwrap(arg.value)
20
+ end
21
+
22
+ def unwrap(value)
23
+ if value.respond_to?(:value)
24
+ value.value
25
+ elsif value.is_a?(Array)
26
+ value.map { |item| unwrap(item) }
27
+ else
28
+ value
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lighthouse
4
+ module Support
5
+ # Resolves a class name string (from a directive argument such as
6
+ # `@field(resolver: "Resolvers::ContactPerson")` or `@all(model: "Contact")`)
7
+ # into an actual constant.
8
+ #
9
+ # The list of namespaces to try is configurable via
10
+ # `Lighthouse::Config.resolver_namespaces`, so the library does not need to
11
+ # know any app-specific namespace. This is a key seam for extracting the
12
+ # library into a standalone gem.
13
+ module ModelResolver
14
+ module_function
15
+
16
+ DEFAULT_NAMESPACES = ['App::Graphql'].freeze
17
+
18
+ def namespaces
19
+ if defined?(Lighthouse::Config) &&
20
+ Lighthouse::Config.respond_to?(:resolver_namespaces) &&
21
+ Lighthouse::Config.resolver_namespaces
22
+ Array(Lighthouse::Config.resolver_namespaces)
23
+ else
24
+ DEFAULT_NAMESPACES
25
+ end
26
+ end
27
+
28
+ def constantize(name)
29
+ return nil unless name
30
+
31
+ raw = name.to_s.strip
32
+ return nil if raw.empty?
33
+
34
+ candidates_for(raw).each do |candidate|
35
+ klass = try_constantize(candidate)
36
+ return klass if klass
37
+ end
38
+
39
+ nil
40
+ end
41
+
42
+ def candidates_for(raw)
43
+ if raw.include?('::')
44
+ [raw]
45
+ else
46
+ namespaces.map { |ns| "#{ns}::#{raw}" } + [raw]
47
+ end
48
+ end
49
+
50
+ def try_constantize(candidate)
51
+ ActiveSupport::Dependencies.constantize(candidate)
52
+ rescue NameError, LoadError
53
+ begin
54
+ Object.const_get(candidate)
55
+ rescue NameError
56
+ nil
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lighthouse
4
+ module Support
5
+ # Central rule for translating GraphQL (camelCase) names into Rails
6
+ # (snake_case) attributes/columns, and for tolerant argument lookup.
7
+ #
8
+ # This is the single home for casing logic; every directive/resolver that
9
+ # needs to map a GraphQL name to a model attribute or DB column routes here
10
+ # instead of re-implementing `.underscore` fallbacks.
11
+ module Naming
12
+ module_function
13
+
14
+ # GraphQL field name -> Rails attribute/method name.
15
+ # e.g. "customAttributes" -> "custom_attributes"
16
+ #
17
+ # This is the default field-reader rule and the basis for relation method
18
+ # name derivation. The `@rename(attribute:)` directive is the explicit
19
+ # override that bypasses this.
20
+ def attribute(graphql_name)
21
+ graphql_name.to_s.underscore
22
+ end
23
+
24
+ # Resolve a GraphQL "column" token (often an ALLCAPS enum key, or a raw
25
+ # string) to a usable column name.
26
+ #
27
+ # NOTE: kept behavior-compatible with the historical `resolve_column_name`
28
+ # so existing whereConditions queries are unaffected. Word-boundary
29
+ # recovery for enum keys is handled separately by generating column enums
30
+ # with explicit `@enum(value:)` mappings.
31
+ def column(graphql_name, _relation = nil)
32
+ name = graphql_name.to_s
33
+ name = name.downcase if name == name.upcase
34
+ name = name.tr('-', '_')
35
+ name = name.underscore if name.include?(' ')
36
+ name
37
+ end
38
+
39
+ # Fetch an argument value from a hash tolerant of camelCase/snake_case and
40
+ # string/symbol keys. Replaces the ad-hoc `args[:x] || args['x'] || ...`
41
+ # chains scattered across resolvers.
42
+ def fetch_arg(args_h, name)
43
+ return nil if args_h.nil?
44
+
45
+ candidate_keys(name).each do |key|
46
+ value = args_h[key]
47
+ return value unless value.nil?
48
+ end
49
+ nil
50
+ end
51
+
52
+ def candidate_keys(name)
53
+ raw = name.to_s
54
+ snake = raw.underscore
55
+ [raw.to_sym, raw, snake.to_sym, snake].uniq
56
+ end
57
+
58
+ # Derive an Eloquent-style relation name from a `has<Relation>` argument
59
+ # name, e.g. "hasContact" -> "contacts". Returns nil when the argument does
60
+ # not follow the `has` convention.
61
+ def derive_relation_name(arg_name)
62
+ return nil unless arg_name.to_s.match?(/^has/i)
63
+
64
+ trailing = arg_name.to_s.sub(/^has/i, '')
65
+ return nil if trailing.empty?
66
+
67
+ trailing.underscore.pluralize
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lighthouse
4
+ module WhereConditions
5
+ # Maps the GraphQL SQLOperator enum values to Arel predicate methods.
6
+ # Extracted from WhereConditionsApplier so that simple argument-filter
7
+ # directives (@eq, @neq, @in, @notIn, @like, @where) can share the same
8
+ # operator semantics.
9
+ module OperatorMap
10
+ OPERATORS = {
11
+ 'EQ' => :eq,
12
+ 'NEQ' => :not_eq,
13
+ 'GT' => :gt,
14
+ 'GTE' => :gteq,
15
+ 'LT' => :lt,
16
+ 'LTE' => :lteq,
17
+ 'IN' => :in,
18
+ 'NIN' => :not_in,
19
+ 'CONTAINS' => :matches,
20
+ 'STARTS_WITH' => :matches,
21
+ 'ENDS_WITH' => :matches,
22
+ 'IS_NULL' => :eq,
23
+ 'IS_NOT_NULL' => :not_eq
24
+ }.freeze
25
+
26
+ def self.[](operator)
27
+ OPERATORS[operator]
28
+ end
29
+
30
+ def self.supported?(operator)
31
+ OPERATORS.key?(operator)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Canonical entrypoint for the `lighthouse-graphql` gem.
4
+ #
5
+ # require 'lighthouse-graphql'
6
+ #
7
+ # Lighthouse brings PHP Lighthouse's SDL-first, directive-driven approach to
8
+ # building GraphQL APIs to Ruby on Rails. See docs/ for the full guide.
9
+ require_relative 'lighthouse/graphql/version'
10
+ require_relative 'lighthouse/rb_lighthouse'
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lighthouse-graphql
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Vaz Innovation
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activesupport
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '6.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '6.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: graphql
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.5'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.5'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rspec
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: activerecord
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '6.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '6.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: sqlite3
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '1.4'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '1.4'
82
+ - !ruby/object:Gem::Dependency
83
+ name: apollo-federation
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.0'
96
+ description: |
97
+ Lighthouse lets you build a GraphQL API for your Rails app primarily through
98
+ schema (SDL) and server-side directives — @all, @find, @paginate, @hasMany,
99
+ @belongsTo, @whereConditions, @orderBy, @field, @auth and more — instead of
100
+ hand-writing a resolver for every field. It is a Ruby adaptation of the PHP
101
+ Lighthouse library (nuwave/lighthouse) built on top of graphql-ruby, with
102
+ first-class Apollo Federation support so a Rails service can act as a subgraph.
103
+ email:
104
+ - engineering@vazinnovation.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - CHANGELOG.md
110
+ - LICENSE.txt
111
+ - README.md
112
+ - docs/authorization.md
113
+ - docs/best-practices.md
114
+ - docs/configuration.md
115
+ - docs/custom-directives.md
116
+ - docs/directives.md
117
+ - docs/federation.md
118
+ - docs/filtering-and-ordering.md
119
+ - docs/getting-started.md
120
+ - docs/relationships.md
121
+ - lib/lighthouse-graphql.rb
122
+ - lib/lighthouse/config.rb
123
+ - lib/lighthouse/contracts/arg_builder.rb
124
+ - lib/lighthouse/contracts/arg_manipulator.rb
125
+ - lib/lighthouse/contracts/directive.rb
126
+ - lib/lighthouse/contracts/field_manipulator.rb
127
+ - lib/lighthouse/contracts/field_middleware.rb
128
+ - lib/lighthouse/contracts/field_resolver.rb
129
+ - lib/lighthouse/dataloader_sources/association_loader.rb
130
+ - lib/lighthouse/dataloader_sources/model_loader.rb
131
+ - lib/lighthouse/directive_resolvers/aggregate_resolver.rb
132
+ - lib/lighthouse/directive_resolvers/all_resolver.rb
133
+ - lib/lighthouse/directive_resolvers/auth_resolver.rb
134
+ - lib/lighthouse/directive_resolvers/base.rb
135
+ - lib/lighthouse/directive_resolvers/belongs_to_many_resolver.rb
136
+ - lib/lighthouse/directive_resolvers/belongs_to_resolver.rb
137
+ - lib/lighthouse/directive_resolvers/builder_applier.rb
138
+ - lib/lighthouse/directive_resolvers/can_resolver.rb
139
+ - lib/lighthouse/directive_resolvers/count_resolver.rb
140
+ - lib/lighthouse/directive_resolvers/field_resolver.rb
141
+ - lib/lighthouse/directive_resolvers/find_resolver.rb
142
+ - lib/lighthouse/directive_resolvers/first_resolver.rb
143
+ - lib/lighthouse/directive_resolvers/guard_resolver.rb
144
+ - lib/lighthouse/directive_resolvers/has_many_resolver.rb
145
+ - lib/lighthouse/directive_resolvers/has_one_resolver.rb
146
+ - lib/lighthouse/directive_resolvers/method_resolver.rb
147
+ - lib/lighthouse/directive_resolvers/paginate_resolver.rb
148
+ - lib/lighthouse/directive_resolvers/rename_resolver.rb
149
+ - lib/lighthouse/directive_resolvers/resolution.rb
150
+ - lib/lighthouse/directive_resolvers/where_conditions_applier.rb
151
+ - lib/lighthouse/directives/arguments/base.rb
152
+ - lib/lighthouse/directives/arguments/filters.rb
153
+ - lib/lighthouse/directives/arguments/order_by.rb
154
+ - lib/lighthouse/directives/registry.rb
155
+ - lib/lighthouse/directives/relation_directive.rb
156
+ - lib/lighthouse/directives/where_conditions_directive.rb
157
+ - lib/lighthouse/graphql.rb
158
+ - lib/lighthouse/graphql/version.rb
159
+ - lib/lighthouse/rb_lighthouse.rb
160
+ - lib/lighthouse/reference_resolver.rb
161
+ - lib/lighthouse/schema_factory.rb
162
+ - lib/lighthouse/schema_generator.rb
163
+ - lib/lighthouse/schema_implementation.rb
164
+ - lib/lighthouse/sdl_loader.rb
165
+ - lib/lighthouse/support/authorization.rb
166
+ - lib/lighthouse/support/directive_args.rb
167
+ - lib/lighthouse/support/model_resolver.rb
168
+ - lib/lighthouse/support/naming.rb
169
+ - lib/lighthouse/where_conditions/operator_map.rb
170
+ homepage: https://github.com/Vaz-Innovation/lighthouse-graphql
171
+ licenses:
172
+ - MIT
173
+ metadata:
174
+ source_code_uri: https://github.com/Vaz-Innovation/lighthouse-graphql
175
+ changelog_uri: https://github.com/Vaz-Innovation/lighthouse-graphql/blob/main/CHANGELOG.md
176
+ documentation_uri: https://github.com/Vaz-Innovation/lighthouse-graphql/tree/main/docs
177
+ rubygems_mfa_required: 'true'
178
+ rdoc_options: []
179
+ require_paths:
180
+ - lib
181
+ required_ruby_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '3.0'
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ requirements: []
192
+ rubygems_version: 3.6.7
193
+ specification_version: 4
194
+ summary: SDL-first, directive-driven GraphQL for Ruby on Rails — a port of PHP Lighthouse.
195
+ test_files: []