ramaze 0.3.0 → 0.3.5

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 (122) hide show
  1. data/Rakefile +3 -2
  2. data/bin/ramaze +9 -3
  3. data/doc/AUTHORS +6 -2
  4. data/doc/CHANGELOG +272 -66
  5. data/doc/GPL +12 -13
  6. data/doc/README.html +729 -0
  7. data/doc/changes.txt +5757 -0
  8. data/doc/changes.xml +5759 -0
  9. data/doc/meta/announcement.txt +48 -39
  10. data/doc/tutorial/todolist.mkd +10 -12
  11. data/examples/blog/start.rb +1 -0
  12. data/examples/caching.rb +1 -0
  13. data/examples/element.rb +3 -0
  14. data/examples/hello.rb +1 -3
  15. data/examples/identity.rb +5 -8
  16. data/examples/layout.rb +1 -0
  17. data/examples/linking.rb +1 -0
  18. data/examples/memleak_detector.rb +1 -0
  19. data/examples/nitro_form.rb +1 -0
  20. data/examples/rammit/start.rb +1 -0
  21. data/examples/rapaste/Rakefile +7 -0
  22. data/examples/rapaste/{src/controller.rb → controller/paste.rb} +28 -3
  23. data/examples/rapaste/{src/model.rb → model/paste.rb} +0 -4
  24. data/examples/rapaste/public/css/display.css +17 -0
  25. data/examples/rapaste/spec/rapaste.rb +2 -2
  26. data/examples/rapaste/start.rb +9 -4
  27. data/examples/rapaste/{template → view}/copy.xhtml +0 -0
  28. data/examples/rapaste/{template → view}/index.xhtml +0 -0
  29. data/examples/rapaste/{template → view}/layout.xhtml +3 -0
  30. data/examples/rapaste/{template → view}/list.xhtml +4 -3
  31. data/examples/rapaste/view/search.xhtml +41 -0
  32. data/examples/rapaste/{template → view}/view.xhtml +0 -0
  33. data/examples/simple.rb +3 -3
  34. data/examples/templates/template/external.amrita +9 -9
  35. data/examples/templates/template/external.redcloth +19 -0
  36. data/examples/templates/template_amrita2.rb +40 -7
  37. data/examples/templates/template_erubis.rb +3 -3
  38. data/examples/templates/template_ezamar.rb +1 -3
  39. data/examples/templates/template_haml.rb +1 -3
  40. data/examples/templates/template_liquid.rb +3 -3
  41. data/examples/templates/template_markaby.rb +1 -3
  42. data/examples/templates/template_nagoro.rb +1 -3
  43. data/examples/templates/template_redcloth.rb +59 -0
  44. data/examples/templates/template_remarkably.rb +1 -3
  45. data/examples/templates/template_xslt.rb +1 -4
  46. data/examples/todolist/src/controller/main.rb +1 -1
  47. data/examples/todolist/start.rb +1 -2
  48. data/examples/upload/start.rb +19 -0
  49. data/examples/upload/view/index.xhtml +25 -0
  50. data/examples/whywiki/start.rb +1 -3
  51. data/examples/wikore/start.rb +3 -0
  52. data/examples/wiktacular/mkd/newpagename/current.mkd +1 -0
  53. data/examples/wiktacular/mkd/newpagename/current.mkd.bak +1 -0
  54. data/examples/wiktacular/start.rb +1 -0
  55. data/lib/proto/controller/main.rb +0 -3
  56. data/lib/proto/public/js/jquery.js +106 -93
  57. data/lib/proto/spec/main.rb +2 -5
  58. data/lib/proto/start.rb +0 -3
  59. data/lib/ramaze.rb +3 -2
  60. data/lib/ramaze/action.rb +6 -10
  61. data/lib/ramaze/adapter/lsws.rb +19 -0
  62. data/lib/ramaze/contrib/email.rb +84 -0
  63. data/lib/ramaze/contrib/email.rb-darcs-backup0 +81 -0
  64. data/lib/ramaze/contrib/gettext.rb +1 -0
  65. data/lib/ramaze/contrib/gettext/parser.rb +46 -0
  66. data/lib/ramaze/contrib/route.rb +3 -36
  67. data/lib/ramaze/controller.rb +4 -6
  68. data/lib/ramaze/controller/resolve.rb +28 -1
  69. data/lib/ramaze/dispatcher.rb +1 -1
  70. data/lib/ramaze/dispatcher/file.rb +17 -0
  71. data/lib/ramaze/global/globalstruct.rb +7 -4
  72. data/lib/ramaze/helper/auth.rb +1 -1
  73. data/lib/ramaze/helper/identity.rb +25 -15
  74. data/lib/ramaze/helper/link.rb +29 -8
  75. data/lib/ramaze/helper/maruku.rb +7 -0
  76. data/lib/ramaze/helper/partial.rb +25 -10
  77. data/lib/ramaze/route.rb +56 -0
  78. data/lib/ramaze/snippets/metaid.rb +17 -0
  79. data/lib/ramaze/spec/helper.rb +0 -2
  80. data/lib/ramaze/spec/helper/mock_http.rb +6 -0
  81. data/lib/ramaze/spec/helper/pretty_output.rb +5 -1
  82. data/lib/ramaze/store/default.rb +3 -1
  83. data/lib/ramaze/template.rb +1 -1
  84. data/lib/ramaze/template/amrita2.rb +21 -15
  85. data/lib/ramaze/template/bijou.rb +39 -0
  86. data/lib/ramaze/template/builder.rb +28 -0
  87. data/lib/ramaze/template/redcloth.rb +24 -0
  88. data/lib/ramaze/template/sass.rb +3 -1
  89. data/lib/ramaze/tool/create.rb +2 -1
  90. data/lib/ramaze/tool/localize.rb +6 -1
  91. data/lib/ramaze/trinity/request.rb +8 -0
  92. data/lib/ramaze/trinity/session.rb +8 -5
  93. data/lib/ramaze/version.rb +1 -1
  94. data/rake_tasks/gem.rake +0 -1
  95. data/rake_tasks/maintenance.rake +4 -1
  96. data/spec/contrib/route.rb +14 -63
  97. data/spec/examples/linking.rb +2 -2
  98. data/spec/examples/templates/template_redcloth.rb +28 -0
  99. data/spec/ramaze/controller/subclass.rb +21 -0
  100. data/spec/ramaze/dispatcher/file.rb +31 -0
  101. data/spec/ramaze/helper/link.rb +46 -0
  102. data/spec/ramaze/helper/partial.rb +22 -1
  103. data/spec/ramaze/helper/template/locals.xhtml +1 -0
  104. data/spec/ramaze/helper/template/recursive_locals.xhtml +7 -0
  105. data/spec/ramaze/params.rb +8 -0
  106. data/spec/ramaze/request.rb +14 -0
  107. data/spec/ramaze/route.rb +107 -0
  108. data/spec/ramaze/session.rb +4 -2
  109. data/spec/ramaze/template/amrita2.rb +21 -7
  110. data/spec/ramaze/template/amrita2/external.amrita +6 -0
  111. data/spec/ramaze/template/amrita2/sum.amrita +1 -1
  112. data/spec/ramaze/template/bijou.rb +25 -0
  113. data/spec/ramaze/template/builder.rb +55 -0
  114. data/spec/ramaze/template/builder/external.rxml +3 -0
  115. data/spec/ramaze/template/haml.rb +15 -0
  116. data/spec/ramaze/template/haml/locals.haml +1 -0
  117. data/spec/ramaze/template/redcloth.rb +38 -0
  118. data/spec/ramaze/template/redcloth/external.redcloth +1 -0
  119. metadata +472 -442
  120. data/examples/rapaste/rapaste.sqlite +0 -0
  121. data/spec/ramaze/template/amrita2/data.amrita +0 -6
  122. data/spec/ramaze/template/amrita2/index.amrita +0 -1
@@ -21,9 +21,18 @@ class TCPartialHelperController < Ramaze::Controller
21
21
  render_template("partial.xhtml")
22
22
  end
23
23
 
24
- def recursive
24
+ def recursive locals = false
25
+ respond render_template('recursive_locals.xhtml', :n => 1) if locals
25
26
  @n = 1
26
27
  end
28
+
29
+ def test_locals
30
+ render_template 'locals.xhtml', :say => 'Hello', :to => 'World'
31
+ end
32
+
33
+ def test_without_ext
34
+ render_template :locals, :say => 'Hi', :to => 'World'
35
+ end
27
36
  end
28
37
 
29
38
  describe "PartialHelper" do
@@ -45,4 +54,16 @@ describe "PartialHelper" do
45
54
  it 'should work recursively' do
46
55
  get('/recursive').body.gsub(/\s/,'').should == '{1{2{3{44}4}3}2}'
47
56
  end
57
+
58
+ it 'should support locals' do
59
+ get('/test_locals').body.should == 'Hello, World!'
60
+ end
61
+
62
+ it 'should work recursively with locals' do
63
+ get('/recursive/true').body.gsub(/\s/,'').should == '{1{2{3{44}3}2}1}'
64
+ end
65
+
66
+ it 'should not require file extension' do
67
+ get('/test_without_ext').body.should == 'Hi, World!'
68
+ end
48
69
  end
@@ -0,0 +1 @@
1
+ #{say}, #{to}!
@@ -0,0 +1,7 @@
1
+ {
2
+ #{n}
3
+ <?r if n < 4 ?>
4
+ #{render_template('recursive_locals.xhtml', :n => n+1)}
5
+ <?r end ?>
6
+ #{n}
7
+ }
@@ -49,6 +49,10 @@ class TCParamsController2 < Ramaze::Controller
49
49
  def add(one, two = nil, three = nil)
50
50
  "#{one}:#{two}:#{three}"
51
51
  end
52
+
53
+ def keys
54
+ request.params.keys.to_s.dump
55
+ end
52
56
  end
53
57
 
54
58
  class TCParamsController3 < Ramaze::Controller
@@ -146,4 +150,8 @@ describe "Simple Parameters" do
146
150
  it 'should have a parameter via QUERY_PARAMS' do
147
151
  get('/ma', 'foo' => 'bar').body.should == '"bar"'
148
152
  end
153
+
154
+ it 'should handle valueless params' do
155
+ raw_mock_request(:get, '/jo/keys?foo').body.should == '"foo"'
156
+ end
149
157
  end
@@ -48,6 +48,13 @@ class TCRequestController < Ramaze::Controller
48
48
  def my_ip
49
49
  request.remote_addr
50
50
  end
51
+
52
+ def to_ivs
53
+ request.to_ivs :foo, :bar
54
+ instance_variables.sort.map{|iv|
55
+ [ iv.to_s, instance_variable_get(iv) ].join(' => ')
56
+ }.join(', ')
57
+ end
51
58
  end
52
59
 
53
60
  options = ramaze_options rescue {}
@@ -56,6 +63,13 @@ ramaze options.merge(:public_root => 'spec/ramaze/public')
56
63
  describe "Request" do
57
64
  behaves_like 'http'
58
65
 
66
+ it 'to_ivs' do
67
+ got = get('/to_ivs', 'foo' => 'a')
68
+ got.body.should == '@foo => a'
69
+ got = get('/to_ivs', 'bar' => 'b', 'foo' => 'c')
70
+ got.body.should == '@bar => b, @foo => c'
71
+ end
72
+
59
73
  describe "POST" do
60
74
  behaves_like 'http'
61
75
 
@@ -0,0 +1,107 @@
1
+ require 'spec/helper'
2
+
3
+ class MainController < Ramaze::Controller
4
+ def float(flt)
5
+ "Float: #{flt}"
6
+ end
7
+
8
+ def string(str)
9
+ "String: #{str}"
10
+ end
11
+
12
+ def price(p)
13
+ "Price: \$#{p}"
14
+ end
15
+
16
+ def sum(a, b)
17
+ a.to_i + b.to_i
18
+ end
19
+
20
+ def bar
21
+ 'this is bar'
22
+ end
23
+ end
24
+
25
+ describe 'Route' do
26
+ behaves_like 'http'
27
+ ramaze
28
+ @route = Ramaze::Route
29
+
30
+ it 'should take custom lambda routers' do
31
+ @route['string'] = lambda {|path, req| path if path =~ %r!^/string! }
32
+ @route['string'].class.should == Proc
33
+
34
+ @route['calc sum'] = lambda do |path, req|
35
+ if req[:do_calc]
36
+ lval, rval = req[:a, :b]
37
+ rval = rval.to_i * 10
38
+ "/sum/#{lval}/#{rval}"
39
+ end
40
+ end
41
+
42
+ Ramaze::Route('foo') do |path, req|
43
+ '/bar' if req[:bar]
44
+ end
45
+ end
46
+
47
+ it 'should be possible to define simple string routes' do
48
+ @route['/foobar'] = '/bar'
49
+ end
50
+
51
+ it 'should be possible to define routes' do
52
+ @route[%r!^/(\d+\.\d{2})$!] = "/price/%.2f"
53
+ @route[%r!^/(\d+\.\d{2})$!].should == "/price/%.2f"
54
+
55
+ @route[%r!^/(\d+\.\d+)!] = "/float/%.3f"
56
+ @route[%r!^/(\d+\.\d+)!].should == "/float/%.3f"
57
+
58
+ @route[%r!^/(\w+)!] = "/string/%s"
59
+ @route[%r!^/(\w+)!].should == "/string/%s"
60
+ end
61
+
62
+ it 'should be used - /float' do
63
+ r = get('/123.123')
64
+ r.status.should == 200
65
+ r.body.should == 'Float: 123.123'
66
+ end
67
+
68
+ it 'should be used - /string' do
69
+ r = get('/foo')
70
+ r.status.should == 200
71
+ r.body.should == 'String: foo'
72
+ end
73
+
74
+ it 'should use %.3f' do
75
+ r = get('/123.123456')
76
+ r.status.should == 200
77
+ r.body.should == 'Float: 123.123'
78
+ end
79
+
80
+ it 'should resolve in the order added' do
81
+ r = get('/12.84')
82
+ r.status.should == 200
83
+ r.body.should == 'Price: $12.84'
84
+ end
85
+
86
+ it 'should use lambda routers' do
87
+ r = get('/string/abc')
88
+ r.status.should == 200
89
+ r.body.should == 'String: abc'
90
+
91
+ r = get('/', 'do_calc=1&a=2&b=6')
92
+ r.status.should == 200
93
+ r.body.should == '62'
94
+ end
95
+
96
+ it 'should support Route() with blocks' do
97
+ r = get('/foo', 'bar=1')
98
+ r.status.should == 200
99
+ r.body.should == 'this is bar'
100
+ end
101
+
102
+ it 'should support string route translations' do
103
+ r = get('/foobar')
104
+ r.status.should == 200
105
+ r.body.should == 'this is bar'
106
+ end
107
+ end
@@ -4,6 +4,8 @@
4
4
  require 'spec/helper'
5
5
 
6
6
  class TCSessionController < Ramaze::Controller
7
+ map '/'
8
+
7
9
  def index
8
10
  session.inspect
9
11
  end
@@ -29,7 +31,7 @@ end
29
31
 
30
32
  describe "Session" do
31
33
  behaves_like 'http', 'browser'
32
- ramaze(:adapter => :webrick, :mapping => {'/' => TCSessionController})
34
+ ramaze :adapter => :webrick
33
35
 
34
36
  { :MemoryCache => :memory,
35
37
  :YAMLStoreCache => :yaml_store,
@@ -42,7 +44,7 @@ describe "Session" do
42
44
  next
43
45
  end
44
46
 
45
- describe cache.to_s do
47
+ describe cache do
46
48
 
47
49
  Ramaze::Global.cache = cache
48
50
  Thread.main[:session_cache] = nil
@@ -9,14 +9,20 @@ class TCTemplateAmritaController < Ramaze::Controller
9
9
  template_root __DIR__/:amrita2
10
10
  engine :Amrita2
11
11
 
12
- private
12
+ def internal
13
+ @data = { :hello => "hello world" }
14
+ "<h1 am:src='hello' />"
15
+ end
13
16
 
14
- def title
15
- "hello world"
17
+ def external
18
+ @data = {
19
+ :title => "hello world",
20
+ :body => "Amrita2 is an HTML template library for Ruby"
21
+ }
16
22
  end
17
23
 
18
- def body
19
- "Amrita2 is an HTML template library for Ruby"
24
+ def sum
25
+ @data = { :one => 1, :two => 2 }
20
26
  end
21
27
  end
22
28
 
@@ -24,8 +30,12 @@ describe "Simply calling" do
24
30
  behaves_like 'http'
25
31
  ramaze(:mapping => {'/' => TCTemplateAmritaController})
26
32
 
27
- it "should respond to /data" do
28
- get('/data').body.strip.should ==
33
+ it "should respond to /internal" do
34
+ get('/internal').body.strip.should == "<h1>hello world</h1>"
35
+ end
36
+
37
+ it "should respond to /external" do
38
+ get('/external').body.strip.should ==
29
39
  %{<html>
30
40
  <body>
31
41
  <h1>hello world</h1>
@@ -33,4 +43,8 @@ describe "Simply calling" do
33
43
  </body>
34
44
  </html>}
35
45
  end
46
+
47
+ it "should respond to /sum" do
48
+ get('/sum').body.strip.should == "1 + 2 = 3"
49
+ end
36
50
  end
@@ -0,0 +1,6 @@
1
+ <html>
2
+ <body>
3
+ <h1 am:src='title' />
4
+ <p am:src='body' />
5
+ </body>
6
+ </html>
@@ -1 +1 @@
1
- <div id="sum" />
1
+ <<:one>> + <<:two>> = <%= $_[:one] + $_[:two] %>
@@ -0,0 +1,25 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+
6
+ class TCTemplateController < Ramaze::Controller
7
+ map :/
8
+ template_root __DIR__/:ezamar
9
+ engine :Bijou
10
+
11
+ def hello
12
+ "<% planet = 'World' %>
13
+ Hello, <%= planet %>!"
14
+ end
15
+ end
16
+
17
+
18
+ describe "Bijou" do
19
+ behaves_like 'http'
20
+ ramaze
21
+
22
+ it "hello world" do
23
+ get('/hello').body.strip.should == 'Hello, World!'
24
+ end
25
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec/helper'
2
+
3
+ spec_require 'builder'
4
+
5
+ class TCTemplateBuilder < Ramaze::Controller
6
+ template_root 'spec/ramaze/template/builder'
7
+ map '/'
8
+ engine :Builder
9
+
10
+ def external
11
+ @frameworks = { 'ramaze' => 'ruby',
12
+ 'symfony' => 'php',
13
+ 'django' => 'python' }
14
+ end
15
+
16
+ def internal
17
+ external
18
+ %q[
19
+ @frameworks.each do |name, lang|
20
+ xml.framework {|f| f.name(name); f.language(lang) }
21
+ end
22
+ ]
23
+ end
24
+ end
25
+
26
+ describe "Builder" do
27
+ behaves_like 'http'
28
+ ramaze
29
+
30
+ @xml = "<framework>
31
+ <name>symfony</name>
32
+ <language>php</language>
33
+ </framework>
34
+ <framework>
35
+ <name>ramaze</name>
36
+ <language>ruby</language>
37
+ </framework>
38
+ <framework>
39
+ <name>django</name>
40
+ <language>python</language>
41
+ </framework>"
42
+
43
+ @xml.gsub!(/\s/,'')
44
+
45
+ it "should render xml from files" do
46
+ r = get('/external')
47
+ r.status.should == 200
48
+ r.body.gsub(/\s/,'').should == @xml
49
+ r.headers['Content-Type'].should == 'application/xml'
50
+ end
51
+
52
+ it 'should render internal templates' do
53
+ get('/internal').body.gsub(/\s/,'').should == @xml
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ @frameworks.each do |name, lang|
2
+ xml.framework {|f| f.name(name); f.language(lang) }
3
+ end
@@ -20,6 +20,17 @@ class TCTemplateHamlController < Ramaze::Controller
20
20
  end
21
21
  end
22
22
 
23
+ class TCRamazeLocals < Ramaze::Controller
24
+ map '/test'
25
+ template_root __DIR__/:haml
26
+
27
+ helper :partial
28
+
29
+ def render_with_locals
30
+ render_template 'locals.haml', :abc => 'def'
31
+ end
32
+ end
33
+
23
34
  class TCTemplateHamlLocalsController < Ramaze::Controller
24
35
  map '/locals'
25
36
  engine :Haml
@@ -55,6 +66,10 @@ describe "Haml templates" do
55
66
  </div>}
56
67
  end
57
68
 
69
+ it 'should support locals via render_template' do
70
+ get('/test/render_with_locals').body.strip.should == 'def'
71
+ end
72
+
58
73
  it "should have access to locals defined" do
59
74
  get('/locals/test').body.strip.should == 'abcdefg'
60
75
  end
@@ -0,0 +1 @@
1
+ = abc
@@ -0,0 +1,38 @@
1
+ require 'spec/helper'
2
+
3
+ spec_require 'erubis'
4
+ spec_require 'redcloth'
5
+
6
+ class TCTemplateRedClothController < Ramaze::Controller
7
+ template_root __DIR__/:redcloth
8
+ engine :RedCloth
9
+
10
+ def index
11
+ 'RedCloth Index'
12
+ end
13
+
14
+ def external
15
+ @num = 1
16
+ end
17
+
18
+ def internal
19
+ "h2. <%= 1 + 1 %>"
20
+ end
21
+ end
22
+
23
+ describe "RedCloth templates" do
24
+ behaves_like 'http'
25
+ ramaze(:mapping => {'/' => TCTemplateRedClothController})
26
+
27
+ it "index" do
28
+ get('/').body.should == '<p>RedCloth Index</p>'
29
+ end
30
+
31
+ it "external" do
32
+ get('/external').body.should == '<h1>1</h1>'
33
+ end
34
+
35
+ it "internal" do
36
+ get('/internal').body.should == "<h2>2</h2>"
37
+ end
38
+ end