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.
Files changed (87) hide show
  1. data/CHANGELOG +16 -2
  2. data/Gemfile +14 -5
  3. data/Gemfile.lock +13 -23
  4. data/Rakefile +86 -0
  5. data/bench/bench_runner.rb +5 -4
  6. data/bench/benchapp/Gemfile +17 -8
  7. data/bench/blobapp/Gemfile +13 -14
  8. data/doc/adapters-crm.txt +226 -0
  9. data/doc/adapters-intro.txt +18 -0
  10. data/doc/client.txt +29 -2
  11. data/doc/heroku-addon.txt +54 -0
  12. data/doc/install.txt +1 -2
  13. data/doc/migration.txt +18 -6
  14. data/doc/net-plugin.txt +276 -0
  15. data/doc/plugin-intro.txt +6 -0
  16. data/doc/push.txt +1 -1
  17. data/doc/rails-plugin.txt +116 -0
  18. data/doc/rest-api.txt +2 -2
  19. data/doc/settings.txt +59 -0
  20. data/doc/tutorial.txt +8 -5
  21. data/generators/rhoconnect.rb +30 -0
  22. data/generators/templates/application/Gemfile +16 -7
  23. data/generators/templates/application/gitignore +4 -0
  24. data/install.sh +74 -106
  25. data/installer/deb-scripts/LICENSE +75 -0
  26. data/installer/deb-scripts/install.sh +300 -0
  27. data/installer/deb-scripts/scripts/rho_connect_install_constants.rb +32 -0
  28. data/installer/deb-scripts/scripts/rho_connect_install_installers.rb +103 -0
  29. data/installer/deb-scripts/scripts/rho_connect_install_utilities.rb +110 -0
  30. data/installer/deb-scripts/scripts/rhoinstaller.rb +55 -0
  31. data/installer/deb-scripts/utils/README +67 -0
  32. data/installer/deb-scripts/utils/create_texts.rb +76 -0
  33. data/installer/deb-scripts/utils/redis_init_script +124 -0
  34. data/installer/deb-scripts/utils/redis_log_rotate +8 -0
  35. data/installer/unix-like/install.sh +361 -0
  36. data/installer/unix-like/post-install.sh +8 -0
  37. data/installer/unix-like/pre-install.sh +8 -0
  38. data/installer/unix-like/rho_connect_install_constants.rb +9 -14
  39. data/installer/unix-like/rho_connect_install_debian.rb +7 -5
  40. data/installer/unix-like/rho_connect_install_dnd.rb +6 -6
  41. data/installer/unix-like/rho_connect_install_get_params.rb +1 -1
  42. data/installer/unix-like/rho_connect_install_installers.rb +39 -38
  43. data/installer/unix-like/rho_connect_install_utilities.rb +9 -10
  44. data/installer/unix-like/rho_connect_install_yum.rb +6 -5
  45. data/installer/unix-like/rhoinstaller.rb +8 -3
  46. data/installer/utils/create_texts.rb +313 -85
  47. data/installer/windows/rhosync.nsi +5 -5
  48. data/lib/rhoconnect/api/application/clientcreate.rb +1 -1
  49. data/lib/rhoconnect/api/application/clientregister.rb +1 -1
  50. data/lib/rhoconnect/api/application/clientreset.rb +1 -1
  51. data/lib/rhoconnect/client.rb +0 -1
  52. data/lib/rhoconnect/client_sync.rb +1 -0
  53. data/lib/rhoconnect/console/app/routes/home.rb +1 -1
  54. data/lib/rhoconnect/console/app/routes/user.rb +8 -3
  55. data/lib/rhoconnect/console/app/views/adapter.erb +2 -2
  56. data/lib/rhoconnect/console/app/views/ping.erb +14 -2
  57. data/lib/rhoconnect/console/app/views/users.erb +8 -1
  58. data/lib/rhoconnect/jobs/ping_job.rb +11 -3
  59. data/lib/rhoconnect/model.rb +2 -2
  60. data/lib/rhoconnect/read_state.rb +2 -0
  61. data/lib/rhoconnect/server.rb +4 -3
  62. data/lib/rhoconnect/source.rb +33 -6
  63. data/lib/rhoconnect/source_adapter.rb +5 -9
  64. data/lib/rhoconnect/source_sync.rb +11 -5
  65. data/lib/rhoconnect/store.rb +7 -4
  66. data/lib/rhoconnect/tasks.rb +3 -3
  67. data/lib/rhoconnect/version.rb +1 -1
  68. data/lib/rhoconnect.rb +22 -8
  69. data/rhoconnect.gemspec +4 -22
  70. data/spec/api/application/rhoconnect_api_spec.rb +54 -8
  71. data/spec/api/source/get_source_params_spec.rb +2 -1
  72. data/spec/api/source/list_sources_spec.rb +3 -3
  73. data/spec/app_spec.rb +8 -1
  74. data/spec/apps/rhotestapp/settings/settings.yml +10 -5
  75. data/spec/apps/rhotestapp/sources/other_adapter.rb +7 -0
  76. data/spec/client_sync_spec.rb +5 -8
  77. data/spec/dynamic_adapter_spec.rb +8 -8
  78. data/spec/generator/generator_spec.rb +4 -2
  79. data/spec/jobs/ping_job_spec.rb +53 -0
  80. data/spec/model_spec.rb +2 -2
  81. data/spec/rhosync_spec.rb +1 -1
  82. data/spec/server/server_spec.rb +3 -14
  83. data/spec/source_sync_spec.rb +84 -2
  84. data/spec/support/shared_examples.rb +2 -2
  85. data/tasks/redis.rake +2 -2
  86. metadata +30 -41
  87. 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.rhoconnect.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.rhoconnect.com')
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.rhoconnect.com/rhoconnect/create").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
23
- da = DynamicAdapter.new(@s2,nil,'http://test.rhoconnect.com')
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.rhoconnect.com/rhoconnect/update").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
30
- da = DynamicAdapter.new(@s2,nil,'http://test.rhoconnect.com')
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.rhoconnect.com/rhoconnect/delete").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
37
- da = DynamicAdapter.new(@s2,nil,'http://test.rhoconnect.com')
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
- 'config.ru',
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}")
@@ -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(:incr).with("test_increments:1:foo", 1)
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(:decr).with("test_increments:1:foo", 1)
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.rhoconnect.com'
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
@@ -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}}.merge!(@source_config)
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
- JSON.parse(last_response.body).should == @source_config
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
@@ -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["sources"]['FixedSchemaAdapter']
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["sources"]['FixedSchemaAdapter']
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.12"
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.12"
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: 62196417
4
+ hash: 62196421
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
9
  - 0
10
10
  - beta
11
- - 1
12
- version: 3.0.0.beta1
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-01 00:00:00 Z
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
- - !ruby/object:Gem::Dependency
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.8
601
+ rubygems_version: 1.8.10
613
602
  signing_key:
614
603
  specification_version: 3
615
- summary: RhoConnect Server Framework
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