Module: Rsodx::RouterDSL::ClassMethods
- Defined in:
- lib/rsodx/router_dsl.rb
Instance Method Summary collapse
- #define_route(method, path, *args, &block) ⇒ Object
- #namespace(prefix, &block) ⇒ Object
- #route(verb, path, interactor, opts = {}) ⇒ Object
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
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 |