Project

lennarb

0.01
The project is in a healthy, maintained state
Lennarb provides a lightweight yet robust solution for web routing in Ruby, focusing on performance and simplicity.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies
 Project Readme
Lennarb

A lightweight, fast, and modular web framework for Ruby based on Rack. Lennarb supports Ruby (MRI) 3.4+

Test Gem Gem MIT License

Table of Contents

  • Features
  • Installation
  • Quick Start
  • Basic Usage
  • Documentation
  • Contributing
  • License

Features

  • Lightweight and modular architecture
  • High-performance routing system
  • Simple and intuitive API
  • Support for middleware
  • Flexible configuration options
  • Two implementation options:
    • Lennarb::App: Minimalist approach for single applications
    • Lennarb::Base: Extended version for mounting multiple applications

Installation

Add this line to your application's Gemfile:

gem 'lennarb'

Or install it directly:

gem install lennarb

Quick Start

Create a simple application with routes:

require "lennarb"

app = Lennarb::App.new do
  get("/") do |req, res|
    res.html("<h1>Welcome to Lennarb!</h1>")
  end

  get("/hello/:name") do |req, res|
     name = req.params[:name]
     res.html("Hello, #{name}!")
  end
end

app.initialize!
run app  # In config.ru

Start with: rackup

Basic Usage

Creating a Simple Application

The Lennarb::App class is the core of the framework:

require "lennarb"

class MyApp < Lennarb::App
  # Define configuration
  config do
    mandatory :database_url, string
    optional :port, int, 9292
  end

  get("/") do |req, res|
    res.html("<h1>Welcome!</h1>")
  end

  post("/users") do |req, res|
    # Access request data
    data = req.body
      res.json({status: "created", data: data})
    end
  end

  # Define hooks
  before do |req, res|
    # Run before every request
    puts "Processing request: #{req.path}"
  end

  after do |req, res|
    # Run after every request
    puts "Completed request: #{req.path}"
  end

  # Define helper methods
  helpers do
    def format_date(date)
      date.strftime("%Y-%m-%d")
    end
  end
end

run MyApp.new.initialize!

Response Types

Lennarb provides various response methods:

# HTML response
res.html("<h1>Hello World</h1>")

# JSON response
res.json({message: "Hello World"})

# Plain text response
res.text("Plain text response")

# Redirect
res.redirect("/new-location")

# Custom status code
res.json({error: "Not found"}, status: 404)

Mounting Applications

For larger applications, use Lennarb::Base to mount multiple apps:

class API < Lennarb::App
  get("/users") do |req, res|
    res.json([{id: 1, name: "Alice"}, {id: 2, name: "Bob"}])
  end
end

class Admin < Lennarb::App  
  get("/dashboard") do |req, res|
    res.html("<h1>Admin Dashboard</h1>")
  end
end

class Application < Lennarb::Base
  # Add common middleware
  middleware do
    use Rack::Session::Cookie, secret: "your_secret"
  end

  # Mount applications at specific paths
  mount(API, at: "/api")
  mount(Admin, at: "/admin")
end

run Application.new.initialize!

Documentation

For more detailed information, please see:

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -am 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

This project uses the Developer Certificate of Origin and is governed by the Contributor Covenant.

License

MIT License - see the LICENSE file for details.