Module: Camping
- Defined in:
- lib/camping/server.rb,
lib/camping.rb,
lib/camping/ar.rb,
lib/camping/session.rb,
lib/camping/reloader.rb,
lib/camping-unabridged.rb
Overview
If you’re new to Camping, you should probably start by reading the first chapters of The Camping Book.
Okay. So, the important thing to remember is that Camping.goes :Nuts
copies the Camping module into Nuts. This means that you should never use any of these methods/classes on the Camping module, but rather on your own app. Here’s a short explanation on how Camping is organized:
-
Camping::Controllers is where your controllers live.
-
Camping::Models is where your models live.
-
Camping::Views is where your views live.
-
Camping::Base is a module which is included in all your controllers.
-
Camping::Helpers is a module with useful helpers, both for the controllers and the views. You should fill this up with your own helpers.
Camping also ships with:
-
Camping::Session adds states to your app.
-
Camping::Server starts up your app in development.
-
Camping::Reloader automatically reloads your apps when a file has changed.
More importantly, Camping also installs The Camping Server, please see Camping::Server.
Defined Under Namespace
Modules: Base, Controllers, Helpers, Models, Session, Views Classes: Cookies, H, Reloader, Server
Constant Summary collapse
- C =
self
- S =
IO.read(__FILE__) rescue nil
- P =
"<h1>Cam\ping Problem!</h1><h2>%s</h2>"
- U =
Rack::Utils
- O =
{}
- Apps =
[]
- SK =
Key for r.session
:camping
- X =
Controllers
Class Method Summary collapse
-
.call(e) ⇒ Object
Ruby web servers use this method to enter the Camping realm.
-
.goes(m, g = TOPLEVEL_BINDING) ⇒ Object
When you are running many applications, you may want to create independent modules for each Camping application.
-
.method_missing(m, c, *a) ⇒ Object
The Camping scriptable dispatcher.
-
.options ⇒ Object
A hash where you can set different settings.
-
.set(k, v) ⇒ Object
Shortcut for setting options:.
-
.use(*a, &b) ⇒ Object
Injects a middleware:.
Class Method Details
.call(e) ⇒ Object
Ruby web servers use this method to enter the Camping realm. The e
argument is the environment variables hash as per the Rack specification. And array with [status, headers, body] is expected at the output.
651 652 653 |
# File 'lib/camping-unabridged.rb', line 651 def call e;X.M k,m,*a=X.D e["PATH_INFO"],e['REQUEST_METHOD']. downcase,e;k.new(e,m).service(*a).to_a;rescue;r500(:I,k,m,$!,:env=>e).to_a end |
.goes(m, g = TOPLEVEL_BINDING) ⇒ Object
When you are running many applications, you may want to create independent modules for each Camping application. Camping::goes defines a toplevel constant with the whole MVC rack inside:
require 'camping'
Camping.goes :Nuts
module Nuts::Controllers; ... end
module Nuts::Models; ... end
module Nuts::Views; ... end
Additionally, you can pass a Binding as the second parameter, which enables you to create a Camping-based application within another module, for example to namespace your web interface and code for a worker process together:
module YourApplication
Camping.goes :Web, binding()
module Web
...
end
module Worker
...
end
end
All the applications will be available in Camping::Apps.
638 639 640 641 |
# File 'lib/camping-unabridged.rb', line 638 def goes m,g=TOPLEVEL_BINDING;Apps<<a=eval(S.gsub(/Camping/,m.to_s),g);caller[0]=~/:/ IO.read(a.set:__FILE__,$`)=~/^__END__/&&(b=$'.split /^@@\s*(.+?)\s*\r?\n/m).shift rescue nil a.set :_t,H[*b||[]];end |
.method_missing(m, c, *a) ⇒ Object
The Camping scriptable dispatcher. Any unhandled method call to the app module will be sent to a controller class, specified as an argument.
Blog.get(:Index)
#=> #<Blog::Controllers::Index ... >
The controller object contains all the @cookies, @body, @headers, etc. formulated by the response.
You can also feed environment variables and query variables as a hash, the final argument.
Blog.post(:Login, :input => {'username' => 'admin', 'password' => 'camping'})
#=> #<Blog::Controllers::Login @user=... >
Blog.get(:Info, :env => {'HTTP_HOST' => 'wagon'})
#=> #<Blog::Controllers::Info @headers={'HTTP_HOST'=>'wagon'} ...>
677 678 679 |
# File 'lib/camping-unabridged.rb', line 677 def method_missing m,c,*a;X.M;h=Hash===a[-1]?a.pop: {};e=H[Rack::MockRequest. env_for('',h.delete(:env)||{})];k=X.const_get(c).new(e,m.to_s);h.each{|i,v|k. send"#{i}=",v};k.service(*a) end |
.options ⇒ Object
A hash where you can set different settings.
698 |
# File 'lib/camping-unabridged.rb', line 698 def ;O end |
.set(k, v) ⇒ Object
Shortcut for setting options:
module Blog
set :secret, "Hello!"
end
707 |
# File 'lib/camping-unabridged.rb', line 707 def set k,v;O[k]=v end |
.use(*a, &b) ⇒ Object
Injects a middleware:
module Blog
use Rack::MethodOverride
use Rack::Session::Memcache, :key => "session"
end
692 693 |
# File 'lib/camping-unabridged.rb', line 692 def use*a,&b;m=a.shift.new(method(:call),*a,&b) (:call){|e|m.call(e)}end |