rhodes 0.2.0 → 0.2.1

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/Manifest.txt CHANGED
@@ -6,7 +6,8 @@ Rakefile
6
6
  bin/rhogen
7
7
  generators/rhogen.rb
8
8
  generators/templates/application/application.rb
9
- generators/templates/application/index.html
9
+ generators/templates/application/index.erb
10
+ generators/templates/application/layout.erb
10
11
  generators/templates/model/config.rb
11
12
  generators/templates/model/controller.rb
12
13
  generators/templates/model/edit.erb
@@ -21,6 +22,7 @@ lib/date/format.rb
21
22
  lib/erb.rb
22
23
  lib/find.rb
23
24
  lib/rational.rb
25
+ lib/rationalME.rb
24
26
  lib/rho.rb
25
27
  lib/rho/render.rb
26
28
  lib/rho/rho.rb
@@ -29,6 +31,7 @@ lib/rho/rhocontact.rb
29
31
  lib/rho/rhocontroller.rb
30
32
  lib/rho/rhofsconnector.rb
31
33
  lib/rho/rhosupport.rb
34
+ lib/rho/rhoviewhelpers.rb
32
35
  lib/rho/settings_controller.rb
33
36
  lib/rhodes.rb
34
37
  lib/rhoframework.rb
data/generators/rhogen.rb CHANGED
@@ -2,119 +2,124 @@ require 'rubygems'
2
2
  require 'templater'
3
3
 
4
4
  module Rhogen
5
-
5
+
6
6
  extend Templater::Manifold
7
-
7
+
8
8
  desc <<-DESC
9
9
  Generate rhodes application
10
10
  DESC
11
-
11
+
12
12
  class BaseGenerator < Templater::Generator
13
13
  def class_name
14
14
  name.gsub('-', '_').camel_case
15
15
  end
16
-
16
+
17
17
  alias_method :module_name, :class_name
18
18
  end
19
-
19
+
20
20
  class AppGenerator < BaseGenerator
21
-
21
+
22
22
  def self.source_root
23
23
  File.join(File.dirname(__FILE__), 'templates', 'application')
24
24
  end
25
-
25
+
26
26
  desc <<-DESC
27
27
  Generates a new rhodes application. This will create a new directory with two files:
28
28
  application.rb and index.html
29
29
  DESC
30
-
30
+
31
31
  #option :testing_framework, :desc => 'Specify which testing framework to use (spec, test_unit)'
32
-
32
+
33
33
  first_argument :name, :required => true, :desc => "application name"
34
-
34
+
35
35
  template :application do |template|
36
36
  template.source = 'application.rb'
37
37
  template.destination = "#{name}/application.rb"
38
38
  end
39
-
39
+
40
40
  template :index do |template|
41
- template.source = 'index.html'
42
- template.destination = "#{name}/index.html"
41
+ template.source = 'index.erb'
42
+ template.destination = "#{name}/index.erb"
43
+ end
44
+
45
+ template :layout do |template|
46
+ template.source = 'layout.erb'
47
+ template.destination = "#{name}/layout.erb"
43
48
  end
44
-
49
+
45
50
  end
46
-
51
+
47
52
  class ModelGenerator < BaseGenerator
48
-
53
+
49
54
  def self.source_root
50
55
  File.join(File.dirname(__FILE__), 'templates', 'model')
51
56
  end
52
-
57
+
53
58
  desc <<-DESC
54
- Generates a new model for a given source. You must specify name, source_url, and source_id.
59
+ Generates a new model for a given source. You must specify name, source_url, and source_id.
55
60
  You can also specify an optional attribute list in the form: 'attribute1', 'attribute2', 'attribute3'...
56
61
  DESC
57
-
62
+
58
63
  #option :testing_framework, :desc => 'Specify which testing framework to use (spec, test_unit)'
59
-
64
+
60
65
  first_argument :name, :required => true, :desc => "model name"
61
66
  second_argument :source_url, :required => true, :desc => "source url"
62
67
  third_argument :source_id, :required => true, :desc => "source id"
63
68
  fourth_argument :attributes, :as => :array, :default => [], :required => false, :desc => "array of attributes (only string suppported right now)"
64
-
69
+
65
70
  template :config do |template|
66
71
  template.source = 'config.rb'
67
72
  template.destination = "#{name.camel_case}/config.rb"
68
73
  end
69
-
74
+
70
75
  template :index do |template|
71
76
  template.source = 'index.erb'
72
77
  template.destination = "#{name.camel_case}/index.erb"
73
78
  end
74
-
79
+
75
80
  template :edit do |template|
76
81
  template.source = 'edit.erb'
77
82
  template.destination = "#{name.camel_case}/edit.erb"
78
83
  end
79
-
84
+
80
85
  template :new do |template|
81
86
  template.source = 'new.erb'
82
87
  template.destination = "#{name.camel_case}/new.erb"
83
88
  end
84
-
89
+
85
90
  template :controller do |template|
86
91
  template.source = 'controller.rb'
87
92
  template.destination = "#{name.camel_case}/controller.rb"
88
93
  end
89
-
94
+
90
95
  def attributes?
91
96
  self.attributes && !self.attributes.empty?
92
97
  end
93
-
98
+
94
99
  end
95
-
100
+
96
101
  class SourceGenerator < BaseGenerator
97
102
  def self.source_root
98
103
  File.join(File.dirname(__FILE__), 'templates', 'source')
99
104
  end
100
-
105
+
101
106
  desc <<-DESC
102
- Generates a new source adapter with the given name and attributes. You must specify name.
107
+ Generates a new source adapter with the given name and attributes. You must specify name.
103
108
  You can also specify an optional attribute list in the form: 'attribute1', 'attribute2', 'attribute3'...
104
109
  DESC
105
-
110
+
106
111
  first_argument :name, :required => true, :desc => "model name"
107
112
  second_argument :attributes, :as => :array, :default => [], :required => false, :desc => "array of attributes (only string suppported right now)"
108
-
113
+
109
114
  template :config do |template|
110
115
  template.source = 'source_adapter.rb'
111
116
  template.destination = "lib/#{name.snake_case}.rb"
112
117
  end
113
-
118
+
114
119
  end
115
-
120
+
116
121
  add :app, AppGenerator
117
122
  add :model, ModelGenerator
118
123
  add :source, SourceGenerator
119
-
124
+
120
125
  end
@@ -0,0 +1,11 @@
1
+ <div class="toolbar">
2
+ <h1 id="pageTitle">
3
+ <script language="JavaScript">
4
+ document.write(document.title)
5
+ </script>
6
+ </h1>
7
+ <a id="backButton" class="button" href="./"></a>
8
+ </div>
9
+ <ul id="home" selected="true" title="<%= class_name %>">
10
+ <li>Something interesting here...</li>
11
+ </ul>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+ <head>
5
+ <title><%= class_name %></title>
6
+ <% if System::get_property('platform') == 'APPLE' %>
7
+ <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
8
+ <style type="text/css" media="screen">@import "/shared/js/iui/iui.css"; @import "/shared/css/rho.css";</style>
9
+ <script type="application/x-javascript" src="/shared/js/iui/iui.js"></script>
10
+ <script src="/shared/js/jquery-1.2.6.min.js"></script>
11
+ <script src="/shared/js/rho.js"></script>
12
+ <% end %>
13
+ </head>
14
+ <body>
15
+ <%= @content %>
16
+ </body>
17
+ </html>
@@ -1,11 +1,11 @@
1
1
  require 'rho/rhocontroller'
2
2
 
3
3
  class <%= class_name %>Controller < Rho::RhoController
4
-
4
+
5
5
  #GET /<%= class_name %>
6
6
  def index
7
7
  @<%= name.pluralize %> = <%= class_name %>.find(:all)
8
- render :index
8
+ render
9
9
  end
10
10
 
11
11
  # GET /<%= class_name %>/1
@@ -16,13 +16,13 @@ class <%= class_name %>Controller < Rho::RhoController
16
16
  # GET /<%= class_name %>/new
17
17
  def new
18
18
  @<%= name %> = <%= class_name %>.new
19
- render :new
19
+ render :action => :new
20
20
  end
21
21
 
22
22
  # GET /<%= class_name %>/1/edit
23
23
  def edit
24
24
  @<%= name %> = <%= class_name %>.find(@params['id'])
25
- render :edit
25
+ render :action => :edit
26
26
  end
27
27
 
28
28
  # POST /<%= class_name %>/create
data/lib/builtinME.rb CHANGED
@@ -99,10 +99,38 @@ module Enumerable
99
99
 
100
100
  alias map :collect
101
101
 
102
+ def max(&proc)
103
+ proc = lambda { |a, b| a <=> b } unless block_given?
104
+ max = nil
105
+ each {|obj| max = obj if max.nil? || proc.call(max, obj) < 0}
106
+ max
107
+ end
108
+
109
+ def min(&proc)
110
+ proc = lambda { |a, b| a <=> b } unless block_given?
111
+ min = nil
112
+ each {|obj| min = obj if min.nil? || proc.call(min, obj) > 0}
113
+ min
114
+ end
115
+
102
116
  end
103
117
 
104
118
  class Array
105
- alias size length
119
+ alias reject! delete_if
120
+
121
+ def reject
122
+ a = []
123
+ each {|x|
124
+ if !yield x
125
+ a << x
126
+ end
127
+ }
128
+ a
129
+ end
130
+
131
+ def to_a
132
+ self
133
+ end
106
134
 
107
135
  def join(sepString="")
108
136
  return to_s if sepString.nil? || sepString == ""
@@ -116,6 +144,9 @@ class Array
116
144
  end
117
145
 
118
146
  alias map! collect!
147
+ alias size length
148
+ alias to_ary to_a
149
+ alias to_s inspect
119
150
 
120
151
  def inspect
121
152
  str = "["
@@ -129,7 +160,6 @@ class Array
129
160
  }
130
161
  str << "]"
131
162
  end
132
- alias to_s inspect
133
163
 
134
164
  end
135
165
 
@@ -501,6 +531,37 @@ class String
501
531
  def inspect
502
532
  '"' + to_s + '"'
503
533
  end
534
+
535
+ #from rubinius
536
+ # justify left = -1, center = 0, right = 1
537
+ def justify_string(width, str, justify)
538
+ return self if width <= length
539
+ pad = width - length
540
+ out = str.to_str * (pad / str.length)
541
+ out << str[0, pad - out.length] if out.length < pad
542
+ # Left justification
543
+ return self << out if justify == -1
544
+ # Right justification
545
+ return out << self if justify == 1
546
+ # and finially center
547
+ split = (width / 2) - (length / 2)
548
+ return out.insert(split-((width-length)%2), self)
549
+ end
550
+
551
+ #from rubinius
552
+ def rjust(width, str=" ")
553
+ justify_string(width, str, 1)
554
+ end
555
+
556
+ #from rubinius
557
+ def ljust(width, str=" ")
558
+ justify_string(width, str, -1)
559
+ end
560
+
561
+ #from rubinius
562
+ def center(width, str=" ")
563
+ justify_string(width, str, 0)
564
+ end
504
565
 
505
566
  alias to_str to_s
506
567
  alias size length
data/lib/date/format.rb CHANGED
@@ -5,8 +5,12 @@ require 'rational'
5
5
 
6
6
  class Date
7
7
 
8
+ #SECONDS_IN_DAY = 60*60*24
9
+ #SECONDS_IN_DAY = Rational(1, 86400)
10
+
8
11
  module Format # :nodoc:
9
12
 
13
+
10
14
  MONTHS = {
11
15
  'january' => 1, 'february' => 2, 'march' => 3, 'april' => 4,
12
16
  'may' => 5, 'june' => 6, 'july' => 7, 'august' => 8,
@@ -245,7 +249,7 @@ class Date
245
249
  when 'e', 'Oe'; emit_a(mday, 2, f)
246
250
  when 'F'
247
251
  if m == '%F'
248
- format('%.4d-%02d-%02d', year, mon, mday) # 4p
252
+ format('%.4d-%02d-%02d', year(), mon(), mday()) # 4p
249
253
  else
250
254
  emit_a(strftime('%Y-%m-%d'), 0, f)
251
255
  end
@@ -277,11 +281,11 @@ class Date
277
281
  when 'r'; emit_a(strftime('%I:%M:%S %p'), 0, f)
278
282
  when 'S', 'OS'; emit_n(sec, 2, f)
279
283
  when 's'
280
- s = ((ajd - UNIX_EPOCH_IN_AJD) / SECONDS_IN_DAY).round
284
+ s = ((ajd - UNIX_EPOCH_IN_AJD) / Rational(1, 86400)).round
281
285
  emit_sn(s, 1, f)
282
286
  when 'T'
283
287
  if m == '%T'
284
- format('%02d:%02d:%02d', hour, min, sec) # 4p
288
+ format('%02d:%02d:%02d', hour(), min(), sec()) # 4p
285
289
  else
286
290
  emit_a(strftime('%H:%M:%S'), 0, f)
287
291
  end
@@ -301,7 +305,7 @@ class Date
301
305
  t = $1.size
302
306
  sign = if offset < 0 then -1 else +1 end
303
307
  fr = offset.abs
304
- ss = fr.div(SECONDS_IN_DAY) # 4p
308
+ ss = fr.div(Rational(1, 86400)) # 4p
305
309
  hh, ss = ss.divmod(3600)
306
310
  mm, ss = ss.divmod(60)
307
311
  if t == 3
data/lib/date.rb CHANGED
@@ -193,6 +193,10 @@
193
193
  #
194
194
  # puts secs_to_new_year()
195
195
 
196
+ if defined? RHO_ME
197
+ require 'rationalME'
198
+ end
199
+
196
200
  require 'rational'
197
201
  require 'date/format'
198
202
 
@@ -387,8 +391,8 @@ class Date
387
391
  end
388
392
  a = (y / 100.0).floor
389
393
  b = 2 - a + (a / 4.0).floor
390
- jd = (365.25 * (y + 4716)).floor +
391
- (30.6001 * (m + 1)).floor +
394
+ jd = (365.25 * (y + 4716)).floor() +
395
+ (30.6001 * (m + 1)).floor() +
392
396
  d + b - 1524
393
397
  if jd < sg
394
398
  jd -= b
@@ -499,7 +503,7 @@ class Date
499
503
  # Returns the Astronomical Julian Day Number as a single
500
504
  # numeric value.
501
505
  def jd_to_ajd(jd, fr, of=0) jd + fr - of - 1.to_r/2 end # :nodoc:
502
-
506
+
503
507
  # Convert a fractional day +fr+ to [hours, minutes, seconds,
504
508
  # fraction_of_a_second]
505
509
  def day_fraction_to_time(fr) # :nodoc:
@@ -1137,7 +1141,7 @@ class Date
1137
1141
  #trv once :jd, :day_fraction, :mjd, :ld
1138
1142
 
1139
1143
  # Get the date as a Civil Date, [year, month, day_of_month]
1140
- def civil() jd_to_civil(jd, @sg) end # :nodoc:
1144
+ def civil() jd_to_civil(jd(), @sg) end # :nodoc:
1141
1145
 
1142
1146
  # Get the date as an Ordinal Date, [year, day_of_year]
1143
1147
  def ordinal() jd_to_ordinal(jd, @sg) end # :nodoc:
@@ -1393,7 +1397,7 @@ class Date
1393
1397
  def next_year(n=1) self >> n * 12 end
1394
1398
  def prev_year(n=1) self << n * 12 end
1395
1399
 
1396
- require 'enumerator'
1400
+ #require 'enumerator'
1397
1401
 
1398
1402
  # Step the current date forward +step+ days at a
1399
1403
  # time (or backward, if +step+ is negative) until
@@ -1517,8 +1521,9 @@ class DateTime < Date
1517
1521
  #
1518
1522
  # All day/time values default to 0.
1519
1523
  def self.jd(jd=0, h=0, min=0, s=0, of=0, sg=ITALY)
1524
+ fr = _valid_time?(h, min, s)
1520
1525
  unless (jd = _valid_jd?(jd, sg)) &&
1521
- (fr = _valid_time?(h, min, s))
1526
+ (fr)
1522
1527
  raise ArgumentError, 'invalid date'
1523
1528
  end
1524
1529
  if String === of
@@ -1542,8 +1547,9 @@ class DateTime < Date
1542
1547
  # +y+ defaults to -4712, and +d+ to 1; this is Julian Day Number
1543
1548
  # day 0. The time values default to 0.
1544
1549
  def self.ordinal(y=-4712, d=1, h=0, min=0, s=0, of=0, sg=ITALY)
1550
+ fr = _valid_time?(h, min, s)
1545
1551
  unless (jd = _valid_ordinal?(y, d, sg)) &&
1546
- (fr = _valid_time?(h, min, s))
1552
+ (fr)
1547
1553
  raise ArgumentError, 'invalid date'
1548
1554
  end
1549
1555
  if String === of
@@ -1567,8 +1573,9 @@ class DateTime < Date
1567
1573
  # +y+ defaults to -4712, +m+ to 1, and +d+ to 1; this is Julian Day
1568
1574
  # Number day 0. The time values default to 0.
1569
1575
  def self.civil(y=-4712, m=1, d=1, h=0, min=0, s=0, of=0, sg=ITALY)
1576
+ fr = _valid_time?(h, min, s)
1570
1577
  unless (jd = _valid_civil?(y, m, d, sg)) &&
1571
- (fr = _valid_time?(h, min, s))
1578
+ (fr)
1572
1579
  raise ArgumentError, 'invalid date'
1573
1580
  end
1574
1581
  if String === of
@@ -1595,8 +1602,9 @@ class DateTime < Date
1595
1602
  # Julian Day Number day 0.
1596
1603
  # The time values default to 0.
1597
1604
  def self.commercial(y=-4712, w=1, d=1, h=0, min=0, s=0, of=0, sg=ITALY)
1605
+ fr = _valid_time?(h, min, s)
1598
1606
  unless (jd = _valid_commercial?(y, w, d, sg)) &&
1599
- (fr = _valid_time?(h, min, s))
1607
+ (fr)
1600
1608
  raise ArgumentError, 'invalid date'
1601
1609
  end
1602
1610
  if String === of
@@ -1606,8 +1614,9 @@ class DateTime < Date
1606
1614
  end
1607
1615
 
1608
1616
  def self.weeknum(y=-4712, w=0, d=1, f=0, h=0, min=0, s=0, of=0, sg=ITALY) # :nodoc:
1617
+ fr = _valid_time?(h, min, s)
1609
1618
  unless (jd = _valid_weeknum?(y, w, d, f, sg)) &&
1610
- (fr = _valid_time?(h, min, s))
1619
+ (fr)
1611
1620
  raise ArgumentError, 'invalid date'
1612
1621
  end
1613
1622
  if String === of
@@ -1619,8 +1628,9 @@ class DateTime < Date
1619
1628
  private_class_method :weeknum
1620
1629
 
1621
1630
  def self.nth_kday(y=-4712, m=1, n=1, k=1, h=0, min=0, s=0, of=0, sg=ITALY) # :nodoc:
1631
+ fr = _valid_time?(h, min, s)
1622
1632
  unless (jd = _valid_nth_kday?(y, m, n, k, sg)) &&
1623
- (fr = _valid_time?(h, min, s))
1633
+ (fr)
1624
1634
  raise ArgumentError, 'invalid date'
1625
1635
  end
1626
1636
  if String === of
@@ -1634,8 +1644,9 @@ class DateTime < Date
1634
1644
  def self.new_by_frags(elem, sg) # :nodoc:
1635
1645
  elem = rewrite_frags(elem)
1636
1646
  elem = complete_frags(elem)
1647
+ fr = valid_time_frags?(elem)
1637
1648
  unless (jd = valid_date_frags?(elem, sg)) &&
1638
- (fr = valid_time_frags?(elem))
1649
+ (fr)
1639
1650
  raise ArgumentError, 'invalid date'
1640
1651
  end
1641
1652
  sf = (elem[:sec_fraction] || 0)
@@ -1732,8 +1743,8 @@ class Time
1732
1743
  end
1733
1744
 
1734
1745
  def to_datetime
1735
- jd = DateTime.__send__(:civil_to_jd, year, mon, mday, DateTime::ITALY)
1736
- fr = DateTime.__send__(:time_to_day_fraction, hour, min, [sec, 59].min) +
1746
+ jd = DateTime.__send__(:civil_to_jd, year(), mon(), mday(), DateTime::ITALY)
1747
+ fr = DateTime.__send__(:time_to_day_fraction, hour(), min(), [sec, 59].min) +
1737
1748
  nsec.to_r/86400_000_000_000
1738
1749
  of = utc_offset.to_r/86400
1739
1750
  DateTime.new!(DateTime.__send__(:jd_to_ajd, jd, fr, of),