/mruby-pong

🏓 mruby-pong is a simple library for quickly creating web applications in MRuby

Primary LanguageRubyMozilla Public License 2.0MPL-2.0

mruby-pong 🏓

    ██▓███   ▒█████   ███▄    █   ▄████ 
  ▓██░  ██▒▒██▒  ██▒ ██ ▀█   █  ██▒ ▀█▒
  ▓██░ ██▓▒▒██░  ██▒▓██  ▀█ ██▒▒██░▄▄▄░
  ▒██▄█▓▒ ▒▒██   ██░▓██▒  ▐▌██▒░▓█  ██▓
  ▒██▒ ░  ░░ ████▓▒░▒██░   ▓██░░▒▓███▀▒
  ▒▓▒░ ░  ░░ ▒░▒░▒░ ░ ▒░   ▒ ▒  ░▒   ▒ 
  ░▒ ░       ░ ▒ ▒░ ░ ░░   ░ ▒░  ░   ░ 
  ░░       ░ ░ ░ ▒     ░   ░ ░ ░ ░   ░ 
                ░ ░           ░       ░ 

Build Status MRuby Version

mruby-pong it's a simple web server for building simple Sinatra-like applications

mruby-pong-example

Installation

Add line to your build_config.rb

MRuby::Build.new do |config|
  # some lines of your config
  config.gem :github => 'nsheremet/mruby-pong'
  # other lines of your config
end

Usage

Simple App:

app = Pong.new

app.get '/' do
  html '<h1>Hello from PONG</h1>'
end

app.run

Your can user custom configuration:

app = Pong.new({
    port: 8080,
    threads: 24,
    debug: true
})

Request handling examples:

app.post '/users' do |request|
  # request have a structure
  # {
  #   params: {Hash},
  #   headers: {Hash},   
  #   method: {String}, additional fields,
  #   url: {String}, additional fields
  # }
  
  params: request[:params]

  json Hash[params: params], 201, headers # Status Code and Headers are optional
end

What I need to return in action?

# HTML
html page, status_code, headers # page is string with HTML content

# JSON
json hash, status_code, headers

# Redirect
redirect_to '/' # accept only one String param

# RAW hash
# You can return what you want, just create hash with required 'Content-Type' header
{
    headers: { 'Content-Type' => 'text/xml' }, # You need to setup Content-Type headers
    status: 200,
    body: '<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don\'t foget me this weekend!</body></note>'
}

License

mruby-pong is primarily distributed under the terms of Mozilla Public License 2.0.

See LICENSE for details.