Project

yokunai

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
An extremely too-simple web framework based on raw Rack and some helper classes. Scratches a very particular itch--one you likely don't have.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 0.3
~> 2.0
 Project Readme

よくăȘい

CI Build Status

It's not very good.

Please don't actually use this.

How to use it

Add the dependency:

# Gemfile
source "https://rubygems.org/"

gem "yokunai"

Run bundle, of course. Then make a controller:

# lib/my_app.rb
require "yokunai"

ROUTES = {
  %r{^/$} => {class: "HomeController", methods: ["GET"]}
}.freeze

class HomeController < Yokunai::AbstractController
  def get
    respond body: "It works!"
  end
end

Now just make a rackup config so we can run something:

# config.ru
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib"))
require "my_app"

run Yokunai::Application.new(
  route_map: ROUTES,
  base_dir: File.dirname(__FILE__)
)

Then just bundle exec rackup and you're gold, Ponyboy.

Configuration

You can configure Yokunai via a YAML file. Create config/development.yml (where development is whatever environment you want to configure). Anything in this file will be populated into the Yokunai::Config helper, so you can fetch things easily with Yokunai::Config.get("my_key") anywhere in your app.

For example,

# config/development.yml
---
template_dir: web/htmls
some_secret_key: abc123

Some values have defaults to make setup easier, feel free to override any of them. An exhaustive list can be found in the Config class itself.

Assets

You probably have frontend assets, if this is a web page. There's a controller built-in for that if you want it. Just point a path with a capture called name to Yokunai::StaticController.

ROUTES = {
  %r{^/assets/(?<name>.+)$} => {class: "Yokunai::StaticController", methods: ["GET"]}
}

Now assets will be served out of the directory you set as your asset_dir in the YAML config.

Boot Hooks

If your app needs to do something on-boot (maybe seed a cache, ping an orchestrator, etc.) then you can create a "boot hook" to do that. Just create a PORO class with a .run method, which will be invoked when the app boots.

# lib/my_app/some_hook.rb
module MyApp
  class SomeHook
    def self.run
      puts "Got hooked"
    end
  end
end

Then pass the class in when you boot the app:

# config.ru
[...]

run Yokunai::Application(
  routes: ...,
  base_dir: ...,
  hooks: [MyApp::SomeHook]
)