rhoconnect 3.0.0.beta1 → 3.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +16 -2
- data/Gemfile +14 -5
- data/Gemfile.lock +13 -23
- data/Rakefile +86 -0
- data/bench/bench_runner.rb +5 -4
- data/bench/benchapp/Gemfile +17 -8
- data/bench/blobapp/Gemfile +13 -14
- data/doc/adapters-crm.txt +226 -0
- data/doc/adapters-intro.txt +18 -0
- data/doc/client.txt +29 -2
- data/doc/heroku-addon.txt +54 -0
- data/doc/install.txt +1 -2
- data/doc/migration.txt +18 -6
- data/doc/net-plugin.txt +276 -0
- data/doc/plugin-intro.txt +6 -0
- data/doc/push.txt +1 -1
- data/doc/rails-plugin.txt +116 -0
- data/doc/rest-api.txt +2 -2
- data/doc/settings.txt +59 -0
- data/doc/tutorial.txt +8 -5
- data/generators/rhoconnect.rb +30 -0
- data/generators/templates/application/Gemfile +16 -7
- data/generators/templates/application/gitignore +4 -0
- data/install.sh +74 -106
- data/installer/deb-scripts/LICENSE +75 -0
- data/installer/deb-scripts/install.sh +300 -0
- data/installer/deb-scripts/scripts/rho_connect_install_constants.rb +32 -0
- data/installer/deb-scripts/scripts/rho_connect_install_installers.rb +103 -0
- data/installer/deb-scripts/scripts/rho_connect_install_utilities.rb +110 -0
- data/installer/deb-scripts/scripts/rhoinstaller.rb +55 -0
- data/installer/deb-scripts/utils/README +67 -0
- data/installer/deb-scripts/utils/create_texts.rb +76 -0
- data/installer/deb-scripts/utils/redis_init_script +124 -0
- data/installer/deb-scripts/utils/redis_log_rotate +8 -0
- data/installer/unix-like/install.sh +361 -0
- data/installer/unix-like/post-install.sh +8 -0
- data/installer/unix-like/pre-install.sh +8 -0
- data/installer/unix-like/rho_connect_install_constants.rb +9 -14
- data/installer/unix-like/rho_connect_install_debian.rb +7 -5
- data/installer/unix-like/rho_connect_install_dnd.rb +6 -6
- data/installer/unix-like/rho_connect_install_get_params.rb +1 -1
- data/installer/unix-like/rho_connect_install_installers.rb +39 -38
- data/installer/unix-like/rho_connect_install_utilities.rb +9 -10
- data/installer/unix-like/rho_connect_install_yum.rb +6 -5
- data/installer/unix-like/rhoinstaller.rb +8 -3
- data/installer/utils/create_texts.rb +313 -85
- data/installer/windows/rhosync.nsi +5 -5
- data/lib/rhoconnect/api/application/clientcreate.rb +1 -1
- data/lib/rhoconnect/api/application/clientregister.rb +1 -1
- data/lib/rhoconnect/api/application/clientreset.rb +1 -1
- data/lib/rhoconnect/client.rb +0 -1
- data/lib/rhoconnect/client_sync.rb +1 -0
- data/lib/rhoconnect/console/app/routes/home.rb +1 -1
- data/lib/rhoconnect/console/app/routes/user.rb +8 -3
- data/lib/rhoconnect/console/app/views/adapter.erb +2 -2
- data/lib/rhoconnect/console/app/views/ping.erb +14 -2
- data/lib/rhoconnect/console/app/views/users.erb +8 -1
- data/lib/rhoconnect/jobs/ping_job.rb +11 -3
- data/lib/rhoconnect/model.rb +2 -2
- data/lib/rhoconnect/read_state.rb +2 -0
- data/lib/rhoconnect/server.rb +4 -3
- data/lib/rhoconnect/source.rb +33 -6
- data/lib/rhoconnect/source_adapter.rb +5 -9
- data/lib/rhoconnect/source_sync.rb +11 -5
- data/lib/rhoconnect/store.rb +7 -4
- data/lib/rhoconnect/tasks.rb +3 -3
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect.rb +22 -8
- data/rhoconnect.gemspec +4 -22
- data/spec/api/application/rhoconnect_api_spec.rb +54 -8
- data/spec/api/source/get_source_params_spec.rb +2 -1
- data/spec/api/source/list_sources_spec.rb +3 -3
- data/spec/app_spec.rb +8 -1
- data/spec/apps/rhotestapp/settings/settings.yml +10 -5
- data/spec/apps/rhotestapp/sources/other_adapter.rb +7 -0
- data/spec/client_sync_spec.rb +5 -8
- data/spec/dynamic_adapter_spec.rb +8 -8
- data/spec/generator/generator_spec.rb +4 -2
- data/spec/jobs/ping_job_spec.rb +53 -0
- data/spec/model_spec.rb +2 -2
- data/spec/rhosync_spec.rb +1 -1
- data/spec/server/server_spec.rb +3 -14
- data/spec/source_sync_spec.rb +84 -2
- data/spec/support/shared_examples.rb +2 -2
- data/tasks/redis.rake +2 -2
- metadata +30 -41
- data/spec/api/rhosync_api_spec.rb.orig +0 -606
@@ -13,28 +13,28 @@ describe "DynamicAdapter" do
|
|
13
13
|
|
14
14
|
it "should query dynamic adapter service" do
|
15
15
|
data = {'1'=>@product1}
|
16
|
-
stub_request(:post, "http://test.
|
17
|
-
da = DynamicAdapter.new(@s2,nil,'http://test.
|
16
|
+
stub_request(:post, "http://test.com/rhoconnect/query").with(:headers => {'Content-Type' => 'application/json'}).to_return(:status => 200, :body => data.to_json)
|
17
|
+
da = DynamicAdapter.new(@s2,nil,'http://test.com')
|
18
18
|
da.query.should == data
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should create new object using dynamic adapter" do
|
22
|
-
stub_request(:post, "http://test.
|
23
|
-
da = DynamicAdapter.new(@s2,nil,'http://test.
|
22
|
+
stub_request(:post, "http://test.com/rhoconnect/create").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
|
23
|
+
da = DynamicAdapter.new(@s2,nil,'http://test.com')
|
24
24
|
da.create(@product1).should == {:id => 5}
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should update object using dynamic adapter" do
|
28
28
|
data = {'id' => 2}
|
29
|
-
stub_request(:post, "http://test.
|
30
|
-
da = DynamicAdapter.new(@s2,nil,'http://test.
|
29
|
+
stub_request(:post, "http://test.com/rhoconnect/update").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
|
30
|
+
da = DynamicAdapter.new(@s2,nil,'http://test.com')
|
31
31
|
da.update(data).should == {:id => 5}
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should delete object using dynamic adapter" do
|
35
35
|
data = {'id' => 2}
|
36
|
-
stub_request(:post, "http://test.
|
37
|
-
da = DynamicAdapter.new(@s2,nil,'http://test.
|
36
|
+
stub_request(:post, "http://test.com/rhoconnect/delete").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
|
37
|
+
da = DynamicAdapter.new(@s2,nil,'http://test.com')
|
38
38
|
da.delete(data).should == {:id => 5}
|
39
39
|
end
|
40
40
|
|
@@ -23,11 +23,13 @@ describe "Generator" do
|
|
23
23
|
it "should create new application files" do
|
24
24
|
SecureRandom.should_receive(:hex).with(64).any_number_of_times
|
25
25
|
[
|
26
|
-
'
|
26
|
+
'Gemfile',
|
27
|
+
'Rakefile',
|
27
28
|
"application.rb",
|
29
|
+
'config.ru',
|
30
|
+
'public',
|
28
31
|
'settings/settings.yml',
|
29
32
|
'settings/license.key',
|
30
|
-
'Rakefile',
|
31
33
|
'spec/spec_helper.rb'
|
32
34
|
].each do |template|
|
33
35
|
@generator.should create("/tmp/#{appname}/#{template}")
|
data/spec/jobs/ping_job_spec.rb
CHANGED
@@ -4,6 +4,21 @@ require File.join(File.dirname(__FILE__), '..', 'support', 'shared_examples')
|
|
4
4
|
describe "PingJob" do
|
5
5
|
it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
|
6
6
|
|
7
|
+
before(:each) do
|
8
|
+
@u1_fields = {:login => 'testuser1'}
|
9
|
+
@u1 = User.create(@u1_fields)
|
10
|
+
@u1.password = 'testpass1'
|
11
|
+
@c1_fields = {
|
12
|
+
:device_type => 'Apple',
|
13
|
+
:device_pin => 'abcde',
|
14
|
+
:device_port => '3333',
|
15
|
+
:user_id => @u1.id,
|
16
|
+
:app_id => @a.id
|
17
|
+
}
|
18
|
+
@c1 = Client.create(@c1_fields,{:source_name => @s_fields[:name]})
|
19
|
+
@a.users << @u1.id
|
20
|
+
end
|
21
|
+
|
7
22
|
it "should perform apple ping with integer parameters" do
|
8
23
|
params = {"user_id" => @u.id, "api_token" => @api_token,
|
9
24
|
"sources" => [@s.name], "message" => 'hello world',
|
@@ -98,5 +113,43 @@ describe "PingJob" do
|
|
98
113
|
PingJob.should_receive(:log).twice.with(/Dropping ping request for client/)
|
99
114
|
lambda { PingJob.perform(params) }.should_not raise_error
|
100
115
|
end
|
116
|
+
|
117
|
+
it "should ping two different users from two different devices - Apple and Blackberry" do
|
118
|
+
params = {"user_id" => [ @u.id, @u1.id], "api_token" => @api_token,
|
119
|
+
"sources" => [@s.name], "message" => 'hello world',
|
120
|
+
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3', 'phone_id' => nil }
|
121
|
+
@c.phone_id = '3'
|
122
|
+
|
123
|
+
scrubbed_params = params.dup
|
124
|
+
scrubbed_params['vibrate'] = '5'
|
125
|
+
@c1.device_type = 'blackberry'
|
126
|
+
|
127
|
+
Apple.should_receive(:ping).with(params.merge!({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port}))
|
128
|
+
Blackberry.should_receive(:ping).with({'device_pin' => @c1.device_pin, 'device_port' => @c1.device_port}.merge!(scrubbed_params))
|
129
|
+
PingJob.perform(params)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should drop ping with two different users from the same device" do
|
133
|
+
params = {"user_id" => [ @u.id, @u1.id], "api_token" => @api_token,
|
134
|
+
"sources" => [@s.name], "message" => 'hello world',
|
135
|
+
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
|
136
|
+
@c.phone_id = '3'
|
137
|
+
@c1.phone_id = '3'
|
138
|
+
|
139
|
+
Apple.should_receive(:ping).with({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port}.merge!(params))
|
140
|
+
PingJob.should_receive(:log).once.with(/Dropping ping request for client/)
|
141
|
+
lambda { PingJob.perform(params) }.should_not raise_error
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should drop ping with two different users with the same pin" do
|
145
|
+
params = {"user_id" => [ @u.id, @u1.id], "api_token" => @api_token,
|
146
|
+
"sources" => [@s.name], "message" => 'hello world', "phone_id" => nil,
|
147
|
+
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
|
148
|
+
@c1.device_pin = @c.device_pin
|
149
|
+
|
150
|
+
Apple.should_receive(:ping).with({'device_pin' => @c.device_pin, 'device_port' => @c.device_port}.merge!(params))
|
151
|
+
PingJob.should_receive(:log).once.with(/Dropping ping request for client/)
|
152
|
+
lambda { PingJob.perform(params) }.should_not raise_error
|
153
|
+
end
|
101
154
|
end
|
102
155
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -207,12 +207,12 @@ describe Rhoconnect::Model do
|
|
207
207
|
end
|
208
208
|
|
209
209
|
it "should send INCR when #increment! is called on an integer" do
|
210
|
-
@redisMock.should_receive(:
|
210
|
+
@redisMock.should_receive(:incrby).with("test_increments:1:foo", 1)
|
211
211
|
@x.increment!(:foo)
|
212
212
|
end
|
213
213
|
|
214
214
|
it "should send DECR when #decrement! is called on an integer" do
|
215
|
-
@redisMock.should_receive(:
|
215
|
+
@redisMock.should_receive(:decrby).with("test_increments:1:foo", 1)
|
216
216
|
@x.decrement!(:foo)
|
217
217
|
end
|
218
218
|
|
data/spec/rhosync_spec.rb
CHANGED
@@ -23,7 +23,7 @@ describe "Rhoconnect" do
|
|
23
23
|
Rhoconnect.bulk_sync_poll_interval.should == 3600
|
24
24
|
Rhoconnect.environment.should == :test
|
25
25
|
Rhoconnect.stats.should == false
|
26
|
-
Rhoconnect.appserver.should == 'http://test.
|
26
|
+
Rhoconnect.appserver.should == 'http://test.com'
|
27
27
|
Rhoconnect.cookie_expire.should == 9999999
|
28
28
|
App.is_exist?(test_app_name).should be_true
|
29
29
|
end
|
data/spec/server/server_spec.rb
CHANGED
@@ -83,7 +83,6 @@ describe "Server" do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should return nil if params[:source_name] is missing" do
|
86
|
-
#stub_request(:post, "http://test.rhoconnect.com/rhoconnect/query")
|
87
86
|
get "/api/application/query"
|
88
87
|
last_response.status.should == 500
|
89
88
|
end
|
@@ -136,15 +135,6 @@ describe "Server" do
|
|
136
135
|
describe "client management routes" do
|
137
136
|
before(:each) do
|
138
137
|
do_post "/api/application/clientlogin", "login" => @u.login, "password" => 'testpass'
|
139
|
-
@source_config = {
|
140
|
-
"sources"=>
|
141
|
-
{"FixedSchemaAdapter"=>
|
142
|
-
{"poll_interval"=>300,
|
143
|
-
"sync_type"=>"incremental",
|
144
|
-
"belongs_to"=>[{"brand"=>"SampleAdapter"}]},
|
145
|
-
"SampleAdapter"=>{"poll_interval"=>300},
|
146
|
-
"SimpleAdapter"=>{"partition_type"=>"app", "poll_interval"=>600}}
|
147
|
-
}
|
148
138
|
end
|
149
139
|
|
150
140
|
it "should respond to clientcreate" do
|
@@ -154,7 +144,7 @@ describe "Server" do
|
|
154
144
|
id = JSON.parse(last_response.body)['client']['client_id']
|
155
145
|
id.length.should == 32
|
156
146
|
JSON.parse(last_response.body).should ==
|
157
|
-
{"client"=>{"client_id"=>id}}
|
147
|
+
{"client"=>{"client_id"=>id}}
|
158
148
|
c = Client.load(id,{:source_name => '*'})
|
159
149
|
c.user_id.should == 'testuser'
|
160
150
|
c.device_type.should == 'blackberry'
|
@@ -164,7 +154,6 @@ describe "Server" do
|
|
164
154
|
do_post "/api/application/clientregister",
|
165
155
|
"device_type" => "iPhone", "device_pin" => 'abcd', "client_id" => @c.id
|
166
156
|
last_response.should be_ok
|
167
|
-
JSON.parse(last_response.body).should == @source_config
|
168
157
|
@c.device_type.should == 'Apple'
|
169
158
|
@c.device_pin.should == 'abcd'
|
170
159
|
@c.id.length.should == 32
|
@@ -173,7 +162,6 @@ describe "Server" do
|
|
173
162
|
it "should respond to clientreset" do
|
174
163
|
set_state(@c.docname(:cd) => @data)
|
175
164
|
get "/api/application/clientreset", :client_id => @c.id,:version => ClientSync::VERSION
|
176
|
-
JSON.parse(last_response.body).should == @source_config
|
177
165
|
verify_result(@c.docname(:cd) => {})
|
178
166
|
end
|
179
167
|
|
@@ -184,7 +172,7 @@ describe "Server" do
|
|
184
172
|
set_state(@c.docname(:cd) => @data)
|
185
173
|
sources = [{'name' => 'SimpleAdapter'}]
|
186
174
|
get "/api/application/clientreset", :client_id => @c.id,:version => ClientSync::VERSION, :sources => sources
|
187
|
-
|
175
|
+
last_response.should be_ok
|
188
176
|
@c.source_name = 'SampleAdapter'
|
189
177
|
verify_result(@c.docname(:cd) => @data)
|
190
178
|
@c.source_name = 'SimpleAdapter'
|
@@ -436,6 +424,7 @@ describe "Server" do
|
|
436
424
|
it "should receive nop when no sources are available for partition" do
|
437
425
|
set_state('test_db_storage' => @data)
|
438
426
|
Source.load('SimpleAdapter',@s_params).partition = :user
|
427
|
+
@a.sources.delete('OtherAdapter')
|
439
428
|
get "/api/application/bulk_data", :partition => :app, :client_id => @c.id
|
440
429
|
last_response.should be_ok
|
441
430
|
last_response.body.should == {:result => :nop}.to_json
|
data/spec/source_sync_spec.rb
CHANGED
@@ -230,6 +230,87 @@ describe "SourceSync" do
|
|
230
230
|
it "should do query with exception raised" do
|
231
231
|
verify_read_operation_with_error('query')
|
232
232
|
end
|
233
|
+
|
234
|
+
it "should do query with exception raised and update refresh time only after retries limit is exceeded" do
|
235
|
+
@s.retry_limit = 1
|
236
|
+
msg = "Error during query"
|
237
|
+
@ss.should_receive(:log).with("SourceAdapter raised query exception: #{msg}")
|
238
|
+
@ss.should_receive(:log).with(anything)
|
239
|
+
set_test_data('test_db_storage',{},msg,"query error")
|
240
|
+
res = @ss.do_query
|
241
|
+
verify_result(@s.docname(:md) => {},
|
242
|
+
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
243
|
+
# 1) if retry_limit is set to N - then, first N retries should not update refresh_time
|
244
|
+
@s.read_state.retry_counter.should == 1
|
245
|
+
@s.read_state.refresh_time.should <= Time.now.to_i
|
246
|
+
|
247
|
+
# try once more and fail again
|
248
|
+
@ss.should_receive(:log).with("SourceAdapter raised query exception: #{msg}")
|
249
|
+
@ss.should_receive(:log).with(anything)
|
250
|
+
set_test_data('test_db_storage',{},msg,"query error")
|
251
|
+
res = @ss.do_query
|
252
|
+
verify_result(@s.docname(:md) => {},
|
253
|
+
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
254
|
+
|
255
|
+
# 2) if retry_limit is set to N and number of retries exceeded it - update refresh_time
|
256
|
+
@s.read_state.retry_counter.should == 0
|
257
|
+
@s.read_state.refresh_time.should > Time.now.to_i
|
258
|
+
end
|
259
|
+
|
260
|
+
it "should do query with exception raised and restore state with succesfull retry" do
|
261
|
+
@s.retry_limit = 1
|
262
|
+
msg = "Error during query"
|
263
|
+
@ss.should_receive(:log).with("SourceAdapter raised query exception: #{msg}")
|
264
|
+
@ss.should_receive(:log).with(anything)
|
265
|
+
set_test_data('test_db_storage',{},msg,"query error")
|
266
|
+
res = @ss.do_query
|
267
|
+
verify_result(@s.docname(:md) => {},
|
268
|
+
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
269
|
+
# 1) if retry_limit is set to N - then, first N retries should not update refresh_time
|
270
|
+
@s.read_state.retry_counter.should == 1
|
271
|
+
@s.read_state.refresh_time.should <= Time.now.to_i
|
272
|
+
|
273
|
+
# try once more (with success)
|
274
|
+
expected = {'1'=>@product1,'2'=>@product2}
|
275
|
+
set_test_data('test_db_storage',expected)
|
276
|
+
@ss.do_query
|
277
|
+
verify_result(@s.docname(:md) => expected,
|
278
|
+
@s.docname(:errors) => {})
|
279
|
+
@s.read_state.retry_counter.should == 0
|
280
|
+
@s.read_state.refresh_time.should > Time.now.to_i
|
281
|
+
end
|
282
|
+
|
283
|
+
it "should do query with exception raised and update refresh time if retry_limit is 0" do
|
284
|
+
@s.retry_limit = 0
|
285
|
+
msg = "Error during query"
|
286
|
+
@ss.should_receive(:log).with("SourceAdapter raised query exception: #{msg}")
|
287
|
+
@ss.should_receive(:log).with(anything)
|
288
|
+
set_test_data('test_db_storage',{},msg,"query error")
|
289
|
+
res = @ss.do_query
|
290
|
+
verify_result(@s.docname(:md) => {},
|
291
|
+
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
292
|
+
# if poll_interval is set to 0 - refresh time should be updated
|
293
|
+
@s.read_state.retry_counter.should == 0
|
294
|
+
@s.read_state.refresh_time.should > Time.now.to_i
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should do query with exception raised and update refresh time if poll_interval == 0" do
|
298
|
+
@s.retry_limit = 1
|
299
|
+
@s.poll_interval = 0
|
300
|
+
msg = "Error during query"
|
301
|
+
@ss.should_receive(:log).with("SourceAdapter raised query exception: #{msg}")
|
302
|
+
@ss.should_receive(:log).with(anything)
|
303
|
+
set_test_data('test_db_storage',{},msg,"query error")
|
304
|
+
prev_refresh_time = @s.read_state.refresh_time
|
305
|
+
# make sure refresh time is expired
|
306
|
+
sleep(1)
|
307
|
+
res = @ss.do_query
|
308
|
+
verify_result(@s.docname(:md) => {},
|
309
|
+
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
310
|
+
# if poll_interval is set to 0 - refresh time should be updated
|
311
|
+
@s.read_state.retry_counter.should == 0
|
312
|
+
@s.read_state.refresh_time.should > prev_refresh_time
|
313
|
+
end
|
233
314
|
end
|
234
315
|
|
235
316
|
describe "search" do
|
@@ -257,7 +338,8 @@ describe "SourceSync" do
|
|
257
338
|
verify_result("source:#{test_app_name}:__shared__:#{@s_fields[:name]}:md" => expected)
|
258
339
|
Store.db.keys("read_state:#{test_app_name}:__shared__*").sort.should ==
|
259
340
|
[ "read_state:#{test_app_name}:__shared__:SampleAdapter:refresh_time",
|
260
|
-
"read_state:#{test_app_name}:__shared__:SampleAdapter:rho__id"
|
341
|
+
"read_state:#{test_app_name}:__shared__:SampleAdapter:rho__id",
|
342
|
+
"read_state:#{test_app_name}:__shared__:SampleAdapter:retry_counter"].sort
|
261
343
|
end
|
262
344
|
end
|
263
345
|
|
@@ -302,7 +384,7 @@ describe "SourceSync" do
|
|
302
384
|
if operation == 'query'
|
303
385
|
@ss.read.should == true
|
304
386
|
verify_result(@s.docname(:md) => {},
|
305
|
-
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
387
|
+
@s.docname(:errors) => {'query-error'=>{'message'=>msg}})
|
306
388
|
else
|
307
389
|
@ss.search(@c.id).should == true
|
308
390
|
verify_result(@c.docname(:search) => {},
|
@@ -54,7 +54,7 @@ shared_examples_for "SharedRhoconnectHelper" do |params|
|
|
54
54
|
@s2 = Source.create({:name=> 'Product2'},@s_params)
|
55
55
|
@s3 = Source.create({:name=> 'SimpleAdapter',:partition_type=> 'app'},@s_params)
|
56
56
|
@s1.belongs_to = [{'brand' => 'SampleAdapter'}].to_json
|
57
|
-
config = Rhoconnect.source_config
|
57
|
+
config = Rhoconnect.source_config('FixedSchemaAdapter')
|
58
58
|
@s1.update(config)
|
59
59
|
@r = @s.read_state
|
60
60
|
@a.sources << @s.id
|
@@ -146,7 +146,7 @@ shared_examples_for "ApiHelper" do
|
|
146
146
|
@s1 = Source.create(@s1_fields,@s_params)
|
147
147
|
@s2 = Source.create({:name=> 'Product2'},@s_params)
|
148
148
|
@s1.belongs_to = [{'brand' => 'SampleAdapter'}].to_json
|
149
|
-
config = Rhoconnect.source_config
|
149
|
+
config = Rhoconnect.source_config('FixedSchemaAdapter')
|
150
150
|
@s1.update(config)
|
151
151
|
@r = @s.read_state
|
152
152
|
@a.sources << @s.id
|
data/tasks/redis.rake
CHANGED
@@ -7,7 +7,7 @@ def windows?
|
|
7
7
|
end
|
8
8
|
|
9
9
|
if windows?
|
10
|
-
$redis_ver = "redis-2.2.
|
10
|
+
$redis_ver = "redis-2.2.13"
|
11
11
|
$redis_zip = "C:/#{$redis_ver}.zip"
|
12
12
|
$redis_dest = "C:/"
|
13
13
|
end
|
@@ -164,7 +164,7 @@ namespace :redis do
|
|
164
164
|
else
|
165
165
|
sh 'rm -rf /tmp/redis/' if File.exists?("#{RedisRunner.redisdir}")
|
166
166
|
sh 'git clone git://github.com/antirez/redis.git /tmp/redis -n'
|
167
|
-
sh "cd #{RedisRunner.redisdir} && git reset --hard && git checkout 2.2.
|
167
|
+
sh "cd #{RedisRunner.redisdir} && git reset --hard && git checkout 2.2.13"
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhoconnect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196421
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 3.0.0.
|
11
|
+
- 3
|
12
|
+
version: 3.0.0.beta3
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Rhomobile
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-09-
|
20
|
+
date: 2011-09-22 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
type: :runtime
|
@@ -177,39 +177,7 @@ dependencies:
|
|
177
177
|
version: 1.0.0
|
178
178
|
version_requirements: *id010
|
179
179
|
name: templater
|
180
|
-
-
|
181
|
-
type: :runtime
|
182
|
-
prerelease: false
|
183
|
-
requirement: &id011 !ruby/object:Gem::Requirement
|
184
|
-
none: false
|
185
|
-
requirements:
|
186
|
-
- - ">="
|
187
|
-
- !ruby/object:Gem::Version
|
188
|
-
hash: 29
|
189
|
-
segments:
|
190
|
-
- 1
|
191
|
-
- 3
|
192
|
-
- 3
|
193
|
-
version: 1.3.3
|
194
|
-
version_requirements: *id011
|
195
|
-
name: sqlite3
|
196
|
-
- !ruby/object:Gem::Dependency
|
197
|
-
type: :runtime
|
198
|
-
prerelease: false
|
199
|
-
requirement: &id012 !ruby/object:Gem::Requirement
|
200
|
-
none: false
|
201
|
-
requirements:
|
202
|
-
- - ~>
|
203
|
-
- !ruby/object:Gem::Version
|
204
|
-
hash: 25
|
205
|
-
segments:
|
206
|
-
- 1
|
207
|
-
- 2
|
208
|
-
- 3
|
209
|
-
version: 1.2.3
|
210
|
-
version_requirements: *id012
|
211
|
-
name: SystemTimer
|
212
|
-
description: RhoConnect Server Framework and related command-line utilities
|
180
|
+
description: RhoConnect App Integration Server and related command-line utilities
|
213
181
|
email: dev@rhomobile.com
|
214
182
|
executables:
|
215
183
|
- rhoconnect
|
@@ -293,6 +261,8 @@ files:
|
|
293
261
|
- bench/spec/mock_client_spec.rb
|
294
262
|
- bench/spec/result_spec.rb
|
295
263
|
- bench/spec/utils_spec.rb
|
264
|
+
- doc/adapters-crm.txt
|
265
|
+
- doc/adapters-intro.txt
|
296
266
|
- doc/async-jobs.txt
|
297
267
|
- doc/authentication.txt
|
298
268
|
- doc/benchmarks.txt
|
@@ -302,17 +272,22 @@ files:
|
|
302
272
|
- doc/command-line.txt
|
303
273
|
- doc/contributing.txt
|
304
274
|
- doc/deploying.txt
|
275
|
+
- doc/heroku-addon.txt
|
305
276
|
- doc/install.txt
|
306
277
|
- doc/introduction.txt
|
307
278
|
- doc/licensing.txt
|
308
279
|
- doc/metadata.txt
|
309
280
|
- doc/migration.txt
|
281
|
+
- doc/net-plugin.txt
|
282
|
+
- doc/plugin-intro.txt
|
310
283
|
- doc/public/css/print.css
|
311
284
|
- doc/public/css/screen.css
|
312
285
|
- doc/public/css/style.css
|
313
286
|
- doc/push.txt
|
287
|
+
- doc/rails-plugin.txt
|
314
288
|
- doc/release.txt
|
315
289
|
- doc/rest-api.txt
|
290
|
+
- doc/settings.txt
|
316
291
|
- doc/source-adapters.txt
|
317
292
|
- doc/stats-middleware.txt
|
318
293
|
- doc/testing.txt
|
@@ -329,12 +304,26 @@ files:
|
|
329
304
|
- generators/templates/application/application.rb
|
330
305
|
- generators/templates/application/config.ru
|
331
306
|
- generators/templates/application/Gemfile
|
307
|
+
- generators/templates/application/gitignore
|
332
308
|
- generators/templates/application/Rakefile
|
333
309
|
- generators/templates/application/settings/license.key
|
334
310
|
- generators/templates/application/settings/settings.yml
|
335
311
|
- generators/templates/application/spec/spec_helper.rb
|
336
312
|
- generators/templates/source/source_adapter.rb
|
337
313
|
- generators/templates/source/source_spec.rb
|
314
|
+
- installer/deb-scripts/install.sh
|
315
|
+
- installer/deb-scripts/LICENSE
|
316
|
+
- installer/deb-scripts/scripts/rho_connect_install_constants.rb
|
317
|
+
- installer/deb-scripts/scripts/rho_connect_install_installers.rb
|
318
|
+
- installer/deb-scripts/scripts/rho_connect_install_utilities.rb
|
319
|
+
- installer/deb-scripts/scripts/rhoinstaller.rb
|
320
|
+
- installer/deb-scripts/utils/create_texts.rb
|
321
|
+
- installer/deb-scripts/utils/README
|
322
|
+
- installer/deb-scripts/utils/redis_init_script
|
323
|
+
- installer/deb-scripts/utils/redis_log_rotate
|
324
|
+
- installer/unix-like/install.sh
|
325
|
+
- installer/unix-like/post-install.sh
|
326
|
+
- installer/unix-like/pre-install.sh
|
338
327
|
- installer/unix-like/rho_connect_install_checkers.rb
|
339
328
|
- installer/unix-like/rho_connect_install_constants.rb
|
340
329
|
- installer/unix-like/rho_connect_install_debian.rb
|
@@ -501,7 +490,6 @@ files:
|
|
501
490
|
- spec/api/client/list_client_docs_spec.rb
|
502
491
|
- spec/api/client/list_clients_spec.rb
|
503
492
|
- spec/api/client/ping_spec.rb
|
504
|
-
- spec/api/rhosync_api_spec.rb.orig
|
505
493
|
- spec/api/source/adapter_spec.rb
|
506
494
|
- spec/api/source/get_db_doc_spec.rb
|
507
495
|
- spec/api/source/get_source_params_spec.rb
|
@@ -529,6 +517,7 @@ files:
|
|
529
517
|
- spec/apps/rhotestapp/settings/settings.yml
|
530
518
|
- spec/apps/rhotestapp/sources/base_adapter.rb
|
531
519
|
- spec/apps/rhotestapp/sources/fixed_schema_adapter.rb
|
520
|
+
- spec/apps/rhotestapp/sources/other_adapter.rb
|
532
521
|
- spec/apps/rhotestapp/sources/sample_adapter.rb
|
533
522
|
- spec/apps/rhotestapp/sources/simple_adapter.rb
|
534
523
|
- spec/apps/rhotestapp/sources/sub_adapter.rb
|
@@ -609,10 +598,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
609
598
|
requirements: []
|
610
599
|
|
611
600
|
rubyforge_project:
|
612
|
-
rubygems_version: 1.8.
|
601
|
+
rubygems_version: 1.8.10
|
613
602
|
signing_key:
|
614
603
|
specification_version: 3
|
615
|
-
summary: RhoConnect Server
|
604
|
+
summary: RhoConnect App Integration Server
|
616
605
|
test_files:
|
617
606
|
- spec/api/admin/api_token_spec.rb
|
618
607
|
- spec/api/admin/get_api_token_spec.rb
|
@@ -627,7 +616,6 @@ test_files:
|
|
627
616
|
- spec/api/client/list_client_docs_spec.rb
|
628
617
|
- spec/api/client/list_clients_spec.rb
|
629
618
|
- spec/api/client/ping_spec.rb
|
630
|
-
- spec/api/rhosync_api_spec.rb.orig
|
631
619
|
- spec/api/source/adapter_spec.rb
|
632
620
|
- spec/api/source/get_db_doc_spec.rb
|
633
621
|
- spec/api/source/get_source_params_spec.rb
|
@@ -655,6 +643,7 @@ test_files:
|
|
655
643
|
- spec/apps/rhotestapp/settings/settings.yml
|
656
644
|
- spec/apps/rhotestapp/sources/base_adapter.rb
|
657
645
|
- spec/apps/rhotestapp/sources/fixed_schema_adapter.rb
|
646
|
+
- spec/apps/rhotestapp/sources/other_adapter.rb
|
658
647
|
- spec/apps/rhotestapp/sources/sample_adapter.rb
|
659
648
|
- spec/apps/rhotestapp/sources/simple_adapter.rb
|
660
649
|
- spec/apps/rhotestapp/sources/sub_adapter.rb
|