rhoconnect 3.0.0.beta1 → 3.0.0.beta3

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.
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