Class: GraphQL::Analyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/analyzer.rb,
lib/graphql/analyzer/result.rb,
lib/graphql/analyzer/version.rb,
lib/graphql/analyzer/parser/base.rb,
lib/graphql/analyzer/parser/mysql.rb,
lib/graphql/analyzer/parser/sqlite3.rb,
lib/graphql/analyzer/parser/postgresql.rb,
lib/graphql/analyzer/instrumentation/base.rb,
lib/graphql/analyzer/instrumentation/mysql.rb,
lib/graphql/analyzer/instrumentation/sqlite3.rb,
lib/graphql/analyzer/instrumentation/postgresql.rb,
lib/graphql/analyzer/instrumentation/active_record.rb,
lib/graphql/analyzer/instrumentation/elastic_search.rb

Defined Under Namespace

Modules: Instrumentation, Parser Classes: Result

Constant Summary collapse

VERSION =
"0.1.4"

Instance Method Summary collapse

Constructor Details

#initialize(instruments) ⇒ Analyzer

Returns a new instance of Analyzer.



20
21
22
# File 'lib/graphql/analyzer.rb', line 20

def initialize(instruments)
  @instruments = instruments
end

Instance Method Details

#after_query(query) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/graphql/analyzer.rb', line 33

def after_query(query)
  result = query.result

  result["extensions"] ||= {}
  result["extensions"]["analyzer"] = {
    "version" => 1,
    "execution" => {
      "resolvers" => query.context['graphql-analyzer']['resolvers']
    }
  }
end

#before_query(query) ⇒ Object



29
30
31
# File 'lib/graphql/analyzer.rb', line 29

def before_query(query)
  query.context['graphql-analyzer'] = { 'resolvers' => [] }
end

#instrument(type, field) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/graphql/analyzer.rb', line 45

def instrument(type, field)
  instruments.reduce(field) do |field, instrumentation|
    field.redefine do
      resolve(instrumentation.instrument(type, field))
      lazy_resolve(instrumentation.instrument_lazy(type, field))
    end
  end
end

#use(schema_definition) ⇒ Object



24
25
26
27
# File 'lib/graphql/analyzer.rb', line 24

def use(schema_definition)
  schema_definition.instrument(:query, self)
  schema_definition.instrument(:field, self)
end