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

Defined Under Namespace

Modules: Instrumentation, Parser Classes: Result

Constant Summary collapse

VERSION =
"0.1.2"

Instance Method Summary collapse

Constructor Details

#initialize(instruments) ⇒ Analyzer

Returns a new instance of Analyzer.



18
19
20
# File 'lib/graphql/analyzer.rb', line 18

def initialize(instruments)
  @instruments = instruments
end

Instance Method Details

#after_query(query) ⇒ Object



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

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



27
28
29
# File 'lib/graphql/analyzer.rb', line 27

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

#instrument(type, field) ⇒ Object



43
44
45
46
47
# File 'lib/graphql/analyzer.rb', line 43

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

#use(schema_definition) ⇒ Object



22
23
24
25
# File 'lib/graphql/analyzer.rb', line 22

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