# File: README
[ "README", "AUTHORS", "COPYING", "lib/capcode.rb", nil].each do
Capcode.view_html
Capcode::Views.view_html
Capcode::Helpers.view_html
Capcode::HTTPError.view_html
Capcode::RenderError.view_html
Capcode::RouteError.view_html
Capcode::ParameterError.view_html
end
README / Mon Jun 15 21:12:58 +0200 2009

Capcode

Copyright (C) 2009 Gregoire Lejeune

DESCRIPTION:

Capcode is a web microframework

FEATURES/PROBLEMS:

0.6.1

  • Major bugs corrections in haml and erb renderer ($%&! Windows)
  • Major bugs corrections in Route.call
  • Add Markaby layout support
  • Rewrite blog-couchdb example

0.6.0

  • Add :root option to Capcode.run. This option allow you to specify the root directory for static files
  • Add :working_directory option to Capcode.run. This option allow you to specify the working directory
  • Of ’/’ route is not defined but /index.html exist, display index
  • add mime-types dependency
  • Bug correction in erb and haml renderer

0.5.0

  • Add Haml and Markaby renderer
  • json is deprecated and replaced by render( :json => … )

0.4.0

  • Major bug correction !
  • Add views…

0.3.0

  • Work with Rack 1.0.0

0.2.0

  • Add models with DataMapper and couch_foo
  • Add two new options : :daemonize and :pid
  • Bug correction in Route.

0.1.0

  • First public release
  • No models !!!

SYNOPSIS:

  # file: sample.rb
  require 'rubygems'
  require 'capcode'

  module Capcode
    class Hello < Route '/hello'
      def get
        "Hello World #{Time.now} !"
      end
    end
  end

  Capcode.run( )

Running Capcode Apps

Create model

  require 'rubygems'
  require 'capcode'
  require 'capcode/base/dm' # or require 'capcode/base/couchdb'

  class Story < Capcode::Base
    include Capcode::Resource

    property :id, Integer, :serial => true # only with DataMapper !
    property :title, String
    property :body, String
    property :date, String
  end

See examples/blog-dm.rb and/or examples/blog-couchdb.rb for complete examples.

Create View

  # file: sample.rb
  require 'rubygems'
  require 'capcode'

  module Capcode
    class Hello < Route '/hello'
      def get
        @t = Time.now
        render :time
      end
    end
  end

  module Capcode::Views
    def time
      "Hello world #{@t}"
    end
  end

  Capcode.run( )

Create Helper

  # file: sample.rb
  require 'rubygems'
  require 'capcode'

  module Capcode
    class Hello < Route '/hello'
      def get
        @t = Time.now
        render :time
      end
    end
  end

  module Capcode::Helpers
    def bold( &b )
      "<b>"+yield+"</b>"
    end
  end

  module Capcode::Views
    def time
      "Hello world " + bold { @t }
    end
  end

  Capcode.run( )

Render with Markaby

  # file: sample.rb
  require 'rubygems'
  require 'capcode'
  require 'capcode/render/markaby'

  module Capcode
    class Hello < Route '/hello'
      def get
        @t = Time.now
        render :markaby => :time
      end
    end
  end

  module Capcode::Views
    def time
      # We use Markaby in Capcode::Views.time
      html do
        body do
          p {
            text "Hello World "
            b @t
          }
        end
      end
    end
  end

  Capcode.run( )

Render with Haml

  # file: sample.rb
  require 'rubygems'
  require 'capcode'
  require 'capcode/render/haml'
  Capcode::Helpers.haml_path = "./my_haml_views"

  module Capcode
    class Hello < Route '/hello'
      def get
        @t = Time.now
        render :haml => :time
      end
    end
  end

  Capcode.run( )

  # ./my_haml_views/time.haml
  %html
    %body
      %p
        Hello World
        = @t

Render with JSON

  # file: sample.rb
  require 'rubygems'
  require 'capcode'
  require 'capcode/render/json'

  module Capcode
    class Hello < Route '/hello'
      def get
        @t = Time.now
        render :json => { :time => @t }
      end
    end
  end

  Capcode.run( )

REQUIREMENTS:

  • rack

INSTALL:

  sudo gem install capcode

LICENSE:

Capcode is freely distributable according to the terms of the GNU General Public License.

This program is distributed without any warranty. See the file ‘COPYING’ for details.