rhoconnect 4.0.0.beta.10 → 4.0.0.beta.12
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.
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +6 -6
- data/Rakefile +1 -1
- data/commands/generators/controller.rb +1 -1
- data/commands/generators/model.rb +1 -1
- data/doc/deploying.txt +41 -38
- data/doc/source-adapters-js.txt +263 -0
- data/generators/templates/application/controllers/js/application_controller.js +6 -4
- data/generators/templates/source/controllers/js/controller.js +4 -4
- data/generators/templates/source/models/js/model.js +3 -1
- data/install.sh +76 -6
- data/installer/utils/constants.rb +4 -4
- data/js-adapters/ballroom.js +6 -7
- data/js-adapters/node_channel.rb +14 -8
- data/js-adapters/request.js +7 -8
- data/js-adapters/response.js +10 -2
- data/js-adapters/rhoconnect_helpers.js +34 -33
- data/js-adapters/router.js +15 -12
- data/lib/rhoconnect/controller/js_base.rb +2 -7
- data/lib/rhoconnect/document.rb +1 -1
- data/lib/rhoconnect/model/base.rb +25 -10
- data/lib/rhoconnect/model/js_base.rb +4 -3
- data/lib/rhoconnect/source.rb +15 -1
- data/lib/rhoconnect/version.rb +1 -1
- data/spec/apps/rhotestapp/models/js/js_sample.js +61 -14
- data/spec/apps/rhotestapp/models/ruby/sample_adapter.rb +5 -0
- data/spec/controllers/js_base_spec.rb +16 -11
- data/spec/models/js_model_spec.rb +68 -7
- data/spec/server/server_spec.rb +28 -0
- data/spec/source_adapter_spec.rb +0 -11
- data/spec/source_spec.rb +39 -0
- data/spec/spec_helper.rb +11 -0
- metadata +4 -44
- data/lib/rhoconnect/api/app/ans_login.rb +0 -3
- data/lib/rhoconnect/api/app/bulk_data.rb +0 -10
- data/lib/rhoconnect/api/app/fast_delete.rb +0 -11
- data/lib/rhoconnect/api/app/fast_insert.rb +0 -11
- data/lib/rhoconnect/api/app/fast_update.rb +0 -11
- data/lib/rhoconnect/api/app/login.rb +0 -5
- data/lib/rhoconnect/api/app/push_deletes.rb +0 -12
- data/lib/rhoconnect/api/app/push_objects.rb +0 -12
- data/lib/rhoconnect/api/app/query.rb +0 -8
- data/lib/rhoconnect/api/app/queue_updates.rb +0 -98
- data/lib/rhoconnect/api/app/search.rb +0 -8
- data/lib/rhoconnect/api/client/client_get_db_doc.rb +0 -5
- data/lib/rhoconnect/api/client/client_set_db_doc.rb +0 -8
- data/lib/rhoconnect/api/client/create.rb +0 -7
- data/lib/rhoconnect/api/client/get_client_params.rb +0 -4
- data/lib/rhoconnect/api/client/list_client_docs.rb +0 -17
- data/lib/rhoconnect/api/client/register.rb +0 -12
- data/lib/rhoconnect/api/client/reset.rb +0 -5
- data/lib/rhoconnect/api/readstate/set_refresh_time.rb +0 -9
- data/lib/rhoconnect/api/source/get_source_params.rb +0 -4
- data/lib/rhoconnect/api/source/list_sources.rb +0 -16
- data/lib/rhoconnect/api/source/update_source_params.rb +0 -6
- data/lib/rhoconnect/api/store/get_db_doc.rb +0 -4
- data/lib/rhoconnect/api/store/set_db_doc.rb +0 -7
- data/lib/rhoconnect/api/system/get_adapter.rb +0 -4
- data/lib/rhoconnect/api/system/get_license_info.rb +0 -9
- data/lib/rhoconnect/api/system/login.rb +0 -15
- data/lib/rhoconnect/api/system/reset.rb +0 -11
- data/lib/rhoconnect/api/system/save_adapter.rb +0 -4
- data/lib/rhoconnect/api/system/stats.rb +0 -22
- data/lib/rhoconnect/api/user/create_user.rb +0 -7
- data/lib/rhoconnect/api/user/delete_client.rb +0 -6
- data/lib/rhoconnect/api/user/delete_user.rb +0 -11
- data/lib/rhoconnect/api/user/list_clients.rb +0 -4
- data/lib/rhoconnect/api/user/list_source_docs.rb +0 -11
- data/lib/rhoconnect/api/user/list_users.rb +0 -3
- data/lib/rhoconnect/api/user/ping.rb +0 -3
- data/lib/rhoconnect/api/user/show_user.rb +0 -3
- data/lib/rhoconnect/api/user/update_user.rb +0 -5
- data/lib/rhoconnect/api/user/user_get_db_doc.rb +0 -5
- data/lib/rhoconnect/api/user/user_set_db_doc.rb +0 -10
data/install.sh
CHANGED
@@ -46,7 +46,7 @@ checkDeps ()
|
|
46
46
|
}
|
47
47
|
|
48
48
|
# determinePkgMgr
|
49
|
-
# Determines if the system is currently using rpm or
|
49
|
+
# Determines if the system is currently using rpm or
|
50
50
|
# debian based pckage management
|
51
51
|
determinePkgMgr ()
|
52
52
|
{
|
@@ -195,7 +195,7 @@ installRuby ()
|
|
195
195
|
echo "tar -xzf ${prefix}/${rubyTar} -C ${prefix}" >> $log
|
196
196
|
tar -xzf ${prefix}/${rubyTar} -C ${prefix} > /dev/null 2>&1
|
197
197
|
fi
|
198
|
-
|
198
|
+
|
199
199
|
echo "Installing ruby. This may take some time..." | tee -a $log
|
200
200
|
echo "pushd ${prefix}/${rubyDir}" | tee -a $log
|
201
201
|
pushd ${prefix}/${rubyDir}
|
@@ -204,14 +204,14 @@ installRuby ()
|
|
204
204
|
echo "make && make install" | tee -a $log
|
205
205
|
make >> $log 2>&1
|
206
206
|
make install >> $log 2>&1
|
207
|
-
|
207
|
+
|
208
208
|
if (( $? )) ; then
|
209
209
|
echo "Some dependencies not installed..." | tee -a $log
|
210
210
|
echo "Please install them and then re-run the installation script." | tee -a $log
|
211
211
|
echo "For troubleshooting see file $log ..." | tee -a $log
|
212
212
|
exit 1
|
213
213
|
fi
|
214
|
-
|
214
|
+
|
215
215
|
popd
|
216
216
|
echo -e "$rubyDir is successfully installed.\n" | tee -a $log
|
217
217
|
}
|
@@ -257,10 +257,15 @@ webServer=""
|
|
257
257
|
rubyVersion=""
|
258
258
|
rubyBinDir=""
|
259
259
|
|
260
|
-
# Define ruby
|
260
|
+
# Define ruby and nodejs versions to be installed ...
|
261
261
|
RUBY_PATCH="p392"
|
262
262
|
RUBY_VERSION="ruby-1.9.3-${RUBY_PATCH}"
|
263
263
|
|
264
|
+
NODE_VERSION=v0.10.4
|
265
|
+
NODE_URL=http://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}.tar.gz
|
266
|
+
ARCH=$([[ `uname -m` == x86_64 ]] && echo "x64" || echo "x86")
|
267
|
+
NODE_BIN_URL=http://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-${ARCH}.tar.gz
|
268
|
+
|
264
269
|
# parse command-line options
|
265
270
|
parseOpts "$*"
|
266
271
|
|
@@ -293,10 +298,75 @@ fi
|
|
293
298
|
# Install redis, sqllite3, nginx, rhoconnect
|
294
299
|
opts=" -d $dist -l $log"
|
295
300
|
${prefix}/bin/ruby ${INSTALL_DIR}/unix-like/rhoinstaller.rb ${opts}
|
296
|
-
if (( $? )) ; then
|
301
|
+
if (( $? )) ; then
|
297
302
|
echo "Installation failed. For troubleshooting see file $log ..." | tee -a $log
|
298
303
|
exit 1
|
299
304
|
fi
|
300
305
|
|
306
|
+
|
307
|
+
##################################################################################
|
308
|
+
# Install nodejs
|
309
|
+
echo
|
310
|
+
echo "Downloading ${NODE_URL} file ..." | tee -a $log
|
311
|
+
wget ${NODE_URL} -O node-${NODE_VERSION}.tar.gz -o /dev/null
|
312
|
+
tar -xzf node-${NODE_VERSION}.tar.gz > /dev/null 2>&1
|
313
|
+
|
314
|
+
echo "Building nodejs $NODE_VERSION ..." | tee -a $log
|
315
|
+
cd node-${NODE_VERSION}/
|
316
|
+
# Cent OS/RHEL 5 requires python 2.6
|
317
|
+
export PYTHON=`which python26 2> /dev/null`
|
318
|
+
$PYTHON ./configure --prefix=$prefix >> $log 2>&1
|
319
|
+
make >> $log 2>&1
|
320
|
+
make install >> $log 2>&1
|
321
|
+
if [[ $? != 0 ]]; then
|
322
|
+
echo "Installation of nodejs $NODE_VERSION is failed. For troubleshooting see file $log ..." | tee -a $log
|
323
|
+
exit
|
324
|
+
fi
|
325
|
+
cd ../
|
326
|
+
rm node-${NODE_VERSION}.tar.gz
|
327
|
+
rm -rf node-${NODE_VERSION}/
|
328
|
+
|
329
|
+
echo "nodejs $NODE_VERSION is successfully installed" | tee -a $log
|
330
|
+
echo
|
331
|
+
|
332
|
+
# TODO:
|
333
|
+
# if [ -e /etc/redhat-release ] ; then
|
334
|
+
# grep '5\.[0-9]\{1,2\}' /etc/redhat-release > /dev/null
|
335
|
+
# CentOS5=$?
|
336
|
+
# else
|
337
|
+
# CentOS5=1
|
338
|
+
# fi
|
339
|
+
# if [ $CentOS5 -eq 0 ] ; then
|
340
|
+
# echo "CentOS 5.x is found ..."
|
341
|
+
# echo "Downloading ${NODE_URL} source file ..." | tee -a $log
|
342
|
+
# wget ${NODE_URL} -O node-${NODE_VERSION}.tar.gz -o /dev/null
|
343
|
+
# tar -xzf node-${NODE_VERSION}.tar.gz > /dev/null 2>&1
|
344
|
+
# echo "Building nodejs $NODE_VERSION ..." | tee -a $log
|
345
|
+
# cd node-${NODE_VERSION}/
|
346
|
+
# # Cent OS/RHEL 5 requires python 2.6
|
347
|
+
# export PYTHON=`which python26 2> /dev/null`
|
348
|
+
# $PYTHON ./configure --prefix=$prefix >> $log 2>&1
|
349
|
+
# make >> $log 2>&1
|
350
|
+
# make install >> $log 2>&1
|
351
|
+
# if [[ $? != 0 ]]; then
|
352
|
+
# echo "Installation of nodejs $NODE_VERSION is failed. For troubleshooting see file $log ..." | tee -a $log
|
353
|
+
# exit
|
354
|
+
# fi
|
355
|
+
# cd ../
|
356
|
+
# rm node-${NODE_VERSION}.tar.gz
|
357
|
+
# rm -rf node-${NODE_VERSION}/
|
358
|
+
# else
|
359
|
+
# echo "Downloading ${NODE_BIN_URL} linux binary file ..." | tee -a $log
|
360
|
+
# wget ${NODE_BIN_URL} -O node-${NODE_VERSION}-linux-${ARCH}.tar.gz -o /dev/null
|
361
|
+
# path=`pwd`
|
362
|
+
# pushd ${prefix}
|
363
|
+
# tar xzf ${path}/node-${NODE_VERSION}-linux-${ARCH}.tar.gz --strip=1 > /dev/null 2>&1
|
364
|
+
# popd
|
365
|
+
# fi
|
366
|
+
# echo "nodejs $NODE_VERSION is successfully installed" | tee -a $log
|
367
|
+
#
|
368
|
+
|
369
|
+
##################################################################################
|
370
|
+
|
301
371
|
# Create configuration scripts for redis, nginx, thin.
|
302
372
|
${prefix}/bin/ruby ${INSTALL_DIR}/unix-like/create_texts.rb ${opts}
|
@@ -12,19 +12,19 @@ module Constants
|
|
12
12
|
SSH_KEY = "#{HOME_DIR}/.ssh/#{PEM_FILE}"
|
13
13
|
ACCESS_KEY_FILE = "#{HOME_DIR}/.ec2"
|
14
14
|
UBUNTU_STACK = { :image_id => 'ami-02d7f547', # jenkins-ubuntu-12.04-test-image
|
15
|
-
:tags => {'Name' => 'Ubuntu-12.04'},
|
15
|
+
:tags => {'Name' => 'Ubuntu-12.04'},
|
16
16
|
:flavor_id => 'c1.xlarge',
|
17
17
|
:key_name => 'jenkinskey',
|
18
18
|
:groups => 'load-test',
|
19
19
|
:user => 'ubuntu'}
|
20
|
-
CENTOS5_STACK = { :image_id => 'ami-
|
21
|
-
:tags => {'Name' => 'CentOS-5.9'},
|
20
|
+
CENTOS5_STACK = { :image_id => 'ami-bed9f5fb', # jenkins-centos-5.9-test-image
|
21
|
+
:tags => {'Name' => 'CentOS-5.9'},
|
22
22
|
:flavor_id => 'c1.xlarge',
|
23
23
|
:key_name => 'jenkinskey',
|
24
24
|
:groups => 'load-test',
|
25
25
|
:user => 'root'}
|
26
26
|
CENTOS6_STACK = { :image_id => 'ami-02ae8c47', # jenkins-centos-6.3-test-image
|
27
|
-
:tags => {'Name' => 'CentOS-6.3'},
|
27
|
+
:tags => {'Name' => 'CentOS-6.3'},
|
28
28
|
:flavor_id => 'c1.xlarge',
|
29
29
|
:key_name => 'jenkinskey',
|
30
30
|
:groups => 'load-test',
|
data/js-adapters/ballroom.js
CHANGED
@@ -6,7 +6,8 @@ var redis = require('redis'),
|
|
6
6
|
routes = require('./router'),
|
7
7
|
client_sub = redis.createClient(),
|
8
8
|
client_pub = redis.createClient(),
|
9
|
-
pub_channel = process.argv[2] + "RedisPUB"
|
9
|
+
pub_channel = process.argv[2] + "RedisPUB",
|
10
|
+
rcHelpers = require('./rhoconnect_helpers');
|
10
11
|
|
11
12
|
//define global hash functions to store callbacks, routes
|
12
13
|
rhoconnectCallbacks = {};
|
@@ -176,11 +177,6 @@ var defaults = function(hsh){
|
|
176
177
|
|
177
178
|
var format_options = function(opts){
|
178
179
|
return JSON.stringify(opts);
|
179
|
-
// var f_opts = "";
|
180
|
-
// for(var propt in opts){
|
181
|
-
// f_opts += propt + ":" + opts[propt];
|
182
|
-
// }
|
183
|
-
// return f_opts;
|
184
180
|
};
|
185
181
|
|
186
182
|
function guid() {
|
@@ -213,4 +209,7 @@ exports.put = put;
|
|
213
209
|
exports.del = del;
|
214
210
|
exports.post = post;
|
215
211
|
exports.defaults = defaults;
|
216
|
-
exports.exitNodejs = exitNodejs;
|
212
|
+
exports.exitNodejs = exitNodejs;
|
213
|
+
exports.stashResult = rcHelpers.stashResult;
|
214
|
+
exports.source = rcHelpers.source;
|
215
|
+
module.exports.Store = rcHelpers.Store;
|
data/js-adapters/node_channel.rb
CHANGED
@@ -96,7 +96,8 @@ module Rhoconnect
|
|
96
96
|
rescue Exception=>e
|
97
97
|
RESULT_HASH[key][:status] = 'broken'
|
98
98
|
RESULT_HASH[key][:result] = "exception #{e.message}\n#{e.backtrace}"
|
99
|
-
|
99
|
+
log "Timeout on wait, setting JavaScript result state to broken: #{e.inspect}"
|
100
|
+
log e.backtrace.join("\n")
|
100
101
|
end
|
101
102
|
|
102
103
|
#request waiting either timed out or returned response
|
@@ -151,24 +152,29 @@ module Rhoconnect
|
|
151
152
|
end
|
152
153
|
|
153
154
|
def process_message(curr_model,data)
|
154
|
-
#puts "proccessing msg #{data}"
|
155
|
-
|
155
|
+
# puts "proccessing msg #{data.inspect}"
|
156
|
+
klass = curr_model
|
157
|
+
klass = Object.const_get(data['kls']) if data['kls']
|
158
|
+
if klass.respond_to?(data['function'].to_sym)
|
156
159
|
if data['args'] and data['args'].size > 0
|
157
160
|
if(data['function'] == 'stash_result')
|
158
|
-
|
159
|
-
|
161
|
+
klass.send('result=',data['args'])
|
162
|
+
klass.send(data['function'])
|
160
163
|
process_res = nil
|
161
164
|
else
|
162
|
-
res =
|
165
|
+
res = klass.send(data['function'],*data['args'])
|
163
166
|
end
|
164
167
|
else
|
165
|
-
res =
|
168
|
+
res = klass.send(data['function'])
|
166
169
|
end
|
167
170
|
else
|
168
171
|
raise Exception.new("Method #{data['function']} not found in model #{curr_model.class.name.to_s}.")
|
169
172
|
end
|
170
173
|
|
171
|
-
process_res = res
|
174
|
+
process_res = res
|
175
|
+
unless res.is_a?(String) or res.is_a?(TrueClass) or res.is_a?(FalseClass) or res.nil?
|
176
|
+
process_res = res.to_hash
|
177
|
+
end
|
172
178
|
|
173
179
|
{:result=>process_res,:callback=>data['callback'],:request_id=>data['request_id'],:route=>'response'}
|
174
180
|
end
|
data/js-adapters/request.js
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
var Request = function(){
|
1
|
+
var Request = function(){
|
2
2
|
this.__defineGetter__("params",function(){
|
3
|
-
return params;
|
3
|
+
return params;
|
4
4
|
});
|
5
|
-
|
5
|
+
|
6
6
|
this.__defineSetter__("params",function(arg){
|
7
7
|
params = arg;
|
8
8
|
});
|
9
|
-
|
9
|
+
|
10
10
|
this.__defineGetter__("header",function(){
|
11
11
|
return header;
|
12
12
|
});
|
13
|
-
|
13
|
+
|
14
14
|
this.__defineSetter__("header",function(arg){
|
15
15
|
header = arg;
|
16
16
|
});
|
17
|
-
|
17
|
+
|
18
18
|
this.__defineGetter__("model",function(){
|
19
19
|
return model;
|
20
20
|
});
|
@@ -22,6 +22,5 @@ var Request = function(){
|
|
22
22
|
this.__defineSetter__("model",function(arg){
|
23
23
|
model = arg;
|
24
24
|
});
|
25
|
-
|
26
|
-
}
|
25
|
+
};
|
27
26
|
module.exports = Request;
|
data/js-adapters/response.js
CHANGED
@@ -34,20 +34,28 @@ var Response = function(){
|
|
34
34
|
exception = arg;
|
35
35
|
});
|
36
36
|
|
37
|
+
this.__defineGetter__("currentUser",function(){
|
38
|
+
return currentUser;
|
39
|
+
});
|
40
|
+
|
41
|
+
this.__defineSetter__("currentUser",function(arg){
|
42
|
+
currentUser = arg;
|
43
|
+
});
|
44
|
+
|
37
45
|
this.send = function(data){
|
38
46
|
var ballroom = require("./ballroom");
|
39
47
|
var user_json = {};
|
40
48
|
|
41
49
|
//if callback we are sending request to ruby
|
42
|
-
if(data['callback']){
|
50
|
+
if(data && data['callback']){
|
43
51
|
this.params = null;
|
44
52
|
this.header['route'] = 'request';
|
45
53
|
user_json = data;
|
46
54
|
}
|
47
55
|
else{
|
48
56
|
user_json["result"] = data;
|
57
|
+
this.header['route'] = 'response';
|
49
58
|
}
|
50
|
-
|
51
59
|
Object.extend(user_json,this.params);
|
52
60
|
Object.extend(user_json,this.header);
|
53
61
|
Object.extend(user_json,this.exception);
|
@@ -1,19 +1,13 @@
|
|
1
1
|
|
2
|
-
var current_user = function(resp,callback){
|
3
|
-
var json = {};
|
4
|
-
json['function'] = 'current_user';
|
5
|
-
json['args'] = '';
|
6
|
-
json['callback'] = callback;
|
7
|
-
resp.send(json);
|
8
|
-
}
|
9
2
|
|
10
|
-
var
|
3
|
+
var stashResult = function(resp){
|
11
4
|
var json = {};
|
5
|
+
var callback = function(){};
|
12
6
|
json['function'] = 'stash_result';
|
13
7
|
json['args'] = resp.params;
|
14
8
|
json['callback'] = callback;
|
15
9
|
resp.send(json);
|
16
|
-
}
|
10
|
+
};
|
17
11
|
|
18
12
|
var source = function(resp,callback){
|
19
13
|
var json = {};
|
@@ -21,40 +15,47 @@ var source = function(resp,callback){
|
|
21
15
|
json['args'] = '';
|
22
16
|
json['callback'] = callback;
|
23
17
|
resp.send(json);
|
24
|
-
}
|
18
|
+
};
|
19
|
+
|
20
|
+
var getData = function(resp,callback){
|
21
|
+
var json = {};
|
22
|
+
json['function'] = 'get_data';
|
23
|
+
json['args'] = '';
|
24
|
+
json['callback'] = callback;
|
25
|
+
resp.send(json);
|
26
|
+
};
|
25
27
|
|
26
28
|
var Store = function(){
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
var json = this.format_json('put_value',resp.params);
|
29
|
+
|
30
|
+
this.putValue = function(resp,callback){
|
31
|
+
var json = this.formatJson('put_value',resp.params,callback);
|
31
32
|
resp.send(json);
|
32
|
-
}
|
33
|
-
this.
|
34
|
-
var json = this.
|
33
|
+
};
|
34
|
+
this.getValue = function(resp,callback){
|
35
|
+
var json = this.formatJson('get_value',resp.params,callback);
|
35
36
|
resp.send(json);
|
36
|
-
}
|
37
|
-
this.
|
38
|
-
var json = this.
|
37
|
+
};
|
38
|
+
this.putData = function(resp,callback){
|
39
|
+
var json = this.formatJson('put_data',resp.params,callback);
|
39
40
|
resp.send(json);
|
40
|
-
}
|
41
|
-
this.
|
42
|
-
var json = this.
|
41
|
+
};
|
42
|
+
this.getData = function(resp,callback){
|
43
|
+
var json = this.formatJson('get_data',resp.params,callback);
|
43
44
|
resp.send(json);
|
44
|
-
}
|
45
|
-
|
46
|
-
function
|
45
|
+
};
|
46
|
+
|
47
|
+
this.formatJson = function(method,args,callback){
|
47
48
|
var json = {};
|
48
|
-
json['kls'] =
|
49
|
+
json['kls'] = 'Store';
|
49
50
|
json['function'] = method;
|
50
51
|
json['args'] = args;
|
52
|
+
json['callback'] = callback;
|
51
53
|
json['route'] = 'request';
|
52
54
|
return json;
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
55
|
+
};
|
56
|
+
};
|
56
57
|
|
57
|
-
exports.
|
58
|
-
exports.
|
58
|
+
exports.stashResult = stashResult;
|
59
|
+
exports.getData = getData;
|
59
60
|
exports.source = source;
|
60
|
-
module.exports.Store = Store;
|
61
|
+
module.exports.Store = new Store();
|
data/js-adapters/router.js
CHANGED
@@ -6,47 +6,50 @@ var router = function(json){
|
|
6
6
|
case 'request':
|
7
7
|
try {
|
8
8
|
var request = new Request();
|
9
|
-
var
|
9
|
+
var resp1 = new Response();
|
10
10
|
|
11
11
|
request.params = json['args'];
|
12
12
|
request.header = {'request_id':json['request_id'],'route':json['route']};
|
13
13
|
request.model = json['model'];
|
14
|
-
|
14
|
+
resp1.currentUser = json['user'];
|
15
|
+
resp1.header = {'request_id':json['request_id'],'route':'response'};
|
15
16
|
|
16
17
|
//if calling model function directly load file first
|
17
18
|
if(json['klss'] !== undefined){
|
19
|
+
var model_dir = '';
|
18
20
|
if(process.argv[3] == 'test' ){
|
19
|
-
|
21
|
+
model_dir = process.cwd() + "/spec/apps/rhotestapp/models/js/";
|
20
22
|
}
|
21
23
|
else{
|
22
|
-
|
24
|
+
model_dir = process.cwd() + "/models/js/";
|
23
25
|
}
|
24
26
|
//console.error("path is: ******* " + model_dir + json['klss'] + '.js');
|
25
27
|
var mod = require(model_dir + json['klss'] + '.js');
|
26
|
-
mod[
|
28
|
+
mod[json['function']](resp1);
|
27
29
|
}
|
28
30
|
else{
|
29
31
|
//console.error("reg routes are: " + registeredRoutes[json['url']]);
|
30
|
-
registeredRoutes[json['url']](request,
|
32
|
+
registeredRoutes[json['url']](request,resp1);
|
31
33
|
}
|
32
34
|
break;
|
33
35
|
}
|
34
36
|
catch(e){
|
35
37
|
console.error("Node.js error caught: "+ e);
|
36
38
|
console.error("Backtrace: " + e.stack);
|
37
|
-
|
38
|
-
|
39
|
+
resp1.exception = {"error": e};
|
40
|
+
resp1.send(null);
|
39
41
|
}
|
40
42
|
break;
|
41
43
|
case 'response':
|
42
44
|
//console.error("result callback is: " + json['callback'])
|
43
45
|
var cback = json['callback'];
|
44
46
|
json['callback'] = undefined;
|
45
|
-
var
|
46
|
-
|
47
|
-
|
47
|
+
var resp2 = new Response();
|
48
|
+
resp2.header = {'request_id':json['request_id'],'route':'response'};
|
49
|
+
resp2.result = json['result'];
|
48
50
|
|
49
|
-
|
51
|
+
|
52
|
+
rhoconnectCallbacks[cback](resp2);
|
50
53
|
delete rhoconnectCallbacks[cback];
|
51
54
|
break;
|
52
55
|
case 'deregister':
|
@@ -62,13 +62,7 @@ module Rhoconnect
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.hshify(str)
|
65
|
-
|
66
|
-
# result = str.split(",").inject({}) do |res,element|
|
67
|
-
# items = element.split(":")
|
68
|
-
# res[items[0].to_sym] = items[1]
|
69
|
-
# res
|
70
|
-
# end
|
71
|
-
result
|
65
|
+
JSON.parse(str, :symbolize_names => true)
|
72
66
|
end
|
73
67
|
|
74
68
|
def self.js_block(key,finish_block=nil)
|
@@ -79,6 +73,7 @@ module Rhoconnect
|
|
79
73
|
:model => under_score(params[:source_name]),
|
80
74
|
:route => 'request'
|
81
75
|
}
|
76
|
+
json[:user] = @model.current_user.login if @model
|
82
77
|
return_value = NodeChannel.publish_channel_and_wait(json,@model)
|
83
78
|
if finish_block
|
84
79
|
self.send(finish_block, return_value)
|
data/lib/rhoconnect/document.rb
CHANGED
@@ -138,7 +138,7 @@ module Document
|
|
138
138
|
# app-partitioned sources go to 0
|
139
139
|
# everything else if sharded
|
140
140
|
if(source.partition == :user)
|
141
|
-
index_char = Digest::SHA1.hexdigest("#{
|
141
|
+
index_char = Digest::SHA1.hexdigest("#{source.partition_name}:#{source.name}")[0]
|
142
142
|
# designate Store 0 only for system data
|
143
143
|
num_user_stores = Store.num_stores - 1
|
144
144
|
if num_user_stores > 0
|
@@ -28,8 +28,12 @@ module Rhoconnect
|
|
28
28
|
source.get_data(docname)
|
29
29
|
end
|
30
30
|
|
31
|
-
def self.
|
32
|
-
|
31
|
+
def self.partition_name(user_id)
|
32
|
+
user_id
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.load_source_model(source)
|
36
|
+
model_klass=nil
|
33
37
|
if source
|
34
38
|
begin
|
35
39
|
if source.name
|
@@ -39,20 +43,32 @@ module Rhoconnect
|
|
39
43
|
# certain models are pre-defined and reserved
|
40
44
|
# load them and instantiate
|
41
45
|
if Rhoconnect.predefined_sources.has_key?(source.name)
|
42
|
-
|
46
|
+
model_klass = Object.const_get(source.name)
|
43
47
|
elsif Object.const_defined?(source.name) && Object.const_get(source.name).to_s.split("::").first != 'Rhoconnect'
|
44
48
|
# fix until source adpaters are phased out, checking for Rhoconnect namespace
|
45
49
|
# so that backend models with same name as Rhoconnect models are instantiated correctly
|
46
|
-
|
47
|
-
unless
|
50
|
+
model_klass = Object.const_get(source.name)
|
51
|
+
unless model_klass
|
48
52
|
require under_score(source.name)
|
49
|
-
|
50
|
-
else
|
51
|
-
model = kls.new(source)
|
53
|
+
model_klass = Object.const_get(source.name)
|
52
54
|
end
|
53
55
|
else
|
54
|
-
|
56
|
+
model_klass=Rhoconnect::Model::DynamicAdapterModel
|
55
57
|
end
|
58
|
+
rescue Exception => e
|
59
|
+
log "Failure to find class for model #{source.name}: #{e.inspect.to_s}"
|
60
|
+
raise e
|
61
|
+
end
|
62
|
+
end
|
63
|
+
model_klass
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.create(source)
|
67
|
+
model=nil
|
68
|
+
model_klass = load_source_model(source)
|
69
|
+
if model_klass
|
70
|
+
begin
|
71
|
+
model = model_klass.new(source)
|
56
72
|
rescue ArgumentError => e
|
57
73
|
# Backward compatibility with code generated by gems < 2.2.0
|
58
74
|
log "ERROR: credential parameter in `initialize` method is deprecated and removed in version >= 2.2.0."
|
@@ -209,7 +225,6 @@ module Rhoconnect
|
|
209
225
|
@source.announce_changes
|
210
226
|
end
|
211
227
|
|
212
|
-
protected
|
213
228
|
def current_user
|
214
229
|
@source.user
|
215
230
|
end
|
@@ -64,8 +64,8 @@ module Rhoconnect
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def store_blob(obj,field_name,blob)
|
67
|
-
|
68
|
-
|
67
|
+
blob[:path] = blob[:tempfile].path
|
68
|
+
rho_methods('storeBlob',blob)
|
69
69
|
end
|
70
70
|
|
71
71
|
private
|
@@ -84,9 +84,10 @@ module Rhoconnect
|
|
84
84
|
:klss => self.class.actual_name,
|
85
85
|
:function => method_name,
|
86
86
|
:args => args,
|
87
|
+
:user => current_user.login,
|
87
88
|
:route => 'request'
|
88
89
|
}
|
89
|
-
NodeChannel.publish_channel_and_wait(json,self
|
90
|
+
NodeChannel.publish_channel_and_wait(json,self)
|
90
91
|
end
|
91
92
|
end
|
92
93
|
end
|
data/lib/rhoconnect/source.rb
CHANGED
@@ -359,7 +359,21 @@ module Rhoconnect
|
|
359
359
|
end
|
360
360
|
|
361
361
|
def user_by_partition
|
362
|
-
self.partition.to_sym == :user ?
|
362
|
+
self.partition.to_sym == :user ? partition_name : '__shared__'
|
363
|
+
end
|
364
|
+
|
365
|
+
def partition_name
|
366
|
+
# edge case - used in deleting documents
|
367
|
+
return self.user_id if self.user_id == '*'
|
368
|
+
# default is user_id
|
369
|
+
pname = self.user_id
|
370
|
+
begin
|
371
|
+
model_klass = Rhoconnect::Model::Base.load_source_model(self)
|
372
|
+
pname = model_klass ? model_klass.partition_name(self.user_id) : self.user_id
|
373
|
+
# eat the exception here
|
374
|
+
rescue Exception => e
|
375
|
+
end
|
376
|
+
pname
|
363
377
|
end
|
364
378
|
|
365
379
|
def check_refresh_time
|
data/lib/rhoconnect/version.rb
CHANGED