Class: Rack::JetRouter::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/jet_router.rb

Instance Method Summary collapse

Constructor Details

#initialize(router, enable_range = true) ⇒ Builder

Returns a new instance of Builder.



343
344
345
346
# File 'lib/rack/jet_router.rb', line 343

def initialize(router, enable_range=true)
  @router = router
  @enable_range = enable_range
end

Instance Method Details

#build_rexp(tree, &callback) ⇒ Object



557
558
559
560
561
562
563
# File 'lib/rack/jet_router.rb', line 557

def build_rexp(tree, &callback)
  #; [!65yw6] converts nested dict into regexp.
  sb = ['\A']
  _build_rexp(tree, sb, &callback)
  sb << '\z'
  return Regexp.compile(sb.join())
end

#build_tree(entrypoint_pairs) ⇒ Object



385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
# File 'lib/rack/jet_router.rb', line 385

def build_tree(entrypoint_pairs)
  #; [!6oa05] builds nested hash object from mapping data.
  tree = {}         # tree is a nested dict
  pnames_d = {}
  entrypoint_pairs.each do |path, item|
    d = tree
    sb = ['\A']
    pnames = _parse_path(path, sb, pnames_d) do |str, pat1|
      #; [!po6o6] param regexp should be stored into nested dict as a Regexp.
      d = _next_dict(d, str) unless str.empty?
      d = (d[Regexp.compile(pat1).freeze] ||= {}) if pat1   # ex: pat1=='[^./?]+'
    end
    sb << '\z'
    rexp = Regexp.compile(sb.join())
    #; [!kz8m7] range object should be included into tuple if only one param exist.
    if @enable_range
      range, separator = _range_of_urlpath_param(path)
    else
      range = separator = nil
    end
    #; [!c6xmp] tuple should be stored into nested dict with key 'nil'.
    d[nil] = [rexp, pnames, item, range, separator]
  end
  return tree
end

#traverse_mapping(mapping, &block) ⇒ Object



348
349
350
351
# File 'lib/rack/jet_router.rb', line 348

def traverse_mapping(mapping, &block)
  _traverse_mapping(mapping, "", mapping.class, &block)
  nil
end