• Jump To … +
    bootstrap.litcoffee configuration_manager.litcoffee echo_router.litcoffee gql.litcoffee graph.litcoffee index.litcoffee mongodb_storage.litcoffee node_manager.litcoffee node_schema.litcoffee query.litcoffee redirect_router.litcoffee router_manager.litcoffee router_schema.litcoffee schema_manager.litcoffee schema_schema.litcoffee static_router.litcoffee storage_manager.litcoffee storage_router.litcoffee
  • graph.litcoffee

  • ¶

    Graph is the core module. It loads all submodules when instantiate depending on the configuration.

    GQL = null
    SchemaManager = null
    StorageManager = null
    RouterManager = null
    NodeManager = null
    Bootstrap = null
    Logger = null
    
    class Graph
    
      constructor: (configuration_manager, done) ->
        @configure(configuration_manager)
        @inject()
        @instantiate(done)
    
      configure: (configuration_manager) ->
        @configuration_manager = configuration_manager
        @configuration = @configuration_manager.get_configuration()
    
      inject: () ->
        di = @configuration.di or {}
        GQL = require(di.GQL or './gql')
        Bootstrap = require(di.Bootstrap or './bootstrap')
        StorageManager = require(di.StorageManager or './storage_manager')
        RouterManager = require(di.RouterManager or './router_manager')
        NodeManager = require(di.NodeManager or './node_manager')
        SchemaManager = require(di.SchemaManager or './schema_manager')
        Logger = require(di.Logger or 'winston')
    
      instantiate: (done) ->
        self = @
        @logger = Logger
        @logger.cli()
        @logger.level = @configuration.logLevel || 'info'
        if @configuration.logFile
          @logger.add(@logger.transports.File, {
            level: @logger.level,
            colorize: true,
            json: false,
            filename: @configuration.logFile
          })
        @info('Logging level set:', @logger.level)
        @storage_manager = new StorageManager(self, @configuration.StorageManager)
        @database = @storage_manager.database
        @schema_manager = new SchemaManager(self, @configuration.SchemaManager or {
          "Schema": "./schema_schema",
          "Node": "./node_schema",
          "Router": "./router_schema"
        })
        @node_manager = new NodeManager(self, () ->
          self.router_manager = new RouterManager(self, () ->
            Bootstrap.bootstrap(self) if Bootstrap
            self.info('Graph API initiated')
            done()
          )
        )
    
      run: (gql, callback) ->
        @input('GQL>', gql)
        self = @
        GQL.parse(gql, (query) ->
          self.query(query, callback)
        )
    
      query: (query, callback) ->
        @debug('Graph> Query:', { node: query.node?.path or query.node, action: query.action, data: query.data} )
        query.graph = @
        @node_manager.query(query)
        @router_manager.query(query)
        query.run(callback)
    
      disconnect: () ->
        @database.disconnect()
        @info('Disconnected')
    
      create_node: (node_data) ->
        @node_manager.create_node node_data
    
      create_router: (router_data) ->
        @router_manager.create_router router_data
    
      log: (args...) -> Logger.log args...
    
      error: (args...) -> Logger.error args...
    
      warn: (args...) -> Logger.warn args...
    
      help: (args...) -> Logger.log 'help', args...
    
      data: (args...) -> Logger.log 'data', args...
    
      info: (args...) -> Logger.info args...
    
      debug: (args...) -> Logger.log 'debug', args...
    
      prompt: (args...) -> Logger.log 'prompt', args...
    
      verbose: (args...) -> Logger.log 'verbose', args...
    
      input: (args...) -> Logger.log 'input', args...
    
      silly: (args...) -> Logger.log 'silly', args...
    
    module.exports = Graph