Skip to content
This repository was archived by the owner on Apr 21, 2019. It is now read-only.

Releases: gokmen/yeager

v0.1.8 - Late Friday

14 Oct 05:29
deeb21e
Compare
Choose a tag to compare

This version introduces use directive for Yeager::App which allows one to use generic handlers for all routes. Following example will enable CORS for all routes, currently use does not support custom paths.

require "../src/yeager"

app = Yeager::App.new

app.get "/" do |req, res|
  res.send "Hello world!"
end

app.post "/" do |_, res|
  res.status(200).json({"Hello" => "world!"})
end

app.get "/:name" do |req, res|
  res.send "Hello sub world! #{req.params["name"]}"
end

# Enable CORS
# Even though it's defined at the end this handler will be
# called before all the handlers. Multiple use handlers
# can be defined which will be called sequentially.
app.use do |req, res, continue|
  res.headers.add "Access-Control-Allow-Origin", "*"
  continue.call
end

# If you have a defined HTTP::Server already you can
# use app.handler after this point instead of running
# the server of the app.
app.listen 3000 do
  print "Example app listening on 0.0.0.0:3000!"
end

v0.1.7 - Friday

14 Oct 01:09
037ecc5
Compare
Choose a tag to compare

This release includes support for HTTP method OPTIONS which is a preflight request for some browsers and clients for any request.

v0.1.6 - Thursday

28 Sep 21:54
1671706
Compare
Choose a tag to compare

It's now possible to use multiple Yeager::App handlers;

require "yeager"

app1 = Yeager::App.new
app2 = Yeager::App.new

app1.get "/" do |req, res, continue|
  res.send "1"
  continue.call
end

app1.get "/" do |req, res, continue|
  res.send "2"
  continue.call
end

app1.get "/" do |req, res, continue|
  res.send "3"
  continue.call
end

app2.get "/" do |req, res|
  res.send "4"
end

app2.get "/foo" do |req, res|
  res.send "bar"
end

server = HTTP::Server.new("0.0.0.0", 3000, [
  app1.handler,
  app2.handler,
])

server.listen

For requesting to / on 0.0.0.0:3000 will end up with String 1234, where 1 and 2 will be printed by app1, and 3 and 4 by app2 respectively. Also a request to /foo will end up with bar result even though it's provided by app2. Where app1 will pass all requests which it can't handle to the next handler which is app2, and it has /foo route to handle.

v0.1.5 - Friday

23 Sep 00:44
288037d
Compare
Choose a tag to compare

This is the initial release of Yeager with Yeager::App included.

Yeager::Router supports following;

  • Multiple result support for given paths;
    for given *, /test/* routes, router will match both of them when /test/foo given as an input
  • Parameter, optional parameters and glob support;
    for given /:foo? route;
    • router will return { :path => "/:foo?", "foo" => "test" } for /test request
    • router will return { :path => "/:foo?", "foo" => nil } for / request

Yeager::App on top of Yeager::Router provides Express.js like interface for your web applications;

An advanced Yeager::App example would be;

require "yeager"

# Create the app
app = Yeager::App.new

# Add a glob handler to call before everything else
# will print "A new visit!" for each request
app.get "*" do |req, res, continue|
  puts "A new visit!"
  continue.call
end

# Add GET handler for "/" to response back with "Hello world!"
app.get "/" do |req, res|
  res.send "Hello world!"
end

# Add another GET handler for "/:user"
# which will render "Hello yeager!" for "/yeager" route
app.get "/:user" do |req, res|
  res.send "Hello #{req.params["user"]}!"
end

# Add a POST handler for "/add" and return a `json`
# with status code 200
app.post "/add" do |req, res|
  res.status(200).json({"Hello" => "world!"})
end

# Start the app on port 3000
app.listen 3000 do
  print "Example app listening on 0.0.0.0:3000!"
end