rhodes 3.2.0.beta.7 → 3.2.0.beta.8
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/Rakefile +1 -0
- data/bin/set-rhodes-sdk +2 -1
- data/doc/device-caps.txt +34 -0
- data/lib/extensions/debugger/CHANGELOG +3 -0
- data/lib/extensions/debugger/debugger.rb +5 -3
- data/platform/bb/rhodes/src/com/rho/rubyext/XMLParser.java +1 -1
- data/platform/iphone/Classes/AppManager/AppManager.m +59 -30
- data/platform/shared/RhoConnectClient/RhoConnectClient.cpp +5 -2
- data/platform/shared/RhoConnectClient/RhoConnectClient.h +2 -1
- data/rakefile.rb +1 -0
- data/rhomobile-debug.gemspec +1 -1
- data/spec/framework_spec/build.yml +1 -1
- data/spec/perfomance_spec/build.yml +1 -1
- data/spec/phone_spec/app/spec/rho_controller_spec.rb +6 -2
- data/spec/phone_spec/app/spec/rhofile_spec.rb +1 -1
- data/spec/phone_spec/build.yml +1 -1
- data/version +1 -1
- metadata +4 -4
data/Rakefile
CHANGED
data/bin/set-rhodes-sdk
CHANGED
@@ -15,7 +15,8 @@ if File.exists? "build.yml"
|
|
15
15
|
YAML.dump( $app_config, out )
|
16
16
|
end
|
17
17
|
|
18
|
-
rakefilepath = File.join(
|
18
|
+
rakefilepath = File.join( `get-rhodes-info --rhodes-path`.chomp(), 'res/generators/templates/application/Rakefile' )
|
19
|
+
puts "Application Rakefile has been updated to use latest Rhodes gem."
|
19
20
|
cp rakefilepath, '.'
|
20
21
|
end
|
21
22
|
end
|
data/doc/device-caps.txt
CHANGED
@@ -299,6 +299,8 @@ Remove contact identified by the provided id from the phonebook. (delete)
|
|
299
299
|
|
300
300
|
On all devices, properties currently supported are: "id","first_name","last_name","mobile_number","home_number","business_number","email_address","company_name"
|
301
301
|
|
302
|
+
### iPhone
|
303
|
+
|
302
304
|
On iPhone, additional contact properties are supported.
|
303
305
|
|
304
306
|
General:
|
@@ -326,6 +328,38 @@ Phone numbers:
|
|
326
328
|
Home pages:
|
327
329
|
"home_page"
|
328
330
|
|
331
|
+
### Android
|
332
|
+
|
333
|
+
On Android extended RhoContact::find functionality is implemented.
|
334
|
+
In addition to common usage described above it is allowed to pass additional parameter values:
|
335
|
+
|
336
|
+
* :all - get all contacts as usual
|
337
|
+
* :first - find first contact from list
|
338
|
+
* :count - returns count of contacts
|
339
|
+
|
340
|
+
For these selectors an additional params hash may be used. The next keys and values are recognized in additional params:
|
341
|
+
|
342
|
+
* :per_page - max count if contacts returned by find
|
343
|
+
* :offset - offset from begin of contacts' list
|
344
|
+
These two parameters are used to paginate contacts list. If used with :count exact number of returned contacts can be determined (for example for last page).
|
345
|
+
* :select - list of contact properties have to be selected from phonebook (Use it to enchance query performance)
|
346
|
+
|
347
|
+
On Android the nexts contact properties are supported (every of them may be used in :select list):
|
348
|
+
|
349
|
+
General:
|
350
|
+
"id", "display_name", "first_name", "last_name"
|
351
|
+
|
352
|
+
Phone numbers:
|
353
|
+
"mobile_number", "home_number", "business_number"
|
354
|
+
|
355
|
+
E-mails:
|
356
|
+
"email_address"
|
357
|
+
|
358
|
+
Company:
|
359
|
+
"company_name"
|
360
|
+
|
361
|
+
**NOTE: In most cases the result of RhoContact::find query may return more contact properties the defined in :select**
|
362
|
+
|
329
363
|
### Sample
|
330
364
|
For examples on how to use the API provided by this class, see the view and controller in the /app/Contacts folder in the [System API Samples application](http://github.com/rhomobile/rhodes-system-api-samples/tree/master/app/Contacts/controller.rb).
|
331
365
|
|
@@ -21,12 +21,13 @@ def debug_read_cmd(io,wait)
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def execute_cmd(cmd, advanced)
|
24
|
+
#$_s.write("execute_cmd start\n")
|
24
25
|
cmd = URI.unescape(cmd.gsub(/\+/,' ')) if advanced
|
25
26
|
puts "[Debugger] Executing: #{cmd.inspect}"
|
26
27
|
result = ""
|
27
28
|
error = '0';
|
28
29
|
begin
|
29
|
-
result = eval(cmd, $_binding).inspect
|
30
|
+
result = eval(cmd.to_s, $_binding).inspect
|
30
31
|
rescue Exception => exc
|
31
32
|
error = '1';
|
32
33
|
result = "#{$!}".inspect
|
@@ -34,6 +35,7 @@ def execute_cmd(cmd, advanced)
|
|
34
35
|
|
35
36
|
cmd = URI.escape(cmd.sub(/[\n\r]+$/, ''), Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) if advanced
|
36
37
|
$_s.write("EV" + (advanced ? "L:#{error}:#{cmd}:" : ':'+(error.to_i != 0 ? 'ERROR: ':'')) + result + "\n")
|
38
|
+
#$_s.write("execute_cmd end\n")
|
37
39
|
end
|
38
40
|
|
39
41
|
def get_variables(scope)
|
@@ -68,9 +70,9 @@ def get_variables(scope)
|
|
68
70
|
vars.each do |v|
|
69
71
|
if v !~ /^\$(=|KCODE)$/
|
70
72
|
begin
|
71
|
-
result = eval(v
|
73
|
+
result = eval(v.to_s, $_binding).inspect
|
72
74
|
rescue Exception => exc
|
73
|
-
|
75
|
+
$_s.write("get var exception\n")
|
74
76
|
result = "#{$!}".inspect
|
75
77
|
end
|
76
78
|
$_s.write("V:#{vartype}:#{v}:#{result}\n")
|
@@ -162,7 +162,7 @@ public class XMLParser extends RubyBasic {
|
|
162
162
|
|
163
163
|
private void parse(String strXML)throws Exception
|
164
164
|
{
|
165
|
-
InputStream in = new ByteArrayInputStream(strXML.getBytes());
|
165
|
+
InputStream in = new ByteArrayInputStream(strXML.getBytes("UTF-8"));
|
166
166
|
|
167
167
|
parse(in);
|
168
168
|
}
|
@@ -215,6 +215,16 @@ BOOL isPathIsSymLink(NSFileManager *fileManager, NSString* path) {
|
|
215
215
|
//#endif
|
216
216
|
BOOL nameChanged = ![self isContentsEqual:fileManager first:filePathNew second:filePathOld];
|
217
217
|
|
218
|
+
BOOL restoreSymLinks_only = NO;
|
219
|
+
|
220
|
+
{
|
221
|
+
NSString* testName = [rhoRoot stringByAppendingPathComponent:@"lib"];
|
222
|
+
if (![fileManager fileExistsAtPath:testName]) {
|
223
|
+
restoreSymLinks_only = YES;
|
224
|
+
}
|
225
|
+
restoreSymLinks_only = NO;
|
226
|
+
}
|
227
|
+
|
218
228
|
BOOL contentChanged;
|
219
229
|
if (nameChanged)
|
220
230
|
contentChanged = YES;
|
@@ -223,26 +233,43 @@ BOOL isPathIsSymLink(NSFileManager *fileManager, NSString* path) {
|
|
223
233
|
filePathOld = [rhoRoot stringByAppendingPathComponent:@"hash"];
|
224
234
|
|
225
235
|
contentChanged = ![self isContentsEqual:fileManager first:filePathNew second:filePathOld];
|
236
|
+
|
237
|
+
// check for lost sym-links (upgrade OS or reinstall application without change version)
|
238
|
+
if (!contentChanged) {
|
239
|
+
// check exist of sym-link
|
240
|
+
NSString* testName = [rhoRoot stringByAppendingPathComponent:@"lib"];
|
241
|
+
if (![fileManager fileExistsAtPath:testName]) {
|
242
|
+
NSLog(@" Can not found main Sym-Link - we should restore all sym-links !");
|
243
|
+
contentChanged = YES;
|
244
|
+
restoreSymLinks_only = YES;
|
245
|
+
}
|
246
|
+
else {
|
247
|
+
NSLog(@" Main Sym-Link founded - disable restoring !");
|
248
|
+
}
|
249
|
+
}
|
250
|
+
|
226
251
|
}
|
252
|
+
|
253
|
+
NSString* testName = [rhoRoot stringByAppendingPathComponent:@"lib"];
|
254
|
+
BOOL libExist = [fileManager fileExistsAtPath:testName];
|
255
|
+
if (libExist) {
|
256
|
+
NSLog(@" Lib File is Exist: %@", testName);
|
257
|
+
}
|
258
|
+
else {
|
259
|
+
NSLog(@" Lib File is NOT Exist: %@", testName);
|
260
|
+
}
|
227
261
|
|
262
|
+
|
228
263
|
if (contentChanged) {
|
229
264
|
#ifdef RHO_DONT_COPY_ON_START
|
230
265
|
// we have next situations when we should remove old content:
|
231
266
|
// 1. we upgrade old version (where we copy all files)
|
232
267
|
// we should remove all files
|
233
268
|
// 2. we upgrade version with symlinks
|
234
|
-
// we should remove only symlinks
|
269
|
+
// we should remove only symlinks
|
270
|
+
// 3. we should only restore sym-lins after that was cleared - OS upgrade/reinstall app with the same version/restore from bakup etc.
|
235
271
|
// we check old "lib" file - if it is SymLink then we have new version of Rhodes (with SymLinks instead of files)
|
236
272
|
|
237
|
-
NSString* testName = [rhoRoot stringByAppendingPathComponent:@"lib"];
|
238
|
-
//BOOL libExist = [fileManager fileExistsAtPath:testName];
|
239
|
-
//if (libExist) {
|
240
|
-
// NSLog(@" Lib File is Exist: %@", testName);
|
241
|
-
//}
|
242
|
-
//else {
|
243
|
-
// NSLog(@" Lib File is NOT Exist: %@", testName);
|
244
|
-
//}
|
245
|
-
|
246
273
|
BOOL isNewVersion = isPathIsSymLink(fileManager, testName);
|
247
274
|
|
248
275
|
RhoFileManagerDelegate_RemoveOnly_SymLinks* myDelegate = nil;
|
@@ -296,26 +323,28 @@ BOOL isPathIsSymLink(NSFileManager *fileManager, NSString* path) {
|
|
296
323
|
[myDelegate release];
|
297
324
|
}
|
298
325
|
// copy "db"
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
326
|
+
if (!restoreSymLinks_only) {
|
327
|
+
NSString *copy_dirs[] = {@"db"};
|
328
|
+
for (int i = 0, lim = sizeof(copy_dirs)/sizeof(copy_dirs[0]); i < lim; ++i) {
|
329
|
+
BOOL remove = nameChanged;
|
330
|
+
if ([copy_dirs[i] isEqualToString:@"db"] && !hasOldName)
|
331
|
+
remove = NO;
|
332
|
+
NSString *src = [bundleRoot stringByAppendingPathComponent:copy_dirs[i]];
|
333
|
+
NSLog(@"copy src: %@", src);
|
334
|
+
NSString *dst = [rhoRoot stringByAppendingPathComponent:copy_dirs[i]];
|
335
|
+
NSLog(@"copy dst: %@", dst);
|
336
|
+
[self copyFromMainBundle:fileManager fromPath:src toPath:dst remove:remove];
|
337
|
+
}
|
338
|
+
// Finally, copy "hash" and "name" files
|
339
|
+
NSString *items[] = {@"hash", @"name"};
|
340
|
+
for (int i = 0, lim = sizeof(items)/sizeof(items[0]); i < lim; ++i) {
|
341
|
+
NSString *src = [bundleRoot stringByAppendingPathComponent:items[i]];
|
342
|
+
NSLog(@"copy src: %@", src);
|
343
|
+
NSString *dst = [rhoRoot stringByAppendingPathComponent:items[i]];
|
344
|
+
NSLog(@"copy dst: %@", dst);
|
345
|
+
[fileManager removeItemAtPath:dst error:&error];
|
346
|
+
[fileManager copyItemAtPath:src toPath:dst error:&error];
|
347
|
+
}
|
319
348
|
}
|
320
349
|
#else
|
321
350
|
NSString *dirs[] = {@"apps", @"lib", @"db", @"hash", @"name"};
|
@@ -123,13 +123,16 @@ void rho_connectclient_processmodels(RHOM_MODEL* pModels, int nModels)
|
|
123
123
|
oUserDB.executeSQL("UPDATE sources SET sync_priority=?, sync_type=?, partition=?, schema=?, schema_version=?, associations=?, blob_attribs=? WHERE name=?",
|
124
124
|
model.sync_priority, getSyncTypeName(model.sync_type), model.partition,
|
125
125
|
(model.type == RMT_PROPERTY_FIXEDSCHEMA ? "schema_model" : ""), "", strAssoc.c_str(), model.blob_attribs, model.name );
|
126
|
-
|
126
|
+
|
127
|
+
model.source_id = res.getIntByIdx(1);
|
128
|
+
|
127
129
|
}else //new model
|
128
130
|
{
|
129
131
|
oUserDB.executeSQL("INSERT INTO sources (source_id,name,sync_priority, sync_type, partition, schema,schema_version, associations, blob_attribs) values (?,?,?,?,?,?,?,?,?) ",
|
130
132
|
nStartModelID, model.name, model.sync_priority, getSyncTypeName(model.sync_type), model.partition,
|
131
133
|
(model.type == RMT_PROPERTY_FIXEDSCHEMA ? "schema_model" : ""), "", strAssoc.c_str(), model.blob_attribs );
|
132
134
|
|
135
|
+
model.source_id = nStartModelID;
|
133
136
|
nStartModelID++;
|
134
137
|
}
|
135
138
|
}
|
@@ -922,7 +925,7 @@ void rho_connectclient_free_sync_objectnotify(RHO_CONNECT_OBJECT_NOTIFY* pNotify
|
|
922
925
|
free(pNotify->created_objects);
|
923
926
|
}
|
924
927
|
|
925
|
-
memset( pNotify, 0, sizeof(
|
928
|
+
memset( pNotify, 0, sizeof(RHO_CONNECT_OBJECT_NOTIFY) );
|
926
929
|
}
|
927
930
|
|
928
931
|
unsigned long rho_connectclient_strarray_create()
|
data/rakefile.rb
CHANGED
data/rhomobile-debug.gemspec
CHANGED
@@ -66,7 +66,10 @@ describe "url_for and link_to" do
|
|
66
66
|
|
67
67
|
it "should generate urls for create or index actions" do
|
68
68
|
@c.url_for(:action => :index, :id => '{12}').should == '/application/model'
|
69
|
-
|
69
|
+
|
70
|
+
is_bb6 = System::get_property('platform') == 'Blackberry' && (System::get_property('os_version').split('.')[0].to_i >= 6)
|
71
|
+
|
72
|
+
if !defined?(RHO_WP7) && !is_bb6
|
70
73
|
@c.url_for(:action => :create).should == '/application/model'
|
71
74
|
else
|
72
75
|
@c.url_for(:action => :create).should == '/application/model/create'
|
@@ -90,7 +93,8 @@ end
|
|
90
93
|
end
|
91
94
|
|
92
95
|
it "should generate urls with a query" do
|
93
|
-
|
96
|
+
is_bb6 = System::get_property('platform') == 'Blackberry' && (System::get_property('os_version').split('.')[0].to_i >= 6)
|
97
|
+
if !defined?(RHO_WP7) && !is_bb6
|
94
98
|
@c.url_for(:action => :create, :query => {:name => 'John Smith',
|
95
99
|
'address' => "http://john.smith.com"}).should == '/application/model?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com'
|
96
100
|
else
|
@@ -94,7 +94,7 @@ describe "RhoFile" do
|
|
94
94
|
it "should isfileexist" do
|
95
95
|
File.exist?(Rho::RhoApplication::get_model_path('app', 'spec')).should == true if System.get_property('platform') != 'Blackberry'
|
96
96
|
File.exist?(Rho::RhoApplication::get_blob_folder()).should == true
|
97
|
-
File.exist?( File.join( __rhoGetCurrentDir(), '
|
97
|
+
File.exist?( File.join( __rhoGetCurrentDir(), 'rholog.txt')).should == true
|
98
98
|
|
99
99
|
bExc = false
|
100
100
|
begin
|
data/spec/phone_spec/build.yml
CHANGED
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.0.beta.
|
1
|
+
3.2.0.beta.8
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhodes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196467
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 3.2.0.beta.
|
11
|
+
- 8
|
12
|
+
version: 3.2.0.beta.8
|
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-10-
|
20
|
+
date: 2011-10-19 00:00:00 -07:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|