Capcode 0.8.9 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/README.rdoc +13 -1
  2. data/doc/rdoc/classes/Capcode.html +410 -545
  3. data/doc/rdoc/classes/Capcode/Configuration.html +263 -0
  4. data/doc/rdoc/classes/Capcode/Helpers.html +154 -345
  5. data/doc/rdoc/classes/Capcode/Helpers/Authorization.html +6 -6
  6. data/doc/rdoc/created.rid +1 -1
  7. data/doc/rdoc/files/README_rdoc.html +42 -2
  8. data/doc/rdoc/files/lib/capcode/configuration_rb.html +1 -1
  9. data/doc/rdoc/files/lib/capcode/render/text_rb.html +1 -1
  10. data/doc/rdoc/files/lib/capcode_rb.html +14 -1
  11. data/doc/rdoc/fr_class_index.html +1 -1
  12. data/doc/rdoc/fr_file_index.html +0 -13
  13. data/doc/rdoc/fr_method_index.html +12 -14
  14. data/examples/render-image.rb +1 -1
  15. data/examples/render-text.rb +4 -1
  16. data/examples/rest.rb +1 -0
  17. data/examples/sample.rb +5 -3
  18. data/examples/upload.rb +1 -0
  19. data/lib/capcode.rb +45 -61
  20. data/lib/capcode/configuration.rb +69 -34
  21. data/lib/capcode/render/text.rb +1 -1
  22. data/lib/capcode/version.rb +1 -1
  23. metadata +31 -106
  24. data/doc/rdoc/classes/Capcode/Mab.html +0 -118
  25. data/doc/rdoc/files/lib/capcode/render/binary_rb.html +0 -101
  26. data/doc/rdoc/files/lib/capcode/render/email_rb.html +0 -108
  27. data/doc/rdoc/files/lib/capcode/render/erb_rb.html +0 -108
  28. data/doc/rdoc/files/lib/capcode/render/haml_rb.html +0 -108
  29. data/doc/rdoc/files/lib/capcode/render/json_rb.html +0 -108
  30. data/doc/rdoc/files/lib/capcode/render/markaby_rb.html +0 -108
  31. data/doc/rdoc/files/lib/capcode/render/mustache_rb.html +0 -108
  32. data/doc/rdoc/files/lib/capcode/render/none_rb.html +0 -101
  33. data/doc/rdoc/files/lib/capcode/render/redirect_rb.html +0 -101
  34. data/doc/rdoc/files/lib/capcode/render/sass_rb.html +0 -108
  35. data/doc/rdoc/files/lib/capcode/render/static_rb.html +0 -101
  36. data/doc/rdoc/files/lib/capcode/render/webdav_rb.html +0 -124
  37. data/doc/rdoc/files/lib/capcode/render/xml_rb.html +0 -101
  38. data/examples/auth-webdav.rb +0 -29
  39. data/examples/blog-ar.rb +0 -81
  40. data/examples/blog-ar.yml +0 -3
  41. data/examples/blog-couchdb-run.rb +0 -10
  42. data/examples/blog-couchdb.rb +0 -314
  43. data/examples/blog-couchdb.ru +0 -12
  44. data/examples/blog-couchdb.yml +0 -2
  45. data/examples/blog-dm.rb +0 -63
  46. data/examples/blog-dm.yml +0 -2
  47. data/examples/blog-mongodb-run.rb +0 -10
  48. data/examples/blog-mongodb.rb +0 -304
  49. data/examples/blog-mongodb.yml +0 -3
  50. data/examples/blog-sq.rb +0 -82
  51. data/examples/blog-sq.yml +0 -3
  52. data/examples/mail/mail_html.rhtml +0 -1
  53. data/examples/mail/mail_text.rhtml +0 -1
  54. data/examples/mail/ok.rhtml +0 -1
  55. data/examples/mail/rubyfr.png +0 -0
  56. data/examples/mustache/with_class.mustache +0 -8
  57. data/examples/mustache/without_class.mustache +0 -1
  58. data/examples/render-binary.rb +0 -46
  59. data/examples/render-email.rb +0 -68
  60. data/examples/render-erb.rb +0 -19
  61. data/examples/render-haml_sass.rb +0 -26
  62. data/examples/render-json.rb +0 -13
  63. data/examples/render-markaby.rb +0 -29
  64. data/examples/render-mustache.rb +0 -30
  65. data/examples/render-redirect.rb +0 -19
  66. data/examples/render-static.rb +0 -21
  67. data/examples/render-static.ru +0 -19
  68. data/examples/render-use.rb +0 -32
  69. data/examples/render-webdav.rb +0 -26
  70. data/examples/render-xml.rb +0 -24
  71. data/examples/rss.rb +0 -48
  72. data/examples/static/coderay.css +0 -131
  73. data/examples/static/index.html +0 -24
  74. data/examples/test/index.html +0 -1
  75. data/lib/capcode/base/ar.rb +0 -54
  76. data/lib/capcode/base/couchdb.rb +0 -23
  77. data/lib/capcode/base/dm.rb +0 -33
  78. data/lib/capcode/base/mongodb.rb +0 -27
  79. data/lib/capcode/base/sq.rb +0 -58
  80. data/lib/capcode/render/binary.rb +0 -8
  81. data/lib/capcode/render/email.rb +0 -73
  82. data/lib/capcode/render/erb.rb +0 -59
  83. data/lib/capcode/render/haml.rb +0 -60
  84. data/lib/capcode/render/json.rb +0 -14
  85. data/lib/capcode/render/markaby.rb +0 -38
  86. data/lib/capcode/render/mustache.rb +0 -37
  87. data/lib/capcode/render/none.rb +0 -7
  88. data/lib/capcode/render/redirect.rb +0 -7
  89. data/lib/capcode/render/sass.rb +0 -48
  90. data/lib/capcode/render/static.rb +0 -14
  91. data/lib/capcode/render/webdav.rb +0 -49
  92. data/lib/capcode/render/xml.rb +0 -119
@@ -1,314 +0,0 @@
1
- $:.unshift( "../lib" )
2
- require 'rubygems'
3
- require 'capcode'
4
- require 'capcode/base/couchdb'
5
- require 'capcode/render/markaby'
6
-
7
- class User < Capcode::Base
8
- include Capcode::Resource
9
-
10
- property :login, String
11
- property :passwd, String
12
-
13
- has_many :stories
14
- end
15
-
16
- class Story < Capcode::Base
17
- include Capcode::Resource
18
-
19
- property :title, String
20
- property :body, String
21
- property :create_at, String
22
-
23
- property :user_id, String
24
- belongs_to :user
25
-
26
- default_sort :create_at
27
- end
28
-
29
- module Capcode
30
- class HTTPError
31
- def r404(f)
32
- @file = f
33
- end
34
- end
35
-
36
- class Style < Route '/styles.css'
37
- STYLE = File.read(__FILE__).gsub(/.*__END__/m, '')
38
-
39
- def get
40
- @response['Content-Type'] = 'text/css; charset=utf-8'
41
- STYLE
42
- end
43
- end
44
-
45
- class Index < Route '/'
46
- def get
47
- @story = Story.find( :all )
48
-
49
- render( :markaby => :home, :layout => :my_layout )
50
- end
51
- end
52
-
53
- class Remove < Route '/remove/([^\/]*)/(.*)'
54
- def get( id, rev )
55
- Story.delete(id, rev)
56
- redirect( Index )
57
- end
58
- end
59
-
60
- class Add < Route '/add'
61
- def get
62
- if session[:user]
63
- @story = Story.new()
64
- render( :markaby => :add, :layout => :my_layout )
65
- else
66
- redirect( Login )
67
- end
68
- end
69
- def post
70
- if session[:user]
71
- s = Story.create( :title => params['title'], :body => params['body'], :create_at => Time.now, :user_id => session[:user] )
72
- redirect( Index )
73
- else
74
- redirect( Login )
75
- end
76
- end
77
- end
78
-
79
- class Edit < Route '/edit/(.*)'
80
- def get( id )
81
- if session[:user]
82
- @story = Story.find( id )
83
- render( :markaby => :add, :layout => :my_layout )
84
- else
85
- redirect( Index )
86
- end
87
- end
88
- def post( id )
89
- # story = Story.find( params['id'] )
90
- story = Story.find( id )
91
- story.title = params['title']
92
- story.body = params['body']
93
- story.save
94
-
95
- redirect( Index )
96
- end
97
- end
98
-
99
- class Login < Route '/login'
100
- def get
101
- if session[:user]
102
- redirect( Index )
103
- else
104
- render( :markaby => :login, :layout => :my_layout )
105
- end
106
- end
107
- def post
108
- u = User.find_by_login_and_passwd( params['login'], params['passwd'] )
109
- unless u.nil?
110
- session[:user] = u.id
111
- end
112
- redirect( Index )
113
- end
114
- end
115
-
116
- class Logout < Route '/logout'
117
- def get
118
- session[:user] = nil
119
- redirect( Index )
120
- end
121
- end
122
- end
123
-
124
- module Capcode::Views
125
- def r404
126
- p "Pas glop !!! #{@file} est inconnu !!!"
127
- end
128
-
129
- def home
130
- @story.each do |s|
131
- h2 s.title
132
- p.info do
133
- _post_menu(s)
134
- text " #{s.create_at} by " #.strftime('%B %M, %Y @ %H:%M ')
135
- i s.user.login
136
- end
137
- text s.body
138
- end
139
- end
140
-
141
- def add
142
- form :method => "POST" do
143
- text "Titre :"
144
- input :type => "text", :name => "title", :value => @story.title; br
145
- textarea :name => "body" do; @story.body; end; br
146
- input :type => "submit"
147
- # input :type => "hidden", :name => "id", :value => @story.id
148
- end
149
- end
150
-
151
- def login
152
- form :method => "POST" do
153
- table do
154
- tr do
155
- td "Login :"
156
- td {input :type => "text", :name => "login"}
157
- end
158
- tr do
159
- td "Password :"
160
- td {input :type => "text", :name => "passwd"}
161
- end
162
- end
163
- input :type => "submit", :value => "Login"
164
- end
165
- end
166
-
167
- def my_layout
168
- html do
169
- head do
170
- title 'My Blog'
171
- link :rel => 'stylesheet', :type => 'text/css', :href => '/styles.css', :media => 'screen'
172
- end
173
- body do
174
- h1 { a 'My Blog', :href => URL(Capcode::Index) }
175
-
176
- div.wrapper! do
177
- yield
178
- end
179
-
180
- p.footer! do
181
- if session[:user]
182
- a 'New', :href => URL(Capcode::Add)
183
- text "|"
184
- a "Logout", :href => URL(Capcode::Logout)
185
- else
186
- a 'Login', :href => URL(Capcode::Login)
187
- end
188
- text ' &ndash; Powered by '
189
- a 'Capcode', :href => 'http://capcode.rubyforge.org'
190
- end
191
- end
192
- end
193
- end
194
-
195
- def _post_menu(post)
196
- if session[:user]
197
- text '['
198
- a "Del", :href => URL( Capcode::Remove, post.id, post.rev )
199
- text '|'
200
- a "Edit", :href => URL( Capcode::Edit, post.id )
201
- text ']'
202
- end
203
- end
204
-
205
- end
206
-
207
- #Capcode.run( :port => 3001, :host => "localhost", :db_config => "blog-couchdb.yml" ) do |c|
208
- # admin = User.find_by_login( "admin" )
209
- # if admin.nil?
210
- # puts "Create admin user..."
211
- # admin = User.create( :login => "admin", :passwd => "admin" )
212
- # end
213
- # puts "Admin user : \n\tlogin = #{admin.login}\n\tpassword = #{admin.passwd}"
214
- #end
215
-
216
- __END__
217
- * {
218
- margin: 0;
219
- padding: 0;
220
- }
221
-
222
- body {
223
- font: normal 14px Arial, 'Bitstream Vera Sans', Helvetica, sans-serif;
224
- line-height: 1.5;
225
- }
226
-
227
- h1, h2, h3, h4 {
228
- font-family: Georgia, serif;
229
- font-weight: normal;
230
- }
231
-
232
- h1 {
233
- background-color: #EEE;
234
- border-bottom: 5px solid #f06000;
235
- outline: 5px solid #ab250c;
236
- font-weight: normal;
237
- font-size: 3em;
238
- padding: 0.5em 0;
239
- text-align: center;
240
- }
241
-
242
- h1 a { color: #143D55; text-decoration: none }
243
- h1 a:hover { color: #143D55; text-decoration: underline }
244
-
245
- h2 {
246
- font-size: 2em;
247
- color: #287AA9;
248
- }
249
-
250
- #wrapper {
251
- margin: 3em auto;
252
- width: 700px;
253
- }
254
-
255
- p {
256
- margin-bottom: 1em;
257
- }
258
-
259
- p.info, p#footer {
260
- color: #999;
261
- margin-left: 1em;
262
- }
263
-
264
- p.info a, p#footer a {
265
- color: #999;
266
- }
267
-
268
- p.info a:hover, p#footer a:hover {
269
- text-decoration: none;
270
- }
271
-
272
- a {
273
- color: #6F812D;
274
- }
275
-
276
- a:hover {
277
- color: #9CB441;
278
- }
279
-
280
- hr {
281
- border-width: 5px 0;
282
- border-style: solid;
283
- border-color: #9CB441;
284
- border-bottom-color: #6F812D;
285
- height: 0;
286
- }
287
-
288
- p#footer {
289
- font-size: 0.9em;
290
- margin: 0;
291
- padding: 1em;
292
- text-align: center;
293
- }
294
-
295
- label {
296
- display: inline-block;
297
- width: 100%;
298
- }
299
-
300
- input, textarea {
301
- margin-bottom: 1em;
302
- width: 200px;
303
- }
304
-
305
- input.submit {
306
- float: left;
307
- width: auto;
308
- }
309
-
310
- textarea {
311
- font: normal 14px Arial, 'Bitstream Vera Sans', Helvetica, sans-serif;
312
- height: 300px;
313
- width: 400px;
314
- }
@@ -1,12 +0,0 @@
1
- require 'blog-couchdb'
2
-
3
- app = Capcode.application( :db_config => "blog-couchdb.yml" ) do |c|
4
- admin = User.find_by_login( "admin" )
5
- if admin.nil?
6
- puts "Create admin user..."
7
- admin = User.create( :login => "admin", :passwd => "admin" )
8
- end
9
- puts "Log as admin with : \n\tlogin = #{admin.login}\n\tpassword = #{admin.passwd}"
10
- end
11
-
12
- run app
@@ -1,2 +0,0 @@
1
- host: http://localhost:5984
2
- database: my_blog
@@ -1,63 +0,0 @@
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" )
@@ -1,2 +0,0 @@
1
- adapter: sqlite3
2
- database: my_blog.db
@@ -1,10 +0,0 @@
1
- require 'blog-mongodb'
2
-
3
- Capcode.run( :port => 3001, :host => "localhost", :db_config => "blog-mongodb.yml" ) do |c|
4
- admin = User.find_by_login( "admin" )
5
- if admin.nil?
6
- puts "Create admin user..."
7
- admin = User.create( :login => "admin", :passwd => "admin" )
8
- end
9
- puts "Admin user : \n\tlogin = #{admin.login}\n\tpassword = #{admin.passwd}"
10
- end
@@ -1,304 +0,0 @@
1
- $:.unshift( "../lib" )
2
- require 'rubygems'
3
- require 'capcode'
4
- require 'capcode/base/mongodb'
5
- require 'capcode/render/markaby'
6
-
7
- class User < Capcode::Base
8
- include Capcode::Resource
9
-
10
- field :login, :type => String
11
- field :passwd, :type => String
12
-
13
- has_many :stories
14
- end
15
-
16
- class Story < Capcode::Base
17
- include Capcode::Resource
18
-
19
- field :title, :type => String
20
- field :body, :type => String
21
- field :create_at, :type => String
22
-
23
- field :user_id, :type => String
24
- has_one :user
25
-
26
- default_sort :create_at
27
- end
28
-
29
- module Capcode
30
- class HTTPError
31
- def r404(f)
32
- @file = f
33
- end
34
- end
35
-
36
- class Style < Route '/styles.css'
37
- STYLE = File.read(__FILE__).gsub(/.*__END__/m, '')
38
-
39
- def get
40
- @response['Content-Type'] = 'text/css; charset=utf-8'
41
- STYLE
42
- end
43
- end
44
-
45
- class Index < Route '/'
46
- def get
47
- @story = Story.all( )
48
- render( :markaby => :home, :layout => :my_layout )
49
- end
50
- end
51
-
52
- class Remove < Route '/remove/([^\/]*)'
53
- def get( id )
54
- Story.find_by_id(id).delete
55
- redirect( Index )
56
- end
57
- end
58
-
59
- class Add < Route '/add'
60
- def get
61
- if session[:user]
62
- @story = Story.new()
63
- render( :markaby => :add, :layout => :my_layout )
64
- else
65
- redirect( Login )
66
- end
67
- end
68
- def post
69
- if session[:user]
70
- s = Story.create( :title => params['title'], :body => params['body'], :create_at => Time.now, :user_id => session[:user] )
71
- redirect( Index )
72
- else
73
- redirect( Login )
74
- end
75
- end
76
- end
77
-
78
- class Edit < Route '/edit/(.*)'
79
- def get( id )
80
- if session[:user]
81
- @story = Story.find( id )
82
- render( :markaby => :add, :layout => :my_layout )
83
- else
84
- redirect( Index )
85
- end
86
- end
87
- def post( id )
88
- # story = Story.find( params['id'] )
89
- story = Story.find( id )
90
- story.title = params['title']
91
- story.body = params['body']
92
- story.save
93
-
94
- redirect( Index )
95
- end
96
- end
97
-
98
- class Login < Route '/login'
99
- def get
100
- if session[:user]
101
- redirect( Index )
102
- else
103
- render( :markaby => :login, :layout => :my_layout )
104
- end
105
- end
106
- def post
107
- u = User.find_by_login_and_passwd( params['login'], params['passwd'] )
108
- unless u.nil?
109
- session[:user] = u.id
110
- end
111
- redirect( Index )
112
- end
113
- end
114
-
115
- class Logout < Route '/logout'
116
- def get
117
- session[:user] = nil
118
- redirect( Index )
119
- end
120
- end
121
- end
122
-
123
- module Capcode::Views
124
- def r404
125
- p "Pas glop !!! #{@file} est inconnu !!!"
126
- end
127
-
128
- def home
129
- @story.each do |s|
130
- h2 s.title
131
- p.info do
132
- _post_menu(s)
133
- text " #{s.create_at} by " #.strftime('%B %M, %Y @ %H:%M ')
134
- i User.find_by_id(s.user).login
135
- end
136
- text s.body
137
- end
138
- end
139
-
140
- def add
141
- form :method => "POST" do
142
- text "Titre :"
143
- input :type => "text", :name => "title", :value => @story.title; br
144
- textarea :name => "body" do; @story.body; end; br
145
- input :type => "submit"
146
- # input :type => "hidden", :name => "id", :value => @story.id
147
- end
148
- end
149
-
150
- def login
151
- form :method => "POST" do
152
- table do
153
- tr do
154
- td "Login :"
155
- td {input :type => "text", :name => "login"}
156
- end
157
- tr do
158
- td "Password :"
159
- td {input :type => "text", :name => "passwd"}
160
- end
161
- end
162
- input :type => "submit", :value => "Login"
163
- end
164
- end
165
-
166
- def my_layout
167
- html do
168
- head do
169
- title 'My Blog'
170
- link :rel => 'stylesheet', :type => 'text/css', :href => '/styles.css', :media => 'screen'
171
- end
172
- body do
173
- h1 { a 'My Blog', :href => URL(Capcode::Index) }
174
-
175
- div.wrapper! do
176
- yield
177
- end
178
-
179
- p.footer! do
180
- if session[:user]
181
- a 'New', :href => URL(Capcode::Add)
182
- text "|"
183
- a "Logout", :href => URL(Capcode::Logout)
184
- else
185
- a 'Login', :href => URL(Capcode::Login)
186
- end
187
- text ' &ndash; Powered by '
188
- a 'Capcode', :href => 'http://capcode.rubyforge.org'
189
- end
190
- end
191
- end
192
- end
193
-
194
- def _post_menu(post)
195
- if session[:user]
196
- text '['
197
- a "Del", :href => URL( Capcode::Remove, post.id )
198
- text '|'
199
- a "Edit", :href => URL( Capcode::Edit, post.id )
200
- text ']'
201
- end
202
- end
203
-
204
- end
205
-
206
- __END__
207
- * {
208
- margin: 0;
209
- padding: 0;
210
- }
211
-
212
- body {
213
- font: normal 14px Arial, 'Bitstream Vera Sans', Helvetica, sans-serif;
214
- line-height: 1.5;
215
- }
216
-
217
- h1, h2, h3, h4 {
218
- font-family: Georgia, serif;
219
- font-weight: normal;
220
- }
221
-
222
- h1 {
223
- background-color: #EEE;
224
- border-bottom: 5px solid #f06000;
225
- outline: 5px solid #ab250c;
226
- font-weight: normal;
227
- font-size: 3em;
228
- padding: 0.5em 0;
229
- text-align: center;
230
- }
231
-
232
- h1 a { color: #143D55; text-decoration: none }
233
- h1 a:hover { color: #143D55; text-decoration: underline }
234
-
235
- h2 {
236
- font-size: 2em;
237
- color: #287AA9;
238
- }
239
-
240
- #wrapper {
241
- margin: 3em auto;
242
- width: 700px;
243
- }
244
-
245
- p {
246
- margin-bottom: 1em;
247
- }
248
-
249
- p.info, p#footer {
250
- color: #999;
251
- margin-left: 1em;
252
- }
253
-
254
- p.info a, p#footer a {
255
- color: #999;
256
- }
257
-
258
- p.info a:hover, p#footer a:hover {
259
- text-decoration: none;
260
- }
261
-
262
- a {
263
- color: #6F812D;
264
- }
265
-
266
- a:hover {
267
- color: #9CB441;
268
- }
269
-
270
- hr {
271
- border-width: 5px 0;
272
- border-style: solid;
273
- border-color: #9CB441;
274
- border-bottom-color: #6F812D;
275
- height: 0;
276
- }
277
-
278
- p#footer {
279
- font-size: 0.9em;
280
- margin: 0;
281
- padding: 1em;
282
- text-align: center;
283
- }
284
-
285
- label {
286
- display: inline-block;
287
- width: 100%;
288
- }
289
-
290
- input, textarea {
291
- margin-bottom: 1em;
292
- width: 200px;
293
- }
294
-
295
- input.submit {
296
- float: left;
297
- width: auto;
298
- }
299
-
300
- textarea {
301
- font: normal 14px Arial, 'Bitstream Vera Sans', Helvetica, sans-serif;
302
- height: 300px;
303
- width: 400px;
304
- }