class Vidispine::API::Utilities::HTTPServer

Constants

DEFAULT_ADDRESS_BINDING
DEFAULT_PORT

Attributes

global_arguments[RW]
metadata_file_path_field_id[RW]
relative_file_path_collection_name_position[RW]
storage_path_map[RW]

Public Class Methods

init(args = {}) click to toggle source

@param [Hash] args @option args [Logger] :logger @option args [String] :binding @option args [String] :local_port

# File lib/vidispine/api/utilities/http_server.rb, line 198
def self.init(args = {})
  logger = initialize_logger(args)
  set(:logger, logger)

  logger.debug { "Initializing HTTP Server. Arguments: #{args.inspect}" }

  _binding = args.delete(:binding) { DEFAULT_ADDRESS_BINDING }
  _port = args.delete(:port) { DEFAULT_PORT }
  set(:bind, _binding)
  set(:port, _port)
  set(:initial_arguments, args)

  set(:api, args[:api])
end
initialize_logger(args = { }) click to toggle source
# File lib/vidispine/api/utilities/http_server.rb, line 188
def self.initialize_logger(args = { })
  logger = args[:logger] ||= Logger.new(args[:log_to] || STDOUT)
  logger.level = args[:log_level] if args[:log_level]
  logger
end

Public Instance Methods

api() click to toggle source
# File lib/vidispine/api/utilities/http_server.rb, line 218
def api
  #self.class.api
  settings.api
end
format_response(response, args = { }) click to toggle source

@!endgroup Routes

# File lib/vidispine/api/utilities/http_server.rb, line 99
def format_response(response, args = { })
  supported_types = %w(application/json application/xml text/xml)
  case request.preferred_type(supported_types)
    when 'application/json'
      content_type :json
      _response = (response.is_a?(Hash) || response.is_a?(Array)) ? JSON.generate(response) : response
    #when 'application/xml', 'text/xml'
    #  content_type :xml
    #  _response = XmlSimple.xml_out(response, { :root_name => 'response' })
    else
      content_type :json
      _response = (response.is_a?(Hash) || response.is_a?(Array)) ? JSON.generate(response) : response
  end
  _response
end
log_request(route = '') click to toggle source
# File lib/vidispine/api/utilities/http_server.rb, line 177
def log_request(route = '')
  return if request.path == '/favicon.ico'
  logger.debug { "\n#{request_to_s}" }
  #puts requests.insert(request_to_hash)
end
log_request_match(route) click to toggle source
# File lib/vidispine/api/utilities/http_server.rb, line 183
def log_request_match(route)
  log_request(route)
  logger.debug { "MATCHED: #{request.url} -> #{route}\nParsed Parameters: #{params.inspect}" }
end
logger() click to toggle source
# File lib/vidispine/api/utilities/http_server.rb, line 213
def logger
  #self.class.logger
  settings.logger
end
merge_params_from_body(_params = params) click to toggle source

Will try to convert a body to parameters and merge them into the params hash Params will override the body parameters

@params [Hash] _params (params) The parameters parsed from the query and form fields

# File lib/vidispine/api/utilities/http_server.rb, line 132
def merge_params_from_body(_params = params)
  _params = _params.dup
  _params_from_body = parse_body
  _params = _params_from_body.merge(_params) if _params_from_body.is_a?(Hash)
  indifferent_hash.merge(_params)
end
parse_body() click to toggle source
# File lib/vidispine/api/utilities/http_server.rb, line 115
def parse_body
  if request.media_type == 'application/json'
    request.body.rewind
    body_contents = request.body.read
    logger.debug { "Parsing: '#{body_contents}'" }
    if body_contents
      json_params = JSON.parse(body_contents)
      return json_params
    end
  end

end
request_to_s(args = { }) click to toggle source

@param [Hash] args @option args [Request] :request

# File lib/vidispine/api/utilities/http_server.rb, line 141
        def request_to_s(args = { })
          _request = args[:request] || request
          output = <<-OUTPUT
------------------------------------------------------------------------------------------------------------------------
    REQUEST
    Method:         #{_request.request_method}
    URI:            #{_request.url}

    Host:           #{_request.host}
    Path:           #{_request.path}
    Script Name:    #{_request.script_name}
    Query String:   #{_request.query_string}
    XHR?            #{_request.xhr?}

    Remote
    Host:           #{_request.env['REMOTE_HOST']}
    IP:             #{_request.ip}
    User Agent:     #{_request.user_agent}
    Cookies:        #{_request.cookies}
    Accepts:        #{_request.accept.inspect}
    Preferred Type: #{_request.preferred_type}

    Media Type:     #{_request.media_type}
    BODY BEGIN:
#{_request.body.read}
    BODY END.

    Parsed Parameters:
    #{PP.pp(_request.params, '', 60)}

------------------------------------------------------------------------------------------------------------------------
          OUTPUT
          _request.body.rewind
          output
        end