rhosync 2.0.0.beta1

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 (200) hide show
  1. data/CHANGELOG +5 -0
  2. data/LICENSE +674 -0
  3. data/README.md +26 -0
  4. data/Rakefile +109 -0
  5. data/bench/bench +6 -0
  6. data/bench/benchapp/Rakefile +14 -0
  7. data/bench/benchapp/application.rb +13 -0
  8. data/bench/benchapp/config.ru +32 -0
  9. data/bench/benchapp/settings/license.key +1 -0
  10. data/bench/benchapp/settings/settings.yml +18 -0
  11. data/bench/benchapp/sources/mock_adapter.rb +55 -0
  12. data/bench/benchapp/sources/queue_mock_adapter.rb +2 -0
  13. data/bench/benchapp/vendor/rhosync/lib/rhosync.rb +7 -0
  14. data/bench/lib/bench/cli.rb +16 -0
  15. data/bench/lib/bench/logging.rb +18 -0
  16. data/bench/lib/bench/mock_client.rb +41 -0
  17. data/bench/lib/bench/result.rb +50 -0
  18. data/bench/lib/bench/runner.rb +44 -0
  19. data/bench/lib/bench/session.rb +65 -0
  20. data/bench/lib/bench/statistics.rb +56 -0
  21. data/bench/lib/bench/test_data.rb +55 -0
  22. data/bench/lib/bench/timer.rb +10 -0
  23. data/bench/lib/bench/utils.rb +49 -0
  24. data/bench/lib/bench.rb +128 -0
  25. data/bench/lib/testdata/100-data.txt +148 -0
  26. data/bench/lib/testdata/5-data.txt +11 -0
  27. data/bench/scripts/cud_script.rb +77 -0
  28. data/bench/scripts/helpers.rb +101 -0
  29. data/bench/scripts/query_md_script.rb +46 -0
  30. data/bench/scripts/query_script.rb +46 -0
  31. data/bench/spec/bench_spec_helper.rb +65 -0
  32. data/bench/spec/logging_spec.rb +19 -0
  33. data/bench/spec/mock_adapter_spec.rb +61 -0
  34. data/bench/spec/mock_client_spec.rb +64 -0
  35. data/bench/spec/result_spec.rb +59 -0
  36. data/bench/spec/utils_spec.rb +35 -0
  37. data/bin/rhosync +34 -0
  38. data/doc/protocol.html +1901 -0
  39. data/doc/public/css/print.css +29 -0
  40. data/doc/public/css/screen.css +257 -0
  41. data/doc/public/css/style.css +20 -0
  42. data/examples/simple/application.rb +13 -0
  43. data/examples/simple/sources/sample_adapter.rb +5 -0
  44. data/examples/simple/sources/simple_adapter.rb +5 -0
  45. data/examples/simple/vendor/rhosync/lib/rhosync.rb +7 -0
  46. data/generators/rhosync.rb +98 -0
  47. data/generators/templates/application/Rakefile +19 -0
  48. data/generators/templates/application/application.rb +27 -0
  49. data/generators/templates/application/config.ru +33 -0
  50. data/generators/templates/application/settings/license.key +1 -0
  51. data/generators/templates/application/settings/settings.yml +14 -0
  52. data/generators/templates/source/source_adapter.rb +49 -0
  53. data/lib/rhosync/api/create_client.rb +3 -0
  54. data/lib/rhosync/api/create_user.rb +7 -0
  55. data/lib/rhosync/api/delete_client.rb +5 -0
  56. data/lib/rhosync/api/delete_user.rb +5 -0
  57. data/lib/rhosync/api/get_api_token.rb +7 -0
  58. data/lib/rhosync/api/get_client_params.rb +3 -0
  59. data/lib/rhosync/api/get_db_doc.rb +7 -0
  60. data/lib/rhosync/api/get_license_info.rb +7 -0
  61. data/lib/rhosync/api/get_source_params.rb +3 -0
  62. data/lib/rhosync/api/list_client_docs.rb +12 -0
  63. data/lib/rhosync/api/list_clients.rb +3 -0
  64. data/lib/rhosync/api/list_source_docs.rb +10 -0
  65. data/lib/rhosync/api/list_sources.rb +15 -0
  66. data/lib/rhosync/api/list_users.rb +3 -0
  67. data/lib/rhosync/api/ping.rb +7 -0
  68. data/lib/rhosync/api/push_deletes.rb +6 -0
  69. data/lib/rhosync/api/push_objects.rb +6 -0
  70. data/lib/rhosync/api/reset.rb +10 -0
  71. data/lib/rhosync/api/set_db_doc.rb +8 -0
  72. data/lib/rhosync/api/set_refresh_time.rb +8 -0
  73. data/lib/rhosync/api/update_user.rb +4 -0
  74. data/lib/rhosync/api/upload_file.rb +4 -0
  75. data/lib/rhosync/api_token.rb +19 -0
  76. data/lib/rhosync/app.rb +69 -0
  77. data/lib/rhosync/bulk_data/bulk_data.rb +75 -0
  78. data/lib/rhosync/bulk_data/syncdb.index.schema +3 -0
  79. data/lib/rhosync/bulk_data/syncdb.schema +37 -0
  80. data/lib/rhosync/bulk_data.rb +2 -0
  81. data/lib/rhosync/client.rb +74 -0
  82. data/lib/rhosync/client_sync.rb +296 -0
  83. data/lib/rhosync/console/app/helpers/auth_helper.rb +18 -0
  84. data/lib/rhosync/console/app/helpers/extensions.rb +19 -0
  85. data/lib/rhosync/console/app/helpers/helpers.rb +52 -0
  86. data/lib/rhosync/console/app/public/main.css +7 -0
  87. data/lib/rhosync/console/app/public/text.txt +0 -0
  88. data/lib/rhosync/console/app/routes/auth.rb +29 -0
  89. data/lib/rhosync/console/app/routes/client.rb +32 -0
  90. data/lib/rhosync/console/app/routes/docs.rb +84 -0
  91. data/lib/rhosync/console/app/routes/home.rb +22 -0
  92. data/lib/rhosync/console/app/routes/user.rb +63 -0
  93. data/lib/rhosync/console/app/views/client.erb +30 -0
  94. data/lib/rhosync/console/app/views/doc.erb +56 -0
  95. data/lib/rhosync/console/app/views/docs.erb +29 -0
  96. data/lib/rhosync/console/app/views/index.erb +50 -0
  97. data/lib/rhosync/console/app/views/layout.erb +12 -0
  98. data/lib/rhosync/console/app/views/newuser.erb +17 -0
  99. data/lib/rhosync/console/app/views/ping.erb +28 -0
  100. data/lib/rhosync/console/app/views/result.erb +11 -0
  101. data/lib/rhosync/console/app/views/user.erb +32 -0
  102. data/lib/rhosync/console/app/views/users.erb +14 -0
  103. data/lib/rhosync/console/rhosync_api.rb +102 -0
  104. data/lib/rhosync/console/server.rb +27 -0
  105. data/lib/rhosync/credential.rb +9 -0
  106. data/lib/rhosync/document.rb +43 -0
  107. data/lib/rhosync/indifferent_access.rb +132 -0
  108. data/lib/rhosync/jobs/bulk_data_job.rb +104 -0
  109. data/lib/rhosync/jobs/ping_job.rb +19 -0
  110. data/lib/rhosync/jobs/source_job.rb +16 -0
  111. data/lib/rhosync/license.rb +79 -0
  112. data/lib/rhosync/lock_ops.rb +11 -0
  113. data/lib/rhosync/model.rb +410 -0
  114. data/lib/rhosync/ping/blackberry.rb +55 -0
  115. data/lib/rhosync/ping/iphone.rb +44 -0
  116. data/lib/rhosync/ping.rb +2 -0
  117. data/lib/rhosync/read_state.rb +27 -0
  118. data/lib/rhosync/server/views/index.erb +12 -0
  119. data/lib/rhosync/server.rb +242 -0
  120. data/lib/rhosync/source.rb +112 -0
  121. data/lib/rhosync/source_adapter.rb +95 -0
  122. data/lib/rhosync/source_sync.rb +245 -0
  123. data/lib/rhosync/store.rb +199 -0
  124. data/lib/rhosync/tasks.rb +151 -0
  125. data/lib/rhosync/user.rb +83 -0
  126. data/lib/rhosync/version.rb +3 -0
  127. data/lib/rhosync.rb +251 -0
  128. data/spec/api/api_helper.rb +44 -0
  129. data/spec/api/create_client_spec.rb +13 -0
  130. data/spec/api/create_user_spec.rb +16 -0
  131. data/spec/api/delete_client_spec.rb +13 -0
  132. data/spec/api/delete_user_spec.rb +18 -0
  133. data/spec/api/get_api_token_spec.rb +25 -0
  134. data/spec/api/get_client_params_spec.rb +18 -0
  135. data/spec/api/get_db_doc_spec.rb +21 -0
  136. data/spec/api/get_license_info_spec.rb +16 -0
  137. data/spec/api/get_source_params_spec.rb +26 -0
  138. data/spec/api/list_client_docs_spec.rb +33 -0
  139. data/spec/api/list_clients_spec.rb +23 -0
  140. data/spec/api/list_source_docs_spec.rb +26 -0
  141. data/spec/api/list_sources_spec.rb +27 -0
  142. data/spec/api/list_users_spec.rb +21 -0
  143. data/spec/api/ping_spec.rb +24 -0
  144. data/spec/api/push_deletes_spec.rb +16 -0
  145. data/spec/api/push_objects_spec.rb +27 -0
  146. data/spec/api/reset_spec.rb +22 -0
  147. data/spec/api/set_db_doc_spec.rb +20 -0
  148. data/spec/api/set_refresh_time_spec.rb +43 -0
  149. data/spec/api/update_user_spec.rb +31 -0
  150. data/spec/api/upload_file_spec.rb +26 -0
  151. data/spec/api_token_spec.rb +13 -0
  152. data/spec/app_spec.rb +20 -0
  153. data/spec/apps/rhotestapp/Rakefile +1 -0
  154. data/spec/apps/rhotestapp/application.rb +16 -0
  155. data/spec/apps/rhotestapp/config.ru +1 -0
  156. data/spec/apps/rhotestapp/settings/apple_fake_cert.pem +1 -0
  157. data/spec/apps/rhotestapp/settings/license.key +1 -0
  158. data/spec/apps/rhotestapp/settings/settings.yml +23 -0
  159. data/spec/apps/rhotestapp/sources/base_adapter.rb +9 -0
  160. data/spec/apps/rhotestapp/sources/sample_adapter.rb +66 -0
  161. data/spec/apps/rhotestapp/sources/simple_adapter.rb +39 -0
  162. data/spec/apps/rhotestapp/sources/sub_adapter.rb +7 -0
  163. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem/mygem.rb +8 -0
  164. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem.rb +1 -0
  165. data/spec/bulk_data/bulk_data_spec.rb +79 -0
  166. data/spec/client_spec.rb +58 -0
  167. data/spec/client_sync_spec.rb +377 -0
  168. data/spec/doc/base.html +72 -0
  169. data/spec/doc/doc_spec.rb +303 -0
  170. data/spec/doc/footer.html +4 -0
  171. data/spec/doc/header.html +30 -0
  172. data/spec/document_spec.rb +27 -0
  173. data/spec/generator/generator_spec.rb +53 -0
  174. data/spec/generator/generator_spec_helper.rb +8 -0
  175. data/spec/jobs/bulk_data_job_spec.rb +76 -0
  176. data/spec/jobs/ping_job_spec.rb +26 -0
  177. data/spec/jobs/source_job_spec.rb +25 -0
  178. data/spec/license_spec.rb +48 -0
  179. data/spec/model_spec.rb +269 -0
  180. data/spec/perf/bulk_data_perf_spec.rb +33 -0
  181. data/spec/perf/perf_spec_helper.rb +51 -0
  182. data/spec/perf/store_perf_spec.rb +28 -0
  183. data/spec/ping/blackberry_spec.rb +62 -0
  184. data/spec/ping/iphone_spec.rb +50 -0
  185. data/spec/read_state_spec.rb +25 -0
  186. data/spec/rhosync_spec.rb +43 -0
  187. data/spec/server/server_spec.rb +341 -0
  188. data/spec/source_adapter_spec.rb +114 -0
  189. data/spec/source_spec.rb +77 -0
  190. data/spec/source_sync_spec.rb +248 -0
  191. data/spec/spec_helper.rb +240 -0
  192. data/spec/store_spec.rb +149 -0
  193. data/spec/sync_states_spec.rb +101 -0
  194. data/spec/testdata/1000-data.txt +1414 -0
  195. data/spec/testdata/compressed/compress-data.txt +1 -0
  196. data/spec/testdata/upload1.txt +1 -0
  197. data/spec/testdata/upload2.txt +1 -0
  198. data/spec/user_spec.rb +79 -0
  199. data/tasks/redis.rake +134 -0
  200. metadata +545 -0
@@ -0,0 +1 @@
1
+ some compressed text
@@ -0,0 +1 @@
1
+ hello
@@ -0,0 +1 @@
1
+ world
data/spec/user_spec.rb ADDED
@@ -0,0 +1,79 @@
1
+ require File.join(File.dirname(__FILE__),'spec_helper')
2
+
3
+ describe "User" do
4
+ it_should_behave_like "SpecBootstrapHelper"
5
+ it_should_behave_like "SourceAdapterHelper"
6
+
7
+ it "should create user with fields" do
8
+ @u.id.should == @u_fields[:login]
9
+ @u1 = User.load(@u_fields[:login])
10
+ @u1.id.should == @u.id
11
+ @u1.login.should == @u_fields[:login]
12
+ @u1.email.should == @u_fields[:email]
13
+ end
14
+
15
+ it "should delete seats for user's clients" do
16
+ Client.create(@c_fields,{:source_name => @s_fields[:name]})
17
+ c_size = @u.clients.members.size
18
+ current = Store.get_value(License::CLIENT_DOCKEY).to_i
19
+ @u.delete
20
+ Store.get_value(License::CLIENT_DOCKEY).to_i.should == current - c_size
21
+ end
22
+
23
+ it "should create token for user" do
24
+ token = @u.create_token
25
+ token.length.should == 32
26
+ ApiToken.load(token).user_id.should == @u.id
27
+ end
28
+
29
+ it "should get token for user" do
30
+ token = @u.create_token
31
+ @u.token.value.length.should == 32
32
+ @u.token.value.should == token
33
+ end
34
+
35
+ it "should maintain only one token for user" do
36
+ token = @u.create_token
37
+ ApiToken.is_exist?(token).should == true
38
+ @u.create_token
39
+ ApiToken.is_exist?(token).should == false
40
+ end
41
+
42
+ it "should assign token to existing user" do
43
+ token = @u.create_token
44
+ @u.token = 'foo'
45
+ @u.token.value.should == 'foo'
46
+ ApiToken.is_exist?('foo').should == true
47
+ ApiToken.is_exist?(token).should == false
48
+ end
49
+
50
+ it "should authenticate with proper credentials" do
51
+ @u1 = User.authenticate(@u_fields[:login],'testpass')
52
+ @u1.should_not be_nil
53
+ @u1.login.should == @u_fields[:login]
54
+ @u1.email.should == @u_fields[:email]
55
+ end
56
+
57
+ it "should fail to authenticate with invalid credentials" do
58
+ User.authenticate(@u_fields[:login],'wrongpass').should be_nil
59
+ end
60
+
61
+ it "should fail to authenticate with nil user" do
62
+ User.authenticate('niluser','doesnotmatter').should be_nil
63
+ end
64
+
65
+ it "should delete user and user clients" do
66
+ @c.put_data(:cd,@data)
67
+ cid = @c.id
68
+ @u.delete
69
+ User.is_exist?(@u_fields[:login]).should == false
70
+ Client.is_exist?(cid).should == false
71
+ @c.get_data(:cd).should == {}
72
+ end
73
+
74
+ it "should delete token for user" do
75
+ token = @u.create_token
76
+ @u.delete
77
+ ApiToken.is_exist?(token).should == false
78
+ end
79
+ end
data/tasks/redis.rake ADDED
@@ -0,0 +1,134 @@
1
+ # Inspired by rabbitmq.rake the Redbox project at http://github.com/rick/redbox/tree/master
2
+ require 'fileutils'
3
+ require 'open-uri'
4
+
5
+ class RedisRunner
6
+
7
+ def self.redisdir
8
+ "/tmp/redis/"
9
+ end
10
+
11
+ def self.redisconfdir
12
+ server_dir = File.dirname(`which redis-server`)
13
+ conf_file = "#{server_dir}/../etc/redis.conf"
14
+ unless File.exists? conf_file
15
+ conf_file = "#{server_dir}/../../etc/redis.conf"
16
+ end
17
+ conf_file
18
+ end
19
+
20
+ def self.dtach_socket
21
+ '/tmp/redis.dtach'
22
+ end
23
+
24
+ # Just check for existance of dtach socket
25
+ def self.running?
26
+ File.exists? dtach_socket
27
+ end
28
+
29
+ def self.start
30
+ puts 'Detach with Ctrl+\ Re-attach with rake redis:attach'
31
+ sleep 1
32
+ command = "dtach -A #{dtach_socket} redis-server #{redisconfdir}"
33
+ sh command
34
+ end
35
+
36
+ def self.attach
37
+ exec "dtach -a #{dtach_socket}"
38
+ end
39
+
40
+ def self.stop
41
+ sh 'echo "SHUTDOWN" | nc localhost 6379'
42
+ end
43
+
44
+ end
45
+
46
+ namespace :redis do
47
+
48
+ desc 'About redis'
49
+ task :about do
50
+ puts "\nSee http://code.google.com/p/redis/ for information about redis.\n\n"
51
+ end
52
+
53
+ desc 'Start redis'
54
+ task :start do
55
+ RedisRunner.start
56
+ end
57
+
58
+ desc 'Stop redis'
59
+ task :stop do
60
+ RedisRunner.stop
61
+ end
62
+
63
+ desc 'Restart redis'
64
+ task :restart do
65
+ RedisRunner.stop
66
+ RedisRunner.start
67
+ end
68
+
69
+ desc 'Attach to redis dtach socket'
70
+ task :attach do
71
+ RedisRunner.attach
72
+ end
73
+
74
+ desc 'Install the latest verison of Redis from Github (requires git, duh)'
75
+ task :install => [:about, :download, :make] do
76
+ ENV['PREFIX'] and bin_dir = "#{ENV['PREFIX']}/bin" or bin_dir = '/usr/bin'
77
+ %w(redis-benchmark redis-cli redis-server).each do |bin|
78
+ sh "cp /tmp/redis/#{bin} #{bin_dir}"
79
+ end
80
+
81
+ puts "Installed redis-benchmark, redis-cli and redis-server to #{bin_dir}"
82
+
83
+ ENV['PREFIX'] and conf_dir = "#{ENV['PREFIX']}/etc" or conf_dir = '/etc'
84
+ unless File.exists?("#{conf_dir}/redis.conf")
85
+ sh "mkdir #{conf_dir}" unless File.exists?("#{conf_dir}")
86
+ sh "cp /tmp/redis/redis.conf #{conf_dir}/redis.conf"
87
+ puts "Installed redis.conf to #{conf_dir} \n You should look at this file!"
88
+ end
89
+ end
90
+
91
+ task :make do
92
+ sh "cd #{RedisRunner.redisdir} && make clean"
93
+ sh "cd #{RedisRunner.redisdir} && make"
94
+ end
95
+
96
+ desc "Download package"
97
+ task :download do
98
+ sh 'rm -rf /tmp/redis/' if File.exists?("#{RedisRunner.redisdir}/.svn")
99
+ sh 'git clone git://github.com/antirez/redis.git /tmp/redis' unless File.exists?(RedisRunner.redisdir)
100
+ sh "cd #{RedisRunner.redisdir} && git pull" if File.exists?("#{RedisRunner.redisdir}/.git")
101
+ end
102
+
103
+ end
104
+
105
+ namespace :dtach do
106
+
107
+ desc 'About dtach'
108
+ task :about do
109
+ puts "\nSee http://dtach.sourceforge.net/ for information about dtach.\n\n"
110
+ end
111
+
112
+ desc 'Install dtach 0.8 from source'
113
+ task :install => [:about] do
114
+
115
+ Dir.chdir('/tmp/')
116
+ unless File.exists?('/tmp/dtach-0.8.tar.gz')
117
+ require 'net/http'
118
+
119
+ url = 'http://downloads.sourceforge.net/project/dtach/dtach/0.8/dtach-0.8.tar.gz'
120
+ open('/tmp/dtach-0.8.tar.gz', 'wb') do |file| file.write(open(url).read) end
121
+ end
122
+
123
+ unless File.directory?('/tmp/dtach-0.8')
124
+ system('tar xzf dtach-0.8.tar.gz')
125
+ end
126
+
127
+ ENV['PREFIX'] and bin_dir = "#{ENV['PREFIX']}/bin" or bin_dir = "/usr/bin"
128
+ Dir.chdir('/tmp/dtach-0.8/')
129
+ sh 'cd /tmp/dtach-0.8/ && ./configure && make'
130
+ sh "cp /tmp/dtach-0.8/dtach #{bin_dir}"
131
+
132
+ puts "Dtach successfully installed to #{bin_dir}"
133
+ end
134
+ end