class Lowkiq::Web::Action

Public Class Methods

new(request_method, segments, &body) click to toggle source
# File lib/lowkiq/web/action.rb, line 16
def initialize(request_method, segments, &body)
  @request_method = request_method
  @url_pattern = self.class.segments_to_regex(segments)
  @body = body
end
segments_to_regex(segments) click to toggle source
# File lib/lowkiq/web/action.rb, line 4
def self.segments_to_regex(segments)
  prepared = segments.map do |segment|
    case segment
    when Symbol
      "(?<#{segment}>[^\/]+)"
    else
      segment
    end
  end.join( '/' )
  Regexp.new '\A' + '/' + prepared + '\z'
end

Public Instance Methods

call(req) click to toggle source
# File lib/lowkiq/web/action.rb, line 22
def call(req)
  return if @request_method != req.request_method
  match = @url_pattern.match req.path_info
  return unless match
  data = @body.call req, match
  [200, {}, [JSON.generate(data)]]
end