Module: Rsodx::RouterDSL::ClassMethods

Defined in:
lib/rsodx/router_dsl.rb

Instance Method Summary collapse

Instance Method Details

#define_route(method, path, *args, &block) ⇒ Object



44
45
46
47
48
# File 'lib/rsodx/router_dsl.rb', line 44

def define_route(method, path, *args, &block)
  route_block = block || args.pop
  full_path = (@namespace_prefix || "") + path
  Sinatra::Base.send(method.downcase, full_path, *args, &route_block)
end

#namespace(prefix, &block) ⇒ Object

Raises:

  • (ArgumentError)


36
37
38
39
40
41
42
# File 'lib/rsodx/router_dsl.rb', line 36

def namespace(prefix, &block)
  raise ArgumentError, "Block required for namespace" unless block_given?
  previous = @namespace_prefix || ""
  @namespace_prefix = previous + prefix
  class_eval(&block)
  @namespace_prefix = previous
end

#route(verb, path, handler_class, options = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/rsodx/router_dsl.rb', line 10

def route(verb, path, handler_class, options = {})
  define_route(verb, path) do
    req = Request.new(verb: verb, path: path, request: request)
    result = Action.call(request: req, handler_class: handler_class, options: options)

    content_type :json
    status(result.error_code || result.code || 200)

    if result.success?
      result.json_response
    else
      { success: false, error: result.error }.to_json
    end
  end
end