rhodes 2.1.0 → 2.2.0.beta.1

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 (241) hide show
  1. data/CHANGELOG +7 -0
  2. data/README.textile +4 -5
  3. data/Rakefile +8 -1
  4. data/lib/build/jake.rb +22 -16
  5. data/lib/extensions/rhoxml/rexml/cdata.rb +67 -0
  6. data/lib/extensions/rhoxml/rexml/document.rb +2 -116
  7. data/lib/extensions/rhoxml/rexml/element.rb +1 -1
  8. data/lib/extensions/rhoxml/rexml/text.rb +117 -0
  9. data/lib/framework/rho/render.rb +19 -11
  10. data/lib/framework/rho/rho.rb +17 -10
  11. data/lib/framework/rho/rhobluetooth.rb +103 -0
  12. data/lib/framework/rho/rhocontroller.rb +2 -0
  13. data/lib/framework/rho/rhoevent.rb +43 -0
  14. data/lib/framework/rho/rhoevent_bb.rb +80 -0
  15. data/lib/framework/rho/rhoevent_c.rb +47 -0
  16. data/lib/framework/rhodes.rb +2 -2
  17. data/lib/framework/rhom/rhom_db_adapter.rb +2 -1
  18. data/lib/framework/rhom/rhom_model.rb +9 -3
  19. data/lib/framework/rhom/rhom_object_factory.rb +46 -22
  20. data/lib/framework/rhom/rhom_source.rb +12 -10
  21. data/lib/framework/version.rb +2 -2
  22. data/lib/rhodes.rb +2 -2
  23. data/platform/android/Rhodes/AndroidManifest.xml +23 -2
  24. data/platform/android/Rhodes/gen/com/rhomobile/rhodes/R.java +54 -38
  25. data/platform/android/Rhodes/jni/include/rhodes.h +3 -0
  26. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +2 -2
  27. data/platform/android/Rhodes/jni/include/rhodes/details/rhojava.inc +4 -0
  28. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +16 -0
  29. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_bluetooth_RhoBluetoothManager.h +21 -0
  30. data/platform/android/Rhodes/jni/src/bluetooth.cpp +169 -0
  31. data/platform/android/Rhodes/jni/src/callbacks.cpp +10 -0
  32. data/platform/android/Rhodes/jni/src/event.cpp +429 -0
  33. data/platform/android/Rhodes/jni/src/fileapi.cpp +51 -1
  34. data/platform/android/Rhodes/jni/src/rhodes.cpp +16 -0
  35. data/platform/android/Rhodes/jni/src/sslimpl.cpp +3 -0
  36. data/platform/android/Rhodes/res/layout/bt_device_list.xml +42 -0
  37. data/platform/android/Rhodes/res/layout/bt_device_name.xml +7 -0
  38. data/platform/android/Rhodes/res/values/strings.xml +8 -0
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +14 -0
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +2 -0
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Push.java +7 -0
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +58 -0
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java +53 -0
  44. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +8 -0
  45. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +144 -3
  46. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/IRhoBluetoothManager.java +66 -0
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +201 -0
  48. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManager.java +139 -0
  49. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java +401 -0
  50. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerOld.java +136 -0
  51. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothSession.java +457 -0
  52. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/UUIDHelper.java +71 -0
  53. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +12 -7
  54. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +19 -0
  55. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +261 -0
  56. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +4 -2
  57. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +2 -2
  58. data/platform/android/Rhodes/src/com/rhomobile/rhodes/uri/MailUriHandler.java +10 -2
  59. data/platform/android/build/RhodesSRC_build.files +33 -22
  60. data/platform/android/build/android.rake +198 -27
  61. data/platform/android/build/librhodes_build.files +3 -1
  62. data/platform/android/build/libruby_build.files +4 -1
  63. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBResult.java +2 -2
  64. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBRowResult.java +1 -1
  65. data/platform/bb/Hsqldb/src/org/hsqldb/Expression.java +7 -4
  66. data/platform/bb/Hsqldb/src/org/hsqldb/Like.java +3 -3
  67. data/platform/bb/Hsqldb/src/org/hsqldb/Table.java +3 -1
  68. data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +1 -1
  69. data/platform/bb/RubyVM/RubyVM.jdp +1 -0
  70. data/platform/bb/RubyVM/src/com/rho/RhoConf.java +108 -1
  71. data/platform/bb/RubyVM/src/com/rho/RhoLogConf.java +7 -1
  72. data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +7 -4
  73. data/platform/bb/RubyVM/src/com/rho/ThreadQueue.java +7 -1
  74. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +1 -1
  75. data/platform/bb/RubyVM/src/com/rho/net/NetRequest.java +21 -23
  76. data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +19 -10
  77. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +8 -0
  78. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +3 -0
  79. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +14 -17
  80. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFile.java +7 -5
  81. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RhoSupport.java +2 -0
  82. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyRuntime.java +10 -1
  83. data/platform/bb/RubyVM/src/j2me/io/File.java +7 -6
  84. data/platform/bb/build/RubyVM_build.files +412 -412
  85. data/platform/bb/build/bb.rake +42 -18
  86. data/platform/bb/build/hsqldb_build.files +151 -151
  87. data/platform/bb/build/rhodes_build.files +44 -40
  88. data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +2 -0
  89. data/platform/bb/rhodes/platform/5.0/com/rho/RhodesApplicationPlatform.java +237 -0
  90. data/platform/bb/rhodes/platform/common/com/rho/RhodesApplicationPlatform.java +14 -0
  91. data/platform/bb/rhodes/rhodes.jdp +6 -1
  92. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +7 -1
  93. data/platform/bb/rhodes/src/com/rho/RhodesApplicationPlatform.java +14 -0
  94. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +62 -76
  95. data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +660 -0
  96. data/platform/bb/rhodes/src/{rhomobile → com/rho/rubyext}/RhoPhonebook.java +95 -38
  97. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +22 -1
  98. data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +26 -6
  99. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -7
  100. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothManager.java +528 -0
  101. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothPort.java +281 -0
  102. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothScreen.java +119 -0
  103. data/platform/bb/rhodes/src/rhomobile/camera/CameraFilesListener.java +2 -2
  104. data/platform/iphone/Classes/AppManager/AppManager.m +70 -7
  105. data/platform/iphone/Classes/Bluetooth/Bluetooth.h +72 -0
  106. data/platform/iphone/Classes/Bluetooth/Bluetooth.m +414 -0
  107. data/platform/iphone/Classes/Event/Event.h +12 -0
  108. data/platform/iphone/Classes/Event/Event.m +300 -0
  109. data/platform/iphone/Classes/LogOptionsController.h +2 -1
  110. data/platform/iphone/Classes/LogOptionsController.m +1 -1
  111. data/platform/iphone/Classes/LogViewController.h +2 -1
  112. data/platform/iphone/Classes/MapView/MapViewController.h +2 -1
  113. data/platform/iphone/Classes/RhoViewController.h +16 -0
  114. data/platform/iphone/Classes/RhoViewController.m +20 -0
  115. data/platform/iphone/Classes/Rhodes.h +12 -0
  116. data/platform/iphone/Classes/Rhodes.m +34 -6
  117. data/platform/iphone/Classes/Signature/SignatureViewController.h +2 -2
  118. data/platform/iphone/Classes/Signature/SignatureViewController.m +0 -10
  119. data/platform/iphone/Classes/SimpleMainView.h +2 -2
  120. data/platform/iphone/Classes/SimpleMainView.m +5 -14
  121. data/platform/iphone/Classes/SplashViewController.h +2 -2
  122. data/platform/iphone/Classes/TabbedMainView.h +2 -2
  123. data/platform/iphone/Classes/TabbedMainView.m +5 -10
  124. data/platform/iphone/Info.plist +5 -5
  125. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +39 -0
  126. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +47 -4
  127. data/platform/osx/Rhodes Debugger/NoodleLineNumberView.m +3 -2
  128. data/platform/shared/common/AutoPointer.h +3 -0
  129. data/platform/shared/common/RhoConf.cpp +2 -1
  130. data/platform/shared/common/RhoThread.h +1 -1
  131. data/platform/shared/common/RhoTime.h +3 -3
  132. data/platform/shared/common/RhodesApp.cpp +75 -23
  133. data/platform/shared/common/RhodesApp.h +4 -0
  134. data/platform/shared/common/RhodesAppBase.h +2 -0
  135. data/platform/shared/common/ThreadQueue.cpp +23 -18
  136. data/platform/shared/common/ThreadQueue.h +2 -0
  137. data/platform/shared/db/res/db/syncdb.schema +39 -39
  138. data/platform/shared/logging/RhoLogConf.cpp +58 -3
  139. data/platform/shared/logging/RhoLogConf.h +3 -1
  140. data/platform/shared/net/CURLNetRequest.cpp +17 -6
  141. data/platform/shared/net/HttpServer.cpp +125 -25
  142. data/platform/shared/net/HttpServer.h +4 -3
  143. data/platform/shared/ruby/ext/bluetooth/bluetooth.i +56 -0
  144. data/platform/shared/ruby/ext/bluetooth/bluetooth_wrap.c +2563 -0
  145. data/platform/shared/ruby/ext/calendar/calendar.i +28 -0
  146. data/platform/shared/ruby/ext/calendar/calendar_wrap.c +2251 -0
  147. data/platform/shared/ruby/ext/calendar/event.h +41 -0
  148. data/platform/shared/ruby/ext/calendar/event.i +28 -0
  149. data/platform/shared/ruby/ext/calendar/event_wrap.c +2151 -0
  150. data/platform/shared/ruby/ext/rho/rhoruby.c +103 -3
  151. data/platform/shared/ruby/ext/rho/rhoruby.h +16 -2
  152. data/platform/shared/ruby/ext/rhoconf/rhoconf.i +12 -0
  153. data/platform/shared/ruby/ext/rhoconf/rhoconf_wrap.c +101 -0
  154. data/platform/shared/ruby/ext/system/system.i +14 -0
  155. data/platform/shared/ruby/ext/system/system_wrap.c +2568 -2208
  156. data/platform/shared/ruby/main.c +8 -0
  157. data/platform/shared/rubyext/GeoLocation.cpp +6 -3
  158. data/platform/shared/rubyext/System.cpp +14 -0
  159. data/platform/shared/sync/SyncEngine.cpp +9 -1
  160. data/platform/shared/sync/SyncNotify.cpp +16 -8
  161. data/platform/shared/sync/SyncNotify.h +1 -0
  162. data/platform/shared/sync/SyncThread.cpp +7 -12
  163. data/platform/shared/sync/SyncThread.h +5 -3
  164. data/platform/wm/build/wm.rake +7 -1
  165. data/platform/wm/rhodes/Alert.cpp +1 -1
  166. data/platform/wm/rhodes/MainWindow.cpp +28 -0
  167. data/platform/wm/rhodes/MainWindow.h +9 -0
  168. data/platform/wm/rhodes/OutlookApp.cpp +72 -0
  169. data/platform/wm/rhodes/OutlookApp.h +22 -0
  170. data/platform/wm/rhodes/Rhodes.cpp +8 -0
  171. data/platform/wm/rhodes/Rhodes.rc +31 -0
  172. data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1274 -0
  173. data/platform/wm/rhodes/bluetooth/Bluetooth.h +321 -0
  174. data/platform/wm/rhodes/phonebook/NativeAddressBook.cpp +37 -70
  175. data/platform/wm/rhodes/phonebook/NativeAddressBook.h +0 -4
  176. data/platform/wm/rhodes/resource.h +8 -1
  177. data/platform/wm/rhodes/rho/net/NetRequest.cpp +4 -0
  178. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +6 -4
  179. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +487 -0
  180. data/platform/wm/rhodes/rhodes.vcproj +28 -11
  181. data/platform/wm/rhodes/stdafx.h +1 -0
  182. data/platform/wm/rubylib/rubylib.vcproj +32 -0
  183. data/rakefile.rb +8 -1
  184. data/res/generators/templates/application/Rakefile +1 -1
  185. data/res/generators/templates/application/app/layout.erb +4 -1
  186. data/res/generators/templates/application/build.yml +0 -1
  187. data/res/generators/templates/application/public/css/iphone.css +2 -2
  188. data/res/generators/templates/application/public/jqtouch/jqtouch-iphone.css +9 -0
  189. data/res/generators/templates/application/public/jqtouch/jqtouch.css +1 -5
  190. data/res/generators/templates/application/public/jqtouch/jqtouch.js +3 -2
  191. data/rhodes.gemspec +1 -1
  192. data/spec/perfomance_spec/app/Benchmark/benchmark.rb +4 -0
  193. data/spec/perfomance_spec/app/Benchmark/bulk_results.erb +13 -0
  194. data/spec/perfomance_spec/app/Benchmark/controller.rb +178 -0
  195. data/spec/perfomance_spec/app/Benchmark/create_results.erb +13 -0
  196. data/spec/perfomance_spec/app/Benchmark/customers.erb +35 -0
  197. data/spec/perfomance_spec/app/Benchmark/index.erb +9 -0
  198. data/spec/perfomance_spec/app/Benchmark/products.erb +25 -0
  199. data/spec/perfomance_spec/app/Benchmark/search_results.erb +13 -0
  200. data/spec/perfomance_spec/app/Customer/customer.rb +6 -0
  201. data/spec/perfomance_spec/app/Perftest/index.erb +5 -0
  202. data/spec/perfomance_spec/app/Product/index.erb +25 -0
  203. data/spec/perfomance_spec/app/Product/product.rb +6 -0
  204. data/spec/perfomance_spec/app/helpers/application_helper.rb +126 -0
  205. data/spec/perfomance_spec/app/helpers/browser_helper.rb +18 -0
  206. data/spec/perfomance_spec/rhoconfig.txt +1 -1
  207. data/spec/phone_spec/app/Account_s/account_s.rb +5 -2
  208. data/spec/phone_spec/app/Case/case.rb +1 -0
  209. data/spec/phone_spec/app/Case_s/case_s.rb +2 -0
  210. data/spec/phone_spec/app/Data/perftest.json +35 -0
  211. data/spec/phone_spec/app/Data/testCDATA.xml +11 -0
  212. data/spec/phone_spec/app/Product/product.rb +1 -1
  213. data/spec/phone_spec/app/{Spec → spec}/asynchttp_spec.rb +66 -17
  214. data/spec/phone_spec/app/{Spec → spec}/barcode_spec.rb +0 -0
  215. data/spec/phone_spec/app/{Spec → spec}/blobsync_spec.rb +0 -0
  216. data/spec/phone_spec/app/{Spec → spec}/bsearch_spec.rb +0 -0
  217. data/spec/phone_spec/app/{Spec → spec}/bulksync_spec.rb +0 -0
  218. data/spec/phone_spec/app/{Spec → spec}/contacts_spec.rb +0 -0
  219. data/spec/phone_spec/app/{Spec → spec}/crypt_spec.rb +0 -0
  220. data/spec/phone_spec/app/{Spec → spec}/date_spec.rb +0 -0
  221. data/spec/phone_spec/app/spec/events_spec.rb +199 -0
  222. data/spec/phone_spec/app/{Spec → spec}/fixtures/client_info.txt +0 -0
  223. data/spec/phone_spec/app/{Spec → spec}/fixtures/object_values.txt +0 -0
  224. data/spec/phone_spec/app/{Spec → spec}/json_spec.rb +11 -2
  225. data/spec/phone_spec/app/{Spec → spec}/mapview_spec.rb +0 -0
  226. data/spec/phone_spec/app/{Spec → spec}/nativebar_spec.rb +0 -0
  227. data/spec/phone_spec/app/{Spec → spec}/navbar_spec.rb +0 -0
  228. data/spec/phone_spec/app/{Spec → spec}/pagination/fixtures/object_values.txt +0 -0
  229. data/spec/phone_spec/app/{Spec → spec}/rho_controller_spec.rb +5 -0
  230. data/spec/phone_spec/app/{Spec → spec}/rho_spec.rb +48 -0
  231. data/spec/phone_spec/app/{Spec → spec}/rhofile_spec.rb +9 -6
  232. data/spec/phone_spec/app/{Spec → spec}/rhom_object_spec.rb +188 -9
  233. data/spec/phone_spec/app/{Spec → spec}/syncengine_spec.rb +0 -0
  234. data/spec/phone_spec/app/{Spec → spec}/xml_spec.rb +15 -0
  235. data/spec/phone_spec/app/{Spec → spec}/xruby_spec.rb +0 -0
  236. data/spec/phone_spec/app/spec_runner.rb +4 -1
  237. data/spec/phone_spec/build.yml +2 -1
  238. metadata +95 -31
  239. data/platform/bb/rhodes/platform/5.0/com/rho/RhoMainScreen.java +0 -36
  240. data/platform/bb/rhodes/platform/6.0/com/rho/BrowserAdapter5.java +0 -155
  241. data/platform/bb/rhodes/platform/6.0/com/rho/RhoMainScreen.java +0 -36
@@ -22,10 +22,10 @@ module Rho
22
22
  @layout.nil? ? 'layout' : @layout
23
23
  end
24
24
 
25
- def self.renderfile(filename)
25
+ def self.renderfile(filename, req = {}, res = {})
26
26
  res = ""
27
27
  if File.extname(filename) == '.iseq'
28
- res = render_index(filename)
28
+ res = (RhoController.new).inst_render_index(filename, req, res)
29
29
  else
30
30
  res = IO.read(filename)
31
31
  end
@@ -34,21 +34,29 @@ module Rho
34
34
  res
35
35
  end
36
36
 
37
- def inst_render_index(filename)
37
+ def inst_render_index(filename, req, res)
38
38
  rho_info 'inst_render_index'
39
- @request, @response = {}
40
- @params = {}
39
+ @request, @response = req, res
40
+ @params = RhoSupport::query_params req
41
+
42
+ #@request, @response = {}
43
+ #@params = {}
41
44
  require 'rho/rhoviewhelpers'
42
- layout = File.dirname(filename) + "/layout_erb.iseq"
45
+
43
46
  @content = eval_compiled_file(filename, getBinding() )
44
- @content = eval_compiled_file(layout, getBinding() ) if Rho::file_exist?(layout)
47
+ if !xhr?
48
+ rho_info 'index layout'
49
+ layout = File.dirname(filename) + "/layout_erb.iseq"
50
+ @content = eval_compiled_file(layout, getBinding() ) if Rho::file_exist?(layout)
51
+ else
52
+ if @request["headers"]["Transition-Enabled"] == "true"
53
+ @content = "<div>#{@content}</div>"
54
+ end
55
+ end
56
+
45
57
  @content
46
58
  end
47
59
 
48
- def self.render_index(filename)
49
- (RhoController.new).inst_render_index(filename)
50
- end
51
-
52
60
  def getBinding
53
61
  binding
54
62
  end
@@ -235,7 +235,10 @@ module Rho
235
235
  @db_partitions[partition] = nil unless @db_partitions[partition]
236
236
 
237
237
  if source['belongs_to']
238
- source['belongs_to'].each do |attrib, src_name|
238
+ source['belongs_to'].each do |hash_pair|
239
+ attrib = hash_pair.keys[0]
240
+ src_name = hash_pair.values[0]
241
+
239
242
  associationsSrc = find_src_byname(uniq_sources, src_name)
240
243
  if !associationsSrc
241
244
  puts ( "Error: belongs_to '#{source['name']}' : source name '#{src_name}' does not exist." )
@@ -330,7 +333,7 @@ module Rho
330
333
  #TODO: support column type
331
334
  end
332
335
 
333
- strCols += ",object varchar(255) PRIMARY KEY"
336
+ strCols += ",\"object\" varchar(255) PRIMARY KEY"
334
337
  strCreate = "CREATE TABLE #{source['name']} ( #{strCols} )"
335
338
  end
336
339
 
@@ -469,26 +472,26 @@ module Rho
469
472
  end
470
473
  end
471
474
 
472
- def serve_index(index_name)
475
+ def serve_index(index_name, req)
473
476
  # TODO: Removed hardcoded appname
474
477
  get_app(APPNAME).set_menu
475
478
  begin
476
479
  puts 'inside RHO.serve_index: ' + index_name
477
480
  res = init_response
478
- res['request-body'] = RhoController::renderfile(index_name)
481
+ res['request-body'] = RhoController::renderfile(index_name, req, res)
479
482
  return send_response(res)
480
483
  rescue Exception => e
481
484
  return send_error(e)
482
485
  end
483
486
  end
484
487
 
485
- def serve_index_hash(index_name)
488
+ def serve_index_hash(index_name, req)
486
489
  # TODO: Removed hardcoded appname
487
490
  get_app(APPNAME).set_menu
488
491
  begin
489
492
  puts 'inside RHO.serve_index: ' + index_name
490
493
  res = init_response
491
- res['request-body'] = RhoController::renderfile(index_name)
494
+ res['request-body'] = RhoController::renderfile(index_name, req, res)
492
495
  return send_response_hash(res)
493
496
  rescue Exception => e
494
497
  return send_error(e, 500, true)
@@ -591,9 +594,7 @@ module Rho
591
594
  puts 'show error: ' + @@current_exception.inspect
592
595
  body = RhoController::renderfile(err_page)
593
596
 
594
- if ( hash )
595
- return send_response_hash(init_response(200,"OK",body))
596
- end
597
+ return send_response_hash(init_response(200,"OK",body)) if hash
597
598
 
598
599
  return send_response(init_response(200,"OK",body))
599
600
  end
@@ -665,6 +666,10 @@ module Rho
665
666
  def send_log
666
667
  RhoConf.send_log
667
668
  end
669
+
670
+ def read_log(limit=0)
671
+ RhoConf.read_log(limit)
672
+ end
668
673
 
669
674
  def sources
670
675
  @@sources
@@ -721,7 +726,9 @@ module Rho
721
726
  module AsyncHttp
722
727
 
723
728
  def self.make_auth_header(args)
724
- auth = args[:authentication]
729
+ auth = args[:authentication] if args.has_key?(:authentication)
730
+ auth = args [:authorization] if args.has_key?(:authorization)
731
+
725
732
  return nil unless auth.is_a? Hash
726
733
  return nil if auth[:type].nil?
727
734
 
@@ -0,0 +1,103 @@
1
+
2
+ module Rho
3
+
4
+ class BluetoothManager
5
+
6
+ OK = 'OK'
7
+ CANCEL = 'CANCEL'
8
+ ERROR = 'ERROR'
9
+
10
+ ROLE_SERVER = 'ROLE_SERVER'
11
+ ROLE_CLIENT = 'ROLE_CLIENT'
12
+
13
+ def self.is_bluetooth_available
14
+ # return true/false
15
+ return RhoBluetooth.is_bluetooth_available()
16
+ end
17
+
18
+ def self.off_bluetooth
19
+ RhoBluetooth.off_bluetooth()
20
+ end
21
+
22
+ def self.set_device_name(name)
23
+ RhoBluetooth.set_device_name(name)
24
+ end
25
+
26
+ def self.get_device_name
27
+ return RhoBluetooth.get_device_name()
28
+ end
29
+
30
+ def self.get_last_error
31
+ #return OK/ERROR/...
32
+ return RhoBluetooth.get_last_error()
33
+ end
34
+
35
+ def self.create_session(role, callback_url)
36
+ # return OK/ERROR
37
+ #
38
+ # in callback
39
+ # status - OK/ERROR/CANCEL
40
+ # connected_device_name
41
+ puts 'BluetoothManager.rb::create_session()'
42
+ RhoBluetooth.create_session(role, callback_url)
43
+ return OK
44
+ end
45
+ end
46
+
47
+
48
+ class BluetoothSession
49
+
50
+ OK = 'OK'
51
+ CANCEL = 'CANCEL'
52
+ ERROR = 'ERROR'
53
+
54
+ SESSION_INPUT_DATA_RECEIVED = 'SESSION_INPUT_DATA_RECEIVED'
55
+ SESSION_DISCONNECT = 'SESSION_DISCONNECT'
56
+
57
+ def self.set_callback(connected_device_name, session_callback_url)
58
+ # return OK/ERROR
59
+ #
60
+ # in callback
61
+ # connected_device_name
62
+ # event_type - SESSION_INPUT_DATA_RECEIVED/ERROR/SESSION_DISCONNECT
63
+ puts 'BluetoothSession.rb::set_callback()'
64
+ RhoBluetooth.session_set_callback(connected_device_name, session_callback_url)
65
+ return OK
66
+ end
67
+
68
+ def self.disconnect(connected_device_name)
69
+ # return OK/ERROR
70
+ RhoBluetooth.session_disconnect(connected_device_name)
71
+ return OK
72
+ end
73
+
74
+ def self.get_status(connected_device_name)
75
+ # return -1 if error, 0 if empty or 0< if data waiting for read
76
+ return RhoBluetooth.session_get_status(connected_device_name)
77
+ end
78
+
79
+ def self.read(connected_device_name)
80
+ # return array of bytes
81
+ return RhoBluetooth.session_read_data(connected_device_name)
82
+ end
83
+
84
+ def self.write(connected_device_name, data)
85
+ # array of bytes
86
+ RhoBluetooth.session_write_data(connected_device_name, data)
87
+ end
88
+
89
+ def self.read_string(connected_device_name)
90
+ # return string
91
+ return RhoBluetooth.session_read_string(connected_device_name)
92
+ end
93
+
94
+ def self.write_string(connected_device_name, data)
95
+ # return OK/ERROR
96
+ RhoBluetooth.session_write_string(connected_device_name, data)
97
+ return OK
98
+ end
99
+
100
+ end
101
+
102
+
103
+ end
@@ -77,6 +77,8 @@ module Rho
77
77
 
78
78
  # Returns true if the request's header contains "XMLHttpRequest".
79
79
  def xml_http_request?
80
+ return false if !@request || !@request['headers'] || !@request['headers']['X-Requested-With']
81
+
80
82
  not /XMLHttpRequest/i.match(@request['headers']['X-Requested-With']).nil?
81
83
  end
82
84
  alias xhr? :xml_http_request?
@@ -0,0 +1,43 @@
1
+ require 'bsearch'
2
+ require 'time'
3
+
4
+ if defined? RHO_ME
5
+ require 'rho/rhoevent_bb'
6
+ else
7
+ require 'rho/rhoevent_c'
8
+ end
9
+
10
+ module Rho
11
+ module RhoEvent
12
+ # These values determined experimentally on iPhone
13
+ MIN_TIME = Time.utc(2007, 'jan', 1, 0, 0, 0)
14
+ MAX_TIME = Time.utc(2030, 'dec', 31, 23, 59, 59)
15
+
16
+ #TODO: update examples
17
+ # Examples of how to use select method:
18
+ #
19
+ # selected = Rho::RhoEvent.select('first_name' => 'David') { |x| x[1]['last_name']=='Taylor' }
20
+ # ==> returns record(s) of the David Taylor
21
+ #
22
+ # selected = Rho::RhoEvent.select('first_name' => 'Kate')
23
+ # ==> Returns all records of Kate
24
+ #
25
+ # selected = Rho::RhoEvent.select('last_name' => 'User') do |x|
26
+ # x[1]['first_name']=='Test' and x[1]['company_name']=="rhomobile"
27
+ # end
28
+ # ==> returns all records of the Test User from the company rhomobile
29
+ #
30
+ def self.select(index, &block)
31
+ key, value = index.keys[0], index.values[0]
32
+ if @events.nil? or @key != key
33
+ @key, @events = key, find(:all).to_a.sort! {|x,y| x[1][key] <=> y[1][key] }
34
+ end
35
+ found = @events[@events.bsearch_range {|x| x[1][key] <=> value}]
36
+ unless found.nil? or block.nil?
37
+ return found.select(&block)
38
+ end
39
+ return found
40
+ end
41
+
42
+ end # module RhoEvent
43
+ end # module Rho
@@ -0,0 +1,80 @@
1
+ require 'bsearch'
2
+ require 'time'
3
+
4
+ module Rho
5
+ module RhoEvent
6
+ def self.find(*args)
7
+ pb = Calendar::openCalendar
8
+ if pb.nil?
9
+ puts "Can't open calendar"
10
+ return nil
11
+ elsif args.first == :all
12
+
13
+ if args.length > 1
14
+ records = Calendar::findCalendarEvents(pb, args[1])
15
+ else
16
+ records = Calendar::getallCalendarEvents(pb)
17
+ end
18
+
19
+ Calendar::closeCalendar(pb)
20
+ return records
21
+ else
22
+ record = Calendar::getCalendarEvent(pb,args.first)
23
+ Calendar::closeCalendar(pb)
24
+ return record
25
+ end
26
+ end
27
+
28
+ def self.create!(properties)
29
+ pb = Calendar::openCalendar
30
+ unless pb.nil?
31
+ record = Calendar::createEvent(pb)
32
+ if record.nil?
33
+ puts "Can't find event " + properties['id']
34
+ else
35
+ properties.each do |key,value|
36
+ if key == 'start_date' or key == 'end_date'
37
+ value = Time.parse(value) if value.is_a? String
38
+ end
39
+ if key == 'reminder' and value.is_a?(String) and value.empty?
40
+ next
41
+ end
42
+ Calendar::setEventValue(record,key,value)
43
+ end
44
+ Calendar::addEvent(pb,record)
45
+ end
46
+ Calendar::closeCalendar(pb)
47
+ end
48
+ end
49
+
50
+ def self.destroy(recordId)
51
+ pb = Calendar::openCalendar
52
+ unless pb.nil?
53
+ record = Calendar::openCalendarEvent(pb,recordId)
54
+ if record.nil?
55
+ puts "Can't find event " + recordId
56
+ else
57
+ Calendar::deleteEvent(pb,record)
58
+ end
59
+ Calendar::closeCalendar(pb)
60
+ end
61
+ end
62
+
63
+ def self.update_attributes(properties)
64
+ pb = Calendar::openCalendar
65
+ unless pb.nil?
66
+ record = Calendar::openCalendarEvent(pb,properties['id'])
67
+ if record.nil?
68
+ puts "Can't find event " + properties['id']
69
+ else
70
+ properties.each do |key,value|
71
+ Calendar::setEventValue(record,key,value)
72
+ end
73
+ Calendar::saveEvent(pb,record)
74
+ end
75
+ Calendar::closeCalendar(pb)
76
+ end
77
+ end
78
+
79
+ end # module RhoEvent
80
+ end # module Rho
@@ -0,0 +1,47 @@
1
+ require 'bsearch'
2
+ require 'time'
3
+
4
+ module Rho
5
+ module RhoEvent
6
+ def self.find(*args)
7
+ if args.first == :all
8
+ params = {}
9
+ params = args[1] if args.length >= 2 and args[1].is_a? Hash
10
+
11
+ params['start_date'] = MIN_TIME if params['start_date'].nil? or params['start_date'] < MIN_TIME
12
+ params['end_date'] = MAX_TIME if params['end_date'].nil? or params['end_date'] > MAX_TIME
13
+
14
+ params['include_repeating'] = false if ( params['start_date'] == MIN_TIME || params['end_date'] == MAX_TIME )
15
+
16
+ puts "Rho::Calendar.fetch(params) : #{params}"
17
+ events = Rho::Calendar.fetch(params)
18
+ #puts "events : #{events}"
19
+ #ret = {}
20
+ #events.each do |e|
21
+ # ret[e[Rho::RhoEvent::ID]] = e
22
+ #end
23
+ #ret
24
+ events
25
+ else
26
+ id = args.first.to_s
27
+ id = $1 if id.is_a?(String) and id =~ /^{(.*)}$/
28
+ Rho::Calendar.fetch_by_id(id)
29
+ end
30
+ end
31
+
32
+ def self.create!(event)
33
+ Rho::Calendar.save(event)
34
+ end
35
+
36
+ def self.destroy(id)
37
+ id = $1 if id.is_a?(String) and id =~ /^{(.*)}$/
38
+ Rho::Calendar.delete(id)
39
+ end
40
+
41
+ def self.update_attributes(event)
42
+ puts "update_attributes: #{event}"
43
+ Rho::Calendar.save(event)
44
+ end
45
+
46
+ end # module RhoEvent
47
+ end # module Rho
@@ -1,9 +1,9 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '2.1.0'
3
+ VERSION = '2.2.0'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
- DBVERSION = '2.1.0'
6
+ DBVERSION = '2.2.0'
7
7
  end
8
8
 
9
9
  end
@@ -107,6 +107,7 @@ class RhomDbAdapter
107
107
  #puts "RhomDbAdapter: Executing query - #{sql}; #{args}"
108
108
  begin
109
109
  result = @database.execute( sql, is_batch, args )
110
+ #puts "result : #{result}"
110
111
  rescue Exception => e
111
112
  puts "exception when running query: #{e}"
112
113
  raise
@@ -249,7 +250,7 @@ class RhomDbAdapter
249
250
  quests << ','
250
251
  end
251
252
 
252
- cols << "#{key}"
253
+ cols << "\"#{key}\""
253
254
  quests << '?'
254
255
  vals << val
255
256
  end