nitro 0.7.0 → 0.8.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.
- data/AUTHORS +14 -4
- data/ChangeLog +192 -1
- data/README +50 -6
- data/RELEASES +60 -0
- data/Rakefile +1 -1
- data/bin/cluster.rb +2 -2
- data/bin/new_form.rb +1 -1
- data/examples/blog/config.rb +5 -4
- data/examples/blog/lib/blog.rb +56 -36
- data/examples/blog/root/comments.xhtml +5 -2
- data/examples/blog/root/entry_form.xhtml +7 -2
- data/examples/blog/root/login.xhtml +1 -1
- data/examples/blog/root/style.xsl +7 -0
- data/examples/og/mock_example.rb +6 -9
- data/examples/og/mysql_to_psql.rb +100 -0
- data/examples/og/run.rb +8 -17
- data/lib/glue.rb +7 -8
- data/lib/glue/array.rb +1 -1
- data/lib/glue/attribute.rb +86 -0
- data/lib/glue/cache.rb +1 -1
- data/lib/glue/hash.rb +1 -1
- data/lib/glue/inflector.rb +1 -1
- data/lib/glue/logger.rb +118 -18
- data/lib/glue/mixins.rb +1 -1
- data/lib/glue/number.rb +1 -1
- data/lib/glue/pool.rb +1 -1
- data/lib/glue/property.rb +48 -31
- data/lib/glue/string.rb +1 -1
- data/lib/glue/time.rb +2 -2
- data/lib/glue/validation.rb +400 -0
- data/lib/nitro/application.rb +6 -6
- data/lib/nitro/builders/form.rb +5 -5
- data/lib/nitro/builders/rss.rb +1 -1
- data/lib/nitro/builders/xhtml.rb +119 -0
- data/lib/nitro/builders/xml.rb +111 -0
- data/lib/nitro/config.rb +6 -6
- data/lib/nitro/events.rb +1 -1
- data/lib/nitro/html.rb +1 -1
- data/lib/nitro/markup.rb +15 -20
- data/lib/nitro/scaffold.rb +2 -2
- data/lib/nitro/server/appserver.rb +3 -3
- data/lib/nitro/server/cluster.rb +2 -2
- data/lib/nitro/server/dispatcher.rb +2 -2
- data/lib/nitro/server/filters/autologin.rb +1 -1
- data/lib/nitro/server/fragment.rb +2 -2
- data/lib/nitro/server/handlers.rb +2 -2
- data/lib/nitro/server/render.rb +17 -15
- data/lib/nitro/server/request.rb +6 -6
- data/lib/nitro/server/script.rb +2 -2
- data/lib/nitro/server/server.rb +2 -2
- data/lib/nitro/server/session.rb +6 -6
- data/lib/nitro/server/shaders.rb +2 -2
- data/lib/nitro/server/webrick.rb +1 -1
- data/lib/nitro/sitemap.rb +2 -2
- data/lib/nitro/uri.rb +1 -1
- data/lib/nitro/version.rb +7 -5
- data/lib/og.rb +95 -129
- data/lib/og/backend.rb +47 -46
- data/lib/og/backends/mysql.rb +64 -63
- data/lib/og/backends/psql.rb +73 -72
- data/lib/og/connection.rb +7 -8
- data/lib/og/enchant.rb +80 -0
- data/lib/og/meta.rb +21 -21
- data/lib/og/mock.rb +31 -88
- data/lib/og/version.rb +6 -5
- data/lib/parts/README +9 -0
- data/lib/parts/content.rb +23 -9
- data/test/glue/tc_attribute.rb +22 -0
- data/test/glue/tc_cache.rb +4 -6
- data/test/glue/tc_hash.rb +2 -2
- data/test/glue/tc_logger.rb +36 -0
- data/test/glue/tc_numbers.rb +2 -2
- data/test/glue/tc_property_mixins.rb +35 -4
- data/test/glue/tc_strings.rb +32 -32
- data/test/glue/tc_validation.rb +186 -0
- data/test/nitro/builders/tc_xhtml.rb +38 -0
- data/test/nitro/builders/tc_xml.rb +47 -0
- data/test/nitro/server/tc_request.rb +2 -2
- data/test/nitro/server/tc_session.rb +1 -1
- data/test/nitro/tc_sitemap.rb +1 -1
- data/test/nitro/ui/tc_pager.rb +1 -10
- data/test/tc_og.rb +3 -3
- data/vendor/blankslate.rb +53 -0
- data/vendor/extensions/_base.rb +153 -0
- data/vendor/extensions/_template.rb +36 -0
- data/vendor/extensions/all.rb +21 -0
- data/vendor/extensions/array.rb +68 -0
- data/vendor/extensions/binding.rb +224 -0
- data/vendor/extensions/class.rb +50 -0
- data/vendor/extensions/continuation.rb +71 -0
- data/vendor/extensions/enumerable.rb +250 -0
- data/vendor/extensions/hash.rb +23 -0
- data/vendor/extensions/io.rb +58 -0
- data/vendor/extensions/kernel.rb +42 -0
- data/vendor/extensions/module.rb +114 -0
- data/vendor/extensions/numeric.rb +230 -0
- data/vendor/extensions/object.rb +164 -0
- data/vendor/extensions/ostruct.rb +41 -0
- data/vendor/extensions/string.rb +316 -0
- data/vendor/extensions/symbol.rb +28 -0
- metadata +35 -13
- 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.
|
|
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
|
-
date:
|
|
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/
|
|
233
|
+
- vendor/blankslate.rb
|
|
221
234
|
- vendor/breakpoint.rb
|
|
222
235
|
- vendor/README
|
|
223
|
-
- vendor/
|
|
224
|
-
- vendor/
|
|
225
|
-
- vendor/
|
|
226
|
-
- vendor/
|
|
227
|
-
- vendor/
|
|
228
|
-
- vendor/
|
|
229
|
-
- vendor/
|
|
230
|
-
- vendor/
|
|
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"
|
data/lib/glue/property.rb.old
DELETED
|
@@ -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
|
-
|