nitro 0.14.0 → 0.15.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.
Files changed (60) hide show
  1. data/CHANGELOG +117 -0
  2. data/INSTALL +4 -0
  3. data/README +30 -31
  4. data/Rakefile +2 -2
  5. data/bin/nitro +10 -1
  6. data/bin/{new_app.rb → nitrogen} +12 -22
  7. data/doc/AUTHORS +4 -13
  8. data/doc/RELEASES +98 -0
  9. data/examples/ajax/run.rb +1 -3
  10. data/examples/blog/cache/entriesadmin +1 -1
  11. data/examples/blog/conf/locales/de.yml +4 -0
  12. data/examples/blog/conf/locales/en.yml +4 -0
  13. data/examples/blog/public/fcgi.rb +2 -3
  14. data/examples/blog/run.rb +10 -5
  15. data/examples/blog/src/controller.rb +21 -10
  16. data/examples/blog/src/mailer.rb +1 -1
  17. data/examples/blog/src/views/index.xhtml +2 -2
  18. data/examples/blog/src/xsl/style.xsl +6 -1
  19. data/examples/flash/run.rb +1 -3
  20. data/examples/no_xsl_blog/conf/locales/de.yml +4 -0
  21. data/examples/no_xsl_blog/conf/locales/en.yml +4 -0
  22. data/examples/no_xsl_blog/lib/blog/controller.rb +10 -0
  23. data/examples/no_xsl_blog/lib/blog/template.rb +4 -0
  24. data/examples/no_xsl_blog/public/fcgi.rb +2 -1
  25. data/examples/no_xsl_blog/public/index.xhtml +1 -1
  26. data/examples/no_xsl_blog/run.rb +8 -4
  27. data/examples/tiny/public/deep/dir/hello.xhtml +1 -0
  28. data/examples/tiny/public/fcgi.rb +2 -1
  29. data/examples/tiny/public/index.xhtml +5 -2
  30. data/examples/tiny/run.rb +1 -3
  31. data/examples/wee_style/run.rb +1 -3
  32. data/examples/why_wiki/run.rb +1 -3
  33. data/lib/nitro.rb +5 -2
  34. data/lib/nitro/builders/form.rb +8 -3
  35. data/lib/nitro/caching/stores.rb +3 -3
  36. data/lib/nitro/controller.rb +26 -6
  37. data/lib/nitro/dispatcher.rb +21 -13
  38. data/lib/nitro/environment.rb +23 -0
  39. data/lib/nitro/filters.rb +10 -8
  40. data/lib/nitro/localization.rb +127 -13
  41. data/lib/nitro/part.rb +24 -0
  42. data/lib/nitro/render.rb +19 -15
  43. data/lib/nitro/runner.rb +2 -1
  44. data/lib/nitro/scaffold.rb +69 -17
  45. data/lib/nitro/shaders.rb +54 -83
  46. data/lib/nitro/template.rb +7 -1
  47. data/proto/README +11 -0
  48. data/proto/conf/apache.conf +51 -0
  49. data/proto/conf/lhttpd.conf +107 -0
  50. data/proto/public/error.xhtml +56 -0
  51. data/proto/public/fcgi.rb +5 -0
  52. data/proto/public/index.xhtml +83 -0
  53. data/proto/public/js/ajax.js +63 -0
  54. data/proto/public/media/nitro.png +0 -0
  55. data/proto/run.rb +11 -0
  56. data/test/nitro/tc_controller.rb +1 -4
  57. data/test/nitro/tc_dispatcher.rb +8 -0
  58. data/test/nitro/tc_localization.rb +49 -0
  59. metadata +34 -6
  60. data/bin/new_form.rb +0 -54
data/examples/ajax/run.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 301 2005-03-16 13:24:25Z gmosx $
4
-
5
- Dir.chdir File.dirname(__FILE__)
3
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
6
4
 
7
5
  require 'nitro'
8
6
  require 'controller'
@@ -1,4 +1,4 @@
1
- <div class="entry"><h2 class="date">March 28, 2005</h2><div class="post"><h3 class="title">kokok</h3>lalal<div class="footer">posted by George Moschovitis at <a href="view_entry/14">11:32 AM</a> | <a href="view_entry/14#comments">1 comments</a>.</div></div></div><div class="entry"><h2 class="date">March 28, 2005</h2><div class="post"><h3 class="title">UNCACHE</h3>it bastard<div class="footer">posted by at <a href="view_entry/13">11:31 AM</a> | <a href="view_entry/13#comments">0 comments</a>.</div></div></div><div class="entry"><h2 class="date">March 28, 2005</h2><div class="post"><h3 class="title">UNCACHE</h3>it bastard<div class="footer">posted by George Moschovitis at <a href="view_entry/12">11:26 AM</a> | <a href="view_entry/12#comments">0 comments</a>.</div></div></div><div class="pager">
1
+ <div class="entry"><h2 class="date">March 28, 2005</h2><div class="post"><h3 class="title">kokok</h3>lalal<div class="footer">posted by George Moschovitis at <a href="view_entry/14">11:32 AM</a> | <a href="view_entry/14#comments">4 comments</a>.</div></div></div><div class="entry"><h2 class="date">March 28, 2005</h2><div class="post"><h3 class="title">UNCACHE</h3>it bastard<div class="footer">posted by at <a href="view_entry/13">11:31 AM</a> | <a href="view_entry/13#comments">0 comments</a>.</div></div></div><div class="entry"><h2 class="date">March 28, 2005</h2><div class="post"><h3 class="title">UNCACHE</h3>it bastard<div class="footer">posted by George Moschovitis at <a href="view_entry/12">11:26 AM</a> | <a href="view_entry/12#comments">0 comments</a>.</div></div></div><div class="pager">
2
2
  <div class="last"><a href="/?__pgentries=4">Last</a></div>
3
3
  <div class="next"><a href="/?__pgentries=2">Next</a></div>
4
4
  <ul>
@@ -0,0 +1,4 @@
1
+ ---
2
+ posted by: gesendet durch
3
+ Language: Sprache
4
+ :see_you: Auf wieder sehen
@@ -0,0 +1,4 @@
1
+ ---
2
+ posted by: posted by
3
+ Language: Language
4
+ :see_you: See you
@@ -1,6 +1,5 @@
1
1
  #!/usr/local/bin/ruby
2
2
 
3
- puts %x{pwd}
4
-
5
3
  ENV['NITRO_INVOKE'] = 'fcgi_proc'
6
- require File.join(File.dirname(__FILE__), '..', 'run.rb')
4
+ $0 = File.join(File.dirname(__FILE__), '..', 'run.rb')
5
+ require $0
data/examples/blog/run.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 323 2005-03-24 09:43:52Z gmosx $
4
-
5
- Dir.chdir File.dirname(__FILE__); $:.unshift 'src'
3
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
6
4
 
7
5
  require 'nitro'
8
6
  require 'og'
@@ -16,6 +14,11 @@ include N
16
14
  # Session.store_type = :drb
17
15
  Caching::Fragments.store = Caching::FileStore.new
18
16
 
17
+ Localization.add(
18
+ :en => 'conf/locales/en.yml',
19
+ :de => 'conf/locales/de.yml'
20
+ )
21
+
19
22
  runner = Runner.new.setup
20
23
 
21
24
  db = Og::Database.new(
@@ -30,8 +33,10 @@ db = Og::Database.new(
30
33
  )
31
34
 
32
35
  Rendering.shader = XSLTShader.new('src/xsl/style.xsl',
33
- RubyShader.new(
34
- CompressShader.new
36
+ LocalizationShader.new(
37
+ RubyShader.new(
38
+ CompressShader.new
39
+ )
35
40
  )
36
41
  )
37
42
 
@@ -1,9 +1,10 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: controller.rb 326 2005-03-28 11:07:17Z gmosx $
3
+ # $Id: controller.rb 335 2005-03-31 14:02:02Z gmosx $
4
4
 
5
5
  require 'nitro/controller'
6
6
  require 'nitro/ui/pager'
7
+ require 'nitro/localization'
7
8
 
8
9
  require 'mailer'
9
10
  require 'models/blog'
@@ -11,20 +12,20 @@ require 'models/blog'
11
12
  # The controller of the Blog part.
12
13
 
13
14
  class BlogController < N::Controller
14
-
15
+
16
+ before_filter LocalizationFilter
15
17
  before_filter :get_errors
16
- after_filter :cache_invalidator, :only => [ :new_entry, :new_comment ]
18
+ after_filter :cache_invalidate, :only => [ :new_entry, :new_comment ]
17
19
 
18
20
  scaffold BlogEntry, :name => 'entry', :index => true # , :nosuffix => true
19
21
  scaffold Comment
20
22
 
21
23
  # as an example of full page caching.
22
24
  # cache_output :index
23
-
24
- def initialize(context)
25
- super
26
- @template_root = 'src/views'
27
- end
25
+
26
+ # Override the template root for this controller.
27
+
28
+ @template_root = 'src/views'
28
29
 
29
30
  def list_entry
30
31
  @pager = UI::Pager.new('entries', request, 3)
@@ -99,7 +100,17 @@ class BlogController < N::Controller
99
100
  session.delete(:owner)
100
101
  session.delete(:username)
101
102
  end
102
-
103
+
104
+ def toggle_locale
105
+ cache_invalidate
106
+
107
+ if session[:LOCALE] == :de
108
+ session[:LOCALE] = :en
109
+ else
110
+ session[:LOCALE] = :de
111
+ end
112
+ end
113
+
103
114
  private
104
115
 
105
116
  # A helper prefilter, autocleans session errors.
@@ -114,7 +125,7 @@ private
114
125
 
115
126
  # Invalidates the cache.
116
127
 
117
- def cache_invalidator
128
+ def cache_invalidate
118
129
  # gmosx: will be improved.
119
130
  expire_fragment('entriesadmin')
120
131
  expire_fragment('entriesadmintrue')
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: mailer.rb 334 2005-03-29 11:44:38Z gmosx $
4
4
 
5
5
  require 'nitro/mail'
6
6
 
@@ -14,7 +14,7 @@
14
14
  <h3 class="title">#{entry.title}</h3>
15
15
  #{entry.body}
16
16
  <div class="footer">
17
- posted by #{entry.author} at <a href="#{entry.view_uri}">#{entry.create_time.strftime('%R %p')}</a> |
17
+ [[posted by]] #{entry.author} at <a href="#{entry.view_uri}">#{entry.create_time.strftime('%R %p')}</a> |
18
18
  <a href="#{entry.view_uri}#comments">#{entry.comments_count} comments</a>.
19
19
  <?r if session[:owner] ?>
20
20
  [<a href="del_entry?oid=#{entry.oid}">del</a>]
@@ -36,7 +36,7 @@
36
36
 
37
37
  <?r end ?>
38
38
 
39
- <?r if session[:owner] ?>
39
+ <?r if session[:owner] ?>
40
40
  <render href="entry_form" />
41
41
  <?r end ?>
42
42
 
@@ -5,7 +5,7 @@ A Simple Shader
5
5
 
6
6
  * George Moschovitis <gm@navel.gr>
7
7
  (c) 2004-2005 Navel, all rights reserved.
8
- $Id: style.xsl 313 2005-03-16 19:18:09Z gmosx $
8
+ $Id: style.xsl 335 2005-03-31 14:02:02Z gmosx $
9
9
  -->
10
10
 
11
11
  <!DOCTYPE shader
@@ -88,11 +88,16 @@ $Id: style.xsl 313 2005-03-16 19:18:09Z gmosx $
88
88
  This is a simple blog powered by <a href="http://www.navel.gr/nitro">
89
89
  Nitro</a> Web Engine. Have a look at the source code and enjoy the
90
90
  power of Ruby.
91
+
91
92
  <ruby>unless session[:owner]</ruby>
92
93
  <p><a href="login">Login</a> as owner.</p>
93
94
  <ruby>else</ruby>
94
95
  <p><a href="logout">Logout</a>.</p>
95
96
  <ruby>end</ruby>
97
+
98
+ <p>
99
+ <b>[[Language]]</b>: #{session[:LOCALE] || :en} (<a href="toggle_locale">change</a>)
100
+ </p>
96
101
 
97
102
  <xsl:apply-templates select="x:cell[@id='side']" />
98
103
 
@@ -1,8 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 266 2005-02-28 14:50:48Z gmosx $
4
-
5
- Dir.chdir File.dirname(__FILE__)
3
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
6
4
 
7
5
  require 'nitro'
8
6
 
@@ -0,0 +1,4 @@
1
+ ---
2
+ posted by: gesendet durch
3
+ Language: Sprache
4
+ :see_you: Auf wieder sehen
@@ -0,0 +1,4 @@
1
+ ---
2
+ posted by: posted by
3
+ Language: Language
4
+ :see_you: See you
@@ -5,6 +5,7 @@
5
5
  require 'nitro/controller'
6
6
  require 'nitro/builders/rss'
7
7
  require 'nitro/ui/pager'
8
+ require 'nitro/localization'
8
9
 
9
10
  require 'lib/blog/model'
10
11
  require 'lib/blog/template'
@@ -14,6 +15,7 @@ require 'lib/blog/template'
14
15
  class BlogController < N::Controller
15
16
  include BlogTemplate
16
17
 
18
+ before_filter LocalizationFilter
17
19
  before_filter :get_errors
18
20
  # after_filter :cache
19
21
 
@@ -78,6 +80,14 @@ class BlogController < N::Controller
78
80
  session.delete(:username)
79
81
  end
80
82
 
83
+ def toggle_locale
84
+ if session[:LOCALE] == :de
85
+ session[:LOCALE] = :en
86
+ else
87
+ session[:LOCALE] = :de
88
+ end
89
+ end
90
+
81
91
  private
82
92
 
83
93
  # A helper prefilter, autocleans session errors.
@@ -93,6 +93,10 @@ module BlogTemplate
93
93
  <p><a href="logout">Logout</a>.</p>
94
94
  } end + %{
95
95
 
96
+ <p>
97
+ <b>Language</b>: #{session[:LOCALE] || :en} (<a href="toggle_locale">change</a>)
98
+ </p>
99
+
96
100
  <h2>Linkage</h2>
97
101
  <ul>
98
102
  <li><a target="_new" href="http://www.navel.gr">Navel Ltd</a></li>
@@ -1,4 +1,5 @@
1
1
  #!/usr/local/bin/ruby
2
2
 
3
3
  ENV['NITRO_INVOKE'] = 'fcgi_proc'
4
- require File.join(File.dirname(__FILE__), '..', 'run.rb')
4
+ $0 = File.join(File.dirname(__FILE__), '..', 'run.rb')
5
+ require $0
@@ -12,7 +12,7 @@
12
12
  <h3 class="title">#{entry.title}</h3>
13
13
  #{entry.body}
14
14
  <div class="footer">
15
- posted by #{entry.author} at <a href="#{entry.view_uri}">#{entry.create_time.strftime('%R %p')}</a> |
15
+ [[posted by]] #{entry.author} at <a href="#{entry.view_uri}">#{entry.create_time.strftime('%R %p')}</a> |
16
16
  <a href="#{entry.view_uri}#comments">#{entry.comments_count} comments</a>.
17
17
  <?r if session[:owner] ?>
18
18
  [<a href="del_entry?oid=#{entry.oid}">del</a>]
@@ -1,16 +1,20 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 266 2005-02-28 14:50:48Z gmosx $
4
-
5
- Dir.chdir File.dirname(__FILE__)
3
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
6
4
 
7
5
  require 'nitro'; include N
8
6
  require 'og'
9
7
 
8
+ require 'nitro/localization'
10
9
  require 'lib/blog'
11
10
 
12
11
  runner = Runner.new.setup
13
12
 
13
+ Localization.add(
14
+ :en => 'conf/locales/en.yml',
15
+ :de => 'conf/locales/de.yml'
16
+ )
17
+
14
18
  db = Og::Database.new(
15
19
  # :address => 'localhost',
16
20
  :adapter => 'mysql',
@@ -25,7 +29,7 @@ db = Og::Database.new(
25
29
 
26
30
  dispatcher = Dispatcher.new(BlogController, :xml => 'text/xml')
27
31
 
28
- Rendering.shader = RubyShader.new(CompressShader.new)
32
+ Rendering.shader = LocalizationShader.new(RubyShader.new(CompressShader.new))
29
33
 
30
34
  conf = Conf.new(
31
35
  :name => 'Blog sans XSLT',
@@ -0,0 +1 @@
1
+ <b>This is another include (deep).</b>
@@ -1,4 +1,5 @@
1
1
  #!/usr/local/bin/ruby
2
2
 
3
3
  ENV['NITRO_INVOKE'] = 'fcgi_proc'
4
- require File.join(File.dirname(__FILE__), '..', 'run.rb')
4
+ $0 = File.join(File.dirname(__FILE__), '..', 'run.rb')
5
+ require $0
@@ -33,16 +33,19 @@
33
33
  Counter: #{session[:counter]}
34
34
  </p>
35
35
  <render href="include" />
36
+ <p>
37
+ </p>
38
+ <render href="deep/dir/hello" />
36
39
  <p>
37
40
  <h3>Upload a picture</h3>
38
41
 
39
42
  <form action="upload" method="post" enctype="multipart/form-data">
40
43
  <p>
41
- <b>Title:<b><br />
44
+ <b>Title:</b><br />
42
45
  <input type="text" name="title" />
43
46
  </p>
44
47
  <p>
45
- <b>File:<b><br />
48
+ <b>File:</b><br />
46
49
  <input type="file" name="file" />
47
50
  </p>
48
51
  <input type="submit" value="Upload" />
data/examples/tiny/run.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 300 2005-03-16 13:23:10Z gmosx $
4
-
5
- Dir.chdir File.dirname(__FILE__)
3
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
6
4
 
7
5
  require 'nitro'
8
6
 
@@ -1,8 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 266 2005-02-28 14:50:48Z gmosx $
4
-
5
- Dir.chdir File.dirname(__FILE__)
3
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
6
4
 
7
5
  require 'nitro'; include N
8
6
  require 'nitro/adapters/webrick'
@@ -1,7 +1,5 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
- # $Id: run.rb 270 2005-03-07 17:52:16Z gmosx $
3
-
4
- Dir.chdir File.dirname(__FILE__)
2
+ # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
5
3
 
6
4
  require 'cgi'
7
5
  require 'redcloth'
data/lib/nitro.rb CHANGED
@@ -12,7 +12,7 @@
12
12
  #
13
13
  # * George Moschovitis <gm@navel.gr>
14
14
  # (c) 2004-2005 Navel, all rights reserved.
15
- # $Id: nitro.rb 326 2005-03-28 11:07:17Z gmosx $
15
+ # $Id: nitro.rb 340 2005-04-04 08:26:58Z gmosx $
16
16
 
17
17
  require 'glue'
18
18
  require 'glue/logger'
@@ -23,7 +23,7 @@ module Nitro
23
23
 
24
24
  # The version.
25
25
 
26
- Version = '0.14.0'
26
+ Version = '0.15.0'
27
27
 
28
28
  # Library path.
29
29
 
@@ -39,3 +39,6 @@ require 'nitro/render'
39
39
  require 'nitro/conf'
40
40
  require 'nitro/runner'
41
41
  require 'nitro/component'
42
+ require 'nitro/part'
43
+
44
+ require 'nitro/environment' unless $NITRO_NO_ENVIRONMENT
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: form.rb 266 2005-02-28 14:50:48Z gmosx $
3
+ # $Id: form.rb 335 2005-03-31 14:02:02Z gmosx $
4
4
 
5
5
  require 'glue/hash'
6
6
  require 'nitro/markup'
@@ -67,9 +67,14 @@ module FormBuilderMixin
67
67
  <input type="checkbox" id="#{p.name}" name="#{p.name}" />
68
68
  </dd>
69
69
  }
70
- =begin
71
70
  elsif p.klass.ancestors.include?(Time)
72
- return %|#\{@#{p.symbol} ? "'#\{Og::Utils.timestamp(@#{p.symbol})\}'" : 'NULL'\}|
71
+ str << %{
72
+ <dt><label for="#{p.name}">#{p.name}</label></dt>
73
+ <dd>
74
+ <input type="text" id="#{p.name}" name="#{p.name}" value="#{obj.send(p.symbol)}" />
75
+ </dd>
76
+ }
77
+ =begin
73
78
  elsif p.klass.ancestors.include?(Date)
74
79
  return %|#\{@#{p.symbol} ? "'#\{Og::Utils.date(@#{p.symbol})\}'" : 'NULL'\}|
75
80
  else
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: stores.rb 326 2005-03-28 11:07:17Z gmosx $
3
+ # $Id: stores.rb 335 2005-03-31 14:02:02Z gmosx $
4
4
 
5
5
  require 'fileutils'
6
6
 
@@ -36,8 +36,8 @@ module Caching
36
36
  class FileStore
37
37
  cattr_accessor :cache_root, 'cache'
38
38
 
39
- def initialize(cache_root = @@cache_root)
40
- @cache_root = FileStore.cache_root
39
+ def initialize(cache_root = FileStore.cache_root)
40
+ @cache_root = cache_root
41
41
  end
42
42
 
43
43
  def read(name, options = {})