Lego-core

It’s all about the bits an pieces!

Installation

sudo gem install lego-core

TODO

  • Write a text that describe what we are trying to do, and why :)

  • Write a roadmap for lego-core

  • Add before and after filter handling.

Example plugin (plugin.rb)

# This is a sample plugin that extends a few different Lego contexts.
#
# - View plugin
# - Controller plugin
# - Route matcher plugin
#
# This code will prob. be held in a different gem

module SamplePlugin

  # Register is called by lego when plugin is loaded

  def self.register(lego)
    lego.add_plugin :view, View
    lego.add_plugin :router, Matcher
    lego.add_plugin :controller, Routes
  end

  # A plugin module we load as a view helper

  module View
    def h1(content)
      "<h1>#{content}</h1>"
    end
  end

  # A very simply route helper

  module Routes
    def get(path, &block)
      add_route(:get, {:path => path, :action_block => block})
    end
  end

  # A very simple route matcher

  module Matcher
    def self.match_route(route, env)
      (route[:path] == env['PATH_INFO']) ? [env, {}] : false
    end
  end
end

Example Lego Application (my_app.rb)

# This is how our Lego app would look with this plugin.

Lego.plugin SamplePlugin

class MyApp < Lego::Controller

  get '/hello' do
    h1 'Hello world'
  end

end

Example Rackup/Shotgun file (config.ru)

# This is how you would use it with rack.

require 'rubygems'
require 'lego-core'
require 'plugin'
require 'my_app'

run MyApp

Example run

# Start this app by running shotgun or rackup (these gems nees to be installed)

shotgun config.ru

# Now open up a web browser and point it to http://127.0.0.1:9393/hello or :9292 if you are using rackup

Thoughts

  • Move ActionContext and RouteHandler into different module that controller?

  • Add a plugin Context for before and after filters to make them pluggable?

  • Make the whole framework run inside an instance instead of as class methods?

  • When route is matchen with a different method than the one requested you should not respond 404, support for this?