rhodes-framework 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/Manifest.txt +8 -2
- data/README.txt +1 -0
- data/Rakefile +6 -30
- data/lib/builtinME.rb +67 -5
- data/lib/date.rb +121 -80
- data/lib/date/format.rb +44 -42
- data/lib/dateME.rb +2 -1
- data/lib/erb.rb +278 -238
- data/lib/rational.rb +2 -2
- data/lib/rho/rho.rb +59 -24
- data/lib/rho/rhoapplication.rb +13 -4
- data/lib/rho/rhocontroller.rb +7 -3
- data/lib/rho/rhoerror.rb +33 -0
- data/lib/rho/rhoutils.rb +5 -2
- data/lib/rhodes.rb +2 -2
- data/lib/rhom/rhom.rb +24 -11
- data/lib/rhom/rhom_db_adapter.rb +56 -23
- data/lib/rhom/rhom_object.rb +3 -32
- data/lib/rhom/rhom_object_factory.rb +154 -154
- data/lib/rhom/rhom_source.rb +9 -9
- data/lib/singleton.rb +3 -3
- data/lib/time.rb +20 -2
- data/lib/version.rb +2 -2
- data/spec/app/mspec/matchers/raise_error.rb +2 -1
- data/spec/app/spec/fixtures/object_values.txt +2 -2
- data/spec/app/spec/pagination/fixtures/object_values.txt +91 -0
- data/spec/app/spec/rho_controller_spec.rb +2 -2
- data/spec/app/spec/rho_spec.rb +8 -3
- data/spec/app/spec/rhom_db_adapter_spec.rb +27 -0
- data/spec/app/spec/{rhom_object_factory_spec.rb → rhom_object_spec.rb} +125 -10
- data/spec/app/spec/rhom_spec.rb +19 -8
- data/spec/app/spec/rhoruby_spec.rb +31 -0
- data/spec/app/spec/spec_helper.rb +2 -1
- data/spec/app/spec/syncengine_spec.rb +30 -0
- data/spec/app/spec_runner.rb +9 -5
- data/spec/build.yml +3 -2
- data/spec/rhoconfig.txt +2 -0
- metadata +19 -83
- data/lib/rhom/rhom_db_adapterME.rb +0 -92
data/lib/rhom/rhom_source.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rhom/rhom_object'
|
|
3
3
|
|
4
4
|
module Rhom
|
5
5
|
class RhomSource
|
6
|
-
include RhomObject
|
6
|
+
include ::Rhom::RhomObject
|
7
7
|
attr_accessor :source_url
|
8
8
|
attr_reader :source_id, :name, :last_updated, :last_inserted_size,
|
9
9
|
:last_deleted_size, :last_sync_duration,
|
@@ -25,14 +25,14 @@ module Rhom
|
|
25
25
|
@last_sync_duration = args['last_sync_duration'].to_i
|
26
26
|
@last_sync_success = args['last_sync_success'].to_i == 1 ? true : false
|
27
27
|
@distinct_objects = ::Rhom::RhomDbAdapter::select_from_table(
|
28
|
-
|
28
|
+
'object_values',
|
29
29
|
'object',
|
30
30
|
{"source_id"=>@source_id},
|
31
31
|
{"distinct"=>true}).length
|
32
32
|
end
|
33
33
|
|
34
34
|
class << self
|
35
|
-
include RhomObject
|
35
|
+
include ::Rhom::RhomObject
|
36
36
|
def find(*args)
|
37
37
|
list = []
|
38
38
|
if args.first == :all
|
@@ -48,12 +48,12 @@ module Rhom
|
|
48
48
|
end
|
49
49
|
list.size > 1 ? list : list[0]
|
50
50
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
|
52
|
+
def update_attributes(params=nil)
|
53
|
+
if params
|
54
|
+
::Rhom::RhomDbAdapter::update_into_table('sources', {"source_url"=>params['source_url']},
|
55
|
+
{"source_id"=>strip_braces(params['source_id'])})
|
56
|
+
end
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
data/lib/singleton.rb
CHANGED
@@ -9,9 +9,9 @@
|
|
9
9
|
# * this ensures that only one instance of Klass lets call it
|
10
10
|
# ``the instance'' can be created.
|
11
11
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# a,b = Klass.instance, Klass.instance
|
13
|
+
# a == b # => true
|
14
|
+
# Klass.new # NoMethodError - new is private ...
|
15
15
|
#
|
16
16
|
# * ``The instance'' is created at instantiation time, in other
|
17
17
|
# words the first call of Klass.instance(), thus
|
data/lib/time.rb
CHANGED
@@ -87,8 +87,26 @@ class Time
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def zone_utc?(zone)
|
90
|
-
# * +0000
|
91
|
-
#
|
90
|
+
# * +0000
|
91
|
+
# In RFC 2822, +0000 indicate a time zone at Universal Time.
|
92
|
+
# Europe/London is "a time zone at Universal Time" in Winter.
|
93
|
+
# Europe/Lisbon is "a time zone at Universal Time" in Winter.
|
94
|
+
# Atlantic/Reykjavik is "a time zone at Universal Time".
|
95
|
+
# Africa/Dakar is "a time zone at Universal Time".
|
96
|
+
# So +0000 is a local time such as Europe/London, etc.
|
97
|
+
# * GMT
|
98
|
+
# GMT is used as a time zone abbreviation in Europe/London,
|
99
|
+
# Africa/Dakar, etc.
|
100
|
+
# So it is a local time.
|
101
|
+
#
|
102
|
+
# * -0000, -00:00
|
103
|
+
# In RFC 2822, -0000 the date-time contains no information about the
|
104
|
+
# local time zone.
|
105
|
+
# In RFC 3339, -00:00 is used for the time in UTC is known,
|
106
|
+
# but the offset to local time is unknown.
|
107
|
+
# They are not appropriate for specific time zone such as
|
108
|
+
# Europe/London because time zone neutral,
|
109
|
+
# So -00:00 and -0000 are treated as UTC.
|
92
110
|
if /\A(?:-00:00|-0000|-00|UTC|Z|UT)\z/i =~ zone
|
93
111
|
true
|
94
112
|
else
|
data/lib/version.rb
CHANGED
@@ -41,7 +41,7 @@ id|source_id|attrib|object|value|update_type|attrib_type
|
|
41
41
|
-8943188|1|phone_alternate|44e804f2-4933-4e20-271c-48fcecd9450d||query|
|
42
42
|
63546948|1|billing_address_state|44e804f2-4933-4e20-271c-48fcecd9450d||query|
|
43
43
|
114237576|1|modified_user_id|44e804f2-4933-4e20-271c-48fcecd9450d|1|query|
|
44
|
-
220076107|1|description|44e804f2-4933-4e20-271c-48fcecd9450d
|
44
|
+
220076107|1|description|44e804f2-4933-4e20-271c-48fcecd9450d|Hello description!|query|
|
45
45
|
326182291|1|modified_by_name|44e804f2-4933-4e20-271c-48fcecd9450d|admin|query|
|
46
46
|
517349454|1|employees|44e804f2-4933-4e20-271c-48fcecd9450d||query|
|
47
47
|
596458092|1|shipping_address_postalcode|44e804f2-4933-4e20-271c-48fcecd9450d||query|
|
@@ -53,7 +53,7 @@ id|source_id|attrib|object|value|update_type|attrib_type
|
|
53
53
|
1065948343|1|created_by_name|44e804f2-4933-4e20-271c-48fcecd9450d|admin|query|
|
54
54
|
1072561171|1|shipping_address_state|44e804f2-4933-4e20-271c-48fcecd9450d||query|
|
55
55
|
-1036293295|1|phone_fax|63cf13da-cff4-99e7-f946-48fcec93f1cc||query|
|
56
|
-
-1015063951|1|description|63cf13da-cff4-99e7-f946-48fcec93f1cc
|
56
|
+
-1015063951|1|description|63cf13da-cff4-99e7-f946-48fcec93f1cc|NULL|query|
|
57
57
|
-992493612|1|ownership|63cf13da-cff4-99e7-f946-48fcec93f1cc||query|
|
58
58
|
-991176969|1|date_modified|63cf13da-cff4-99e7-f946-48fcec93f1cc|2008-10-22 20:30:48|query|
|
59
59
|
-981671585|1|billing_address_city|63cf13da-cff4-99e7-f946-48fcec93f1cc|Mountain View|query|
|
@@ -0,0 +1,91 @@
|
|
1
|
+
id|source_id|attrib|object|value|update_type|attrib_type
|
2
|
+
3974518272|1|name|722182959|i6mu98hel8|query|
|
3
|
+
4664309006|1|address|722182959|s8ganw9i49|query|
|
4
|
+
589446524|1|industry|722182959|v2zjhoetsk|query|
|
5
|
+
3876717954|1|name|7480317731|79nqr7ekzr|query|
|
6
|
+
1047652407|1|address|7480317731|emv1tezmdf|query|
|
7
|
+
7940339732|1|industry|7480317731|1zg7f7q6ib|query|
|
8
|
+
1453307208|1|name|9703256901|m9ibat6pln|query|
|
9
|
+
5456472891|1|address|9703256901|ksoi86kwyc|query|
|
10
|
+
6075196515|1|industry|9703256901|zl2zw45pn6|query|
|
11
|
+
5230840089|1|name|3195084835|pjpl6sobl3|query|
|
12
|
+
1929483477|1|address|3195084835|46kknwty4n|query|
|
13
|
+
9740966958|1|industry|3195084835|96st4bu34a|query|
|
14
|
+
7554672898|1|name|8219349185|cfcau6hu6q|query|
|
15
|
+
4262441275|1|address|8219349185|5ubw1mbmou|query|
|
16
|
+
2432667078|1|industry|8219349185|tmm1oniagk|query|
|
17
|
+
2040389189|1|name|3788304956|c2z5izd8w9|query|
|
18
|
+
7210816262|1|address|3788304956|6rd9nv8dml|query|
|
19
|
+
4077709208|1|industry|3788304956|hxua4d6ttl|query|
|
20
|
+
484525050|1|name|8027894003|5h9na4kko4|query|
|
21
|
+
374989352|1|address|8027894003|ch5y19t1am|query|
|
22
|
+
4571097261|1|industry|8027894003|andru1w2mh|query|
|
23
|
+
9443114267|1|name|1624803503|uvwfd2wg9m|query|
|
24
|
+
4130674901|1|address|1624803503|ugw28merrh|query|
|
25
|
+
9576733217|1|industry|1624803503|xtu32wf5jz|query|
|
26
|
+
2916529985|1|name|582939287|9o8eqtit6t|query|
|
27
|
+
8567865384|1|address|582939287|gijtz958h5|query|
|
28
|
+
96887757|1|industry|582939287|u4ymg2m2zi|query|
|
29
|
+
7641527628|1|name|8763523348|39afj8vbj6|query|
|
30
|
+
3849164324|1|address|8763523348|x7jincp3xj|query|
|
31
|
+
6241904090|1|industry|8763523348|sge128jo9o|query|
|
32
|
+
7519723638|1|name|4177558452|n7v3cp7tv9|query|
|
33
|
+
9188001335|1|address|4177558452|9xzm6x951r|query|
|
34
|
+
9651970835|1|industry|4177558452|lcm13yye47|query|
|
35
|
+
8238171029|1|name|9559781556|koelvv2o9b|query|
|
36
|
+
7812936798|1|address|9559781556|a195i7az2q|query|
|
37
|
+
7630562848|1|industry|9559781556|rikqunzzd1|query|
|
38
|
+
9679383363|1|name|5440884324|a8ndhdim5d|query|
|
39
|
+
3088649963|1|address|5440884324|xywggb3pjs|query|
|
40
|
+
5492167833|1|industry|5440884324|xjaivb6tn4|query|
|
41
|
+
871068039|1|name|3286353653|uc7tak51ya|query|
|
42
|
+
9666820827|1|address|3286353653|eu4dm28hnw|query|
|
43
|
+
3879374462|1|industry|3286353653|nj3cjxsemo|query|
|
44
|
+
1927465246|1|name|9897778878|n5qx54qcye|query|
|
45
|
+
9107742171|1|address|9897778878|stzc1x7upn|query|
|
46
|
+
4005202237|1|industry|9897778878|9kdinrjlcx|query|
|
47
|
+
9411476383|1|name|1439722928|6ls8u98dfd|query|
|
48
|
+
6118455758|1|address|1439722928|s28czydd5y|query|
|
49
|
+
3105418573|1|industry|1439722928|uelsjlq4ps|query|
|
50
|
+
4618953217|1|name|1715509841|doiwnygkz1|query|
|
51
|
+
3202706158|1|address|1715509841|nu97261eix|query|
|
52
|
+
9826021200|1|industry|1715509841|b3m4sswkg9|query|
|
53
|
+
644887737|1|name|532060249|bad8ei15oc|query|
|
54
|
+
7472846965|1|address|532060249|fci62a3i2g|query|
|
55
|
+
5745448554|1|industry|532060249|cz4n2udhp1|query|
|
56
|
+
848581571|1|name|892827894|igjernnrke|query|
|
57
|
+
9292713023|1|address|892827894|8bhxhtd3qw|query|
|
58
|
+
9611544405|1|industry|892827894|tp535844r8|query|
|
59
|
+
5229692242|1|name|3119932988|9ayg49v9tx|query|
|
60
|
+
9600330393|1|address|3119932988|go72f9az69|query|
|
61
|
+
2073992524|1|industry|3119932988|rwyk7udigr|query|
|
62
|
+
2613952071|1|name|5277763718|c1ekv44ald|query|
|
63
|
+
5504223361|1|address|5277763718|kohrans65v|query|
|
64
|
+
3339356668|1|industry|5277763718|ml2ghjs1yk|query|
|
65
|
+
4557519944|1|name|4654600856|ushf7xcah6|query|
|
66
|
+
4775818524|1|address|4654600856|4lfxmtllja|query|
|
67
|
+
1133728008|1|industry|4654600856|o1b39qjvjr|query|
|
68
|
+
1069996400|1|name|1655351781|4k2c5yfc8f|query|
|
69
|
+
7837083732|1|address|1655351781|sczu2hfdyj|query|
|
70
|
+
8927726574|1|industry|1655351781|ekctzoz4m8|query|
|
71
|
+
5780896975|1|name|1309838006|e88yfcytke|query|
|
72
|
+
4274270111|1|address|1309838006|booh7m2fit|query|
|
73
|
+
519751842|1|industry|1309838006|hl6vj2ax4e|query|
|
74
|
+
7646452151|1|name|8903473873|lmptpbx53p|query|
|
75
|
+
2782146309|1|address|8903473873|bxd7mermv5|query|
|
76
|
+
8949644025|1|industry|8903473873|4r6zbfz99e|query|
|
77
|
+
6984271752|1|name|9229834060|92zmxntghe|query|
|
78
|
+
9941761060|1|address|9229834060|23gutsl1n3|query|
|
79
|
+
8712994862|1|industry|9229834060|zyrwtn24je|query|
|
80
|
+
8535323717|1|name|5736612273|7t7yepm6wb|query|
|
81
|
+
1216942042|1|address|5736612273|pm6ybo5eoh|query|
|
82
|
+
5513088546|1|industry|5736612273|xj3y2udqqd|query|
|
83
|
+
8711188148|1|name|7529312408|1fgbzmyf9k|query|
|
84
|
+
5091631871|1|address|7529312408|8mr6hhd4ep|query|
|
85
|
+
9736561282|1|industry|7529312408|7r56i8dkqd|query|
|
86
|
+
174146755|1|name|1553806230|j5sc8ii27l|query|
|
87
|
+
6963850495|1|address|1553806230|n2jovgvmw9|query|
|
88
|
+
9394990834|1|industry|1553806230|xusnhhgrgz|query|
|
89
|
+
7825564826|1|name|527579259|dgx6foa3bw|query|
|
90
|
+
4011313493|1|address|527579259|bcgi7t4e3e|query|
|
91
|
+
3633057181|1|industry|527579259|ozjdrljgm2|query|
|
@@ -27,7 +27,7 @@ describe "Rho::RhoController" do
|
|
27
27
|
before do
|
28
28
|
@c = Rho::RhoController.new
|
29
29
|
@c.stub!(:send).and_return(nil)
|
30
|
-
@c.serve(nil,{'application' => 'application', 'model' => 'model'},{})
|
30
|
+
@c.serve(AppApplication.new,nil,{'application' => 'application', 'model' => 'model'},{})
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should generate urls for empty params" do
|
@@ -112,7 +112,7 @@ describe "Rho::RhoController" do
|
|
112
112
|
@response['headers'] = {}
|
113
113
|
@c = Rho::RhoController.new
|
114
114
|
@c.stub!(:send).and_return(nil)
|
115
|
-
@c.serve(nil,{'application' => 'application', 'model' => 'model'},@response)
|
115
|
+
@c.serve(AppApplication.new,nil,{'application' => 'application', 'model' => 'model'},@response)
|
116
116
|
end
|
117
117
|
|
118
118
|
it "should redirect to a url" do
|
data/spec/app/spec/rho_spec.rb
CHANGED
@@ -22,7 +22,8 @@ require 'spec/spec_helper'
|
|
22
22
|
describe "Rho" do
|
23
23
|
|
24
24
|
before(:each) do
|
25
|
-
Rho::RhoConfig.config =
|
25
|
+
Rho::RhoConfig.config['start_path'] = '/app'
|
26
|
+
Rho::RhoConfig.config['options_path'] = '/app/Settings'
|
26
27
|
end
|
27
28
|
|
28
29
|
it "should populate configuration in sources table" do
|
@@ -39,7 +40,7 @@ describe "Rho" do
|
|
39
40
|
end
|
40
41
|
|
41
42
|
it "should set start_path" do
|
42
|
-
Rho::RhoConfig.
|
43
|
+
Rho::RhoConfig.start_path = '/foo/bar'
|
43
44
|
Rho::RhoConfig.start_path.should == '/foo/bar'
|
44
45
|
end
|
45
46
|
|
@@ -48,7 +49,11 @@ describe "Rho" do
|
|
48
49
|
end
|
49
50
|
|
50
51
|
it "should set options_path" do
|
51
|
-
Rho::RhoConfig.
|
52
|
+
Rho::RhoConfig.options_path = '/ops2'
|
52
53
|
Rho::RhoConfig.options_path.should == '/ops2'
|
53
54
|
end
|
55
|
+
|
56
|
+
it "should read arbitrary options" do
|
57
|
+
Rho::RhoConfig.arbitrary_option.should == 'rhodes rocks!'
|
58
|
+
end
|
54
59
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# rhom_db_adapter_spec.rb
|
3
|
+
# rhodes
|
4
|
+
#
|
5
|
+
# Copyright (C) 2008 Rhomobile, Inc. All rights reserved.
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
require 'spec/spec_helper'
|
21
|
+
|
22
|
+
# describe "RhomDbAdapter" do
|
23
|
+
#
|
24
|
+
# it "should return attributes as columns" do
|
25
|
+
#
|
26
|
+
# end
|
27
|
+
# end
|
@@ -17,8 +17,9 @@
|
|
17
17
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
require 'spec/spec_helper'
|
20
|
+
require 'rhom'
|
20
21
|
|
21
|
-
describe "Rhom::
|
22
|
+
describe "Rhom::RhomObject" do
|
22
23
|
|
23
24
|
it_should_behave_like "rhom initializer"
|
24
25
|
|
@@ -58,21 +59,30 @@ describe "Rhom::RhomObjectFactory" do
|
|
58
59
|
results[1].industry.should == "Technology"
|
59
60
|
end
|
60
61
|
|
62
|
+
it "should respond to find_all" do
|
63
|
+
results = Account.find_all
|
64
|
+
results.length.should == 2
|
65
|
+
results[0].name.should == "Mobio India"
|
66
|
+
results[0].industry.should == "Technology"
|
67
|
+
results[1].name.should == "Aeroprise"
|
68
|
+
results[1].industry.should == "Technology"
|
69
|
+
end
|
70
|
+
|
61
71
|
it "should have correct number of attributes" do
|
62
72
|
@account = Account.find(:all).first
|
63
73
|
|
64
|
-
@account.
|
74
|
+
@account.vars.size.should == 37
|
65
75
|
end
|
66
76
|
|
67
77
|
it "should get count of objects" do
|
68
78
|
Account.count.should == 2
|
69
79
|
end
|
70
80
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
81
|
+
it "should raise RecordNotFound error if nil given as find argument" do
|
82
|
+
lambda {
|
83
|
+
Account.find(nil)
|
84
|
+
}.should raise_error(::Rhom::RecordNotFound)
|
85
|
+
end
|
76
86
|
|
77
87
|
it "should create multiple records offline" do
|
78
88
|
vars = {"name"=>"foobarthree", "industry"=>"entertainment"}
|
@@ -94,6 +104,19 @@ describe "Rhom::RhomObjectFactory" do
|
|
94
104
|
acct.industry.should == 'solar'
|
95
105
|
end
|
96
106
|
|
107
|
+
it "should create records with no attribs in database" do
|
108
|
+
::Rhom::RhomDbAdapter.delete_all_from_table('object_values')
|
109
|
+
res = ::Rhom::RhomDbAdapter.select_from_table('object_values',"*")
|
110
|
+
res.length.should == 0
|
111
|
+
vars = {"name"=>"foobarthree", "industry"=>"entertainment"}
|
112
|
+
account = Account.new(vars)
|
113
|
+
obj = account.object
|
114
|
+
account.save
|
115
|
+
acct = Account.find(obj)
|
116
|
+
acct.name.should == 'foobarthree'
|
117
|
+
acct.industry.should == 'entertainment'
|
118
|
+
end
|
119
|
+
|
97
120
|
it "should create a record" do
|
98
121
|
vars = {"name"=>"some new record", "industry"=>"electronics"}
|
99
122
|
@account1 = Account.new(vars)
|
@@ -349,6 +372,13 @@ describe "Rhom::RhomObjectFactory" do
|
|
349
372
|
@accts[1].industry.should == "Technology"
|
350
373
|
end
|
351
374
|
|
375
|
+
it "should find with multiple conditions" do
|
376
|
+
@accts = Account.find(:all, :conditions => {'name' => 'Mobio India', 'industry' => 'Technology'})
|
377
|
+
@accts.length.should == 1
|
378
|
+
@accts[0].name.should == "Mobio India"
|
379
|
+
@accts[0].industry.should == "Technology"
|
380
|
+
end
|
381
|
+
|
352
382
|
it "should find first with conditions" do
|
353
383
|
@mobio_ind_acct = Account.find(:first, :conditions => {'name' => 'Mobio India'})
|
354
384
|
@mobio_ind_acct.name.should == "Mobio India"
|
@@ -407,7 +437,7 @@ describe "Rhom::RhomObjectFactory" do
|
|
407
437
|
|
408
438
|
@accts[0].name.should == "Mobio India"
|
409
439
|
@accts[0].industry.should be_nil
|
410
|
-
@accts[0].
|
440
|
+
@accts[0].vars.length.should == 2
|
411
441
|
end
|
412
442
|
|
413
443
|
it "should include only selected columns" do
|
@@ -416,7 +446,7 @@ describe "Rhom::RhomObjectFactory" do
|
|
416
446
|
@accts[0].name.should == "Mobio India"
|
417
447
|
@accts[0].industry.should == "Technology"
|
418
448
|
@accts[0].shipping_address_street.should be_nil
|
419
|
-
@accts[0].
|
449
|
+
@accts[0].vars.length.should == 3
|
420
450
|
end
|
421
451
|
|
422
452
|
it "should include selected columns and conditions" do
|
@@ -425,6 +455,91 @@ describe "Rhom::RhomObjectFactory" do
|
|
425
455
|
@accts[0].name.should == "Mobio India"
|
426
456
|
@accts[0].industry.should == "Technology"
|
427
457
|
@accts[0].shipping_address_street.should be_nil
|
428
|
-
@accts[0].
|
458
|
+
@accts[0].vars.length.should == 3
|
459
|
+
end
|
460
|
+
|
461
|
+
it "should support find with conditions => nil" do
|
462
|
+
@accts = Account.find(:all, :conditions => {'description' => nil})
|
463
|
+
@accts.length.should == 1
|
464
|
+
@accts[0].name.should == "Aeroprise"
|
465
|
+
@accts[0].industry.should == "Technology"
|
466
|
+
end
|
467
|
+
|
468
|
+
it "should support sql conditions arg" do
|
469
|
+
@accts = Account.find(:all, :conditions => "name = 'Mobio India'")
|
470
|
+
@accts.length.should == 1
|
471
|
+
@accts[0].name.should == "Mobio India"
|
472
|
+
@accts[0].industry.should == "Technology"
|
473
|
+
end
|
474
|
+
|
475
|
+
it "should support complex sql conditions arg" do
|
476
|
+
@accts = Account.find(:all, :conditions => "name like 'Mobio%'")
|
477
|
+
@accts.length.should == 1
|
478
|
+
@accts[0].name.should == "Mobio India"
|
479
|
+
@accts[0].industry.should == "Technology"
|
480
|
+
end
|
481
|
+
|
482
|
+
it "should support sql conditions single filter" do
|
483
|
+
@accts = Account.find(:all, :conditions => ["name like ?", "'Mob%'"])
|
484
|
+
@accts.length.should == 1
|
485
|
+
@accts[0].name.should == "Mobio India"
|
486
|
+
@accts[0].industry.should == "Technology"
|
487
|
+
end
|
488
|
+
|
489
|
+
it "should support sql conditions with multiple filters" do
|
490
|
+
@accts = Account.find(:all, :conditions => ["name like ? and industry like ?", "'Mob%'", "'Tech%'"])
|
491
|
+
@accts.length.should == 1
|
492
|
+
@accts[0].name.should == "Mobio India"
|
493
|
+
@accts[0].industry.should == "Technology"
|
494
|
+
end
|
495
|
+
|
496
|
+
describe "Rhom#paginate" do
|
497
|
+
before(:each) do
|
498
|
+
Rho::RhoUtils.load_offline_data(['object_values'], 'spec/pagination')
|
499
|
+
end
|
500
|
+
|
501
|
+
after(:each) do
|
502
|
+
Rhom::RhomDbAdapter.start_transaction
|
503
|
+
Rhom::RhomDbAdapter.delete_all_from_table('client_info')
|
504
|
+
Rhom::RhomDbAdapter.delete_all_from_table('object_values')
|
505
|
+
Rhom::RhomDbAdapter.commit
|
506
|
+
end
|
507
|
+
|
508
|
+
@expected = [{:object => '3788304956', :name => 'c2z5izd8w9', :address => '6rd9nv8dml', :industry => 'hxua4d6ttl'},
|
509
|
+
{:object => '7480317731', :name => '79nqr7ekzr', :address => 'emv1tezmdf', :industry => '1zg7f7q6ib'},
|
510
|
+
{:object => '9897778878', :name => 'n5qx54qcye', :address => 'stzc1x7upn', :industry => '9kdinrjlcx'}]
|
511
|
+
|
512
|
+
it "should support paginate with no options" do
|
513
|
+
3.times do |x|
|
514
|
+
@accts = Account.paginate(:page => x)
|
515
|
+
@accts.length.should == 10
|
516
|
+
@accts[9].object.should == "{#{@expected[x][:object]}}"
|
517
|
+
@accts[9].name.should == @expected[x][:name]
|
518
|
+
@accts[9].address.should == @expected[x][:address]
|
519
|
+
@accts[9].industry.should == @expected[x][:industry]
|
520
|
+
end
|
521
|
+
@accts = Account.paginate(:page => 3)
|
522
|
+
@accts.length.should == 0
|
523
|
+
end
|
524
|
+
|
525
|
+
it "should support paginate with options" do
|
526
|
+
@accts = Account.paginate(:page => 0, :per_page => 20)
|
527
|
+
@accts.length.should == 20
|
528
|
+
@accts[9].object.should == "{#{@expected[0][:object]}}"
|
529
|
+
@accts[9].name.should == @expected[0][:name]
|
530
|
+
@accts[9].address.should == @expected[0][:address]
|
531
|
+
@accts[9].industry.should == @expected[0][:industry]
|
532
|
+
@accts = Account.paginate(:page => 3)
|
533
|
+
@accts.length.should == 0
|
534
|
+
end
|
535
|
+
|
536
|
+
it "should support paginate with options and conditions" do
|
537
|
+
@accts = Account.paginate(:page => 0, :per_page => 20, :conditions => {'name' => 'c2z5izd8w9'})
|
538
|
+
@accts.length.should == 1
|
539
|
+
@accts[0].object.should == "{#{@expected[0][:object]}}"
|
540
|
+
@accts[0].name.should == @expected[0][:name]
|
541
|
+
@accts[0].address.should == @expected[0][:address]
|
542
|
+
@accts[0].industry.should == @expected[0][:industry]
|
543
|
+
end
|
429
544
|
end
|
430
545
|
end
|