Class: NuHttp::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/nuhttp/builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(ractor_compat: false) ⇒ Builder

Returns a new instance of Builder.



6
7
8
9
# File 'lib/nuhttp/builder.rb', line 6

def initialize(ractor_compat: false)
  @router = Router.new
  @ractor_compat = ractor_compat
end

Instance Method Details

#buildObject



11
12
13
14
15
16
17
18
19
20
# File 'lib/nuhttp/builder.rb', line 11

def build
  if @ractor_compat
    @router.routes.freeze
    Ractor.make_shareable @router
    raise if !Ractor.shareable?(@router)
  end
  App.new(@router).tap do |app|
    app.freeze if @ractor_compat
  end
end

#get(path, &block) ⇒ Object

The nuhttp-typegen tool can be used to generated RBS type signatures tailored for each app.



25
26
27
28
29
30
31
32
# File 'lib/nuhttp/builder.rb', line 25

def get(path, &block)
  if @ractor_compat
    shareable_block = Ractor.shareable_proc(&block)
    @router.register_route(:get, path, &shareable_block)
  else
    @router.register_route(:get, path, &block)
  end
end

#mount(path, subapp) ⇒ Object

: (String, NuHttp::App) -> void



47
48
49
50
51
52
53
54
55
# File 'lib/nuhttp/builder.rb', line 47

def mount(path, subapp)
  subapp.routes.each do |route|
    @router.register_route(
      route.method,
      path + route.pattern,
      &route.handler
    )
  end
end

#post(path, &block) ⇒ Object

The nuhttp-typegen tool can be used to generated RBS type signatures tailored for each app.



37
38
39
40
41
42
43
44
# File 'lib/nuhttp/builder.rb', line 37

def post(path, &block)
  if @ractor_compat
    shareable_block = Ractor.shareable_proc(&block)
    @router.register_route(:post, path, &shareable_block)
  else
    @router.register_route(:post, path, &block)
  end
end