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.
Camping includes a pretty nifty server which is built for development. It follows these rules:
Load all Camping apps in a directory or a file.
Load new apps that appear in that directory or that file.
Mount those apps according to their name. (e.g. Blog is mounted at /blog.)
Run each app's create method upon startup.
Reload the app if its modification time changes.
Reload the app if it requires any files under the same directory and one of their modification times changes.
Support the X-Sendfile header.
Run it like this:
camping examples/ # Mounts all apps in that directory camping blog.rb # Mounts Blog at /
And visit localhost:3301/ in your browser.
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.
See: rack.rubyforge.org/doc/SPEC.html
# File lib/camping-unabridged.rb, line 634 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
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
All the applications will be available in Camping::Apps.
# File lib/camping-unabridged.rb, line 621 def goes(m) Apps << a = eval(S.gsub(/Camping/,m.to_s), TOPLEVEL_BINDING) caller[0]=~/:/ IO.read(a.set:__FILE__,$`)=~/^__END__/ && (b=$'.split(/^@@\s*(.+?)\s*\r?\n/)).shift rescue nil a.set :_t,H[*b||[]] end
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'} ...>
# File lib/camping-unabridged.rb, line 660 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
A hash where you can set different settings.
# File lib/camping-unabridged.rb, line 681 def options O end
Generated with the Darkfish Rdoc Generator 2.