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



54
55
56
57
58
# File 'lib/rsodx/router_dsl.rb', line 54

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)


46
47
48
49
50
51
52
# File 'lib/rsodx/router_dsl.rb', line 46

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, interactor, opts = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rsodx/router_dsl.rb', line 10

def route(verb, path, interactor, opts = {})
  define_route(verb, path) do
    payload = begin
                request.body.rewind
                JSON.parse(request.body.read, symbolize_names: true)
              rescue JSON::ParserError
                {}
              end

    ctx = {
      params: params.to_h,
      json: payload
    }.merge(opts)

    result = interactor.call(ctx)

    status(result.error_code || 200)

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