nitro 0.15.0 → 0.16.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 (111) hide show
  1. data/CHANGELOG +218 -0
  2. data/INSTALL +3 -0
  3. data/README +4 -2
  4. data/Rakefile +150 -8
  5. data/benchmark/bench.rb +1 -1
  6. data/doc/AUTHORS +2 -8
  7. data/doc/RELEASES +63 -1
  8. data/examples/ajax/controller.rb +2 -2
  9. data/examples/ajax/public/index.xhtml +3 -1
  10. data/examples/ajax/run.rb +3 -3
  11. data/examples/blog/README +8 -0
  12. data/examples/blog/cache/entriesadmintrue +3 -0
  13. data/examples/blog/run.rb +38 -40
  14. data/examples/blog/src/blog.rb +2 -1
  15. data/examples/blog/src/controller.rb +40 -20
  16. data/examples/blog/src/mailer.rb +2 -2
  17. data/examples/blog/src/models/blog.rb +2 -1
  18. data/examples/blog/src/models/content.rb +4 -33
  19. data/examples/blog/src/views/error.xhtml +1 -1
  20. data/examples/blog/src/xsl/style.xsl +1 -1
  21. data/examples/blog/test/tc_blog.rb +43 -0
  22. data/examples/flash/run.rb +2 -2
  23. data/examples/no_xsl_blog/lib/blog.rb +1 -1
  24. data/examples/no_xsl_blog/lib/blog/controller.rb +26 -17
  25. data/examples/no_xsl_blog/lib/blog/model.rb +3 -3
  26. data/examples/no_xsl_blog/lib/blog/template.rb +1 -1
  27. data/examples/no_xsl_blog/lib/content.rb +3 -7
  28. data/examples/no_xsl_blog/run.rb +34 -34
  29. data/examples/tiny/public/deep/dir/hello.xhtml +2 -0
  30. data/examples/tiny/run.rb +2 -2
  31. data/examples/wee_style/run.rb +5 -3
  32. data/examples/why_wiki/run.rb +5 -3
  33. data/install.rb +1 -1
  34. data/lib/nitro.rb +10 -9
  35. data/lib/nitro/adapters/cgi.rb +27 -2
  36. data/lib/nitro/adapters/fastcgi.rb +6 -2
  37. data/lib/nitro/adapters/webrick.rb +11 -9
  38. data/lib/nitro/buffering.rb +2 -2
  39. data/lib/nitro/builders/atom.rb +78 -0
  40. data/lib/nitro/builders/form.rb +2 -2
  41. data/lib/nitro/builders/rss.rb +4 -4
  42. data/lib/nitro/builders/table.rb +2 -2
  43. data/lib/nitro/builders/xhtml.rb +5 -8
  44. data/lib/nitro/builders/xml.rb +38 -14
  45. data/lib/nitro/caching.rb +2 -2
  46. data/lib/nitro/caching/actions.rb +2 -2
  47. data/lib/nitro/caching/fragments.rb +2 -2
  48. data/lib/nitro/caching/invalidation.rb +2 -28
  49. data/lib/nitro/caching/output.rb +3 -3
  50. data/lib/nitro/caching/stores.rb +4 -4
  51. data/lib/nitro/conf.rb +11 -6
  52. data/lib/nitro/context.rb +2 -2
  53. data/lib/nitro/controller.rb +12 -7
  54. data/lib/nitro/cookie.rb +2 -2
  55. data/lib/nitro/dispatcher.rb +33 -40
  56. data/lib/nitro/environment.rb +1 -1
  57. data/lib/nitro/localization.rb +5 -7
  58. data/lib/nitro/mail.rb +2 -2
  59. data/lib/nitro/markup.rb +5 -5
  60. data/lib/nitro/output.rb +2 -2
  61. data/lib/nitro/part.rb +8 -5
  62. data/lib/nitro/render.rb +46 -45
  63. data/lib/nitro/request.rb +7 -6
  64. data/lib/nitro/response.rb +14 -5
  65. data/lib/nitro/routing.rb +2 -2
  66. data/lib/nitro/runner.rb +57 -17
  67. data/lib/nitro/scaffold.rb +14 -8
  68. data/lib/nitro/session.rb +7 -4
  69. data/lib/nitro/session/drb.rb +2 -2
  70. data/lib/nitro/session/drbserver.rb +2 -2
  71. data/lib/nitro/session/memory.rb +2 -2
  72. data/lib/nitro/shaders.rb +8 -7
  73. data/lib/nitro/simple.rb +4 -1
  74. data/lib/nitro/template.rb +8 -8
  75. data/lib/nitro/testing.rb +6 -0
  76. data/lib/nitro/testing/assertions.rb +102 -0
  77. data/lib/nitro/testing/context.rb +52 -0
  78. data/lib/nitro/testing/testcase.rb +55 -0
  79. data/lib/nitro/ui/pager.rb +3 -3
  80. data/lib/nitro/ui/popup.rb +8 -13
  81. data/lib/nitro/ui/tabs.rb +4 -10
  82. data/lib/nitro/uri.rb +7 -7
  83. data/proto/doc/README +1 -0
  84. data/proto/public/cgi.rb +5 -0
  85. data/proto/run.rb +2 -4
  86. data/test/nitro/adapters/tc_cgi.rb +1 -1
  87. data/test/nitro/adapters/tc_webrick.rb +1 -2
  88. data/test/nitro/builders/tc_atom.rb +26 -0
  89. data/test/nitro/builders/tc_rss.rb +3 -2
  90. data/test/nitro/builders/tc_table.rb +1 -1
  91. data/test/nitro/builders/tc_xhtml.rb +4 -3
  92. data/test/nitro/builders/tc_xml.rb +7 -7
  93. data/test/nitro/tc_context.rb +1 -1
  94. data/test/nitro/tc_controller.rb +5 -3
  95. data/test/nitro/tc_dispatcher.rb +19 -18
  96. data/test/nitro/tc_localization.rb +1 -1
  97. data/test/nitro/tc_mail.rb +1 -1
  98. data/test/nitro/tc_session.rb +1 -1
  99. data/test/nitro/tc_template.rb +1 -1
  100. data/test/nitro/tc_uri.rb +3 -4
  101. data/test/nitro/ui/tc_pager.rb +7 -7
  102. data/test/public/blog/inc1.xhtml +2 -0
  103. data/test/public/blog/inc2.xhtml +1 -0
  104. data/test/public/blog/list.xhtml +3 -0
  105. metadata +180 -203
  106. data/examples/blog/cache/entriesadmin +0 -12
  107. data/lib/nitro/cluster.rb +0 -218
  108. data/lib/nitro/component.rb +0 -15
  109. data/lib/nitro/filters.rb +0 -215
  110. data/lib/nitro/ui/date-select.rb +0 -69
  111. data/test/nitro/tc_filters.rb +0 -111
@@ -0,0 +1,43 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'src')
3
+
4
+ require 'test/unit'
5
+ require 'ostruct'
6
+
7
+ require 'og'
8
+ require 'glue/validation'
9
+ require 'nitro/testing'
10
+
11
+ require 'blog'
12
+
13
+ class TC_Blog < Test::Unit::TestCase # :nodoc: all
14
+ include Nitro
15
+
16
+ def setup
17
+ @conf = Conf.new(
18
+ :dispatcher => Dispatcher.new(BlogController, :xml => 'text/xml')
19
+ )
20
+ end
21
+
22
+ def test_context
23
+ handle(
24
+ '/login',
25
+ request = { 'password' => Blog.password }
26
+ )
27
+ assert_redirect
28
+ assert_session_has(:owner)
29
+ assert_session_equal(:username, 'George Moschovitis')
30
+ assert_has_cookie('nauth')
31
+ assert_has_no_cookie('wow')
32
+ assert_cookie_equal('nauth', 'just an example, not used :)')
33
+
34
+ ctx = handle(
35
+ '/login',
36
+ request = { 'password' => 'dunno' }
37
+ )
38
+ assert_no_redirect
39
+ assert_output_contains('Invalid password')
40
+ assert_status_ok
41
+ end
42
+
43
+ end
@@ -1,7 +1,7 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
3
+ # $Id: run.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'nitro'
6
6
 
7
- N::Runner.run(:host => '127.0.0.1', :port => 9999)
7
+ Nitro::Runner.run(:host => '127.0.0.1', :port => 9999)
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: blog.rb 223 2005-01-26 17:07:40Z gmosx $
3
+ # $Id: blog.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  # A simple blog to demonstrate the power of Nitro.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: controller.rb 21 2005-04-15 15:41:20Z gmosx $
4
4
 
5
5
  require 'nitro/controller'
6
6
  require 'nitro/builders/rss'
@@ -12,12 +12,11 @@ require 'lib/blog/template'
12
12
 
13
13
  # The controller of the Blog part.
14
14
 
15
- class BlogController < N::Controller
15
+ class BlogController < Nitro::Controller
16
16
  include BlogTemplate
17
17
 
18
- before_filter LocalizationFilter
19
- before_filter :get_errors
20
- # after_filter :cache
18
+ pre :get_errors
19
+ wrap Nitro::LocalizationAspect, :pre => :localize
21
20
 
22
21
  scaffold BlogEntry, :name => 'entry', :index => true
23
22
  scaffold Comment
@@ -40,12 +39,6 @@ class BlogController < N::Controller
40
39
  entry.save!
41
40
  end
42
41
 
43
- # example of generated view
44
-
45
- def list_entry__xml
46
- @out.build_rss(@entries, :description => 'Blog entries', :link => context.host_url)
47
- end
48
-
49
42
  def new_comment
50
43
  comment = request.fill(Comment.new)
51
44
 
@@ -57,12 +50,6 @@ class BlogController < N::Controller
57
50
  comment.save!
58
51
  end
59
52
 
60
- # example of generated view
61
-
62
- def list_comment__xml
63
- @out.build_rss(@comments, :description => 'Blog comments', :link => context.host_url)
64
- end
65
-
66
53
  def login
67
54
  if password = request['password']
68
55
  if password == Blog.password
@@ -109,3 +96,25 @@ private
109
96
  end
110
97
 
111
98
  end
99
+
100
+ # A special controller for that presents
101
+ # the blog content using XML (RSS). This controller
102
+ # reuses the BlogController actions but adds
103
+ # XML templates.
104
+
105
+ class XmlController < BlogController
106
+ @base = 'xml'
107
+ @content_type = 'text/xml'
108
+ @template_root = 'src/views/xml'
109
+
110
+ def list_entry
111
+ super
112
+ o.build_rss(@entries, :description => 'Blog entries', :link => context.host_url)
113
+ end
114
+
115
+ def list_comment
116
+ super
117
+ o.build_rss(@comments, :description => 'Blog comments', :link => context.host_url)
118
+ end
119
+ end
120
+
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: model.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'lib/content'
6
6
 
@@ -15,8 +15,8 @@ class Comment; end
15
15
  # the markup expanding/compacting for the body.
16
16
 
17
17
  module Common
18
- include N::BaseContent
19
- include N::CreateTime
18
+ include BaseContent
19
+ include CreateTime
20
20
 
21
21
  prop_accessor :author, String
22
22
  validate_value :body
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: template.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  # A simple templating system. This demonstrates how
6
6
  # easily you can replace the XSLT templating system
@@ -1,15 +1,13 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004 Navel, all rights reserved.
3
- # $Id: content.rb 297 2005-03-10 14:23:00Z gmosx $
3
+ # $Id: content.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'nitro/markup'
6
6
 
7
- module N
8
-
9
7
  # The foundamental Content Unit.
10
8
 
11
9
  module BaseContent
12
- include Markup
10
+ include Nitro::Markup
13
11
 
14
12
  prop_accessor :title, String
15
13
  prop_accessor :body, String, :markup => true, :ui => :textarea
@@ -36,7 +34,7 @@ end
36
34
  #++
37
35
 
38
36
  module Content
39
- include N::BaseContent
37
+ include BaseContent
40
38
  prop_accessor :name, String
41
39
  prop_accessor :ctime, Time
42
40
  prop_accessor :mtime, Time
@@ -51,5 +49,3 @@ end
51
49
  class Category
52
50
  include BaseContent
53
51
  end
54
-
55
- end
@@ -1,42 +1,42 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
3
+ # $Id: run.rb 21 2005-04-15 15:41:20Z gmosx $
4
4
 
5
- require 'nitro'; include N
5
+ require 'nitro'
6
6
  require 'og'
7
7
 
8
8
  require 'nitro/localization'
9
9
  require 'lib/blog'
10
10
 
11
- runner = Runner.new.setup
12
-
13
- Localization.add(
14
- :en => 'conf/locales/en.yml',
15
- :de => 'conf/locales/de.yml'
16
- )
17
-
18
- db = Og::Database.new(
19
- # :address => 'localhost',
20
- :adapter => 'mysql',
21
- # :backend => 'psql',
22
- :database => 'blog',
23
- :user => 'root',
24
- :password => 'navelrulez',
25
- # :user => 'postgres',
26
- # :password => 'navelrulez',
27
- :connection_count => 3
28
- )
29
-
30
- dispatcher = Dispatcher.new(BlogController, :xml => 'text/xml')
31
-
32
- Rendering.shader = LocalizationShader.new(RubyShader.new(CompressShader.new))
33
-
34
- conf = Conf.new(
35
- :name => 'Blog sans XSLT',
36
- :host => '127.0.0.1',
37
- :port => 9999,
38
- :dispatcher => dispatcher,
39
- :db => db
40
- )
41
-
42
- runner.run(conf)
11
+ include Nitro
12
+
13
+ Nitro.run do |conf|
14
+ Localization.add(
15
+ :en => 'conf/locales/en.yml',
16
+ :de => 'conf/locales/de.yml'
17
+ )
18
+
19
+ Og.connect(
20
+ # :address => 'localhost',
21
+ :adapter => 'mysql',
22
+ # :backend => 'psql',
23
+ :database => 'blog',
24
+ :user => 'root',
25
+ :password => 'navelrulez'
26
+ # :user => 'postgres',
27
+ # :password => 'navelrulez',
28
+ )
29
+
30
+ conf.dispatcher = Dispatcher.new(
31
+ :root => BlogController,
32
+ 'xml' => XmlController
33
+ )
34
+
35
+ Rendering.shader = LocalizationShader.new(RubyShader.new(CompressShader.new))
36
+
37
+ conf = Conf.new(
38
+ :name => 'Blog sans XSLT',
39
+ :host => '127.0.0.1',
40
+ :port => 9999
41
+ )
42
+ end
@@ -1 +1,3 @@
1
1
  <b>This is another include (deep).</b>
2
+ <br />
3
+ Included from #{@parent_action_name}
@@ -1,7 +1,7 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
3
+ # $Id: run.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'nitro'
6
6
 
7
- N::Runner.run(:host => '127.0.0.1', :port => 9999)
7
+ Nitro.run(:host => '127.0.0.1', :port => 9999)
@@ -1,11 +1,13 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
3
+ # $Id: run.rb 18 2005-04-15 09:17:08Z gmosx $
4
4
 
5
- require 'nitro'; include N
5
+ require 'nitro'
6
6
  require 'nitro/adapters/webrick'
7
7
 
8
- class Wee < Component
8
+ include Nitro
9
+
10
+ class Wee < Controller
9
11
 
10
12
  def index
11
13
  counter = session[:counter] || 0
@@ -1,13 +1,15 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
- # $Id: run.rb 339 2005-04-01 14:02:14Z gmosx $
2
+ # $Id: run.rb 18 2005-04-15 09:17:08Z gmosx $
3
3
 
4
4
  require 'cgi'
5
5
  require 'redcloth'
6
6
  require 'yaml/store'
7
7
 
8
- require 'nitro'; include N
8
+ require 'nitro'
9
9
  require 'nitro/adapters/webrick'
10
10
 
11
+ include Nitro
12
+
11
13
  # A simple wiki. A straight conversion of the redhanded.hobix.com
12
14
  # example. Original code by why the lucky stiff.
13
15
  # This is just a cool example, not the preffered way to write
@@ -15,7 +17,7 @@ require 'nitro/adapters/webrick'
15
17
 
16
18
  WIKI = YAML::Store.new('wiki.yml')
17
19
 
18
- class Wiki < Component
20
+ class Wiki < Controller
19
21
 
20
22
  def index
21
23
  @p = 'Home'
data/install.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # * George Moschovitis <gm@navel.gr>
4
4
  # (c) 2004-2005 Navel, all rights reserved.
5
- # $Id$
5
+ # $Id: install.rb 1 2005-04-11 11:04:30Z gmosx $
6
6
 
7
7
  require 'rbconfig'
8
8
  require 'ftools'
@@ -1,10 +1,11 @@
1
1
  # = Nitro
2
2
  #
3
- # Nitro is an efficient, yet simple engine for developing professional
4
- # Web Applications using the Ruby language. Nitro aims to provide a
5
- # robust infrastructure for scalable web applications that can be
6
- # distributed over a server cluster. However, Nitro can also power
7
- # simple web applications for deployment on intranets or even personal
3
+ # Nitro is an efficient, yet simple engine for developing
4
+ # professional Web Applications using the Ruby language.
5
+ # Nitro aims to provide a robust infrastructure for scalable
6
+ # web applications that can be distributed over a server
7
+ # cluster. However, Nitro can also power simple web
8
+ # applications for deployment on intranets or even personal
8
9
  # computers.
9
10
  #
10
11
  # Nitro integrates the powerful Og Object-Relational mapping
@@ -12,7 +13,7 @@
12
13
  #
13
14
  # * George Moschovitis <gm@navel.gr>
14
15
  # (c) 2004-2005 Navel, all rights reserved.
15
- # $Id: nitro.rb 340 2005-04-04 08:26:58Z gmosx $
16
+ # $Id: nitro.rb 20 2005-04-15 15:18:36Z gmosx $
16
17
 
17
18
  require 'glue'
18
19
  require 'glue/logger'
@@ -20,10 +21,10 @@ require 'glue/logger'
20
21
  # Define Nitro namespace.
21
22
 
22
23
  module Nitro
23
-
24
+
24
25
  # The version.
25
26
 
26
- Version = '0.15.0'
27
+ Version = '0.16.0'
27
28
 
28
29
  # Library path.
29
30
 
@@ -38,7 +39,7 @@ require 'nitro/dispatcher'
38
39
  require 'nitro/render'
39
40
  require 'nitro/conf'
40
41
  require 'nitro/runner'
41
- require 'nitro/component'
42
+ require 'nitro/controller'
42
43
  require 'nitro/part'
43
44
 
44
45
  require 'nitro/environment' unless $NITRO_NO_ENVIRONMENT
@@ -1,6 +1,7 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
+ # * James Britt <james_b@neurogami.com>
2
3
  # (c) 2005 Navel, all rights reserved.
3
- # $Id$
4
+ # $Id: cgi.rb 1 2005-04-11 11:04:30Z gmosx $
4
5
 
5
6
  require 'cgi'
6
7
  require 'stringio'
@@ -8,7 +9,11 @@ require 'tempfile'
8
9
 
9
10
  require 'glue/attribute'
10
11
 
11
- module N
12
+ # Speeds things up, more comaptible with OSX.
13
+
14
+ Socket.do_not_reverse_lookup = true
15
+
16
+ module Nitro
12
17
 
13
18
  class Cgi
14
19
  # Maximum content length allowed in requests.
@@ -18,6 +23,26 @@ class Cgi
18
23
  # Multipart parsing buffer size.
19
24
 
20
25
  cattr_accessor :buffer_size, (10 * 1024)
26
+
27
+ def self.start( conf )
28
+ cgi = CGI.new
29
+ conf = Flexob.new(conf) unless conf.is_a?(Flexob)
30
+ context = Context.new(conf)
31
+ context.headers = ENV
32
+
33
+ CgiUtils.parse_params(context)
34
+ CgiUtils.parse_cookies(context)
35
+
36
+ # gmosx, TODO: move this into a filter.
37
+ Og.db.get_connection if defined?(Og) and Og.db
38
+
39
+ context.render( context.path)
40
+
41
+ Og.db.put_connection if defined?(Og) and Og.db
42
+
43
+ cgi.print(CgiUtils.response_headers(context))
44
+ cgi.print(context.out)
45
+ end
21
46
  end
22
47
 
23
48
  # CGI utility methods.
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: fastcgi.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'cgi'
6
6
  require 'fcgi'
@@ -11,7 +11,11 @@ require 'nitro/adapters/cgi'
11
11
 
12
12
  require 'glue/flexob'
13
13
 
14
- module N
14
+ # Speeds things up, more comaptible with OSX.
15
+
16
+ Socket.do_not_reverse_lookup = true
17
+
18
+ module Nitro
15
19
 
16
20
  # FastCGI Adaptor. FastCGI is a language independent,
17
21
  # scalable, open extension to CGI that provides high