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
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: webrick.rb 9 2005-04-13 00:08:20Z nasis $
4
4
 
5
5
  require 'webrick'
6
6
  require 'stringio'
@@ -9,7 +9,11 @@ require 'glue/flexob'
9
9
  require 'nitro/context'
10
10
  require 'nitro/dispatcher'
11
11
 
12
- module N
12
+ # Speeds things up, more comaptible with OSX.
13
+
14
+ Socket.do_not_reverse_lookup = true
15
+
16
+ module Nitro
13
17
 
14
18
  # Helper methods for the WebrickAdapter.
15
19
 
@@ -21,9 +25,7 @@ class Webrick
21
25
  def start(conf)
22
26
  conf = Conf.new(conf) unless conf.is_a?(Conf)
23
27
 
24
- Socket.do_not_reverse_lookup = true
25
-
26
- if :none == conf.log and RUBY_PLATFORM !~ /mswin32/
28
+ if RUBY_PLATFORM !~ /mswin32/
27
29
  accesslog = WEBrick::BasicLog::new('/dev/null')
28
30
  refererlog = WEBrick::BasicLog::new('/dev/null')
29
31
  elsif (conf.accesslog || conf.refererlog)
@@ -64,18 +66,18 @@ class WebrickAdapter < WEBrick::HTTPServlet::AbstractServlet
64
66
 
65
67
  # REQUEST_MUTEX = Mutex.new
66
68
 
67
- def initialize(server, conf)
69
+ def initialize(server, conf)
68
70
  @conf = conf
69
71
 
70
72
  # Handles static resources. Useful when running
71
73
  # a stand-alone webrick server.
72
74
 
73
- @file_handler = WEBrick::HTTPServlet::FileHandler.new(server, conf.dispatcher.public_root, conf.webrick_options || {})
74
- end
75
+ @file_handler = WEBrick::HTTPServlet::FileHandler.new(server, conf.dispatcher.public_root, conf.webrick_options || {})
76
+ end
75
77
 
76
78
  # Handle a static file. Also handles cached pages.
77
79
 
78
- def handle_file(req, res)
80
+ def handle_file(req, res)
79
81
  begin
80
82
  rewrite(req)
81
83
  @file_handler.do_GET(req, res)
@@ -1,12 +1,12 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: buffering.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'glue/attribute'
6
6
 
7
7
  require 'nitro/shaders'
8
8
 
9
- module N
9
+ module Nitro
10
10
 
11
11
  # The output buffering mixin. Provides php-style output
12
12
  # buffering functionality.
@@ -0,0 +1,78 @@
1
+ # * George Moschovitis <gm@navel.gr>
2
+ # (c) 2005 Navel, all rights reserved.
3
+ # $Id$
4
+
5
+ # WARNING: unfinished code, do NOT use yet.
6
+
7
+ require 'nitro/builders/xml'
8
+
9
+ module Nitro
10
+
11
+ # Build Atom represenations of ruby object collections.
12
+ # Utilize duck typing to grab the attributes to render.
13
+ # Add this mixin to you classes to support Atom
14
+ # syndication.
15
+
16
+ module AtomBuilderMixin
17
+ include XmlBuilderMixin
18
+
19
+ # Build Atom syndication stream.
20
+ #
21
+ # === Options
22
+ #
23
+ # [+:description+]
24
+ # Description of the feed.
25
+ # [+:encoding+]
26
+ # Character encoding.
27
+ # [+:base+]
28
+ # Base url of the feed.
29
+ # [+:link+]
30
+ # Link of the Feed.
31
+
32
+ def build_atom(objects, options = {})
33
+ c = {
34
+ :description => 'Syndication',
35
+ :encoding => 'utf-8'
36
+ }.update(options)
37
+
38
+ c[:base] ||= c[:link]
39
+
40
+ raise "Option ':base' cannot be infered!" unless c[:base]
41
+
42
+ pi! :xml, :version => '1.0', :encoding => o[:encoding]
43
+ feed(:version => '0.3') do
44
+ for obj in objects
45
+ entry do
46
+ if obj.respond_to?(:author)
47
+ author { name(obj.author) }
48
+ end
49
+
50
+ issued obj.create_time.xmlschema
51
+ modified obj.update_time.xmlschema
52
+ title obj.title
53
+
54
+ if obj.respond_to?(:categories)
55
+ for category in categories
56
+ dc :subject => category.name
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ # Abstract class for the AtomBuilderMixin.
67
+
68
+ class AtomBuilder < String
69
+ include AtomBuilderMixin
70
+
71
+ class << self
72
+ def build(objects, options = {})
73
+ AtomBuilder.new.build_atom(objects, options)
74
+ end
75
+ end
76
+ end
77
+
78
+ end
@@ -1,11 +1,11 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: form.rb 335 2005-03-31 14:02:02Z gmosx $
3
+ # $Id: form.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'glue/hash'
6
6
  require 'nitro/markup'
7
7
 
8
- module N
8
+ module Nitro
9
9
 
10
10
  # FormBuilder.
11
11
 
@@ -1,12 +1,12 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
- # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: rss.rb 266 2005-02-28 14:50:48Z gmosx $
2
+ # (c) 2005 Navel, all rights reserved.
3
+ # $Id: rss.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'rss/0.9'
6
6
 
7
7
  require 'glue/string'
8
8
 
9
- module N
9
+ module Nitro
10
10
 
11
11
  # Build RSS represenations of ruby object collections.
12
12
  # Utilize duck typing to grab the attributes to render.
@@ -43,7 +43,7 @@ module RssBuilderMixin
43
43
  for obj in objects
44
44
  item = RSS::Rss::Channel::Item.new
45
45
  item.title = obj.title if obj.respond_to?(:title)
46
- item.description = N::StringUtils.head(obj.body, 256) if obj.respond_to?(:body)
46
+ item.description = Glue::StringUtils.head(obj.body, 256) if obj.respond_to?(:body)
47
47
  item.link = "#{c[:base]}/#{obj.view_uri}" if obj.respond_to?(:view_uri)
48
48
  channel.items << item
49
49
  end
@@ -1,8 +1,8 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: table.rb 266 2005-02-28 14:50:48Z gmosx $
3
+ # $Id: table.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
- module N
5
+ module Nitro
6
6
 
7
7
  # The TableBuilder is a helper class that automates the creation
8
8
  # of tables from collections of objects. The resulting html
@@ -1,16 +1,13 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
- # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id$
2
+ # (c) 2005 Navel, all rights reserved.
3
+ # $Id: xhtml.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'nitro/builders/xml'
6
6
 
7
- module N
7
+ module Nitro
8
8
 
9
9
  # A helper mixin for programmatically building XHTML
10
10
  # blocks.
11
- #--
12
- # TODO: add table generator, form generator
13
- #++
14
11
 
15
12
  module XhtmlBuilderMixin
16
13
 
@@ -24,10 +21,10 @@ module XhtmlBuilderMixin
24
21
 
25
22
  def select(*args)
26
23
  attrs = args.last.is_a?(Hash) ? args.pop : nil
27
- start_tag('select', attrs)
24
+ start_tag!('select', attrs)
28
25
  self << %|<option>#{args.first}</option>| unless args.empty?
29
26
  yield
30
- end_tag('select')
27
+ end_tag!('select')
31
28
  end
32
29
 
33
30
  # Render select options.
@@ -1,8 +1,8 @@
1
1
  # George Moschovitis <gm@navel.gr>
2
2
  # (c) 2005 Navel, all rights reserved.
3
- # $Id$
3
+ # $Id: xml.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
- module N
5
+ module Nitro
6
6
 
7
7
  # A helper mixin for programmatically building XML
8
8
  # blocks.
@@ -15,15 +15,15 @@ module XmlBuilderMixin
15
15
  attrs = args.last.is_a?(Hash) ? args.pop : nil
16
16
 
17
17
  if block_given?
18
- start_tag('#{tag}', attrs)
18
+ start_tag!('#{tag}', attrs)
19
19
  yield
20
- end_tag('#{tag}')
20
+ end_tag!('#{tag}')
21
21
  elsif (!args.empty?)
22
- start_tag('#{tag}', attrs)
22
+ start_tag!('#{tag}', attrs)
23
23
  self << args.first
24
- end_tag('#{tag}')
24
+ end_tag!('#{tag}')
25
25
  else
26
- start_tag('#{tag}', attrs, false)
26
+ start_tag!('#{tag}', attrs, false)
27
27
  self << ' />'
28
28
  end
29
29
  end
@@ -32,7 +32,9 @@ module XmlBuilderMixin
32
32
  self.send(tag, *args, &block)
33
33
  end
34
34
 
35
- def start_tag(tag, attributes = nil, close = true)
35
+ # Emit the start (opening) tag of an element.
36
+
37
+ def start_tag!(tag, attributes = nil, close = true)
36
38
  unless attributes
37
39
  if close
38
40
  self << "<#{tag}>"
@@ -54,31 +56,53 @@ module XmlBuilderMixin
54
56
  return self
55
57
  end
56
58
 
57
- def end_tag(tag)
59
+ # Emit the end (closing) tag of an element.
60
+
61
+ def end_tag!(tag)
58
62
  self << "</#{tag}>"
59
63
 
60
64
  return self
61
65
  end
62
66
 
63
- def text(str)
67
+ # Emit a text string.
68
+
69
+ def text!(str)
64
70
  self << str
65
71
 
66
72
  return self
67
73
  end
74
+ alias_method :print, :text!
75
+
76
+ # Emit a comment.
68
77
 
69
- def comment(str)
78
+ def comment!(str)
70
79
  self << "<!-- #{str} -->"
71
80
 
72
81
  return self
73
82
  end
74
-
83
+
84
+ # Emit a processing instruction.
85
+
86
+ def processing_instruction!(name, attributes = nil)
87
+ unless attributes
88
+ self << "<?#{name} ?>"
89
+ else
90
+ self << "<?#{name} "
91
+ attributes.each do |a, v|
92
+ self << %[#{a}="#{v}" ]
93
+ end
94
+ self << "?>"
95
+ end
96
+ end
97
+ alias_method :pi!, :processing_instruction!
98
+
75
99
  end
76
100
 
77
101
  # A String extension with XML generation
78
102
  # functionality.
79
103
 
80
104
  class XmlString < String
81
- include N::XmlBuilderMixin
105
+ include XmlBuilderMixin
82
106
  end
83
107
 
84
108
  # A class that encapsulats the XML generation
@@ -86,7 +110,7 @@ end
86
110
  # output to a target buffer.
87
111
 
88
112
  class XmlBuilder
89
- include N::XmlBuilderMixin
113
+ include XmlBuilderMixin
90
114
 
91
115
  # The target receives the generated xml,
92
116
  # should respond_to :<<
@@ -1,6 +1,6 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: caching.rb 326 2005-03-28 11:07:17Z gmosx $
3
+ # $Id: caching.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'fileutils'
6
6
 
@@ -10,7 +10,7 @@ require 'nitro/caching/output'
10
10
  require 'nitro/caching/actions'
11
11
  require 'nitro/caching/fragments'
12
12
 
13
- module N
13
+ module Nitro
14
14
 
15
15
  # Adds support for caching.
16
16
 
@@ -1,10 +1,10 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: actions.rb 326 2005-03-28 11:07:17Z gmosx $
3
+ # $Id: actions.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'fileutils'
6
6
 
7
- module N
7
+ module Nitro
8
8
 
9
9
  # Adds support for caching.
10
10
 
@@ -1,13 +1,13 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: fragments.rb 326 2005-03-28 11:07:17Z gmosx $
3
+ # $Id: fragments.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
5
  require 'fileutils'
6
6
 
7
7
  require 'glue/attribute'
8
8
  require 'nitro/caching/stores'
9
9
 
10
- module N
10
+ module Nitro
11
11
 
12
12
  # Adds support for caching.
13
13
 
@@ -1,8 +1,8 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: invalidation.rb 327 2005-03-28 11:09:58Z gmosx $
3
+ # $Id: invalidation.rb 1 2005-04-11 11:04:30Z gmosx $
4
4
 
5
- module N
5
+ module Nitro
6
6
 
7
7
  module Caching
8
8
 
@@ -23,29 +23,3 @@ module Caching
23
23
  end
24
24
 
25
25
  end
26
-
27
-
28
- __END__
29
-
30
- class MyController < Controller
31
-
32
- cache_output :list
33
-
34
- cache_monitor :on => [ :add, :delete ]
35
-
36
- def list
37
- end
38
-
39
- def add
40
- end
41
-
42
- def delete
43
- end
44
-
45
- end
46
-
47
- class Invalidator
48
- def filter(controller)
49
-
50
- end
51
- end
@@ -1,10 +1,10 @@
1
1
  # * George Moschovitis <gm@navel.gr>
2
2
  # (c) 2004-2005 Navel, all rights reserved.
3
- # $Id: output.rb 322 2005-03-21 18:15:52Z gmosx $
3
+ # $Id: output.rb 9 2005-04-13 00:08:20Z nasis $
4
4
 
5
5
  require 'fileutils'
6
6
 
7
- module N
7
+ module Nitro
8
8
 
9
9
  # Adds support for caching.
10
10
 
@@ -46,7 +46,7 @@ module Caching
46
46
  private
47
47
 
48
48
  def output_cache_path(path)
49
- filename = ((path.empty? || path == '/') ? '/index' : path)
49
+ filename = ((path.empty? || path == '/') ? '/index' : path)
50
50
  filename << '.html' unless (name.split('/').last || name).include? '.'
51
51
  return output_cache_root + filename
52
52
  end