Capcode 0.1.0 → 0.2.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.
@@ -68,6 +68,7 @@
68
68
  <a href="../../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -68,6 +68,7 @@
68
68
  <a href="../../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -127,21 +128,21 @@ then
127
128
  <p class="source-link">[ <a href="javascript:toggleSource('M000011_source')" id="l_M000011_source">show source</a> ]</p>
128
129
  <div id="M000011_source" class="dyn-source">
129
130
  <pre>
130
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 60</span>
131
- 60: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">URL</span>( <span class="ruby-identifier">klass</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span> )
132
- 61: <span class="ruby-identifier">path</span> = <span class="ruby-keyword kw">nil</span>
133
- 62: <span class="ruby-identifier">a</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">delete_if</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> }
134
- 63:
135
- 64: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Class</span>
136
- 65: <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">routes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span>, <span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
137
- 66: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">p</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">klass</span>
138
- 67: <span class="ruby-keyword kw">end</span>
139
- 68: <span class="ruby-keyword kw">else</span>
140
- 69: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">klass</span>
141
- 70: <span class="ruby-keyword kw">end</span>
142
- 71:
143
- 72: <span class="ruby-identifier">path</span><span class="ruby-operator">+</span>((<span class="ruby-identifier">a</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span>)<span class="ruby-operator">?</span>(<span class="ruby-value str">&quot;/&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">a</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;/&quot;</span>))<span class="ruby-operator">:</span>(<span class="ruby-value str">&quot;&quot;</span>))
144
- 73: <span class="ruby-keyword kw">end</span>
131
+ <span class="ruby-comment cmt"># File lib/capcode.rb, line 63</span>
132
+ 63: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">URL</span>( <span class="ruby-identifier">klass</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span> )
133
+ 64: <span class="ruby-identifier">path</span> = <span class="ruby-keyword kw">nil</span>
134
+ 65: <span class="ruby-identifier">a</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">delete_if</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> }
135
+ 66:
136
+ 67: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Class</span>
137
+ 68: <span class="ruby-constant">Capcode</span>.<span class="ruby-identifier">routes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span>, <span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
138
+ 69: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">p</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">klass</span>
139
+ 70: <span class="ruby-keyword kw">end</span>
140
+ 71: <span class="ruby-keyword kw">else</span>
141
+ 72: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">klass</span>
142
+ 73: <span class="ruby-keyword kw">end</span>
143
+ 74:
144
+ 75: <span class="ruby-identifier">path</span><span class="ruby-operator">+</span>((<span class="ruby-identifier">a</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span>)<span class="ruby-operator">?</span>(<span class="ruby-value str">&quot;/&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">a</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;/&quot;</span>))<span class="ruby-operator">:</span>(<span class="ruby-value str">&quot;&quot;</span>))
145
+ 76: <span class="ruby-keyword kw">end</span>
145
146
  </pre>
146
147
  </div>
147
148
  </div>
@@ -165,11 +166,11 @@ Help you to return a JSON response
165
166
  <p class="source-link">[ <a href="javascript:toggleSource('M000009_source')" id="l_M000009_source">show source</a> ]</p>
166
167
  <div id="M000009_source" class="dyn-source">
167
168
  <pre>
168
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 25</span>
169
- 25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">json</span>( <span class="ruby-identifier">d</span> )
170
- 26: <span class="ruby-ivar">@response</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-value str">'application/json'</span>
171
- 27: <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_json</span>
172
- 28: <span class="ruby-keyword kw">end</span>
169
+ <span class="ruby-comment cmt"># File lib/capcode.rb, line 28</span>
170
+ 28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">json</span>( <span class="ruby-identifier">d</span> )
171
+ 29: <span class="ruby-ivar">@response</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-value str">'application/json'</span>
172
+ 30: <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_json</span>
173
+ 31: <span class="ruby-keyword kw">end</span>
173
174
  </pre>
174
175
  </div>
175
176
  </div>
@@ -197,10 +198,10 @@ Send a <a href="Helpers.html#M000010">redirect</a> response
197
198
  <p class="source-link">[ <a href="javascript:toggleSource('M000010_source')" id="l_M000010_source">show source</a> ]</p>
198
199
  <div id="M000010_source" class="dyn-source">
199
200
  <pre>
200
- <span class="ruby-comment cmt"># File lib/capcode.rb, line 43</span>
201
- 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">redirect</span>( <span class="ruby-identifier">klass</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span> )
202
- 44: [<span class="ruby-value">302</span>, {<span class="ruby-value str">'Location'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">URL</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)}, <span class="ruby-value str">''</span>]
203
- 45: <span class="ruby-keyword kw">end</span>
201
+ <span class="ruby-comment cmt"># File lib/capcode.rb, line 46</span>
202
+ 46: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">redirect</span>( <span class="ruby-identifier">klass</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span> )
203
+ 47: [<span class="ruby-value">302</span>, {<span class="ruby-value str">'Location'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">URL</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)}, <span class="ruby-value str">''</span>]
204
+ 48: <span class="ruby-keyword kw">end</span>
204
205
  </pre>
205
206
  </div>
206
207
  </div>
@@ -68,6 +68,7 @@
68
68
  <a href="../../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -0,0 +1,126 @@
1
+
2
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3
+ <html>
4
+ <head>
5
+ <title>
6
+ Capcode, the Documentation &raquo; Class: Capcode::RouteError
7
+ </title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
10
+ <script language="JavaScript" type="text/javascript">
11
+ // <![CDATA[
12
+
13
+ function toggleSource( id )
14
+ {
15
+ var elem
16
+ var link
17
+
18
+ if( document.getElementById )
19
+ {
20
+ elem = document.getElementById( id )
21
+ link = document.getElementById( "l_" + id )
22
+ }
23
+ else if ( document.all )
24
+ {
25
+ elem = eval( "document.all." + id )
26
+ link = eval( "document.all.l_" + id )
27
+ }
28
+ else
29
+ return false;
30
+
31
+ if( elem.style.display == "block" )
32
+ {
33
+ elem.style.display = "none"
34
+ link.innerHTML = "show source"
35
+ }
36
+ else
37
+ {
38
+ elem.style.display = "block"
39
+ link.innerHTML = "hide source"
40
+ }
41
+ }
42
+
43
+ function openCode( url )
44
+ {
45
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
46
+ }
47
+ // ]]>
48
+ </script>
49
+ </head>
50
+ <body>
51
+ <!--
52
+ <div id="menu">
53
+ <h3 class="title">Class: Capcode::RouteError</h3>
54
+ </div>
55
+ -->
56
+ <div id="fullpage">
57
+ <div id="pager">
58
+ <table>
59
+ <tr><td><img src="../../rubyfr.png" /></td>
60
+ <td id="pagertd">
61
+ <strong># Class: Capcode::RouteError<br />
62
+ [
63
+ "<a href="../../files/README.html" value="File: README">README</a>",
64
+ "<a href="../../files/AUTHORS.html" value="File: AUTHORS">AUTHORS</a>",
65
+ "<a href="../../files/COPYING.html" value="File: COPYING">COPYING</a>",
66
+ "<a href="../../files/lib/capcode_rb.html" value="File: capcode.rb">lib/capcode.rb</a>",
67
+ <a href="http://greg.rubyfr.net">nil</a>].each do<br />
68
+ <a href="../../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
+ <a href="../../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
+ <a href="../../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
72
+ <a href="../../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
73
+ end</strong>
74
+ </td></tr>
75
+ </table>
76
+ </ul>
77
+ </div>
78
+
79
+
80
+ <div id="Capcode::RouteError" class="page_shade">
81
+ <div class="page">
82
+ <h3>Class Capcode::RouteError &lt; ArgumentError</h3>
83
+
84
+ (in files
85
+ <a href="../../files/lib/capcode_rb.html">lib/capcode.rb</a>
86
+ )
87
+
88
+ <p>
89
+ <a href="HTTPError.html">HTTPError</a> help you to create your own 404, 500
90
+ and/or 501 response
91
+ </p>
92
+ <p>
93
+ To create a custom 404 reponse, create a fonction HTTPError.r404 in your
94
+ application :
95
+ </p>
96
+ <pre>
97
+ module Capcode
98
+ class HTTPError
99
+ def r404(f)
100
+ &quot;#{f} not found :(&quot;
101
+ end
102
+ end
103
+ end
104
+ </pre>
105
+ <p>
106
+ Do the same (r500 and r501) to customize 500 and 501 errors
107
+ </p>
108
+
109
+
110
+
111
+
112
+ <h4>Includes</h4>
113
+ <ul>
114
+ <li>Rack</li>
115
+ <li><a href="Capcode/Helpers.html">Capcode::Helpers</a></li>
116
+ </ul>
117
+
118
+
119
+
120
+ </div>
121
+ </div>
122
+
123
+
124
+ </div>
125
+ </body>
126
+ </html>
@@ -1 +1 @@
1
- Sun, 08 Mar 2009 14:07:55 +0100
1
+ Mon, 16 Mar 2009 12:39:42 +0100
@@ -68,6 +68,7 @@
68
68
  <a href="../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -68,6 +68,7 @@
68
68
  <a href="../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -68,6 +68,7 @@
68
68
  <a href="../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -78,7 +79,7 @@ end</strong>
78
79
  <div id="README" class="page_shade">
79
80
  <div class="page">
80
81
  <div class="header">
81
- <div class="path">README / Sun Mar 08 14:07:47 +0100 2009</div>
82
+ <div class="path">README / Mon Mar 16 12:31:45 +0100 2009</div>
82
83
  </div>
83
84
 
84
85
  <h1><a href="../classes/Capcode.html">Capcode</a></h1>
@@ -95,6 +96,18 @@ Copyright (C) 2009 Gregoire Lejeune
95
96
  <a href="../classes/Capcode.html">Capcode</a> is a web microframework
96
97
  </p>
97
98
  <h2>FEATURES/PROBLEMS:</h2>
99
+ <h3>0.2.0</h3>
100
+ <ul>
101
+ <li>Add models with DataMapper and couch_foo
102
+
103
+ </li>
104
+ <li>Add two new options : :daemonize and :pid
105
+
106
+ </li>
107
+ <li>Bug correction in Route.
108
+
109
+ </li>
110
+ </ul>
98
111
  <h3>0.1.0</h3>
99
112
  <ul>
100
113
  <li>First public release
@@ -129,6 +142,25 @@ Copyright (C) 2009 Gregoire Lejeune
129
142
 
130
143
  </li>
131
144
  </ul>
145
+ <h2>Create model</h2>
146
+ <pre>
147
+ require 'rubygems'
148
+ require 'capcode'
149
+ require 'capcode/base/dm' # or require 'capcode/base/couchdb'
150
+
151
+ class Story &lt; Capcode::Base
152
+ include Capcode::Resource
153
+
154
+ property :id, Integer, :serial =&gt; true # only with DataMapper !
155
+ property :title, String
156
+ property :body, String
157
+ property :date, String
158
+ end
159
+ </pre>
160
+ <p>
161
+ See <tt>examples/blog-dm.rb</tt> and/or <tt>examples/blog-couchdb.rb</tt>
162
+ for complete examples.
163
+ </p>
132
164
  <h2>REQUIREMENTS:</h2>
133
165
  <ul>
134
166
  <li>rack
@@ -68,6 +68,7 @@
68
68
  <a href="../../classes/Capcode.html" title="Module: Capcode">Capcode</a>.view_html<br />
69
69
  <a href="../../classes/Capcode/Helpers.html" title="Module: Capcode::Helpers">Capcode::Helpers</a>.view_html<br />
70
70
  <a href="../../classes/Capcode/HTTPError.html" title="Class: Capcode::HTTPError">Capcode::HTTPError</a>.view_html<br />
71
+ <a href="../../classes/Capcode/RouteError.html" title="Class: Capcode::RouteError">Capcode::RouteError</a>.view_html<br />
71
72
  <a href="../../classes/Capcode/ParameterError.html" title="Class: Capcode::ParameterError">Capcode::ParameterError</a>.view_html<br />
72
73
  end</strong>
73
74
  </td></tr>
@@ -78,7 +79,7 @@ end</strong>
78
79
  <div id="lib/capcode.rb" class="page_shade">
79
80
  <div class="page">
80
81
  <div class="header">
81
- <div class="path">lib/capcode.rb / Thu Mar 05 17:42:43 +0100 2009</div>
82
+ <div class="path">lib/capcode.rb / Mon Mar 16 12:38:20 +0100 2009</div>
82
83
  </div>
83
84
 
84
85
  <pre>
@@ -516,6 +517,7 @@ License instead of this License.
516
517
  <li>rack</li>
517
518
  <li>json</li>
518
519
  <li>logger</li>
520
+ <li>capcode/version</li>
519
521
  <li>capcode/core_ext</li>
520
522
  <li>mongrel</li>
521
523
  </ul>
@@ -1,11 +1,11 @@
1
1
  $:.unshift( "../lib" )
2
2
  require 'rubygems'
3
3
  require 'capcode'
4
- require 'couch_foo'
4
+ require 'capcode/base/couchdb'
5
5
 
6
- CouchFoo::Base.set_database(:host => "http://localhost:5984", :database => "my_blog")
7
-
8
- class Story < CouchFoo::Base
6
+ class Story < Capcode::Base
7
+ include Capcode::Resource
8
+
9
9
  property :title, String
10
10
  property :body, String
11
11
  property :date, String
@@ -59,4 +59,4 @@ module Capcode
59
59
  end
60
60
  end
61
61
 
62
- Capcode.run( :port => 3001, :host => "localhost", :log => "blog.log" )
62
+ Capcode.run( :port => 3001, :host => "localhost", :db_config => "blog-couchdb.yml" )
@@ -0,0 +1,2 @@
1
+ host: http://localhost:5984
2
+ database: my_blog
@@ -0,0 +1,63 @@
1
+ $:.unshift( "../lib" )
2
+ require 'rubygems'
3
+ require 'capcode'
4
+ require 'capcode/base/dm'
5
+
6
+ class Story < Capcode::Base
7
+ include Capcode::Resource
8
+
9
+ property :id, Integer, :serial => true
10
+ property :title, String
11
+ property :body, String
12
+ property :date, String
13
+ end
14
+
15
+ module Capcode
16
+ class HTTPError
17
+ def r404(f)
18
+ "Pas glop !!! #{f} est inconnu !!!"
19
+ end
20
+ end
21
+
22
+ class Index < Route '/'
23
+ def get
24
+ r = "<html><body>"
25
+
26
+ story = Story.all
27
+
28
+ story.each do |s|
29
+ r += "<h2>#{s.title}</h2><small>#{s.date} - <a href='#{URL( Remove, s.id )}'>Delete this entry</a></small><p>#{s.body}</p>"
30
+ end
31
+
32
+ r+"<hr /><a href='#{URL(Add)}'>Add a new entry</a></body></html>"
33
+ end
34
+ end
35
+
36
+ class Remove < Route '/remove/([^\/]*)'
37
+ def get( id )
38
+ Story.get!(id).destroy
39
+ redirect( Index )
40
+ end
41
+ end
42
+
43
+ class Add < Route '/add'
44
+ def get
45
+ '
46
+ <html><body>
47
+ <h1>Add a new entry</h1>
48
+ <form method="POST">
49
+ Titre : <input type="text" name="title"><br />
50
+ <textarea name="body"></textarea><br />
51
+ <input type="submit">
52
+ </form>
53
+ </body></html>
54
+ '
55
+ end
56
+ def post
57
+ Story.new( :title => params['title'], :body => params['body'], :date => Time.now.to_s ).save
58
+ redirect( Index )
59
+ end
60
+ end
61
+ end
62
+
63
+ Capcode.run( :port => 3001, :host => "localhost", :db_config => "blog-dm.yml" )
@@ -0,0 +1,2 @@
1
+ adapter: sqlite3
2
+ database: my_blog.db
Binary file
@@ -2,15 +2,18 @@ require 'rubygems'
2
2
  require 'rack'
3
3
  require 'json'
4
4
  require 'logger'
5
+ require 'capcode/version'
5
6
  require 'capcode/core_ext'
6
7
 
7
8
  module Capcode
8
- CAPCOD_VERION="0.2.0"
9
9
  @@__ROUTES = {}
10
10
 
11
11
  class ParameterError < ArgumentError
12
12
  end
13
13
 
14
+ class RouteError < ArgumentError
15
+ end
16
+
14
17
  # Helpers contains methods available in your controllers
15
18
  module Helpers
16
19
  # Help you to return a JSON response
@@ -134,9 +137,13 @@ module Capcode
134
137
  u.each do |_u|
135
138
  m = /\/([^\/]*\(.*)/.match( _u )
136
139
  if m.nil?
140
+ raise Capcode::RouteError, "Route `#{_u}' already defined with regexp `#{h[_u]}' !", caller if h.keys.include?(_u)
137
141
  h[_u] = ''
138
142
  else
139
- h[m.pre_match] = m.captures[0]
143
+ _pre = m.pre_match
144
+ _pre = "/" if _pre.size == 0
145
+ raise Capcode::RouteError, "Route `#{_pre}' already defined with regexp `#{h[_pre]}' !", caller if h.keys.include?(_pre)
146
+ h[_pre] = m.captures[0]
140
147
  max = Regexp.new(m.captures[0]).number_of_captures if max < Regexp.new(m.captures[0]).number_of_captures
141
148
  end
142
149
  end
@@ -229,13 +236,18 @@ module Capcode
229
236
  # * <tt>:server</tt> = Server type (webrick or mongrel)
230
237
  # * <tt>:log</tt> = Output logfile (default: STDOUT)
231
238
  # * <tt>:session</tt> = Session parameters. See Rack::Session for more informations
239
+ # * <tt>:pid</tt> = PID file (default: $0.pid)
240
+ # * <tt>:daemonize</tt> = Daemonize application (default: false)
232
241
  def run( args = {} )
233
242
  conf = {
234
243
  :port => args[:port]||3000,
235
244
  :host => args[:host]||"localhost",
236
245
  :server => args[:server]||nil,
237
246
  :log => args[:log]||$stdout,
238
- :session => args[:session]||{}
247
+ :session => args[:session]||{},
248
+ :pid => args[:pid]||"#{$0}.pid",
249
+ :daemonize => args[:daemonize]||false,
250
+ :db_config => args[:db_config]||"database.yml"
239
251
  }
240
252
 
241
253
  # Check that mongrel exists
@@ -254,6 +266,7 @@ module Capcode
254
266
  if eval "Capcode::#{k}.public_methods(true).include?( '__urls__' )"
255
267
  u, m, c = eval "Capcode::#{k}.__urls__"
256
268
  u.keys.each do |_u|
269
+ raise Capcode::RouteError, "Route `#{_u}' already define !", caller if @@__ROUTES.keys.include?(_u)
257
270
  @@__ROUTES[_u] = c.new
258
271
  end
259
272
  end
@@ -271,7 +284,31 @@ module Capcode
271
284
  # app = Rack::Reloader.new(app) ## -- NE RELOAD QUE capcode.rb -- So !!!
272
285
  app = Rack::CommonLogger.new( app, Logger.new(conf[:log]) )
273
286
 
287
+ # From rackup !!!
288
+ if conf[:daemonize]
289
+ if RUBY_VERSION < "1.9"
290
+ exit if fork
291
+ Process.setsid
292
+ exit if fork
293
+ # Dir.chdir "/"
294
+ File.umask 0000
295
+ STDIN.reopen "/dev/null"
296
+ STDOUT.reopen "/dev/null", "a"
297
+ STDERR.reopen "/dev/null", "a"
298
+ else
299
+ Process.daemon
300
+ end
301
+
302
+ File.open(conf[:pid], 'w'){ |f| f.write("#{Process.pid}") }
303
+ at_exit { File.delete(conf[:pid]) if File.exist?(conf[:pid]) }
304
+ end
305
+
306
+ # Start database
307
+ if self.methods.include? "db_connect"
308
+ db_connect( conf[:db_config], conf[:log] )
309
+ end
274
310
 
311
+ # Start server
275
312
  case conf[:server]
276
313
  when "mongrel"
277
314
  puts "** Starting Mongrel on #{conf[:host]}:#{conf[:port]}"