amethyst

Rails inspired web-framework middleware
0.1 released

Amethyst Build Status

Amethyst-logo

Amethyst is a web framework written in Crystal language. The goals of Amethyst are to be fast like Node.js and provide agility in application development as Rails do. Why I called my web framework "Amethyst"? Because Crystal has a light purple color at GitHub like amethyst gemstone.

Latest version - 0.1

For detailed information, see docs on our wiki below:

Here are some benchmarking results

For now, next things are implemented:

  • class-based controllers with method-based actions
  • views for actions (*.ecr) (with some magic behind the scene done for you)
  • middleware support
  • simple REST routing
  • path, GET and POST params inside actions
  • basic cookies support
  • static files serving
  • http logger and timer for developers
  • simple environments support

Example

Here is classic 'Hello World' in Amethyst

require "amethyst"

class WordController < Base::Controller
  actions :hello

  view "hello", "#{__DIR__}/views", name
  def hello
    name = "World"
    respond_to do |format|
      format.html { render "hello", name }
    end
  end
end

class HelloWorldApp < Base::App
  routes.draw do
    all "/",      "word#hello" 
    get "/hello", "word#hello" 
    register WordController
  end
end

app = HelloWorldApp.new
app.serve

# /views/hello.ecr
Hello, <%= @name %>

Development

Feel free to fork project and make pull-requests. Stick to standart project structure and name conventions:

src/
  amethyst/
    module1/       # module1 files
      class1.cr
      ...
      module1.cr   # loads all module1 files into namespace Amethyst::Module1
    module2/
      class1.cr    # describe class Class1 (module, struct, i.e)
      ...
      module2.cr   # loads all module2 files into namespace Amethyst::Module2
    file_module.cr # module that consists of one file
  amethyst.cr      # requires module1.cr, module2.cr, file_module.cr

spec/
  module1/
    class1_spec.cr # specs for Module1::Class
    spec_helper.cr # loads main spec_helper
  module2/
    class2_spec.cr
  spec_helper      # loads "amethyst/all"

examples/          # examples to play with
                   # don't forget to require "..src/amethyst" or "..src/all"

Contributing

I would be glad for any help with contributing.

  1. Fork it ( https://github.com/Codcore/amethyst/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

amethyst:
  github: amethyst-framework/amethyst
  version: ~> 0.1
Crystal none

Dependencies 0

Development Dependencies 0

Dependents 0

Last synced .
search fire star recently