1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00

Changed the body method to accept blocks as well as strings. Also, added example calendar app to be built more in the future. Finally, added the respon_to block. View readme for example

This commit is contained in:
a_user@mac.com 2007-09-11 11:00:11 +00:00
parent 3b491e00ab
commit 2da510039e
5 changed files with 104 additions and 1 deletions

View file

@ -0,0 +1,17 @@
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib/'
require 'sinatra'
get '/' do
html {p "here, b"}
p "hi"
end
get 'index' do
html {body "in here!"}
body do
"pancakes"
end
end
get 'favicon' do
end

View file

@ -56,8 +56,9 @@ module Sinatra
@status || 200
end
def body(value = nil)
def body(value = nil, &block)
@body = value if value
@body = block.call if block
@body || ''
end

17
vendor/respond_to/README vendored Normal file
View file

@ -0,0 +1,17 @@
Respond_to
Allows for different methods to be called upon in the event context block
from
get 'index' do
body "hey"
end
to
get 'index' do
html {"hi"}
end
If there is a block with the extension, that will be used as the output, otherwise the body of the block will be used.

5
vendor/respond_to/init.rb vendored Normal file
View file

@ -0,0 +1,5 @@
require File.dirname(__FILE__) + '/lib/responder'
Sinatra::EventContext.send(:include, Sinatra::Responder)
Sinatra::Event.send(:include, Sinatra::EventResponder)
Sinatra::EventManager.send(:extend, Sinatra::DispatcherResponder)

63
vendor/respond_to/lib/responder.rb vendored Normal file
View file

@ -0,0 +1,63 @@
module Sinatra
module Responder
module InstanceMethods
def method_missing(id, *args, &block)
if block
@responds_to[id] = block unless @responds_to.has_key? id
else
super
end
end
def initialize_with_responds_to(i)
initialize_without_responds_to(i)
@responds_to = {}
end
end
def self.included(base)
base.send :include, InstanceMethods
base.instance_eval do
alias_method :initialize_without_responds_to, :initialize
alias_method :initialize, :initialize_with_responds_to
end
attr_accessor :responds_to
end
end
module EventResponder
def self.included(base)
base.send :include, InstanceMethods
base.instance_eval do
alias_method :attend_without_respond_to, :attend
alias_method :attend, :attend_with_respond_to
end
end
module InstanceMethods
# Pulls the request info from the REQUEST_PATH
# it looks for the path extension
# For instance, index.html will respond to the html block
def respond_request(request)
request.env['REQUEST_PATH'].include?('.') ? request.env['REQUEST_PATH'].split('.')[-1].to_sym : :html
end
def attend_with_respond_to(request)
context = EventContext.new(request)
begin
context.instance_eval(&@block) if @block
context.responds_to[respond_request(request)].call if context.responds_to.has_key? respond_request(request)
rescue => e
context.error e
end
run_through_after_filters(context)
context
end
end
end
module DispatcherResponder
def determine_event(verb, path)
EventManager.events.detect(method(:not_found)) do |e|
e.path =~ Regexp.new(path.split(".")[0..-2].join("|").gsub(/\//, '')) && e.verb == verb
end
end
end
end