Module: Quail::SchemaBuilder::Discovery
- Defined in:
- lib/quail/schema_builder/discovery.rb
Overview
Discovers custom mutation and query classes from the app/graphql directory.
Class Method Summary collapse
- .custom_mutations ⇒ Object
- .custom_queries ⇒ Object
- .discover_classes(dir, base_class) ⇒ Object
- .resolve_class(file, dir, base_class) ⇒ Object
Class Method Details
.custom_mutations ⇒ Object
7 8 9 |
# File 'lib/quail/schema_builder/discovery.rb', line 7 def self.custom_mutations discover_classes("mutations", Quail::Mutation) end |
.custom_queries ⇒ Object
11 12 13 |
# File 'lib/quail/schema_builder/discovery.rb', line 11 def self.custom_queries discover_classes("queries", Quail::Query) end |
.discover_classes(dir, base_class) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/quail/schema_builder/discovery.rb', line 15 def self.discover_classes(dir, base_class) return {} unless defined?(Rails) result = {} Dir[Rails.root.join("app/graphql/#{dir}/**/*.rb")].each do |f| name, klass = resolve_class(f, dir, base_class) result[name] = klass if klass end result end |
.resolve_class(file, dir, base_class) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/quail/schema_builder/discovery.rb', line 26 def self.resolve_class(file, dir, base_class) relative = Pathname.new(file).relative_path_from(Rails.root.join("app/graphql/#{dir}")) base_name = relative.to_s.delete_suffix(".rb").camelize # Try top-level constant first (autoload root convention), fall back to namespaced klass = begin base_name.constantize rescue NameError "#{dir.camelize}::#{base_name}".constantize end return nil unless klass < base_class [klass.name.demodulize.camelize(:lower).to_sym, klass] end |