lib/yard/server/adapter.rb in yard-0.9.16 vs lib/yard/server/adapter.rb in yard-0.9.17
- old
+ new
@@ -1,100 +1,100 @@
-# frozen_string_literal: true
-module YARD
- module Server
- # Short circuits a request by raising an error. This exception is caught
- # by {Commands::Base#call} to immediately end a request and return a response.
- class FinishRequest < RuntimeError; end
-
- # Raises an error if a resource is not found. This exception is caught by
- # {Commands::Base#call} to immediately end a request and return a 404 response
- # code. If a message is provided, the body is set to the exception message.
- class NotFoundError < RuntimeError; end
-
- # This class implements the bridge between the {Router} and the server
- # backend for a specific server type. YARD implements concrete adapters
- # for WEBrick and Rack respectively, though other adapters can be made
- # for other server architectures.
- #
- # == Subclassing Notes
- # To create a concrete adapter class, implement the {#start} method to
- # initiate the server backend.
- #
- # @abstract
- class Adapter
- # @return [String] the location where static files are located, if any.
- # To set this field on initialization, pass +:DocumentRoot+ to the
- # +server_opts+ argument in {#initialize}
- attr_accessor :document_root
-
- # @return [Hash{String=>Array<LibraryVersion>}] a map of libraries.
- # @see LibraryVersion LibraryVersion for information on building a list of libraries
- # @see #add_library
- attr_accessor :libraries
-
- # @return [Hash] options passed and processed by adapters. The actual
- # options mostly depend on the adapters themselves.
- attr_accessor :options
-
- # @return [Hash] a set of options to pass to the server backend. Note
- # that +:DocumentRoot+ also sets the {#document_root}.
- attr_accessor :server_options
-
- # @return [Router] the router object used to route URLs to commands
- attr_accessor :router
-
- # Performs any global initialization for the adapter.
- # @note If you subclass this method, make sure to call +super+.
- # @return [void]
- def self.setup
- Templates::Template.extra_includes |= [YARD::Server::DocServerHelper]
- Templates::Engine.template_paths |= [File.dirname(__FILE__) + '/templates']
- end
-
- # Performs any global shutdown procedures for the adapter.
- # @note If you subclass this method, make sure to call +super+.
- # @return [void]
- def self.shutdown
- Templates::Template.extra_includes -= [YARD::Server::DocServerHelper]
- Templates::Engine.template_paths -= [File.dirname(__FILE__) + '/templates']
- end
-
- # Creates a new adapter object
- #
- # @param [Hash{String=>Array<LibraryVersion>}] libs a list of libraries,
- # see {#libraries} for formulating this list.
- # @param [Hash] opts extra options to pass to the adapter
- # @option opts [Class] :router (Router) the router class to initialize as the
- # adapter's router.
- # @option opts [Boolean] :caching (false) whether or not caching is enabled
- # @option opts [Boolean] :single_library (false) whether to server documentation
- # for a single or multiple libraries (changes URL structure)
- def initialize(libs, opts = {}, server_opts = {})
- self.class.setup
- self.libraries = libs
- self.options = opts
- self.server_options = server_opts
- self.document_root = server_options[:DocumentRoot]
- self.router = (options[:router] || Router).new(self)
- options[:adapter] = self
- log.debug "Serving libraries using #{self.class}: #{libraries.keys.join(', ')}"
- log.debug "Caching on" if options[:caching]
- log.debug "Document root: #{document_root}" if document_root
- end
-
- # Adds a library to the {#libraries} mapping for a given library object.
- # @example Adding a new library to an adapter
- # adapter.add_library LibraryVersion.new('mylib', '1.0', '/path/to/.yardoc')
- # @param [LibraryVersion] library a library to add
- def add_library(library)
- libraries[library.name] ||= []
- libraries[library.name] |= [library]
- end
-
- # Implement this method to connect your adapter to your server.
- # @abstract
- def start
- raise NotImplementedError
- end
- end
- end
-end
+# frozen_string_literal: true
+module YARD
+ module Server
+ # Short circuits a request by raising an error. This exception is caught
+ # by {Commands::Base#call} to immediately end a request and return a response.
+ class FinishRequest < RuntimeError; end
+
+ # Raises an error if a resource is not found. This exception is caught by
+ # {Commands::Base#call} to immediately end a request and return a 404 response
+ # code. If a message is provided, the body is set to the exception message.
+ class NotFoundError < RuntimeError; end
+
+ # This class implements the bridge between the {Router} and the server
+ # backend for a specific server type. YARD implements concrete adapters
+ # for WEBrick and Rack respectively, though other adapters can be made
+ # for other server architectures.
+ #
+ # == Subclassing Notes
+ # To create a concrete adapter class, implement the {#start} method to
+ # initiate the server backend.
+ #
+ # @abstract
+ class Adapter
+ # @return [String] the location where static files are located, if any.
+ # To set this field on initialization, pass +:DocumentRoot+ to the
+ # +server_opts+ argument in {#initialize}
+ attr_accessor :document_root
+
+ # @return [Hash{String=>Array<LibraryVersion>}] a map of libraries.
+ # @see LibraryVersion LibraryVersion for information on building a list of libraries
+ # @see #add_library
+ attr_accessor :libraries
+
+ # @return [Hash] options passed and processed by adapters. The actual
+ # options mostly depend on the adapters themselves.
+ attr_accessor :options
+
+ # @return [Hash] a set of options to pass to the server backend. Note
+ # that +:DocumentRoot+ also sets the {#document_root}.
+ attr_accessor :server_options
+
+ # @return [Router] the router object used to route URLs to commands
+ attr_accessor :router
+
+ # Performs any global initialization for the adapter.
+ # @note If you subclass this method, make sure to call +super+.
+ # @return [void]
+ def self.setup
+ Templates::Template.extra_includes |= [YARD::Server::DocServerHelper]
+ Templates::Engine.template_paths |= [File.dirname(__FILE__) + '/templates']
+ end
+
+ # Performs any global shutdown procedures for the adapter.
+ # @note If you subclass this method, make sure to call +super+.
+ # @return [void]
+ def self.shutdown
+ Templates::Template.extra_includes -= [YARD::Server::DocServerHelper]
+ Templates::Engine.template_paths -= [File.dirname(__FILE__) + '/templates']
+ end
+
+ # Creates a new adapter object
+ #
+ # @param [Hash{String=>Array<LibraryVersion>}] libs a list of libraries,
+ # see {#libraries} for formulating this list.
+ # @param [Hash] opts extra options to pass to the adapter
+ # @option opts [Class] :router (Router) the router class to initialize as the
+ # adapter's router.
+ # @option opts [Boolean] :caching (false) whether or not caching is enabled
+ # @option opts [Boolean] :single_library (false) whether to server documentation
+ # for a single or multiple libraries (changes URL structure)
+ def initialize(libs, opts = {}, server_opts = {})
+ self.class.setup
+ self.libraries = libs
+ self.options = opts
+ self.server_options = server_opts
+ self.document_root = server_options[:DocumentRoot]
+ self.router = (options[:router] || Router).new(self)
+ options[:adapter] = self
+ log.debug "Serving libraries using #{self.class}: #{libraries.keys.join(', ')}"
+ log.debug "Caching on" if options[:caching]
+ log.debug "Document root: #{document_root}" if document_root
+ end
+
+ # Adds a library to the {#libraries} mapping for a given library object.
+ # @example Adding a new library to an adapter
+ # adapter.add_library LibraryVersion.new('mylib', '1.0', '/path/to/.yardoc')
+ # @param [LibraryVersion] library a library to add
+ def add_library(library)
+ libraries[library.name] ||= []
+ libraries[library.name] |= [library]
+ end
+
+ # Implement this method to connect your adapter to your server.
+ # @abstract
+ def start
+ raise NotImplementedError
+ end
+ end
+ end
+end