Capcode 0.9.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +3 -0
- data/examples/rest.log +15 -0
- data/examples/static.rb +12 -0
- data/examples/static/static-index.html +1 -0
- data/lib/capcode.rb +14 -344
- data/lib/capcode/filters.rb +1 -0
- data/lib/capcode/helpers.rb +246 -0
- data/lib/capcode/http_error.rb +49 -0
- data/lib/capcode/static_files.rb +68 -0
- data/lib/capcode/version.rb +1 -1
- metadata +46 -61
- data/doc/rdoc/classes/Capcode.html +0 -1076
- data/doc/rdoc/classes/Capcode/Base.html +0 -136
- data/doc/rdoc/classes/Capcode/Configuration.html +0 -290
- data/doc/rdoc/classes/Capcode/HTTPError.html +0 -148
- data/doc/rdoc/classes/Capcode/Helpers.html +0 -674
- data/doc/rdoc/classes/Capcode/Helpers/Authorization.html +0 -219
- data/doc/rdoc/classes/Capcode/Resource.html +0 -111
- data/doc/rdoc/classes/Capcode/StaticFiles.html +0 -199
- data/doc/rdoc/classes/Capcode/Views.html +0 -112
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/AUTHORS.html +0 -107
- data/doc/rdoc/files/COPYING.html +0 -531
- data/doc/rdoc/files/README_rdoc.html +0 -887
- data/doc/rdoc/files/lib/capcode/base/db_rb.html +0 -101
- data/doc/rdoc/files/lib/capcode/configuration_rb.html +0 -101
- data/doc/rdoc/files/lib/capcode/filters_rb.html +0 -101
- data/doc/rdoc/files/lib/capcode/helpers/auth_rb.html +0 -101
- data/doc/rdoc/files/lib/capcode/render/text_rb.html +0 -101
- data/doc/rdoc/files/lib/capcode_rb.html +0 -144
- data/doc/rdoc/fr_class_index.html +0 -35
- data/doc/rdoc/fr_file_index.html +0 -35
- data/doc/rdoc/fr_method_index.html +0 -56
- data/doc/rdoc/index.html +0 -24
- data/doc/rdoc/rdoc-style.css +0 -208
- data/lib/capcode.rbSAVE +0 -881
@@ -0,0 +1,246 @@
|
|
1
|
+
module Capcode
|
2
|
+
# Helpers contains methods available in your controllers
|
3
|
+
module Helpers
|
4
|
+
def self.args
|
5
|
+
@args ||= nil
|
6
|
+
end
|
7
|
+
def self.args=(x)
|
8
|
+
@args = x
|
9
|
+
end
|
10
|
+
|
11
|
+
# Render a view
|
12
|
+
#
|
13
|
+
# render's parameter can be a Hash or a string. Passing a string is equivalent to do
|
14
|
+
# render( :text => string )
|
15
|
+
#
|
16
|
+
# If you want to use a specific renderer, use one of this options :
|
17
|
+
#
|
18
|
+
# * :markaby => :my_func : :my_func must be defined in Capcode::Views
|
19
|
+
# * :erb => :my_erb_file : this suppose that's my_erb_file.rhtml exist in erb_path
|
20
|
+
# * :haml => :my_haml_file : this suppose that's my_haml_file.haml exist in haml_path
|
21
|
+
# * :sass => :my_sass_file : this suppose that's my_sass_file.sass exist in sass_path
|
22
|
+
# * :text => "my text"
|
23
|
+
# * :json => MyObject : this suppose that's MyObject respond to .to_json
|
24
|
+
# * :static => "my_file.xxx" : this suppose that's my_file.xxx exist in the static directory
|
25
|
+
# * :xml => :my_func : :my_func must be defined in Capcode::Views
|
26
|
+
# * :webdav => /path/to/root
|
27
|
+
#
|
28
|
+
# Or you can use a "HTTP code" renderer :
|
29
|
+
#
|
30
|
+
# render 200 => "Ok", :server => "Capcode #{Capcode::CAPCOD_VERION}", ...
|
31
|
+
#
|
32
|
+
# If you want to use a specific layout, you can specify it with option
|
33
|
+
# :layout
|
34
|
+
#
|
35
|
+
# If you want to change the Content-Type, you can specify it with option
|
36
|
+
# :content_type
|
37
|
+
# Note that this will not work with the JSON renderer
|
38
|
+
#
|
39
|
+
# If you use the WebDav renderer, you can use the option
|
40
|
+
# :resource_class (see http://github.com/georgi/rack_dav for more informations)
|
41
|
+
def render( hash )
|
42
|
+
if hash.class == Hash
|
43
|
+
render_type = nil
|
44
|
+
possible_code_renderer = nil
|
45
|
+
|
46
|
+
hash.keys.each do |key|
|
47
|
+
begin
|
48
|
+
gem "capcode-render-#{key.to_s}"
|
49
|
+
require "capcode/render/#{key.to_s}"
|
50
|
+
rescue Gem::LoadError
|
51
|
+
nil
|
52
|
+
rescue LoadError
|
53
|
+
raise Capcode::RenderError, "Hum... The #{key} renderer is malformated! Please try to install a new version or use an other renderer!", caller
|
54
|
+
end
|
55
|
+
|
56
|
+
if self.respond_to?("render_#{key.to_s}")
|
57
|
+
unless render_type.nil?
|
58
|
+
raise Capcode::RenderError, "Can't use multiple renderer (`#{render_type}' and `#{key}') !", caller
|
59
|
+
end
|
60
|
+
render_type = key
|
61
|
+
end
|
62
|
+
|
63
|
+
if key.class == Fixnum
|
64
|
+
possible_code_renderer = key
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if render_type.nil? and possible_code_renderer.nil?
|
69
|
+
raise Capcode::RenderError, "Renderer type not specified!", caller
|
70
|
+
end
|
71
|
+
|
72
|
+
unless self.respond_to?("render_#{render_type.to_s}")
|
73
|
+
if possible_code_renderer.nil?
|
74
|
+
raise Capcode::RenderError, "#{render_type} renderer not present ! please require 'capcode/render/#{render_type}'", caller
|
75
|
+
else
|
76
|
+
code = possible_code_renderer
|
77
|
+
body = hash.delete(possible_code_renderer)
|
78
|
+
header = {}
|
79
|
+
hash.each do |k, v|
|
80
|
+
k = k.to_s.split(/_/).map{|e| e.capitalize}.join("-")
|
81
|
+
header[k] = v
|
82
|
+
end
|
83
|
+
|
84
|
+
[code, header, body]
|
85
|
+
end
|
86
|
+
else
|
87
|
+
render_name = hash.delete(render_type)
|
88
|
+
content_type = hash.delete(:content_type)
|
89
|
+
unless content_type.nil?
|
90
|
+
@response['Content-Type'] = content_type
|
91
|
+
end
|
92
|
+
|
93
|
+
begin
|
94
|
+
self.send( "render_#{render_type.to_s}", render_name, hash )
|
95
|
+
rescue => e
|
96
|
+
raise Capcode::RenderError, "Error rendering `#{render_type.to_s}' : #{e.message}"#, caller
|
97
|
+
end
|
98
|
+
end
|
99
|
+
else
|
100
|
+
render( :text => hash )
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Send a redirect response
|
105
|
+
#
|
106
|
+
# module Capcode
|
107
|
+
# class Hello < Route '/hello/(.*)'
|
108
|
+
# def get( you )
|
109
|
+
# if you.nil?
|
110
|
+
# redirect( WhoAreYou )
|
111
|
+
# else
|
112
|
+
# ...
|
113
|
+
# end
|
114
|
+
# end
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
#
|
118
|
+
# The first parameter can be a controller class name
|
119
|
+
#
|
120
|
+
# redirect( MyController )
|
121
|
+
#
|
122
|
+
# it can be a string path
|
123
|
+
#
|
124
|
+
# redirect( "/path/to/my/resource" )
|
125
|
+
#
|
126
|
+
# it can be an http status code (by default <tt>redirect</tt> use the http status code 302)
|
127
|
+
#
|
128
|
+
# redirect( 304, MyController )
|
129
|
+
#
|
130
|
+
# For more informations about HTTP status, see http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection
|
131
|
+
def redirect( klass, *a )
|
132
|
+
httpCode = 302
|
133
|
+
|
134
|
+
if( klass.class == Fixnum )
|
135
|
+
httpCode = klass
|
136
|
+
klass = a.shift
|
137
|
+
end
|
138
|
+
|
139
|
+
[httpCode, {'Location' => URL(klass, *a), 'Content-Type' => 'text/plain'}, '']
|
140
|
+
end
|
141
|
+
|
142
|
+
# Builds an URL route to a controller or a path
|
143
|
+
#
|
144
|
+
# if you declare the controller Hello :
|
145
|
+
#
|
146
|
+
# module Capcode
|
147
|
+
# class Hello < Route '/hello/(.*)'
|
148
|
+
# ...
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
#
|
152
|
+
# then
|
153
|
+
#
|
154
|
+
# URL( Capcode::Hello, "you" ) # => /hello/you
|
155
|
+
def URL( klass, *a )
|
156
|
+
path = nil
|
157
|
+
result = {}
|
158
|
+
|
159
|
+
a = a.delete_if{ |x| x.nil? }
|
160
|
+
|
161
|
+
if klass.class == Class
|
162
|
+
klass.__urls__[0].each do |cpath, data|
|
163
|
+
args = a.clone
|
164
|
+
|
165
|
+
n = Regexp.new( data[:regexp] ).number_of_captures
|
166
|
+
equart = (a.size - n).abs
|
167
|
+
|
168
|
+
rtable = data[:regexp].dup.gsub( /\\\(/, "" ).gsub( /\\\)/, "" ).split( /\([^\)]*\)/ )
|
169
|
+
rtable.each do |r|
|
170
|
+
if r == ""
|
171
|
+
cpath = cpath + "/#{args.shift}"
|
172
|
+
else
|
173
|
+
cpath = cpath + "/#{r}"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
cpath = (cpath + "/" + args.join( "/" )) if args.size > 0
|
178
|
+
cpath = cpath.gsub( /(\/){2,}/, "/" )
|
179
|
+
result[equart] = cpath
|
180
|
+
end
|
181
|
+
|
182
|
+
path = result[result.keys.min]
|
183
|
+
else
|
184
|
+
path = klass
|
185
|
+
end
|
186
|
+
|
187
|
+
(ENV['RACK_BASE_URI']||'')+path
|
188
|
+
end
|
189
|
+
|
190
|
+
# Calling content_for stores a block of markup in an identifier.
|
191
|
+
#
|
192
|
+
# module Capcode
|
193
|
+
# class ContentFor < Route '/'
|
194
|
+
# def get
|
195
|
+
# render( :markaby => :page, :layout => :layout )
|
196
|
+
# end
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
#
|
200
|
+
# module Capcode::Views
|
201
|
+
# def layout
|
202
|
+
# html do
|
203
|
+
# head do
|
204
|
+
# yield :header
|
205
|
+
# end
|
206
|
+
# body do
|
207
|
+
# yield :content
|
208
|
+
# end
|
209
|
+
# end
|
210
|
+
# end
|
211
|
+
#
|
212
|
+
# def page
|
213
|
+
# content_for :header do
|
214
|
+
# title "This is the title!"
|
215
|
+
# end
|
216
|
+
#
|
217
|
+
# content_for :content do
|
218
|
+
# p "this is the content!"
|
219
|
+
# end
|
220
|
+
# end
|
221
|
+
# end
|
222
|
+
def content_for( x )
|
223
|
+
if Capcode::Helpers.args.map{|_| _.to_s }.include?(x.to_s)
|
224
|
+
yield
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
# Return information about the static directory
|
229
|
+
#
|
230
|
+
# * <tt>static[:uri]</tt> give the static URI
|
231
|
+
# * <tt>static[:path]</tt> give the path to the static directory on the server
|
232
|
+
def static
|
233
|
+
{
|
234
|
+
:uri => Capcode.static,
|
235
|
+
:path => File.expand_path( File.join(Capcode::Configuration.get(:root), Capcode::Configuration.get(:static) ) )
|
236
|
+
}
|
237
|
+
end
|
238
|
+
|
239
|
+
# Use the Rack logger
|
240
|
+
#
|
241
|
+
# log.write( "This is a log !" )
|
242
|
+
def log
|
243
|
+
Capcode.logger || env['rack.errors']
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Capcode
|
2
|
+
# HTTPError help you to create your own 404, 500 and/or 501 response
|
3
|
+
#
|
4
|
+
# To create a custom 404 reponse, create a fonction HTTPError.r404 in
|
5
|
+
# your application :
|
6
|
+
#
|
7
|
+
# module Capcode
|
8
|
+
# class HTTPError
|
9
|
+
# def r404(f)
|
10
|
+
# "#{f} not found :("
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# the rXXX method can also receive a second optional parameter corresponding
|
16
|
+
# of the header's Hash :
|
17
|
+
#
|
18
|
+
# module Capcode
|
19
|
+
# class HTTPError
|
20
|
+
# def r404(f, h)
|
21
|
+
# h['Content-Type'] = 'text/plain'
|
22
|
+
# "You are here ---> X (#{f} point)"
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# Do the same (r500, r501, r403) to customize 500, 501, 403 errors
|
28
|
+
class HTTPError
|
29
|
+
def initialize(app) #:nodoc:
|
30
|
+
@app = app
|
31
|
+
end
|
32
|
+
|
33
|
+
def call(env) #:nodoc:
|
34
|
+
status, headers, body = @app.call(env)
|
35
|
+
if self.methods.include? "r#{status}"
|
36
|
+
headers.delete('Content-Type') if headers.keys.include?('Content-Type')
|
37
|
+
body = begin
|
38
|
+
self.send( "r#{status}", env['REQUEST_PATH'], headers )
|
39
|
+
rescue
|
40
|
+
self.send( "r#{status}", env['REQUEST_PATH'] )
|
41
|
+
end
|
42
|
+
headers['Content-Length'] = body.length.to_s
|
43
|
+
headers['Content-Type'] = "text/html" unless headers.keys.include?('Content-Type')
|
44
|
+
end
|
45
|
+
|
46
|
+
[status, headers, body]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'capcode/helpers'
|
2
|
+
|
3
|
+
module Capcode
|
4
|
+
# Static file loader
|
5
|
+
#
|
6
|
+
# You can add declare a filter (with before_filter) using :StaticFiles
|
7
|
+
#
|
8
|
+
# Use :
|
9
|
+
# set :static, "path/to/static"
|
10
|
+
class StaticFiles
|
11
|
+
def initialize(app)
|
12
|
+
@app = app
|
13
|
+
end
|
14
|
+
|
15
|
+
def session
|
16
|
+
env["rack.session"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def env
|
20
|
+
@env
|
21
|
+
end
|
22
|
+
|
23
|
+
def log
|
24
|
+
env["rack.errors"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def request
|
28
|
+
@request
|
29
|
+
end
|
30
|
+
|
31
|
+
def response
|
32
|
+
@response
|
33
|
+
end
|
34
|
+
|
35
|
+
def call(env)
|
36
|
+
@env = env
|
37
|
+
@response = Rack::Response.new
|
38
|
+
@request = Rack::Request.new(@env)
|
39
|
+
|
40
|
+
static = ::File.expand_path( ::File.join(Capcode::Configuration.get(:root), Capcode::Configuration.get(:static) ) )
|
41
|
+
file = ::File.join(static, request.path.gsub(/^[\/]?#{Capcode::Configuration.get(:static)}/, "").split("/") )
|
42
|
+
file = ::File.join(file, "index.html" ) if ::File.directory?(file)
|
43
|
+
|
44
|
+
if ::File.exist?(file)
|
45
|
+
filter_output = Capcode::Filter.execute( self )
|
46
|
+
if filter_output.nil?
|
47
|
+
body = [::File.read(file)]
|
48
|
+
header = {
|
49
|
+
"Last-Modified" => ::File.mtime(file).httpdate,
|
50
|
+
"Content-Type" => ::Rack::Mime.mime_type(::File.extname(file), 'text/plain'),
|
51
|
+
"Content-Length" => body.first.size.to_s,
|
52
|
+
"Cache-Control" => "no-cache, must-revalidate"
|
53
|
+
}
|
54
|
+
|
55
|
+
return [200, header, body]
|
56
|
+
else
|
57
|
+
return filter_output
|
58
|
+
end
|
59
|
+
else
|
60
|
+
return @app.call(env)
|
61
|
+
end
|
62
|
+
|
63
|
+
return @app.call(env)
|
64
|
+
end
|
65
|
+
|
66
|
+
include Capcode::Helpers
|
67
|
+
end
|
68
|
+
end
|
data/lib/capcode/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Capcode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.9.9
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Gr\xC3\xA9goire Lejeune"
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-05-31 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: rack
|
@@ -57,6 +56,9 @@ extra_rdoc_files:
|
|
57
56
|
- AUTHORS
|
58
57
|
- COPYING
|
59
58
|
- lib/capcode.rb
|
59
|
+
- lib/capcode/helpers.rb
|
60
|
+
- lib/capcode/http_error.rb
|
61
|
+
- lib/capcode/static_files.rb
|
60
62
|
- lib/capcode/configuration.rb
|
61
63
|
- lib/capcode/base/db.rb
|
62
64
|
- lib/capcode/render/text.rb
|
@@ -65,40 +67,18 @@ files:
|
|
65
67
|
- README.rdoc
|
66
68
|
- AUTHORS
|
67
69
|
- setup.rb
|
68
|
-
- doc/rdoc/classes/Capcode/Base.html
|
69
|
-
- doc/rdoc/classes/Capcode/Configuration.html
|
70
|
-
- doc/rdoc/classes/Capcode/Helpers/Authorization.html
|
71
|
-
- doc/rdoc/classes/Capcode/Helpers.html
|
72
|
-
- doc/rdoc/classes/Capcode/HTTPError.html
|
73
|
-
- doc/rdoc/classes/Capcode/Resource.html
|
74
|
-
- doc/rdoc/classes/Capcode/StaticFiles.html
|
75
|
-
- doc/rdoc/classes/Capcode/Views.html
|
76
|
-
- doc/rdoc/classes/Capcode.html
|
77
|
-
- doc/rdoc/created.rid
|
78
|
-
- doc/rdoc/files/AUTHORS.html
|
79
|
-
- doc/rdoc/files/COPYING.html
|
80
|
-
- doc/rdoc/files/lib/capcode/base/db_rb.html
|
81
|
-
- doc/rdoc/files/lib/capcode/configuration_rb.html
|
82
|
-
- doc/rdoc/files/lib/capcode/filters_rb.html
|
83
|
-
- doc/rdoc/files/lib/capcode/helpers/auth_rb.html
|
84
|
-
- doc/rdoc/files/lib/capcode/render/text_rb.html
|
85
|
-
- doc/rdoc/files/lib/capcode_rb.html
|
86
|
-
- doc/rdoc/files/README_rdoc.html
|
87
|
-
- doc/rdoc/fr_class_index.html
|
88
|
-
- doc/rdoc/fr_file_index.html
|
89
|
-
- doc/rdoc/fr_method_index.html
|
90
|
-
- doc/rdoc/index.html
|
91
|
-
- doc/rdoc/rdoc-style.css
|
92
70
|
- lib/capcode/base/db.rb
|
93
71
|
- lib/capcode/configuration.rb
|
94
72
|
- lib/capcode/core_ext.rb
|
95
73
|
- lib/capcode/ext/rack/urlmap.rb
|
96
74
|
- lib/capcode/filters.rb
|
97
75
|
- lib/capcode/helpers/auth.rb
|
76
|
+
- lib/capcode/helpers.rb
|
77
|
+
- lib/capcode/http_error.rb
|
98
78
|
- lib/capcode/render/text.rb
|
79
|
+
- lib/capcode/static_files.rb
|
99
80
|
- lib/capcode/version.rb
|
100
81
|
- lib/capcode.rb
|
101
|
-
- lib/capcode.rbSAVE
|
102
82
|
- examples/auth-basic.rb
|
103
83
|
- examples/auth-digest.rb
|
104
84
|
- examples/erb/cf.rhtml
|
@@ -114,6 +94,7 @@ files:
|
|
114
94
|
- examples/render-image.rb
|
115
95
|
- examples/render-text.rb
|
116
96
|
- examples/rest-run.rb
|
97
|
+
- examples/rest.log
|
117
98
|
- examples/rest.rb
|
118
99
|
- examples/rest.ru
|
119
100
|
- examples/route.rb
|
@@ -130,38 +111,42 @@ files:
|
|
130
111
|
- examples/static/static-index.html
|
131
112
|
- examples/static.rb
|
132
113
|
- examples/upload.rb
|
133
|
-
has_rdoc: true
|
134
114
|
homepage: http://algorithmique.net
|
135
115
|
licenses: []
|
136
116
|
|
137
|
-
post_install_message:
|
138
|
-
|
139
|
-
|
140
|
-
!!
|
141
|
-
!!
|
142
|
-
!!
|
143
|
-
!!
|
144
|
-
!!
|
145
|
-
!!
|
146
|
-
!!
|
147
|
-
!!
|
148
|
-
!!
|
149
|
-
!!
|
150
|
-
!!
|
151
|
-
!!
|
152
|
-
!!
|
153
|
-
!!
|
154
|
-
!!
|
155
|
-
!!
|
156
|
-
!!
|
157
|
-
!! http://
|
158
|
-
!!
|
159
|
-
!!
|
160
|
-
!!
|
161
|
-
!!
|
162
|
-
|
163
|
-
|
164
|
-
|
117
|
+
post_install_message: |+
|
118
|
+
|
119
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
120
|
+
!! !!
|
121
|
+
!! 1.0.0 HAS A MAJOR ENHANCEMENT !!
|
122
|
+
!! ----------------------------------- !!
|
123
|
+
!! !!
|
124
|
+
!! Statics files are now loaded with a new !!
|
125
|
+
!! class. So if you specify !!
|
126
|
+
!! !!
|
127
|
+
!! set :static, "static" !!
|
128
|
+
!! !!
|
129
|
+
!! All files in the "static" directory !!
|
130
|
+
!! will be loaded from the URI !!
|
131
|
+
!! !!
|
132
|
+
!! http://server:port/<page> !!
|
133
|
+
!! !!
|
134
|
+
!! Where <page> is any file in the static !!
|
135
|
+
!! directory. You no longer need to use !!
|
136
|
+
!! !!
|
137
|
+
!! http://server:port/static/<page> !!
|
138
|
+
!! !!
|
139
|
+
!! For more information, see example !!
|
140
|
+
!! static.rb !!
|
141
|
+
!! !!
|
142
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
143
|
+
|
144
|
+
For more information about Capcode, see
|
145
|
+
http://capcode.rubyforge.org
|
146
|
+
|
147
|
+
You can also read the Capcode book (fr) at
|
148
|
+
http://algorithmique.net/capcode.html
|
149
|
+
|
165
150
|
rdoc_options:
|
166
151
|
- --quiet
|
167
152
|
- --title
|
@@ -197,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
182
|
requirements: []
|
198
183
|
|
199
184
|
rubyforge_project: capcode
|
200
|
-
rubygems_version: 1.4
|
185
|
+
rubygems_version: 1.8.4
|
201
186
|
signing_key:
|
202
187
|
specification_version: 3
|
203
188
|
summary: Capcode is a web microframework
|