salt
  
A Human Friendly Interface for HTTP webservers written in Crystal.
"Salt" icon by Creative Stall from Noun Project.
Installation
Add this to your application's shard.yml:
dependencies:
  salt:
    github: icyleaf/salt
    branch: master
Usage
require "salt"
require "salt/middlewares/session/cookie"
require "salt/middlewares/logger"
class Talk < Salt::App
  def call(env)
    env.session.set("username", "icyleaf")
    env.logger.info("Start Talking!")
    {400, { "Content-Type" => "text/plain" }, ["Can I talk to salt?"]}
  end
end
class Shout < Salt::App
  def call(env)
    call_app(env)
    env.logger.debug("Shout class")
    {status_code, headers, body.map &.upcase }
  end
end
class Speaking < Salt::App
  def call(env)
    call_app(env)
    env.logger.debug("Speaking class")
    {200, headers, ["This is Slat speaking! #{env.session.get("username")}"]}
  end
end
Salt.use Salt::Session::Cookie, secret: "<change me>"
Salt.use Salt::Logger, level: Logger::DEBUG, progname: "app"
Salt.use Shout
Salt.use Speaking
Salt.run Talk.new
Available middleware
- [x] ShowExceptions
- [x] CommonLogger
- [x] Logger
- [x] Runtime
- [x] Session(Cookie/Redis)
- [x] Head
- [x] File
- [x] Directory
- [x] Static
- [ ] SendFile
- [x] ETag
- [x] BasicAuth
- [x] Router(lightweight)
All these components use the same interface, which is described in detail in the Salt::App specification. These optional components can be used in any way you wish.
Contributing
- Fork it ( https://github.com/icyleaf/salt/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- icyleaf - creator, maintainer
Resouces
Heavily inspired from Ruby's rack gem.