Capcode 0.8.7 → 0.8.8

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.
Files changed (46) hide show
  1. data/README.rdoc +10 -1
  2. data/doc/rdoc/classes/Capcode.html +410 -390
  3. data/doc/rdoc/classes/Capcode/Helpers.html +146 -126
  4. data/doc/rdoc/created.rid +1 -1
  5. data/doc/rdoc/files/README_rdoc.html +26 -2
  6. data/doc/rdoc/files/lib/capcode/render/haml_rb.html +1 -1
  7. data/doc/rdoc/files/lib/capcode/render/json_rb.html +1 -1
  8. data/doc/rdoc/files/lib/capcode/render/markaby_rb.html +1 -1
  9. data/doc/rdoc/files/lib/capcode/render/sass_rb.html +1 -1
  10. data/doc/rdoc/files/lib/capcode/render/webdav_rb.html +1 -1
  11. data/doc/rdoc/files/lib/capcode_rb.html +1 -1
  12. data/doc/rdoc/fr_file_index.html +5 -0
  13. data/examples/blog-ar.rb +81 -0
  14. data/examples/blog-ar.yml +3 -0
  15. data/examples/blog-sq.rb +82 -0
  16. data/examples/blog-sq.yml +3 -0
  17. data/examples/mail/mail_html.rhtml +1 -0
  18. data/examples/mail/mail_text.rhtml +1 -0
  19. data/examples/mail/ok.rhtml +1 -0
  20. data/examples/mail/rubyfr.png +0 -0
  21. data/examples/mustache/with_class.mustache +8 -0
  22. data/examples/mustache/without_class.mustache +1 -0
  23. data/examples/render-binary.rb +46 -0
  24. data/examples/render-email.rb +68 -0
  25. data/examples/render-erb.rb +2 -0
  26. data/examples/render-mustache.rb +30 -0
  27. data/examples/render-redirect.rb +19 -0
  28. data/lib/capcode.rb +3 -0
  29. data/lib/capcode/base/ar.rb +54 -0
  30. data/lib/capcode/base/couchdb.rb +5 -1
  31. data/lib/capcode/base/dm.rb +5 -1
  32. data/lib/capcode/base/sq.rb +58 -0
  33. data/lib/capcode/core_ext.rb +1 -1
  34. data/lib/capcode/render/binary.rb +8 -0
  35. data/lib/capcode/render/email.rb +73 -0
  36. data/lib/capcode/render/haml.rb +5 -1
  37. data/lib/capcode/render/json.rb +5 -1
  38. data/lib/capcode/render/markaby.rb +5 -1
  39. data/lib/capcode/render/mustache.rb +37 -0
  40. data/lib/capcode/render/none.rb +7 -0
  41. data/lib/capcode/render/redirect.rb +7 -0
  42. data/lib/capcode/render/sass.rb +5 -1
  43. data/lib/capcode/render/webdav.rb +11 -7
  44. data/lib/capcode/version.rb +1 -1
  45. metadata +30 -3
  46. data/examples/my_blog.db +0 -0
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Wed Oct 21 16:34:53 +0200 2009</td>
59
+ <td>Thu Nov 05 14:46:36 +0100 2009</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -27,10 +27,15 @@
27
27
  <a href="files/lib/capcode/base/db_rb.html">lib/capcode/base/db.rb</a><br />
28
28
  <a href="files/lib/capcode/configuration_rb.html">lib/capcode/configuration.rb</a><br />
29
29
  <a href="files/lib/capcode/helpers/auth_rb.html">lib/capcode/helpers/auth.rb</a><br />
30
+ <a href="files/lib/capcode/render/binary_rb.html">lib/capcode/render/binary.rb</a><br />
31
+ <a href="files/lib/capcode/render/email_rb.html">lib/capcode/render/email.rb</a><br />
30
32
  <a href="files/lib/capcode/render/erb_rb.html">lib/capcode/render/erb.rb</a><br />
31
33
  <a href="files/lib/capcode/render/haml_rb.html">lib/capcode/render/haml.rb</a><br />
32
34
  <a href="files/lib/capcode/render/json_rb.html">lib/capcode/render/json.rb</a><br />
33
35
  <a href="files/lib/capcode/render/markaby_rb.html">lib/capcode/render/markaby.rb</a><br />
36
+ <a href="files/lib/capcode/render/mustache_rb.html">lib/capcode/render/mustache.rb</a><br />
37
+ <a href="files/lib/capcode/render/none_rb.html">lib/capcode/render/none.rb</a><br />
38
+ <a href="files/lib/capcode/render/redirect_rb.html">lib/capcode/render/redirect.rb</a><br />
34
39
  <a href="files/lib/capcode/render/sass_rb.html">lib/capcode/render/sass.rb</a><br />
35
40
  <a href="files/lib/capcode/render/static_rb.html">lib/capcode/render/static.rb</a><br />
36
41
  <a href="files/lib/capcode/render/text_rb.html">lib/capcode/render/text.rb</a><br />
@@ -0,0 +1,81 @@
1
+ $:.unshift( "../lib" )
2
+ require 'rubygems'
3
+ require 'capcode'
4
+ require 'capcode/base/ar'
5
+
6
+ class Basic < Capcode::Model 1.0
7
+ def self.up
8
+ create_table :stories do |t|
9
+ t.string :title
10
+ t.string :body
11
+ t.string :date
12
+ end
13
+ end
14
+ end
15
+
16
+ class UpdateBasic < Capcode::Model 1.1
17
+ def self.up
18
+ create_table :users do |t|
19
+ t.string :name
20
+ t.string :password
21
+ end
22
+ end
23
+
24
+ def self.down
25
+ drop_table :users
26
+ end
27
+ end
28
+
29
+ class Story < Capcode::Base
30
+ include Capcode::Resource
31
+ end
32
+
33
+ module Capcode
34
+ class HTTPError
35
+ def r404(f)
36
+ "Pas glop !!! #{f} est inconnu !!!"
37
+ end
38
+ end
39
+
40
+ class Index < Route '/'
41
+ def get
42
+ r = "<html><body>"
43
+
44
+ story = Story.all
45
+
46
+ story.each do |s|
47
+ r += "<h2>#{s.title}</h2><small>#{s.date} - <a href='#{URL( Remove, s.id )}'>Delete this entry</a></small><p>#{s.body}</p>"
48
+ end
49
+
50
+ r+"<hr /><a href='#{URL(Add)}'>Add a new entry</a></body></html>"
51
+ end
52
+ end
53
+
54
+ class Remove < Route '/remove/([^\/]*)'
55
+ def get( id )
56
+ Story.delete(id)
57
+ redirect( Index )
58
+ end
59
+ end
60
+
61
+ class Add < Route '/add'
62
+ def get
63
+ '
64
+ <html><body>
65
+ <h1>Add a new entry</h1>
66
+ <form method="POST">
67
+ Titre : <input type="text" name="title"><br />
68
+ <textarea name="body"></textarea><br />
69
+ <input type="submit">
70
+ </form>
71
+ </body></html>
72
+ '
73
+ end
74
+ def post
75
+ Story.new( :title => params['title'], :body => params['body'], :date => Time.now.to_s ).save
76
+ redirect( Index )
77
+ end
78
+ end
79
+ end
80
+
81
+ Capcode.run( :port => 3001, :host => "localhost", :db_config => "blog-ar.yml" )
@@ -0,0 +1,3 @@
1
+ adapter: sqlite3
2
+ database: ar_blog.db
3
+ schema_version: 1.0
@@ -0,0 +1,82 @@
1
+ $:.unshift( "../lib" )
2
+ require 'rubygems'
3
+ require 'capcode'
4
+ require 'capcode/base/sq'
5
+
6
+ class Basic < Capcode::Model 1.0
7
+ def up
8
+ create_table :stories do
9
+ primary_key :id
10
+ String :title
11
+ String :body
12
+ String :date
13
+ end
14
+ end
15
+ end
16
+
17
+ class UpdateBasic < Capcode::Model 1.1
18
+ def up
19
+ create_table :users do
20
+ String :name
21
+ String :password
22
+ end
23
+ end
24
+
25
+ def down
26
+ drop_table :users
27
+ end
28
+ end
29
+
30
+ class Story < Capcode::Base
31
+ include Capcode::Resource
32
+ end
33
+
34
+ module Capcode
35
+ class HTTPError
36
+ def r404(f)
37
+ "Pas glop !!! #{f} est inconnu !!!"
38
+ end
39
+ end
40
+
41
+ class Index < Route '/'
42
+ def get
43
+ r = "<html><body>"
44
+
45
+ story = Story.all
46
+
47
+ story.each do |s|
48
+ r += "<h2>#{s[:title]}</h2><small>#{s[:date]} - <a href='#{URL( Remove, s[:id] )}'>Delete this entry</a></small><p>#{s[:body]}</p>"
49
+ end
50
+
51
+ r+"<hr /><a href='#{URL(Add)}'>Add a new entry</a></body></html>"
52
+ end
53
+ end
54
+
55
+ class Remove < Route '/remove/([^\/]*)'
56
+ def get( id )
57
+ Story.filter(:id => id).delete
58
+ redirect( Index )
59
+ end
60
+ end
61
+
62
+ class Add < Route '/add'
63
+ def get
64
+ '
65
+ <html><body>
66
+ <h1>Add a new entry</h1>
67
+ <form method="POST">
68
+ Titre : <input type="text" name="title"><br />
69
+ <textarea name="body"></textarea><br />
70
+ <input type="submit">
71
+ </form>
72
+ </body></html>
73
+ '
74
+ end
75
+ def post
76
+ Story.insert( :title => params['title'], :body => params['body'], :date => Time.now.to_s )
77
+ redirect( Index )
78
+ end
79
+ end
80
+ end
81
+
82
+ Capcode.run( :port => 3001, :host => "localhost", :db_config => "blog-sq.yml" )
@@ -0,0 +1,3 @@
1
+ adapter: sqlite3
2
+ database: sq_blog.db
3
+ schema_version: 1.0
@@ -0,0 +1 @@
1
+ This mail was send at <b><%= @time %></b>
@@ -0,0 +1 @@
1
+ This mail was send at <%= @time %>
@@ -0,0 +1 @@
1
+ Mail <b>send !!!</b>
Binary file
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Capcode render with mustache ;)</title>
4
+ </head>
5
+ <body>
6
+ Bonjour, il est {{time}}
7
+ </body>
8
+ </html>
@@ -0,0 +1 @@
1
+ Bonjour, il est {{time}}
@@ -0,0 +1,46 @@
1
+ $:.unshift( "../lib" )
2
+ require 'capcode'
3
+ require 'capcode/render/markaby'
4
+ require 'capcode/render/binary'
5
+ require 'rubygems'
6
+ require 'graphviz'
7
+
8
+ module Capcode
9
+ class Index < Route '/'
10
+ def get
11
+ render :markaby => :index
12
+ end
13
+ end
14
+
15
+ class Image < Route '/image'
16
+ def get
17
+ render :binary => :image, :content_type => "image/png"
18
+ end
19
+ end
20
+ end
21
+
22
+ module Capcode::Views
23
+ def glop
24
+ html do
25
+ body do
26
+ yield
27
+ end
28
+ end
29
+ end
30
+
31
+ def index
32
+ h1 "Hello !"
33
+ img :src => URL(Capcode::Image)
34
+ end
35
+
36
+ def image
37
+ GraphViz::new( "G" ) { |g|
38
+ g.hello << g.world
39
+ g.bonjour - g.monde
40
+ g.hola > g.mundo
41
+ g.holla >> g.welt
42
+ }.output( :png => String )
43
+ end
44
+ end
45
+
46
+ Capcode.run( )
@@ -0,0 +1,68 @@
1
+ $:.unshift( "../lib" )
2
+ require 'capcode'
3
+ require 'rubygems'
4
+ require 'capcode/render/email'
5
+ require 'capcode/render/markaby'
6
+ require 'capcode/render/erb'
7
+ require 'capcode/render/static'
8
+ require 'graphviz'
9
+
10
+ module Capcode
11
+ set :smtp, { :server => '127.0.0.1', :port => 25 }
12
+ set :erb, "mail"
13
+ set :static, "mail"
14
+
15
+ class Index < Route '/'
16
+ def get
17
+ render :markaby => :index
18
+ end
19
+ end
20
+
21
+ class SendMail < Route '/send'
22
+ def get
23
+ @time = Time.now
24
+ render :email => {
25
+ :from => 'you@yourdomain.com',
26
+ :to => 'friend@hisdomain.com',
27
+ :subject => "Mail renderer example...",
28
+
29
+ :body => {
30
+ :text => { :erb => :mail_text },
31
+ :html => { :erb => :mail_html, :content_type => 'text/html; charset=UTF-8' }
32
+ },
33
+ :file => [
34
+ { :data => :image, :filename => "hello.png", :mime_type => "image/png" },
35
+ "rubyfr.png"
36
+ ],
37
+ :ok => { :erb => :ok },
38
+ :error => { :redirect => Index }
39
+ }
40
+ end
41
+ end
42
+ end
43
+
44
+ module Capcode::Views
45
+ def glop
46
+ html do
47
+ body do
48
+ yield
49
+ end
50
+ end
51
+ end
52
+
53
+ def index
54
+ h1 "Send me an email"
55
+ a "Send mail", :href => URL(Capcode::SendMail)
56
+ end
57
+
58
+ def image
59
+ GraphViz::new( "G" ) { |g|
60
+ g.hello << g.world
61
+ g.bonjour - g.monde
62
+ g.hola > g.mundo
63
+ g.holla >> g.welt
64
+ }.output( :png => String )
65
+ end
66
+ end
67
+
68
+ Capcode.run( )
@@ -2,9 +2,11 @@ $:.unshift( "../lib" )
2
2
  require 'capcode'
3
3
  require 'capcode/render/erb'
4
4
  #Capcode::Helpers.erb_path="erb"
5
+ require 'rack/bug'
5
6
 
6
7
  module Capcode
7
8
  set :erb, "erb"
9
+ use Rack::Bug
8
10
 
9
11
  class Index < Route '/'
10
12
  def get
@@ -0,0 +1,30 @@
1
+ $:.unshift( "../lib" )
2
+ require 'capcode'
3
+ require 'capcode/render/mustache'
4
+
5
+ module Capcode
6
+ set :mustache, "mustache"
7
+
8
+ class Index < Route '/'
9
+ def get
10
+ @time = Time.now
11
+ render :mustache => :with_class
12
+ end
13
+ end
14
+
15
+ class WithoutClass < Route '/without'
16
+ def get
17
+ render :mustache => :without_class, :time => Time.now
18
+ end
19
+ end
20
+ end
21
+
22
+ module Capcode::Views
23
+ class WithClass < Mustache
24
+ def time
25
+ @time
26
+ end
27
+ end
28
+ end
29
+
30
+ Capcode.run( )
@@ -0,0 +1,19 @@
1
+ $:.unshift( "../lib" )
2
+ require 'capcode'
3
+ require 'capcode/render/redirect'
4
+
5
+ module Capcode
6
+ class Index < Route '/'
7
+ def get
8
+ render :redirect => Hello
9
+ end
10
+ end
11
+
12
+ class Hello < Route '/hello'
13
+ def get
14
+ render :text => "Hello World!"
15
+ end
16
+ end
17
+ end
18
+
19
+ Capcode.run( )
@@ -34,6 +34,9 @@ module Capcode
34
34
  class RenderError < ArgumentError #:nodoc: all
35
35
  end
36
36
 
37
+ class MissingLibrary < Exception #:nodoc: all
38
+ end
39
+
37
40
  # Views is an empty module in which you can store your markaby or xml views.
38
41
  module Views; end
39
42
 
@@ -0,0 +1,54 @@
1
+ begin
2
+ require 'active_record'
3
+ rescue LoadError => e
4
+ raise MissingLibrary, "ActiveRecord could not be loaded (is it installed?): #{e.message}"
5
+ end
6
+
7
+ module Capcode
8
+ # This module contains the resources needed in a model
9
+ module Resource
10
+ end
11
+
12
+ # This class allow you to define models
13
+ Base = ActiveRecord::Base
14
+
15
+ # Schema info
16
+ class SchemaInfo < Base
17
+ end
18
+
19
+ class << self
20
+ # This class allow you to define models
21
+ def Model( n )
22
+ @final = [n, @final.to_f].max
23
+ m = (@migrations ||= [])
24
+ Class.new(ActiveRecord::Migration) do
25
+ meta_def(:version) { n }
26
+ meta_def(:inherited) { |k| m << k }
27
+ end
28
+ end
29
+
30
+ def db_connect( dbfile, logfile ) #:nodoc:
31
+ dbconfig = YAML::load(File.open(dbfile)).keys_to_sym
32
+ version = dbconfig.delete(:schema_version) { |_| @final }
33
+
34
+ ActiveRecord::Base.establish_connection(dbconfig)
35
+ ActiveRecord::Base.logger = Logger.new(logfile)
36
+
37
+ if @migrations
38
+ unless SchemaInfo.table_exists?
39
+ ActiveRecord::Schema.define do
40
+ create_table SchemaInfo.table_name do |t|
41
+ t.column :version, :float
42
+ end
43
+ end
44
+ end
45
+ si = SchemaInfo.find(:first) || SchemaInfo.new(:version => 0)
46
+ @migrations.each do |k|
47
+ k.migrate(:up) if si.version < k.version and k.version <= version
48
+ k.migrate(:down) if si.version >= k.version and k.version > version
49
+ end
50
+ si.update_attributes(:version => version)
51
+ end
52
+ end
53
+ end
54
+ end