nitro 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/AUTHORS +14 -4
  2. data/ChangeLog +192 -1
  3. data/README +50 -6
  4. data/RELEASES +60 -0
  5. data/Rakefile +1 -1
  6. data/bin/cluster.rb +2 -2
  7. data/bin/new_form.rb +1 -1
  8. data/examples/blog/config.rb +5 -4
  9. data/examples/blog/lib/blog.rb +56 -36
  10. data/examples/blog/root/comments.xhtml +5 -2
  11. data/examples/blog/root/entry_form.xhtml +7 -2
  12. data/examples/blog/root/login.xhtml +1 -1
  13. data/examples/blog/root/style.xsl +7 -0
  14. data/examples/og/mock_example.rb +6 -9
  15. data/examples/og/mysql_to_psql.rb +100 -0
  16. data/examples/og/run.rb +8 -17
  17. data/lib/glue.rb +7 -8
  18. data/lib/glue/array.rb +1 -1
  19. data/lib/glue/attribute.rb +86 -0
  20. data/lib/glue/cache.rb +1 -1
  21. data/lib/glue/hash.rb +1 -1
  22. data/lib/glue/inflector.rb +1 -1
  23. data/lib/glue/logger.rb +118 -18
  24. data/lib/glue/mixins.rb +1 -1
  25. data/lib/glue/number.rb +1 -1
  26. data/lib/glue/pool.rb +1 -1
  27. data/lib/glue/property.rb +48 -31
  28. data/lib/glue/string.rb +1 -1
  29. data/lib/glue/time.rb +2 -2
  30. data/lib/glue/validation.rb +400 -0
  31. data/lib/nitro/application.rb +6 -6
  32. data/lib/nitro/builders/form.rb +5 -5
  33. data/lib/nitro/builders/rss.rb +1 -1
  34. data/lib/nitro/builders/xhtml.rb +119 -0
  35. data/lib/nitro/builders/xml.rb +111 -0
  36. data/lib/nitro/config.rb +6 -6
  37. data/lib/nitro/events.rb +1 -1
  38. data/lib/nitro/html.rb +1 -1
  39. data/lib/nitro/markup.rb +15 -20
  40. data/lib/nitro/scaffold.rb +2 -2
  41. data/lib/nitro/server/appserver.rb +3 -3
  42. data/lib/nitro/server/cluster.rb +2 -2
  43. data/lib/nitro/server/dispatcher.rb +2 -2
  44. data/lib/nitro/server/filters/autologin.rb +1 -1
  45. data/lib/nitro/server/fragment.rb +2 -2
  46. data/lib/nitro/server/handlers.rb +2 -2
  47. data/lib/nitro/server/render.rb +17 -15
  48. data/lib/nitro/server/request.rb +6 -6
  49. data/lib/nitro/server/script.rb +2 -2
  50. data/lib/nitro/server/server.rb +2 -2
  51. data/lib/nitro/server/session.rb +6 -6
  52. data/lib/nitro/server/shaders.rb +2 -2
  53. data/lib/nitro/server/webrick.rb +1 -1
  54. data/lib/nitro/sitemap.rb +2 -2
  55. data/lib/nitro/uri.rb +1 -1
  56. data/lib/nitro/version.rb +7 -5
  57. data/lib/og.rb +95 -129
  58. data/lib/og/backend.rb +47 -46
  59. data/lib/og/backends/mysql.rb +64 -63
  60. data/lib/og/backends/psql.rb +73 -72
  61. data/lib/og/connection.rb +7 -8
  62. data/lib/og/enchant.rb +80 -0
  63. data/lib/og/meta.rb +21 -21
  64. data/lib/og/mock.rb +31 -88
  65. data/lib/og/version.rb +6 -5
  66. data/lib/parts/README +9 -0
  67. data/lib/parts/content.rb +23 -9
  68. data/test/glue/tc_attribute.rb +22 -0
  69. data/test/glue/tc_cache.rb +4 -6
  70. data/test/glue/tc_hash.rb +2 -2
  71. data/test/glue/tc_logger.rb +36 -0
  72. data/test/glue/tc_numbers.rb +2 -2
  73. data/test/glue/tc_property_mixins.rb +35 -4
  74. data/test/glue/tc_strings.rb +32 -32
  75. data/test/glue/tc_validation.rb +186 -0
  76. data/test/nitro/builders/tc_xhtml.rb +38 -0
  77. data/test/nitro/builders/tc_xml.rb +47 -0
  78. data/test/nitro/server/tc_request.rb +2 -2
  79. data/test/nitro/server/tc_session.rb +1 -1
  80. data/test/nitro/tc_sitemap.rb +1 -1
  81. data/test/nitro/ui/tc_pager.rb +1 -10
  82. data/test/tc_og.rb +3 -3
  83. data/vendor/blankslate.rb +53 -0
  84. data/vendor/extensions/_base.rb +153 -0
  85. data/vendor/extensions/_template.rb +36 -0
  86. data/vendor/extensions/all.rb +21 -0
  87. data/vendor/extensions/array.rb +68 -0
  88. data/vendor/extensions/binding.rb +224 -0
  89. data/vendor/extensions/class.rb +50 -0
  90. data/vendor/extensions/continuation.rb +71 -0
  91. data/vendor/extensions/enumerable.rb +250 -0
  92. data/vendor/extensions/hash.rb +23 -0
  93. data/vendor/extensions/io.rb +58 -0
  94. data/vendor/extensions/kernel.rb +42 -0
  95. data/vendor/extensions/module.rb +114 -0
  96. data/vendor/extensions/numeric.rb +230 -0
  97. data/vendor/extensions/object.rb +164 -0
  98. data/vendor/extensions/ostruct.rb +41 -0
  99. data/vendor/extensions/string.rb +316 -0
  100. data/vendor/extensions/symbol.rb +28 -0
  101. metadata +35 -13
  102. data/lib/glue/property.rb.old +0 -307
@@ -0,0 +1,28 @@
1
+ #!/usr/local/bin/ruby -w
2
+ #
3
+ # == extensions/symbol.rb
4
+ #
5
+ # Adds methods to the builtin Symbol class.
6
+ #
7
+
8
+ require "extensions/_base"
9
+
10
+
11
+ #
12
+ # * Symbol#to_proc
13
+ #
14
+ ExtensionsProject.implement(Symbol, :to_proc) do
15
+ class Symbol
16
+ #
17
+ # Allows a Symbol to be implicitly converted to a Proc.
18
+ #
19
+ # This allows such conveniences as:
20
+ # %{john terry fiona}.map(&:capitalize) # -> %{John Terry Fiona}
21
+ # sum = numbers.inject(&:+)
22
+ #
23
+ def to_proc
24
+ proc { |obj, *args| obj.send(self, *args) }
25
+ end
26
+ end
27
+ end
28
+
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.3
2
+ rubygems_version: 0.8.4
3
3
  specification_version: 1
4
4
  name: nitro
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.7.0
7
- date: 2004-12-27
6
+ version: 0.8.0
7
+ date: 2005-01-12
8
8
  summary: Web Engine
9
9
  require_paths:
10
10
  - lib
@@ -107,6 +107,7 @@ files:
107
107
  - examples/blog/root/m/grbull.gif
108
108
  - examples/blog/root/m/footer_bg.gif
109
109
  - examples/blog/lib/blog.rb
110
+ - examples/og/mysql_to_psql.rb
110
111
  - examples/og/run.rb
111
112
  - examples/og/mock_example.rb
112
113
  - examples/og/README
@@ -139,9 +140,11 @@ files:
139
140
  - lib/nitro/service.rb
140
141
  - lib/nitro/markup.rb
141
142
  - lib/nitro/filters.rb
143
+ - lib/nitro/builders/xhtml.rb
142
144
  - lib/nitro/builders/form.rb
143
145
  - lib/nitro/builders/rss.rb
144
146
  - lib/nitro/builders/table.rb
147
+ - lib/nitro/builders/xml.rb
145
148
  - lib/nitro/ui/pager.rb
146
149
  - lib/nitro/ui/date-select.rb
147
150
  - lib/nitro/ui/tabs.rb
@@ -167,6 +170,7 @@ files:
167
170
  - lib/nitro/server/filters/autologin.rb
168
171
  - lib/parts/content.rb
169
172
  - lib/parts/content
173
+ - lib/parts/README
170
174
  - lib/xsl/ui.xsl
171
175
  - lib/xsl/xforms.xsl
172
176
  - lib/xsl/base.xsl
@@ -178,13 +182,15 @@ files:
178
182
  - lib/glue/number.rb
179
183
  - lib/glue/time.rb
180
184
  - lib/glue/property.rb
181
- - lib/glue/property.rb.old
182
185
  - lib/glue/macro.rb
183
186
  - lib/glue/cache.rb
184
187
  - lib/glue/string.rb
185
188
  - lib/glue/array.rb
189
+ - lib/glue/validation.rb
190
+ - lib/glue/attribute.rb
186
191
  - lib/og/backends
187
192
  - lib/og/version.rb
193
+ - lib/og/enchant.rb
188
194
  - lib/og/connection.rb
189
195
  - lib/og/mock.rb
190
196
  - lib/og/meta.rb
@@ -198,10 +204,13 @@ files:
198
204
  - test/nitro/tc_uri.rb
199
205
  - test/nitro/tc_events.rb
200
206
  - test/nitro/tc_http.rb
207
+ - test/nitro/builders
201
208
  - test/nitro/ui
202
209
  - test/nitro/tc_html.rb
203
210
  - test/nitro/server
204
211
  - test/nitro/tc_sitemap.rb
212
+ - test/nitro/builders/tc_xhtml.rb
213
+ - test/nitro/builders/tc_xml.rb
205
214
  - test/nitro/ui/tc_pager.rb
206
215
  - test/nitro/server/tc_request.rb
207
216
  - test/nitro/server/tc_session.rb
@@ -209,25 +218,38 @@ files:
209
218
  - test/nitro/server/tc_filters.rb
210
219
  - test/nitro/server/tc_cookie.rb
211
220
  - test/glue/tc_strings.rb
221
+ - test/glue/tc_logger.rb
222
+ - test/glue/tc_validation.rb
212
223
  - test/glue/tc_property.rb
213
224
  - test/glue/tc_hash.rb
225
+ - test/glue/tc_attribute.rb
214
226
  - test/glue/tc_property_mixins.rb
215
227
  - test/glue/tc_cache.rb
216
228
  - test/glue/tc_numbers.rb
217
229
  - test/og/tc_lifecycle.rb
218
230
  - vendor/breakpoint_client.rb
231
+ - vendor/extensions
219
232
  - vendor/binding_of_caller.rb
220
- - vendor/breakpoint_doc
233
+ - vendor/blankslate.rb
221
234
  - vendor/breakpoint.rb
222
235
  - vendor/README
223
- - vendor/breakpoint_doc/files
224
- - vendor/breakpoint_doc/classes
225
- - vendor/breakpoint_doc/files/breakpoint_rb.src
226
- - vendor/breakpoint_doc/classes/Breakpoint
227
- - vendor/breakpoint_doc/classes/Breakpoint.src
228
- - vendor/breakpoint_doc/classes/Breakpoint/CommandBundle
229
- - vendor/breakpoint_doc/classes/Breakpoint/CommandBundle.src
230
- - vendor/breakpoint_doc/classes/Breakpoint/CommandBundle/Client.src
236
+ - vendor/extensions/enumerable.rb
237
+ - vendor/extensions/all.rb
238
+ - vendor/extensions/hash.rb
239
+ - vendor/extensions/continuation.rb
240
+ - vendor/extensions/module.rb
241
+ - vendor/extensions/binding.rb
242
+ - vendor/extensions/ostruct.rb
243
+ - vendor/extensions/kernel.rb
244
+ - vendor/extensions/class.rb
245
+ - vendor/extensions/numeric.rb
246
+ - vendor/extensions/_base.rb
247
+ - vendor/extensions/io.rb
248
+ - vendor/extensions/string.rb
249
+ - vendor/extensions/object.rb
250
+ - vendor/extensions/array.rb
251
+ - vendor/extensions/symbol.rb
252
+ - vendor/extensions/_template.rb
231
253
  test_files: []
232
254
  rdoc_options:
233
255
  - "--main"
@@ -1,307 +0,0 @@
1
- # code:
2
- # * George Moschovitis <gm@navel.gr>
3
- # design:
4
- # * Anastastios Koutoumanos <ak@navel.gr>
5
- # * Elias Karakoulakis <ekarak@ktismata.com>
6
- #
7
- # (c) 2004 Navel, all rights reserved.
8
- # $Id: property.rb 185 2004-12-10 13:29:09Z gmosx $
9
-
10
- require "glue/array"
11
- require "glue/hash"
12
-
13
- module G
14
-
15
- # = Property
16
- #
17
- # Ruby attributes are typeless and generally this is good. Some times
18
- # we need extra metadata though, for example in relational mapping,
19
- # or web form population.
20
- #
21
- # Only Fixnums, Strings, Floats, Times, Booleans are converted.
22
- #
23
- # The default = methods do not force the types. A special
24
- # __force_set method should be used instead.
25
- #
26
- #--
27
- # TODO:
28
- # Inject only the really needd methods into Module.
29
- # Perhaps a sync is needed in evals (!!!!)
30
- #++
31
- #
32
- class Property
33
- # the symbol of the property
34
- attr_accessor :symbol
35
- # the string representation of the symbol
36
- attr_accessor :name
37
- # the class of the property
38
- attr_accessor :klass
39
- # additional metadata (like sql declaratio, sql index, etc)
40
- attr_accessor :meta
41
-
42
- def initialize(symbol, klass, meta = {})
43
- @symbol, @klass = symbol, klass
44
- @meta = meta
45
- @name = @symbol.to_s()
46
- end
47
-
48
- def ==(other)
49
- return @symbol == other.symbol
50
- end
51
-
52
- def to_s
53
- return name
54
- end
55
- end
56
-
57
- end # module
58
-
59
- class Module
60
-
61
- # Define a property (== typed attribute)
62
- # This works like Ruby's standard attr method, ie creates
63
- # only one property.
64
- #
65
- # Use the prop_reader, prop_writer, prop_accessor methods
66
- # for multiple properties.
67
- #
68
- # Examples:
69
- # prop String, :name, :sql => "char(32), :sql_index => "name(32)"
70
- # --> creates only writer.
71
- # prop Fixnum, :oid, writer = true, :sql => "integer PRIMARY KEY"
72
- # --> creates reader and writer.
73
- #
74
- def prop(*params)
75
- meta = {}
76
- klass = Object
77
-
78
- for param in params
79
- if param.is_a?(Class)
80
- klass = param
81
- elsif param.is_a?(Symbol)
82
- symbol = param
83
- elsif param.is_a?(TrueClass) or param.is_a?(TrueClass)
84
- writer = param
85
- elsif param.is_a?(Hash)
86
- # the meta hash.
87
- meta = param
88
- else
89
- raise "Error when defining property!"
90
- end
91
- end
92
-
93
- unless self.methods.include?(:__props)
94
- eval %{
95
- # Properties
96
- # An array is used to enforce order.
97
- def __props
98
- @__props
99
- end
100
-
101
- def __props=(props)
102
- @__props = props
103
- end
104
-
105
- def __meta
106
- @__meta
107
- end
108
-
109
- def __meta=(meta)
110
- @__meta = meta
111
- end
112
- }
113
- end
114
-
115
- @__props = G::SafeArray.new() unless @__props
116
-
117
- property = G::Property.new(symbol, klass, meta)
118
-
119
- reader = meta[:reader] || true
120
- writer = writer || meta[:writer] || false
121
-
122
- __add_prop(property, reader, writer)
123
- end
124
-
125
- # Helper method. Accepts a collection of symbols and generates
126
- # properties. Only generates reader.
127
- #
128
- # Example:
129
- # prop_reader String, :name, :title, :body, :sql => "char(32)"
130
- #
131
- def prop_reader(*params)
132
- meta = {}
133
- klass = Object
134
- symbols = []
135
-
136
- for param in params
137
- if param.is_a?(Class)
138
- klass = param
139
- elsif param.is_a?(Symbol)
140
- symbols << param
141
- elsif param.is_a?(Hash)
142
- # the meta hash.
143
- meta = param
144
- else
145
- raise "Error when defining property!"
146
- end
147
- end
148
-
149
- meta[:reader] = true
150
- meta[:writer] = false
151
-
152
- for symbol in symbols
153
- prop(klass, symbol, meta)
154
- end
155
- end
156
-
157
- # Helper method. Accepts a collection of symbols and generates
158
- # properties. Only generates writer.
159
- #
160
- # Example:
161
- # prop_writer String, :name, :title, :body, :sql => "char(32)"
162
- #
163
- def prop_writer(*params)
164
- meta = {}
165
- klass = Object
166
- symbols = []
167
-
168
- for param in params
169
- if param.is_a?(Class)
170
- klass = param
171
- elsif param.is_a?(Symbol)
172
- symbols << param
173
- elsif param.is_a?(Hash)
174
- # the meta hash.
175
- meta = param
176
- else
177
- raise "Error when defining property!"
178
- end
179
- end
180
-
181
- meta[:reader] = false
182
- meta[:writer] = true
183
-
184
- for symbol in symbols
185
- prop(klass, symbol, meta)
186
- end
187
- end
188
-
189
- # Helper method. Accepts a collection of symbols and generates
190
- # properties. Generates reader and writer.
191
- #
192
- # Example:
193
- # prop_accessor String, :name, :title, :body, :sql => "char(32)"
194
- #
195
- def prop_accessor(*params)
196
- meta = {}
197
- klass = Object
198
- symbols = []
199
-
200
- for param in params
201
- if param.is_a?(Class)
202
- klass = param
203
- elsif param.is_a?(Symbol)
204
- symbols << param
205
- elsif param.is_a?(Hash)
206
- # the meta hash.
207
- meta = param
208
- else
209
- raise "Error when defining property!"
210
- end
211
- end
212
-
213
- meta[:reader] = true
214
- meta[:writer] = true
215
-
216
- for symbol in symbols
217
- prop(klass, symbol, meta)
218
- end
219
- end
220
-
221
- # Add the property
222
- #
223
- def __add_prop(prop, reader = true, writer = true)
224
- if idx = @__props.index(prop)
225
- # override in case of duplicates. Keep the order of the props.
226
- @__props[idx] = prop
227
- else
228
- @__props << prop
229
- end
230
-
231
- # Precompile the property read/write methods
232
-
233
- s, klass = prop.symbol, prop.klass
234
-
235
- if reader
236
- module_eval %{
237
- def #{s}
238
- return @#{s}
239
- end
240
- }
241
- end
242
-
243
- # gmosx: __force_xxx reuses xxx= to allow for easier
244
- # overrides.
245
- if writer
246
- module_eval %{
247
- def #{s}=(val)
248
- @#{s} = val
249
- end
250
-
251
- def __force_#{s}(val)
252
- self.#{s}=(} + case klass.name
253
- when Fixnum.name
254
- "val.to_i()"
255
- when String.name
256
- "val.to_s()"
257
- when Float.name
258
- "val.to_f()"
259
- when Time.name
260
- "Time.parse(val.to_s())"
261
- when TrueClass.name, FalseClass.name
262
- "val.to_i() > 0"
263
- else
264
- "val"
265
- end + %{)
266
- end
267
- }
268
- end
269
- end
270
-
271
- # Attach metadata
272
- #
273
- def meta(key, val)
274
- @__meta = G::SafeHash.new unless @__meta
275
-
276
- @__meta[key] = [] unless @__meta[key]
277
-
278
- # guard against duplicates, no need to keep order.
279
- @__meta[key].delete_if { |v| val == v }
280
- @__meta[key] << val
281
- end
282
-
283
- # This method is typically called before including other
284
- # modules to preserve properties order.
285
- #
286
- def inherit_meta(mod = superclass)
287
- # concat props.
288
- if mod.__props
289
- @__props = G::SafeArray.new unless @__props
290
-
291
- mod.__props.each { |p|
292
- __add_prop(p)
293
- }
294
- end
295
-
296
- # concat metadata
297
- if mod.__meta
298
- mod.__meta.each { |k, val|
299
- val.each { |v|
300
- meta(k, v)
301
- } if val
302
- }
303
- end
304
- end
305
-
306
- end
307
-