rhodes-framework 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.gitignore +2 -0
  2. data/History.txt +37 -0
  3. data/Manifest.txt +66 -0
  4. data/README.rdoc +2 -0
  5. data/Rakefile +50 -0
  6. data/lib/ServeME.rb +7 -0
  7. data/lib/TestServe.rb +9 -0
  8. data/lib/bsearch.rb +120 -0
  9. data/lib/builtinME.rb +626 -0
  10. data/lib/date/format.rb +1339 -0
  11. data/lib/date.rb +1792 -0
  12. data/lib/dateME.rb +24 -0
  13. data/lib/erb.rb +896 -0
  14. data/lib/find.rb +81 -0
  15. data/lib/rational.rb +19 -0
  16. data/lib/rationalME.rb +530 -0
  17. data/lib/rho/render.rb +51 -0
  18. data/lib/rho/rho.rb +255 -0
  19. data/lib/rho/rhoapplication.rb +36 -0
  20. data/lib/rho/rhocontact.rb +110 -0
  21. data/lib/rho/rhocontroller.rb +35 -0
  22. data/lib/rho/rhofsconnector.rb +32 -0
  23. data/lib/rho/rhosupport.rb +146 -0
  24. data/lib/rho/rhoviewhelpers.rb +130 -0
  25. data/lib/rho.rb +1 -0
  26. data/lib/rhodes-framework.rb +2 -0
  27. data/lib/rhodes.rb +9 -0
  28. data/lib/rhoframework.rb +38 -0
  29. data/lib/rhofsconnector.rb +1 -0
  30. data/lib/rhom/rhom.rb +58 -0
  31. data/lib/rhom/rhom_db_adapter.rb +185 -0
  32. data/lib/rhom/rhom_db_adapterME.rb +93 -0
  33. data/lib/rhom/rhom_object.rb +69 -0
  34. data/lib/rhom/rhom_object_factory.rb +309 -0
  35. data/lib/rhom/rhom_source.rb +60 -0
  36. data/lib/rhom.rb +1 -0
  37. data/lib/singleton.rb +137 -0
  38. data/lib/time.rb +489 -0
  39. data/lib/version.rb +8 -0
  40. data/res/sqlite3/constants.rb +49 -0
  41. data/res/sqlite3/database.rb +715 -0
  42. data/res/sqlite3/driver/dl/api.rb +154 -0
  43. data/res/sqlite3/driver/dl/driver.rb +307 -0
  44. data/res/sqlite3/driver/native/driver.rb +257 -0
  45. data/res/sqlite3/errors.rb +68 -0
  46. data/res/sqlite3/pragmas.rb +271 -0
  47. data/res/sqlite3/resultset.rb +176 -0
  48. data/res/sqlite3/sqlite3_api.rb +0 -0
  49. data/res/sqlite3/statement.rb +230 -0
  50. data/res/sqlite3/translator.rb +109 -0
  51. data/res/sqlite3/value.rb +57 -0
  52. data/res/sqlite3/version.rb +14 -0
  53. data/rhodes-framework.gemspec +18 -0
  54. data/rhodes.gemspec +18 -0
  55. data/spec/app_manifest.txt +4 -0
  56. data/spec/configs/account.rb +3 -0
  57. data/spec/configs/case.rb +3 -0
  58. data/spec/configs/employee.rb +3 -0
  59. data/spec/rho_controller_spec.rb +144 -0
  60. data/spec/rho_spec.rb +75 -0
  61. data/spec/rhom_object_factory_spec.rb +372 -0
  62. data/spec/rhom_spec.rb +45 -0
  63. data/spec/spec.opts +1 -0
  64. data/spec/spec_helper.rb +49 -0
  65. data/spec/stubs.rb +39 -0
  66. data/spec/syncdbtest.sqlite +0 -0
  67. metadata +202 -0
data/lib/find.rb ADDED
@@ -0,0 +1,81 @@
1
+ #
2
+ # find.rb: the Find module for processing all files under a given directory.
3
+ #
4
+
5
+ #
6
+ # The +Find+ module supports the top-down traversal of a set of file paths.
7
+ #
8
+ # For example, to total the size of all files under your home directory,
9
+ # ignoring anything in a "dot" directory (e.g. $HOME/.ssh):
10
+ #
11
+ # require 'find'
12
+ #
13
+ # total_size = 0
14
+ #
15
+ # Find.find(ENV["HOME"]) do |path|
16
+ # if FileTest.directory?(path)
17
+ # if File.basename(path)[0] == ?.
18
+ # Find.prune # Don't look any further into this directory.
19
+ # else
20
+ # next
21
+ # end
22
+ # else
23
+ # total_size += FileTest.size(path)
24
+ # end
25
+ # end
26
+ #
27
+ module Find
28
+
29
+ #
30
+ # Calls the associated block with the name of every file and directory listed
31
+ # as arguments, then recursively on their subdirectories, and so on.
32
+ #
33
+ # See the +Find+ module documentation for an example.
34
+ #
35
+ def find(*paths) # :yield: path
36
+ block_given? or return enum_for(__method__, *paths)
37
+
38
+ paths.collect!{|d| raise Errno::ENOENT unless File.exist?(d); d.dup}
39
+ while file = paths.shift
40
+ catch(:prune) do
41
+ yield file.dup.taint
42
+ next unless File.exist? file
43
+ begin
44
+ if File.lstat(file).directory? then
45
+ d = Dir.open(file)
46
+ begin
47
+ for f in d
48
+ next if f == "." or f == ".."
49
+ if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
50
+ f = file + f
51
+ elsif file == "/" then
52
+ f = "/" + f
53
+ else
54
+ f = File.join(file, f)
55
+ end
56
+ paths.unshift f.untaint
57
+ end
58
+ ensure
59
+ d.close
60
+ end
61
+ end
62
+ rescue Errno::ENOENT, Errno::EACCES
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ #
69
+ # Skips the current file or directory, restarting the loop with the next
70
+ # entry. If the current file is a directory, that directory will not be
71
+ # recursively entered. Meaningful only within the block associated with
72
+ # Find::find.
73
+ #
74
+ # See the +Find+ module documentation for an example.
75
+ #
76
+ def prune
77
+ throw :prune
78
+ end
79
+
80
+ module_function :find, :prune
81
+ end
data/lib/rational.rb ADDED
@@ -0,0 +1,19 @@
1
+ class Fixnum
2
+
3
+ alias quof fdiv
4
+ alias rdiv quo
5
+
6
+ alias power! **
7
+ alias rpower **
8
+
9
+ end
10
+
11
+ class Bignum
12
+
13
+ alias quof fdiv
14
+ alias rdiv quo
15
+
16
+ alias power! **
17
+ alias rpower **
18
+
19
+ end
data/lib/rationalME.rb ADDED
@@ -0,0 +1,530 @@
1
+ #
2
+ # rational.rb -
3
+ # $Release Version: 0.5 $
4
+ # $Revision: 1.7 $
5
+ # $Date: 1999/08/24 12:49:28 $
6
+ # by Keiju ISHITSUKA(SHL Japan Inc.)
7
+ #
8
+ # Documentation by Kevin Jackson and Gavin Sinclair.
9
+ #
10
+ # When you <tt>require 'rational'</tt>, all interactions between numbers
11
+ # potentially return a rational result. For example:
12
+ #
13
+ # 1.quo(2) # -> 0.5
14
+ # require 'rational'
15
+ # 1.quo(2) # -> Rational(1,2)
16
+ #
17
+ # See Rational for full documentation.
18
+ #
19
+
20
+
21
+ #
22
+ # Creates a Rational number (i.e. a fraction). +a+ and +b+ should be Integers:
23
+ #
24
+ # Rational(1,3) # -> 1/3
25
+ #
26
+ # Note: trying to construct a Rational with floating point or real values
27
+ # produces errors:
28
+ #
29
+ # Rational(1.1, 2.3) # -> NoMethodError
30
+ #
31
+ def Rational(a, b = 1)
32
+ if a.kind_of?(Rational) && b == 1
33
+ a
34
+ else
35
+ Rational.reduce(a, b)
36
+ end
37
+ end
38
+
39
+ #
40
+ # Rational implements a rational class for numbers.
41
+ #
42
+ # <em>A rational number is a number that can be expressed as a fraction p/q
43
+ # where p and q are integers and q != 0. A rational number p/q is said to have
44
+ # numerator p and denominator q. Numbers that are not rational are called
45
+ # irrational numbers.</em> (http://mathworld.wolfram.com/RationalNumber.html)
46
+ #
47
+ # To create a Rational Number:
48
+ # Rational(a,b) # -> a/b
49
+ # Rational.new!(a,b) # -> a/b
50
+ #
51
+ # Examples:
52
+ # Rational(5,6) # -> 5/6
53
+ # Rational(5) # -> 5/1
54
+ #
55
+ # Rational numbers are reduced to their lowest terms:
56
+ # Rational(6,10) # -> 3/5
57
+ #
58
+ # But not if you use the unusual method "new!":
59
+ # Rational.new!(6,10) # -> 6/10
60
+ #
61
+ # Division by zero is obviously not allowed:
62
+ # Rational(3,0) # -> ZeroDivisionError
63
+ #
64
+ class Rational < Numeric
65
+ @RCS_ID='-$Id: rational.rb,v 1.7 1999/08/24 12:49:28 keiju Exp keiju $-'
66
+
67
+ #
68
+ # Reduces the given numerator and denominator to their lowest terms. Use
69
+ # Rational() instead.
70
+ #
71
+ def Rational.reduce(num, den = 1)
72
+ raise ZeroDivisionError, "denominator is zero" if den == 0
73
+
74
+ if den < 0
75
+ num = -num
76
+ den = -den
77
+ end
78
+ gcd = num.gcd(den)
79
+ num = num.div(gcd)
80
+ den = den.div(gcd)
81
+ if den == 1 && defined?(Unify)
82
+ num
83
+ else
84
+ new!(num, den)
85
+ end
86
+ end
87
+
88
+ #
89
+ # Implements the constructor. This method does not reduce to lowest terms or
90
+ # check for division by zero. Therefore #Rational() should be preferred in
91
+ # normal use.
92
+ #
93
+ def Rational.new!(num, den = 1)
94
+ new(num, den)
95
+ end
96
+
97
+ private_class_method :new
98
+
99
+ #
100
+ # This method is actually private.
101
+ #
102
+ def initialize(num, den)
103
+ if den < 0
104
+ num = -num
105
+ den = -den
106
+ end
107
+ if num.kind_of?(Integer) and den.kind_of?(Integer)
108
+ @numerator = num
109
+ @denominator = den
110
+ else
111
+ @numerator = num.to_i
112
+ @denominator = den.to_i
113
+ end
114
+ end
115
+
116
+ #
117
+ # Returns the addition of this value and +a+.
118
+ #
119
+ # Examples:
120
+ # r = Rational(3,4) # -> Rational(3,4)
121
+ # r + 1 # -> Rational(7,4)
122
+ # r + 0.5 # -> 1.25
123
+ #
124
+ def + (a)
125
+ if a.kind_of?(Rational)
126
+ num = @numerator * a.denominator
127
+ num_a = a.numerator * @denominator
128
+ Rational(num + num_a, @denominator * a.denominator)
129
+ elsif a.kind_of?(Integer)
130
+ self + Rational.new!(a, 1)
131
+ elsif a.kind_of?(Float)
132
+ Float(self) + a
133
+ else
134
+ x, y = a.coerce(self)
135
+ x + y
136
+ end
137
+ end
138
+
139
+ #
140
+ # Returns the difference of this value and +a+.
141
+ # subtracted.
142
+ #
143
+ # Examples:
144
+ # r = Rational(3,4) # -> Rational(3,4)
145
+ # r - 1 # -> Rational(-1,4)
146
+ # r - 0.5 # -> 0.25
147
+ #
148
+ def - (a)
149
+ if a.kind_of?(Rational)
150
+ num = @numerator * a.denominator
151
+ num_a = a.numerator * @denominator
152
+ Rational(num - num_a, @denominator*a.denominator)
153
+ elsif a.kind_of?(Integer)
154
+ self - Rational.new!(a, 1)
155
+ elsif a.kind_of?(Float)
156
+ Float(self) - a
157
+ else
158
+ x, y = a.coerce(self)
159
+ x - y
160
+ end
161
+ end
162
+
163
+ #
164
+ # Returns the product of this value and +a+.
165
+ #
166
+ # Examples:
167
+ # r = Rational(3,4) # -> Rational(3,4)
168
+ # r * 2 # -> Rational(3,2)
169
+ # r * 4 # -> Rational(3,1)
170
+ # r * 0.5 # -> 0.375
171
+ # r * Rational(1,2) # -> Rational(3,8)
172
+ #
173
+ def * (a)
174
+ if a.kind_of?(Rational)
175
+ num = @numerator * a.numerator
176
+ den = @denominator * a.denominator
177
+ Rational(num, den)
178
+ elsif a.kind_of?(Integer)
179
+ self * Rational.new!(a, 1)
180
+ elsif a.kind_of?(Float)
181
+ Float(self) * a
182
+ else
183
+ x, y = a.coerce(self)
184
+ x * y
185
+ end
186
+ end
187
+
188
+ #
189
+ # Returns the quotient of this value and +a+.
190
+ # r = Rational(3,4) # -> Rational(3,4)
191
+ # r / 2 # -> Rational(3,8)
192
+ # r / 2.0 # -> 0.375
193
+ # r / Rational(1,2) # -> Rational(3,2)
194
+ #
195
+ def / (a)
196
+ if a.kind_of?(Rational)
197
+ num = @numerator * a.denominator
198
+ den = @denominator * a.numerator
199
+ Rational(num, den)
200
+ elsif a.kind_of?(Integer)
201
+ raise ZeroDivisionError, "division by zero" if a == 0
202
+ self / Rational.new!(a, 1)
203
+ elsif a.kind_of?(Float)
204
+ Float(self) / a
205
+ else
206
+ x, y = a.coerce(self)
207
+ x / y
208
+ end
209
+ end
210
+
211
+ #
212
+ # Returns this value raised to the given power.
213
+ #
214
+ # Examples:
215
+ # r = Rational(3,4) # -> Rational(3,4)
216
+ # r ** 2 # -> Rational(9,16)
217
+ # r ** 2.0 # -> 0.5625
218
+ # r ** Rational(1,2) # -> 0.866025403784439
219
+ #
220
+ def ** (other)
221
+ if other.kind_of?(Rational)
222
+ Float(self) ** other
223
+ elsif other.kind_of?(Integer)
224
+ if other > 0
225
+ num = @numerator ** other
226
+ den = @denominator ** other
227
+ elsif other < 0
228
+ num = @denominator ** -other
229
+ den = @numerator ** -other
230
+ elsif other == 0
231
+ num = 1
232
+ den = 1
233
+ end
234
+ Rational.new!(num, den)
235
+ elsif other.kind_of?(Float)
236
+ Float(self) ** other
237
+ else
238
+ x, y = other.coerce(self)
239
+ x ** y
240
+ end
241
+ end
242
+
243
+ #
244
+ # Returns the remainder when this value is divided by +other+.
245
+ #
246
+ # Examples:
247
+ # r = Rational(7,4) # -> Rational(7,4)
248
+ # r % Rational(1,2) # -> Rational(1,4)
249
+ # r % 1 # -> Rational(3,4)
250
+ # r % Rational(1,7) # -> Rational(1,28)
251
+ # r % 0.26 # -> 0.19
252
+ #
253
+ def % (other)
254
+ value = (self / other).to_i
255
+ return self - other * value
256
+ end
257
+
258
+ #
259
+ # Returns the quotient _and_ remainder.
260
+ #
261
+ # Examples:
262
+ # r = Rational(7,4) # -> Rational(7,4)
263
+ # r.divmod Rational(1,2) # -> [3, Rational(1,4)]
264
+ #
265
+ def divmod(other)
266
+ value = (self / other).to_i
267
+ return value, self - other * value
268
+ end
269
+
270
+ #
271
+ # Returns the absolute value.
272
+ #
273
+ def abs
274
+ if @numerator > 0
275
+ Rational.new!(@numerator, @denominator)
276
+ else
277
+ Rational.new!(-@numerator, @denominator)
278
+ end
279
+ end
280
+
281
+ #
282
+ # Returns +true+ iff this value is numerically equal to +other+.
283
+ #
284
+ # But beware:
285
+ # Rational(1,2) == Rational(4,8) # -> true
286
+ # Rational(1,2) == Rational.new!(4,8) # -> false
287
+ #
288
+ # Don't use Rational.new!
289
+ #
290
+ def == (other)
291
+ if other.kind_of?(Rational)
292
+ @numerator == other.numerator and @denominator == other.denominator
293
+ elsif other.kind_of?(Integer)
294
+ self == Rational.new!(other, 1)
295
+ elsif other.kind_of?(Float)
296
+ Float(self) == other
297
+ else
298
+ other == self
299
+ end
300
+ end
301
+
302
+ #
303
+ # Standard comparison operator.
304
+ #
305
+ def <=> (other)
306
+ if other.kind_of?(Rational)
307
+ num = @numerator * other.denominator
308
+ num_a = other.numerator * @denominator
309
+ v = num - num_a
310
+ if v > 0
311
+ return 1
312
+ elsif v < 0
313
+ return -1
314
+ else
315
+ return 0
316
+ end
317
+ elsif other.kind_of?(Integer)
318
+ return self <=> Rational.new!(other, 1)
319
+ elsif other.kind_of?(Float)
320
+ return Float(self) <=> other
321
+ elsif defined? other.coerce
322
+ x, y = other.coerce(self)
323
+ return x <=> y
324
+ else
325
+ return nil
326
+ end
327
+ end
328
+
329
+ def coerce(other)
330
+ if other.kind_of?(Float)
331
+ return other, self.to_f
332
+ elsif other.kind_of?(Integer)
333
+ return Rational.new!(other, 1), self
334
+ else
335
+ super
336
+ end
337
+ end
338
+
339
+ #
340
+ # Converts the rational to an Integer. Not the _nearest_ integer, the
341
+ # truncated integer. Study the following example carefully:
342
+ # Rational(+7,4).to_i # -> 1
343
+ # Rational(-7,4).to_i # -> -2
344
+ # (-1.75).to_i # -> -1
345
+ #
346
+ # In other words:
347
+ # Rational(-7,4) == -1.75 # -> true
348
+ # Rational(-7,4).to_i == (-1.75).to_i # false
349
+ #
350
+ def to_i
351
+ Integer(@numerator.div(@denominator))
352
+ end
353
+
354
+ #
355
+ # Converts the rational to a Float.
356
+ #
357
+ def to_f
358
+ @numerator.to_f/@denominator.to_f
359
+ end
360
+
361
+ #
362
+ # Returns a string representation of the rational number.
363
+ #
364
+ # Example:
365
+ # Rational(3,4).to_s # "3/4"
366
+ # Rational(8).to_s # "8"
367
+ #
368
+ def to_s
369
+ if @denominator == 1
370
+ @numerator.to_s
371
+ else
372
+ @numerator.to_s+"/"+@denominator.to_s
373
+ end
374
+ end
375
+
376
+ #
377
+ # Returns +self+.
378
+ #
379
+ def to_r
380
+ self
381
+ end
382
+
383
+ #
384
+ # Returns a reconstructable string representation:
385
+ #
386
+ # Rational(5,8).inspect # -> "Rational(5, 8)"
387
+ #
388
+ def inspect
389
+ sprintf("Rational(%s, %s)", @numerator.inspect, @denominator.inspect)
390
+ end
391
+
392
+ #
393
+ # Returns a hash code for the object.
394
+ #
395
+ def hash
396
+ @numerator.hash ^ @denominator.hash
397
+ end
398
+
399
+ attr :numerator
400
+ attr :denominator
401
+
402
+ private :initialize
403
+ end
404
+
405
+ class Integer
406
+ #
407
+ # In an integer, the value _is_ the numerator of its rational equivalent.
408
+ # Therefore, this method returns +self+.
409
+ #
410
+ def numerator
411
+ self
412
+ end
413
+
414
+ #
415
+ # In an integer, the denominator is 1. Therefore, this method returns 1.
416
+ #
417
+ def denominator
418
+ 1
419
+ end
420
+
421
+ #
422
+ # Returns a Rational representation of this integer.
423
+ #
424
+ def to_r
425
+ Rational(self, 1)
426
+ end
427
+
428
+ #
429
+ # Returns the <em>greatest common denominator</em> of the two numbers (+self+
430
+ # and +n+).
431
+ #
432
+ # Examples:
433
+ # 72.gcd 168 # -> 24
434
+ # 19.gcd 36 # -> 1
435
+ #
436
+ # The result is positive, no matter the sign of the arguments.
437
+ #
438
+ def gcd(other)
439
+ min = self.abs
440
+ max = other.abs
441
+ while min > 0
442
+ tmp = min
443
+ min = max % min
444
+ max = tmp
445
+ end
446
+ max
447
+ end
448
+
449
+ #
450
+ # Returns the <em>lowest common multiple</em> (LCM) of the two arguments
451
+ # (+self+ and +other+).
452
+ #
453
+ # Examples:
454
+ # 6.lcm 7 # -> 42
455
+ # 6.lcm 9 # -> 18
456
+ #
457
+ def lcm(other)
458
+ if self.zero? or other.zero?
459
+ 0
460
+ else
461
+ (self.div(self.gcd(other)) * other).abs
462
+ end
463
+ end
464
+
465
+ #
466
+ # Returns the GCD _and_ the LCM (see #gcd and #lcm) of the two arguments
467
+ # (+self+ and +other+). This is more efficient than calculating them
468
+ # separately.
469
+ #
470
+ # Example:
471
+ # 6.gcdlcm 9 # -> [3, 18]
472
+ #
473
+ def gcdlcm(other)
474
+ gcd = self.gcd(other)
475
+ if self.zero? or other.zero?
476
+ [gcd, 0]
477
+ else
478
+ [gcd, (self.div(gcd) * other).abs]
479
+ end
480
+ end
481
+ end
482
+
483
+ class Fixnum
484
+ undef quo
485
+ # If Rational is defined, returns a Rational number instead of a Fixnum.
486
+ def quo(other)
487
+ Rational.new!(self,1) / other
488
+ end
489
+ alias rdiv quo
490
+
491
+ # Returns a Rational number if the result is in fact rational (i.e. +other+ < 0).
492
+ def rpower (other)
493
+ if other >= 0
494
+ self.power!(other)
495
+ else
496
+ Rational.new!(self,1)**other
497
+ end
498
+ end
499
+
500
+ unless defined? 1.power!
501
+ alias power! **
502
+ alias ** rpower
503
+ end
504
+ end
505
+
506
+ class Bignum
507
+ unless defined? Complex
508
+ alias power! **
509
+ end
510
+
511
+ undef quo
512
+ # If Rational is defined, returns a Rational number instead of a Bignum.
513
+ def quo(other)
514
+ Rational.new!(self,1) / other
515
+ end
516
+ alias rdiv quo
517
+
518
+ # Returns a Rational number if the result is in fact rational (i.e. +other+ < 0).
519
+ def rpower (other)
520
+ if other >= 0
521
+ self.power!(other)
522
+ else
523
+ Rational.new!(self, 1)**other
524
+ end
525
+ end
526
+
527
+ unless defined? Complex
528
+ alias ** rpower
529
+ end
530
+ end
data/lib/rho/render.rb ADDED
@@ -0,0 +1,51 @@
1
+ require 'rho/rhoapplication'
2
+
3
+ module Rho
4
+ class RhoController
5
+
6
+ def self.layout(name)
7
+ @layout = name
8
+ end
9
+
10
+ def self.get_layout_name
11
+ @layout.nil? ? 'layout' : @layout
12
+ end
13
+
14
+ def self.renderfile(filename)
15
+ if File.extname(filename) == '.iseq'
16
+ render_index(filename)
17
+ else
18
+ IO.read(filename)
19
+ end
20
+ end
21
+
22
+ def self.render_index(filename)
23
+ layout = File.dirname(filename) + "/layout_erb.iseq"
24
+ @content = eval_compiled_file(filename, binding)
25
+ @content = eval_compiled_file(layout, binding) if File.exist?(layout)
26
+ @content
27
+ end
28
+
29
+ def render(options = nil)
30
+ options = {} if options.nil? or !options.is_a?(Hash)
31
+ options[:action] = :index if options[:action].nil?
32
+
33
+ @content = eval_compiled_file(@request[:modelpath]+options[:action].to_s+'_erb.iseq', binding )
34
+
35
+ if xhr? and options[:use_layout_on_ajax] != true
36
+ options[:layout] = false
37
+ elsif options[:layout].nil? or options[:layout] == true
38
+ options[:layout] = self.class.get_layout_name
39
+ end
40
+
41
+ if options[:layout] != false
42
+ layoutfile = RhoApplication::get_app_path(@request['application']) + options[:layout].to_s + "_erb.iseq"
43
+ puts 'Layout file: ' + layoutfile
44
+ @content = eval_compiled_file(layoutfile, binding ) if File.exist?(layoutfile)
45
+ end
46
+
47
+ @content
48
+ end
49
+
50
+ end # RhoController
51
+ end # Rho