class Angus::Base

Constants

DEFAULT_DOC_LANGUAGE
DEFAULT_ENV
DEVELOPMENT_ENV
FIRST_VERSION
PRODUCTION_ENV
TEST_ENV

Attributes

default_doc_language[RW]
definitions[R]
path_prefix[RW]
root_path[RW]
validate_params[RW]

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/angus/base.rb, line 39
def initialize
  super

  @resources_definitions  = []
  @root_path              ||= ''
  @version                = FIRST_VERSION
  @name                   = self.class.name.downcase
  @configured             = false
  @definitions            = nil
  @logger                 = Logger.new(STDOUT)
  @default_doc_language   = DEFAULT_DOC_LANGUAGE
  @validate_params        = :return_error

  configure!

  after_configure
end

Public Instance Methods

after_configure() click to toggle source
Calls superclass method Angus::ProxyActions#after_configure
# File lib/angus/base.rb, line 57
def after_configure
  super

  register_base_routes
  register_resources_routes
end
base_path() click to toggle source
# File lib/angus/base.rb, line 126
def base_path
  "/#@path_prefix"
end
configure() click to toggle source
# File lib/angus/base.rb, line 90
def configure
  warn 'Empty configuration for service.'
end
configure!() click to toggle source
# File lib/angus/base.rb, line 94
def configure!
  raise 'Already configured' if configured?

  definitions_path = if @root_path.empty?
                       'definitions'
                     else
                       File.join(@root_path, 'definitions')
                     end

  @definitions = Angus::SDoc::DefinitionsReader.service_definition(definitions_path)

  self.path_prefix ||= @definitions.code_name

  configure

  @configured = true
end
configured?() click to toggle source
# File lib/angus/base.rb, line 86
def configured?
  @configured
end
development?() click to toggle source
# File lib/angus/base.rb, line 74
def development?
  environment_name.to_sym == DEVELOPMENT_ENV
end
environment_name() click to toggle source
# File lib/angus/base.rb, line 82
def environment_name
  ENV['RACK_ENV'] || DEFAULT_ENV
end
production?() click to toggle source
# File lib/angus/base.rb, line 70
def production?
  environment_name.to_sym == PRODUCTION_ENV
end
register(resource_name, options = {}) click to toggle source
# File lib/angus/base.rb, line 120
def register(resource_name, options = {})
  resource_definition = ResourceDefinition.new(@root_path, resource_name, @definitions)

  @resources_definitions << resource_definition
end
register_resource_routes(resource_definition) click to toggle source
# File lib/angus/base.rb, line 130
def register_resource_routes(resource_definition)
  resource_definition.operations.each do |operation|
    method  = operation.http_method.to_sym
    op_path = "#{api_path}#{operation.path}"

    response_metadata = resource_definition.build_response_metadata(operation.response_elements)

    router.on(method, op_path) do |env, params|
      request  = Rack::Request.new(env)
      params   = Params.indifferent_params(params)
      response = Response.new

      resource = resource_definition.resource_class.new(request, params, operation)

      if validate_params == :return_error
        resource.run_validations!
      end

      resource.run_before_filters

      begin
        op_response = resource.send(operation.code_name)
      rescue Exception
        resource.run_after_filters(response)
        raise
      end

      op_response = {} unless op_response.is_a?(Hash)

      messages = op_response.delete(:messages)

      op_response = build_data_response(op_response, response_metadata, messages)

      response.write(op_response)

      resource.run_after_filters(response)

      response
    end
  end
end
register_resources_routes() click to toggle source
# File lib/angus/base.rb, line 64
def register_resources_routes
  @resources_definitions.each do |resource|
    register_resource_routes(resource)
  end
end
service_code_name() click to toggle source
# File lib/angus/base.rb, line 112
def service_code_name
  @definitions.code_name
end
service_version() click to toggle source
# File lib/angus/base.rb, line 116
def service_version
  @definitions.version
end
test?() click to toggle source
# File lib/angus/base.rb, line 78
def test?
  environment_name.to_sym == TEST_ENV
end