nitro 0.9.3 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/ChangeLog +64 -0
  2. data/RELEASES +13 -0
  3. data/examples/blog/README +1 -1
  4. data/examples/blog/conf/app.conf.rb +2 -6
  5. data/examples/blog/conf/lhttpd.conf +1 -1
  6. data/examples/blog/lib/blog/controller.rb +2 -2
  7. data/examples/blog/root/style.css +0 -2
  8. data/examples/flash/conf/app.conf.rb +2 -4
  9. data/examples/no_xsl_blog/README +9 -0
  10. data/examples/no_xsl_blog/conf/app.conf.rb +5 -8
  11. data/examples/no_xsl_blog/conf/lhttpd.conf +1 -1
  12. data/examples/no_xsl_blog/lib/blog/controller.rb +2 -3
  13. data/examples/no_xsl_blog/lib/blog/template.rb +3 -3
  14. data/examples/no_xsl_blog/root/style.css +0 -2
  15. data/examples/og/mock_example.rb +1 -4
  16. data/examples/og/mysql_to_psql.rb +2 -4
  17. data/examples/tiny/README +1 -1
  18. data/examples/tiny/conf/app.conf.rb +2 -6
  19. data/examples/tiny/conf/lhttpd.conf +1 -1
  20. data/examples/wee_style/README +10 -0
  21. data/examples/wee_style/wee.rb +50 -0
  22. data/lib/glue/cache.rb +32 -34
  23. data/lib/glue/number.rb +3 -9
  24. data/lib/glue/time.rb +14 -22
  25. data/lib/glue/validation.rb +2 -4
  26. data/lib/nitro.rb +1 -3
  27. data/lib/nitro/adaptors/fastcgi.rb +10 -0
  28. data/lib/nitro/adaptors/webrick.rb +27 -11
  29. data/lib/nitro/builders/rss.rb +31 -11
  30. data/lib/nitro/builders/xhtml.rb +2 -8
  31. data/lib/nitro/context.rb +3 -1
  32. data/lib/nitro/dispatcher.rb +21 -4
  33. data/lib/nitro/filters.rb +12 -12
  34. data/lib/nitro/version.rb +1 -1
  35. data/lib/og/backend.rb +36 -40
  36. data/lib/og/backends/psql.rb +7 -7
  37. data/lib/og/backends/sqlite.rb +383 -0
  38. data/lib/og/connection.rb +34 -34
  39. data/lib/og/meta.rb +8 -0
  40. data/lib/og/version.rb +2 -4
  41. data/test/nitro/builders/tc_rss.rb +22 -0
  42. data/test/nitro/tc_dispatcher.rb +6 -1
  43. metadata +7 -2
data/ChangeLog CHANGED
@@ -1,6 +1,70 @@
1
1
 
2
+ 04-02-2005 George Moschovitis <gm@navel.gr>
3
+
4
+ * lib/nitro/adaptors/fastcgi.rb: convert conf to Flexob.
5
+
6
+ * lib/nitro/adaptors/webrick.rb: added REQUEST_MUTEX to temp-fix windows bug.
7
+
8
+ 03-02-2005 George Moschovitis <gm@navel.gr>
9
+
10
+ * lib/glue/*: cleaned up some files.
11
+
12
+ * lib/og/*: cleaned up some files.
13
+
14
+ * lib/nitro/dispatchers.rb (#initialize): accept class as input.
15
+
16
+ * Updated all examples.
17
+
18
+ * lib/nitro/context.rb: out == XhtmlString to allow convienient
19
+ access to the programmatic rendering functionality and make
20
+ the wee example cooler.
21
+
22
+ * lib/nitro/adaptors/webrick.rb (#start): better handling of conf parameters,
23
+ better handling of logging,
24
+ autoconvert conf to Flexob if needed.
25
+
26
+ * examples/wee_style/wee.rb: implemented,
27
+ looks cool (but useles? :-))
28
+
29
+ * examples/wee_style/README: introduced.
30
+
31
+ * examples/wee_style/*: introduced wee-style example.
32
+
33
+ * examples/blog/lib/blog.rb: updated for new RSS.
34
+
35
+ * test/nitro/builders/tc_rss.rb: introduced.
36
+
37
+ * lib/nitro/builders/rss.rb: pass parameters,
38
+ (#render): now alias for render_0_9
39
+
40
+ * lib/og/meta.rb (#joins): introduced new metadata macro.
41
+
42
+ 02-02-2005 George Moschovitis <gm@navel.gr>
43
+
44
+ * --- VERSION 0.9.4 ---
45
+
46
+ * lib/og/backends/sqlite.rb: introduced.
47
+
48
+ * lib/og/backends/psql.rb: minor cleanup.
49
+
50
+ * examples/blog/root/style.css: fixes for IE, more needed.
51
+
52
+ * lib/nitro/adaptors/fastcgi.rb (#handle): restore Og connection.
53
+
54
+ * lib/nitro/adaptors/webrick.rb (#handle): restore Og connection, fixes
55
+ Windows deadlock. [james_b]
56
+
57
+ * examples/no_xsl_blog/lib/blog/template.rb: fixed ruby in template (login).
58
+
59
+ * changed default port to 8069, to avoid conflicts with
60
+ other servers (8080 was too common). [james_b]
61
+
2
62
  01-02-2005 George Moschovitis <gm@navel.gr>
3
63
 
64
+ * updated Rubyforge page, added wiki.
65
+
66
+ * --- VERSION 0.9.3 ---
67
+
4
68
  * small fixes to make tests pass again.
5
69
 
6
70
  * lib/nitro/adaptors/webrick.rb: update headers with req.meta_vars.
data/RELEASES CHANGED
@@ -1,3 +1,16 @@
1
+ == Version 0.9.5 was released on 04/02/2005.
2
+
3
+ A bug fix release.
4
+
5
+ * Fixed nasty Windows deadlock bug.
6
+
7
+ * Experimental Wee-style example (will be updated in the next version).
8
+
9
+ * Changed default port to 8069 (8080 was to common).
10
+
11
+ * Small fixes and improvements.
12
+
13
+
1
14
  == Version 0.9.3 was released on 01/02/2005.
2
15
 
3
16
  A *very* important release. A new abstract rendering
@@ -24,7 +24,7 @@ ruby ctl
24
24
 
25
25
  then point your browser to:
26
26
 
27
- http://127.0.0.1:8080
27
+ http://127.0.0.1:8069
28
28
 
29
29
  (if you want to change the server address/port, edit the config.rb
30
30
  file)
@@ -7,8 +7,6 @@ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
7
7
 
8
8
  $DBG = true
9
9
 
10
- require 'ostruct'
11
-
12
10
  require 'nitro'
13
11
  require 'glue/validation'
14
12
  require 'og'
@@ -45,12 +43,10 @@ Rendering.shader = N::XSLTShader.new("#{dispatcher.root}/style.xsl",
45
43
 
46
44
  Rendering.reload = :partial
47
45
 
48
- conf = {
46
+ $conf = {
49
47
  :name => 'Nitro Blog',
50
48
  :host => 'localhost',
51
- :port => 8080,
49
+ :port => 8069,
52
50
  :dispatcher => dispatcher,
53
51
  :og => og
54
52
  }
55
-
56
- $conf = OpenStruct.new(conf)
@@ -104,7 +104,7 @@ url.access-deny = ( "~", ".inc" )
104
104
  ######### Options that are good to be but not neccesary to be changed #######
105
105
 
106
106
  ## bind to port (default: 80)
107
- server.port = 8080
107
+ server.port = 8069
108
108
 
109
109
  ## bind to localhost (default: all interfaces)
110
110
  #server.bind = "grisu.home.kneschke.de"
@@ -39,7 +39,7 @@ class BlogController < N::Controller
39
39
  # example of generated view
40
40
 
41
41
  def list_entry__xml
42
- @out << RssBuilder.render(@entries)
42
+ @out << RssBuilder.render(@entries, :description => 'Blog entries', :link => context.host_url)
43
43
  end
44
44
 
45
45
  def new_comment
@@ -56,7 +56,7 @@ class BlogController < N::Controller
56
56
  # example of generated view
57
57
 
58
58
  def list_comment__xml
59
- @out << RssBuilder.render(@comments)
59
+ @out << RssBuilder.render(@comments, :description => 'Blog comments', :link => context.host_url)
60
60
  end
61
61
 
62
62
  def login
@@ -30,8 +30,6 @@ input, textarea {
30
30
  }
31
31
 
32
32
  #page {
33
- position: relative; top: 50%; left: 50%;
34
- margin: 0px; margin-left: -400px;
35
33
  width: 847px;
36
34
  background: url(m/page_bg.gif) repeat-y;
37
35
  }
@@ -14,10 +14,8 @@ include N
14
14
 
15
15
  dispatcher = Dispatcher.new
16
16
 
17
- conf = {
17
+ $conf = {
18
18
  :host => 'localhost',
19
- :port => 8080,
19
+ :port => 8069,
20
20
  :dispatcher => dispatcher,
21
21
  }
22
-
23
- $conf = OpenStruct.new(conf)
@@ -10,3 +10,12 @@ least you shold configure the database username/password.
10
10
 
11
11
  When running on windows, the database binaries should
12
12
  be in the PATH.
13
+
14
+ To see the example browse http://127.0.0.1:8069
15
+
16
+ = WARNING
17
+
18
+ This example seems to have some problems when running
19
+ with Internet Explorer 6. For the moment, please
20
+ try running it with Firefox and/or Mozilla.
21
+
@@ -7,8 +7,6 @@ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
7
7
 
8
8
  $DBG = true
9
9
 
10
- require 'ostruct'
11
-
12
10
  require 'nitro'
13
11
  require 'glue/validation'
14
12
  require 'og'
@@ -16,7 +14,7 @@ require 'og'
16
14
  require 'blog'
17
15
 
18
16
  include N
19
- =begin
17
+
20
18
  og = Og::Database.new(
21
19
  :address => 'localhost',
22
20
  :backend => 'mysql',
@@ -25,8 +23,8 @@ og = Og::Database.new(
25
23
  :password => 'navelrulez',
26
24
  :connection_count => 3
27
25
  )
28
- =end
29
26
 
27
+ =begin
30
28
  og = Og::Database.new(
31
29
  :address => 'localhost',
32
30
  :backend => 'psql',
@@ -35,6 +33,7 @@ og = Og::Database.new(
35
33
  :password => 'navelrulez',
36
34
  :connection_count => 3
37
35
  )
36
+ =end
38
37
 
39
38
  controllers = {
40
39
  :index => BlogController
@@ -46,12 +45,10 @@ apis = {
46
45
 
47
46
  dispatcher = Dispatcher.new(controllers, apis)
48
47
 
49
- conf = {
48
+ $conf = {
50
49
  :name => 'Blog sans XSLT',
51
50
  :host => 'localhost',
52
- :port => 8080,
51
+ :port => 8069,
53
52
  :dispatcher => dispatcher,
54
53
  :og => og
55
54
  }
56
-
57
- $conf = OpenStruct.new(conf)
@@ -104,7 +104,7 @@ url.access-deny = ( "~", ".inc" )
104
104
  ######### Options that are good to be but not neccesary to be changed #######
105
105
 
106
106
  ## bind to port (default: 80)
107
- server.port = 8080
107
+ server.port = 8069
108
108
 
109
109
  ## bind to localhost (default: all interfaces)
110
110
  #server.bind = "grisu.home.kneschke.de"
@@ -32,7 +32,6 @@ class BlogController < N::Controller
32
32
 
33
33
  unless entry.valid?
34
34
  session[:errors] = entry.errors
35
- puts '***', @context.headers.inspect, @context.referer
36
35
  redirect_referer '#new_entry'
37
36
  end
38
37
 
@@ -42,7 +41,7 @@ class BlogController < N::Controller
42
41
  # example of generated view
43
42
 
44
43
  def list_entry__xml
45
- @out << RssBuilder.render(@entries)
44
+ @out << RssBuilder.render(@entries, :description => 'Blog entries', :link => context.host_url)
46
45
  end
47
46
 
48
47
  def new_comment
@@ -59,7 +58,7 @@ class BlogController < N::Controller
59
58
  # example of generated view
60
59
 
61
60
  def list_comment__xml
62
- @out << RssBuilder.render(@comments)
61
+ @out << RssBuilder.render(@comments, :description => 'Blog comments', :link => context.host_url)
63
62
  end
64
63
 
65
64
  def login
@@ -87,11 +87,11 @@ module BlogTemplate
87
87
  This is a simple blog powered by <a href="http://www.navel.gr/nitro">
88
88
  Nitro</a> Web Engine. Have a look at the source code and enjoy
89
89
  the power of Ruby.
90
- <ruby>unless session['owner']</ruby>
90
+ } + unless session['owner'] then %{
91
91
  <p><a href="login">Login</a> as owner.</p>
92
- <ruby>else</ruby>
92
+ } else %{
93
93
  <p><a href="logout">Logout</a>.</p>
94
- <ruby>end</ruby>
94
+ } end + %{
95
95
 
96
96
  <h2>Linkage</h2>
97
97
  <ul>
@@ -30,8 +30,6 @@ input, textarea {
30
30
  }
31
31
 
32
32
  #page {
33
- position: relative; top: 50%; left: 50%;
34
- margin: 0px; margin-left: -400px;
35
33
  width: 847px;
36
34
  background: url(m/page_bg.gif) repeat-y;
37
35
  }
@@ -3,10 +3,8 @@
3
3
  # A simple example to demonstrate how to mock Og.
4
4
  # Very useful in test units.
5
5
  #
6
- # code:
7
6
  # * George Moschovitis <gm@navel.gr>
8
- #
9
- # (c) 2004 Navel, all rights reserved.
7
+ # (c) 2004-2005 Navel, all rights reserved.
10
8
  # $Id: run.rb 185 2004-12-10 13:29:09Z gmosx $
11
9
 
12
10
  $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
@@ -52,4 +50,3 @@ class SimpleTest < Test::Unit::TestCase
52
50
  end
53
51
 
54
52
  end
55
-
@@ -7,10 +7,8 @@
7
7
  #
8
8
  # Og makes it easier to switch to a REAL database :)
9
9
  #
10
- # code:
11
10
  # * George Moschovitis <gm@navel.gr>
12
- #
13
- # (c) 2004 Navel, all rights reserved.
11
+ # (c) 2004-2005 Navel, all rights reserved.
14
12
  # $Id$
15
13
 
16
14
  raise 'WARNING, this example does not work yet, for the moment ' +
@@ -22,7 +20,7 @@ require 'og'
22
20
 
23
21
  # An example managed object.
24
22
  # Looks like an ordinary Ruby object.
25
- #
23
+
26
24
  class Article
27
25
  prop_accessor :name, :body, String
28
26
 
@@ -9,6 +9,6 @@ $ cd examples/tiny
9
9
 
10
10
  $ ruby ctl
11
11
 
12
- browse http://127.0.0.1:8080
12
+ browse http://127.0.0.1:8069
13
13
 
14
14
  to stop the example press Ctrl+C
@@ -10,12 +10,8 @@ require 'nitro'
10
10
 
11
11
  # gmosx, FIXME: make this default!
12
12
 
13
- require 'ostruct'
14
-
15
- conf = {
13
+ $conf = {
16
14
  :host => 'localhost',
17
- :port => 8080,
15
+ :port => 8069,
18
16
  :dispatcher => N::Dispatcher.new
19
17
  }
20
-
21
- $conf = OpenStruct.new(conf)
@@ -104,7 +104,7 @@ url.access-deny = ( "~", ".inc" )
104
104
  ######### Options that are good to be but not neccesary to be changed #######
105
105
 
106
106
  ## bind to port (default: 80)
107
- server.port = 8080
107
+ server.port = 8069
108
108
 
109
109
  ## bind to localhost (default: all interfaces)
110
110
  #server.bind = "grisu.home.kneschke.de"
@@ -0,0 +1,10 @@
1
+ = Wee-style Example
2
+
3
+ This is a simple example that demonstrates that writing
4
+ Wee-style 'self-contained' web applications is easy.
5
+
6
+ To run the example just issue
7
+
8
+ $ ruby wee.rb
9
+
10
+ in the command line to start the application.
@@ -0,0 +1,50 @@
1
+ # * George Moschovitis <gm@navel.gr>
2
+ # (c) 2004-2005 Navel, all rights reserved.
3
+ # $Id$
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
6
+
7
+ require 'nitro'
8
+ require 'nitro/adaptors/webrick'
9
+
10
+ include N
11
+
12
+ class Wee < Controller
13
+
14
+ def index
15
+ counter = session[:counter] || 0
16
+
17
+ (o = @out).html {
18
+ o.h1 'Hello world'
19
+ o << 'This is '
20
+ o.b { o << 'BOLD' }
21
+ o.p {
22
+ o << "Here is the counter: #{counter}"
23
+ }
24
+ o.p {
25
+ o << '<a href="inc_counter">Increase</a> the counter.'
26
+ }
27
+ o.p {
28
+ o << '<a href="reset_counter">Reset</a> the counter.'
29
+ }
30
+ }
31
+ end
32
+
33
+ def inc_counter
34
+ session[:counter] ||= 0
35
+ session[:counter] += 1
36
+ end
37
+
38
+ def reset_counter
39
+ session[:counter] = 0
40
+ end
41
+
42
+ end
43
+
44
+ conf = {
45
+ :host => 'localhost',
46
+ :port => 8069,
47
+ :dispatcher => Dispatcher.new(Wee)
48
+ }
49
+
50
+ Webrick.start(conf)
@@ -1,14 +1,10 @@
1
- # code:
2
1
  # * George Moschovitis <gm@navel.gr>
3
2
  # * Anastasios Koutoumanos <ak@navel.gr>
4
- #
5
- # (c) 2004 Navel, all rights reserved.
3
+ # (c) 2004-2005 Navel, all rights reserved.
6
4
  # $Id: cache.rb 202 2005-01-17 10:44:13Z gmosx $
7
5
 
8
- module N;
6
+ module N
9
7
 
10
- # = LRUCache
11
- #
12
8
  # A cache utilizing a simple LRU (Least Recently Used) policy.
13
9
  # The items managed by this cache must respond to the #key method.
14
10
  # Attempts to optimize reads rather than inserts!
@@ -16,36 +12,38 @@ module N;
16
12
  # LRU semantics are enforced by inserting the items in a queue.
17
13
  # The lru item is always at the tail. Two special sentinels
18
14
  # (head, tail) are used to simplify (?) the code.
19
- #
15
+
20
16
  class LRUCache < Hash
21
17
 
22
18
  # Mix this in your class to make LRU-managable.
23
- #
19
+
24
20
  module Item
25
21
  attr_accessor :lru_key, :lru_prev, :lru_next
26
22
  end
27
23
 
28
24
  # head-tail sentinels
29
- #
25
+
30
26
  class Sentinel; include Item; end
31
27
 
32
- # the maximum number of items in the cache
28
+ # the maximum number of items in the cache.
29
+
33
30
  attr_accessor :max_items
34
31
 
35
32
  # the head sentinel
33
+
36
34
  attr :head
35
+
37
36
  # the tail sentinel, tail.prev points to the lru item.
37
+
38
38
  attr :tail
39
39
 
40
- #
41
- #
42
40
  def initialize(max_items)
43
41
  @max_items = max_items
44
42
  lru_clear()
45
43
  end
46
44
 
47
- # Lookup an item in the cache
48
- #
45
+ # Lookup an item in the cache.
46
+
49
47
  def [](key)
50
48
  if item = super
51
49
  return lru_touch(item)
@@ -53,36 +51,36 @@ class LRUCache < Hash
53
51
  end
54
52
 
55
53
  # The inserted item is considered mru!
56
- #
54
+
57
55
  def []=(key, item)
58
56
  item = super
59
57
  item.lru_key = key
60
58
  lru_insert(item)
61
59
  end
62
60
 
63
- # Delete an item from the cache
64
- #
61
+ # Delete an item from the cache.
62
+
65
63
  def delete(key)
66
64
  if item = super
67
65
  lru_delete(item)
68
66
  end
69
67
  end
70
68
 
71
- # Clear the cache
72
- #
69
+ # Clear the cache.
70
+
73
71
  def clear
74
72
  super
75
73
  lru_clear()
76
74
  end
77
75
 
78
- # The first (mru) element in the cache
79
- #
76
+ # The first (mru) element in the cache.
77
+
80
78
  def first
81
79
  @head.lru_next
82
80
  end
83
81
 
84
- # The last (lru) element in the cache
85
- #
82
+ # The last (lru) element in the cache.
83
+
86
84
  def last
87
85
  @tail.lru_prev
88
86
  end
@@ -91,15 +89,15 @@ class LRUCache < Hash
91
89
  private
92
90
 
93
91
  # Delete an item from the lru list.
94
- #
92
+
95
93
  def lru_delete(item)
96
94
  lru_join(item.lru_prev, item.lru_next)
97
95
  return item
98
96
  end
99
97
 
100
- # Join two items in the lru list
101
- # Return y to allow for chaining
102
- #
98
+ # Join two items in the lru list.
99
+ # Return y to allow for chaining.
100
+
103
101
  def lru_join(x, y)
104
102
  x.lru_next = y
105
103
  y.lru_prev = x
@@ -108,28 +106,28 @@ class LRUCache < Hash
108
106
 
109
107
  # Append a child item to a parent item in the lru list
110
108
  # (Re)inserts the child in the list.
111
- #
109
+
112
110
  def lru_append(parent, child)
113
111
  lru_join(child, parent.lru_next)
114
112
  lru_join(parent, child)
115
113
  end
116
114
 
117
115
  # Insert an item
118
- #
116
+
119
117
  def lru_insert(item)
120
118
  delete(last.lru_key) if size() > @max_items
121
119
  lru_append(@head, item)
122
120
  end
123
121
 
124
122
  # Touch an item, make mru!
125
- # Returns the item
126
- #
123
+ # Returns the item.
124
+
127
125
  def lru_touch(item)
128
126
  lru_append(@head, lru_delete(item))
129
127
  end
130
128
 
131
- # Clear the lru
132
- #
129
+ # Clear the lru.
130
+
133
131
  def lru_clear
134
132
  @head = Sentinel.new
135
133
  @tail = Sentinel.new
@@ -137,4 +135,4 @@ class LRUCache < Hash
137
135
  end
138
136
  end
139
137
 
140
- end # module
138
+ end