13. Controllers (contd.)
One method for each verb - get, post, put, ...
Return value of method is send to browser
Configure Routing with R method
14. Routing
R '/'
localhost:3301/
R '/foo'
localhost:3301/foo
R '/bar/(d+)'
localhost:3301/bar/110
R '/baz', '/baz/(d+)'
localhost:3301/baz
localhost:3301/baz/110
15. Routing (contd.)
class Baz < R '/baz', '/baz/(d+)'
def get(id = nil)
id.nil? ? index : show(id)
end
...
end
17. Views
Markaby - Markup in Ruby
html do
Internal head do
title { quot;The test sitequot; }
DSL for
end
HTML
body.example! do
h1 { quot;The test sitequot; }
div.content do
p quot;show examplequot;
img :src => quot;camping.pngquot;
end
end
end
18. Views
Markaby - Markup in Ruby
html do
Internal head do
title { quot;The test sitequot; }
DSL for
end
HTML id
body.example! do
h1 { quot;The test sitequot; }
div.content do
p quot;show examplequot;
img :src => quot;camping.pngquot;
end
end
end
19. Views
Markaby - Markup in Ruby
html do
Internal head do
title { quot;The test sitequot; }
DSL for
end
HTML id
body.example! do
class
h1 { quot;The test sitequot; }
div.content do
p quot;show examplequot;
img :src => quot;camping.pngquot;
end
end
end
20. Views
Markaby - Markup in Ruby
html do
Internal head do
title { quot;The test sitequot; }
DSL for
end
HTML id
body.example! do
class
h1 { quot;The test sitequot; }
div.content do
attributes
p quot;show examplequot;
img :src => quot;camping.pngquot;
end
end
end
23. A Camping App
One File
models
migrations
controllers
views
post-ambles
24. module Foo::Controllers
class Index < R '/'
Camping.goes :Foo def get
@user_count = User.count
module Foo::Models @foo_count = Foo.count
class User < Base render 'index'
has_many :bars end
end end
class Bar < Base end
belongs_to :user
end module Foo::Views
def layout
class CreateFoo < V 1.0 xhtml_strict do
def self.up head do
create_table :foo_users do title quot;Foo - a Camping Appquot;
... end
end body do
create_table :foo_bars do self << yield
... end
end end
end end
def self.down
drop_table :foo_users def index
drop_table :foo_bars p do
end text quot;#{@user_count} users quot;
end text quot; with#{@bar_count} barsquot;
end end
end
end
27. service(*a)
One single point of entry
Each request passes this method
May manipulate arguments
Add behaviour
...
Two possible uses
28. I. Write your own
extensions
module MyExtension
def service(*a)
# do the additional stuff
super
# but be sure to call super
# and keep return values
end
end
module Foo
include MyExtension
end
29. II. Use existing ones
Camping::Session - adds session suport (db)
SleepingBag - allows rails-like REST-controllers
TentSteak - some Markaby goodness
Parasite - include Camping in Rails apps
Mosquito - Tests for Camping
30. Finding libaries
They all have
generic,
camping-associated
names !!!
http://rubyforge.org/pipermail/camping-list/
32. Usage scenarios
small apps
Do I really need a full blown rails app for
this little code?
multiple small apps
camping servers mount multiple apps at
once
they share the db so they could share models
33. Future
_why does hackety.org
still involved in camping dev
last release 1.5 from 2006-10-03
current dev for 1.6
bug fix and consolidation release
get rid of dependencies
34. Future
_why does hackety.org
still involved in camping dev
last release 1.5 from 2006-10-03
current dev for 1.6
bug fix and consolidation release
get rid of dependencies soon !?!