rhodes 2.2.4.beta.1 → 2.2.5.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.
- data/CHANGELOG +10 -0
- data/Rakefile +119 -3
- data/lib/build/jake.rb +15 -1
- data/lib/framework/dateME.rb +6 -1
- data/lib/framework/rho/render.rb +18 -15
- data/lib/framework/rho/rho.rb +105 -43
- data/lib/framework/rho/rhoapplication.rb +1 -1
- data/lib/framework/rho/rhocontact.rb +41 -13
- data/lib/framework/rho/rhocontroller.rb +10 -1
- data/lib/framework/rho/rhoevent_c.rb +6 -1
- data/lib/framework/rho/rhosupport.rb +1 -1
- data/lib/framework/rhodes.rb +1 -1
- data/lib/framework/rholang/rhomsg_de.rb +1 -1
- data/lib/framework/rholang/rhomsg_es.rb +1 -1
- data/lib/framework/rholang/rhomsg_it.rb +28 -0
- data/lib/framework/rhom/rhom.rb +6 -0
- data/lib/framework/rhom/rhom_model.rb +14 -7
- data/lib/framework/rhom/rhom_object_factory.rb +121 -56
- data/lib/framework/version.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/android/Rhodes/AndroidManifest.full.xml +62 -0
- data/platform/android/Rhodes/AndroidManifest.xml +3 -34
- data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +17 -2
- data/platform/android/Rhodes/jni/src/alert.cpp +16 -0
- data/platform/android/Rhodes/jni/src/callbacks.cpp +27 -3
- data/platform/android/Rhodes/jni/src/nativebar.cpp +3 -0
- data/platform/android/Rhodes/jni/src/nativeview.cpp +131 -1
- data/platform/android/Rhodes/jni/src/phonebook.cpp +102 -41
- data/platform/android/Rhodes/jni/src/rhodes.cpp +113 -32
- data/platform/android/Rhodes/jni/src/ringtones.cpp +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +1 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +9 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +184 -49
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +49 -25
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +104 -57
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +36 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +24 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +7 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +185 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java +54 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +107 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +72 -24
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +22 -21
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +91 -11
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +10 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java +10 -0
- data/platform/android/build/android.rake +50 -9
- data/platform/android/build/librhocommon_build.files +1 -0
- data/platform/bb/Hsqldb/src/org/hsqldb/Parser.java +3 -2
- data/platform/bb/Hsqldb/src/org/hsqldb/SchemaManager.java +3 -1
- data/platform/bb/Hsqldb/src/org/hsqldb/Session.java +7 -0
- data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +2 -2
- data/platform/bb/RubyVM/RubyVM.jdp +1 -0
- data/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java +22 -0
- data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +5 -0
- data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +51 -4
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +21 -10
- data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +82 -33
- data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +59 -6
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyFloat_Methods.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyString_Methods.java +19 -7
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/ArrayPacker.java +1 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFloat.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyString.java +55 -11
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyTime.java +18 -2
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule.java +8 -5
- data/platform/bb/RubyVM/src/j2me/lang/CharacterMe.java +1 -1
- data/platform/bb/RubyVM/src/j2me/util/StringParser.java +2 -0
- data/platform/bb/build/RubyVM_build.files +1 -0
- data/platform/bb/build/bb.rake +21 -2
- data/platform/bb/rhodes/platform/4.7/com/rho/RhoMainScreen.java +3 -3
- data/platform/bb/rhodes/platform/common/com/rho/RhoMainScreen.java +1 -1
- data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +1 -2
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +15 -16
- data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +4 -0
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +58 -0
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +90 -4
- data/platform/iphone/Classes/AppManager/AppManager.m +43 -5
- data/platform/iphone/Classes/Event/Event.h +2 -0
- data/platform/iphone/Classes/Event/Event.m +12 -1
- data/platform/iphone/Classes/GeoLocation/LocationController.m +9 -3
- data/platform/iphone/Classes/MapView/MapViewController.m +20 -9
- data/platform/iphone/Classes/NativeBar.m +27 -0
- data/platform/iphone/Classes/Phonebook/phonebook.m +17 -0
- data/platform/iphone/Classes/RhoAlert.m +61 -1
- data/platform/iphone/Classes/RhoMainView.h +1 -0
- data/platform/iphone/Classes/Rhodes.h +2 -0
- data/platform/iphone/Classes/Rhodes.m +108 -1
- data/platform/iphone/Classes/SimpleMainView.h +4 -0
- data/platform/iphone/Classes/SimpleMainView.m +30 -3
- data/platform/iphone/Classes/SplashViewController.m +3 -1
- data/platform/iphone/Classes/TabbedMainView.h +2 -0
- data/platform/iphone/Classes/TabbedMainView.m +63 -11
- data/platform/iphone/Classes/rho/net/NetRequestImpl.m +26 -0
- data/platform/iphone/Info.plist +12 -1
- data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +8 -0
- data/platform/iphone/rbuild/iphone.rake +181 -25
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +5 -5
- data/platform/shared/common/IRhoThreadImpl.h +1 -1
- data/platform/shared/common/PosixThreadImpl.cpp +5 -3
- data/platform/shared/common/PosixThreadImpl.h +1 -1
- data/platform/shared/common/RhoFilePath.h +11 -0
- data/platform/shared/common/RhoNativeViewManager.h +17 -0
- data/platform/shared/common/RhoThread.h +1 -1
- data/platform/shared/common/RhodesApp.cpp +29 -8
- data/platform/shared/common/ThreadQueue.cpp +5 -3
- data/platform/shared/common/ThreadQueue.h +2 -1
- data/platform/shared/common/app_build_configs.c +25 -0
- data/platform/shared/common/app_build_configs.h +11 -0
- data/platform/shared/net/AsyncHttp.cpp +5 -5
- data/platform/shared/net/CURLNetRequest.cpp +25 -7
- data/platform/shared/net/CURLNetRequest.h +2 -1
- data/platform/shared/net/HttpServer.cpp +28 -0
- data/platform/shared/ruby/ext/nativebar/nativebar.i +3 -0
- data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +26 -1
- data/platform/shared/ruby/ext/rho/rhoruby.c +6 -0
- data/platform/shared/ruby/ext/rho/rhoruby.h +1 -0
- data/platform/shared/ruby/ext/rho/rhosupport.c +15 -2
- data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -2
- data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +97 -2
- data/platform/shared/ruby/ext/system/system.i +13 -0
- data/platform/shared/ruby/ext/system/system_wrap.c +104 -1
- data/platform/shared/rubyext/RhoAppAdapter.cpp +7 -0
- data/platform/shared/sync/SyncEngine.cpp +43 -3
- data/platform/shared/sync/SyncEngine.h +13 -0
- data/platform/shared/sync/SyncNotify.cpp +41 -23
- data/platform/shared/sync/SyncNotify.h +18 -4
- data/platform/shared/sync/SyncSource.cpp +52 -14
- data/platform/shared/sync/SyncSource.h +1 -0
- data/platform/shared/sync/SyncThread.cpp +29 -9
- data/platform/shared/sync/SyncThread.h +4 -2
- data/platform/wm/RhoLib/RhoLib.vcproj +8 -0
- data/platform/wm/build/build_inf.js +15 -9
- data/platform/wm/build/wm.rake +10 -5
- data/platform/wm/rhodes/Alert.cpp +10 -0
- data/platform/wm/rhodes/Alert.h +3 -3
- data/platform/wm/rhodes/MainWindow.cpp +171 -26
- data/platform/wm/rhodes/MainWindow.h +23 -1
- data/platform/wm/rhodes/MetaHandler.cpp +192 -0
- data/platform/wm/rhodes/MetaHandler.h +31 -0
- data/platform/wm/rhodes/RhoNativeViewManager.cpp +126 -0
- data/platform/wm/rhodes/RhoNativeViewManagerWM.h +20 -0
- data/platform/wm/rhodes/Rhodes.cpp +91 -2
- data/platform/wm/rhodes/Rhodes.rc +15 -6
- data/platform/wm/rhodes/SyncStatusDlg.cpp +32 -0
- data/platform/wm/rhodes/SyncStatusDlg.h +29 -0
- data/platform/wm/rhodes/resource.h +5 -2
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +3 -1
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +1 -1
- data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +146 -14
- data/platform/wm/rhodes/rhodes.vcproj +28 -0
- data/rakefile.rb +119 -3
- data/res/build-tools/iphonesim/README +58 -0
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.h +43 -0
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.m +224 -0
- data/res/build-tools/iphonesim/Source/main.m +52 -0
- data/res/build-tools/iphonesim/Source/nsprintf.h +3 -0
- data/res/build-tools/iphonesim/Source/nsprintf.m +42 -0
- data/res/build-tools/iphonesim/build/Release/iphonesim +0 -0
- data/res/build-tools/iphonesim/iPhoneSimulatorRemoteClient/iPhoneSimulatorRemoteClient.h +124 -0
- data/res/build-tools/iphonesim/iphonesim.xcodeproj/project.pbxproj +261 -0
- data/res/build-tools/iphonesim/iphonesim_Prefix.pch +7 -0
- data/res/generators/rhogen.rb +5 -0
- data/res/generators/templates/application/app/layout.erb +7 -13
- data/res/generators/templates/application/app/loading.png +0 -0
- data/res/generators/templates/application/build.yml +3 -0
- data/res/generators/templates/application/icon/icon114.png +0 -0
- data/res/generators/templates/application/icon/icon57.png +0 -0
- data/res/generators/templates/application/icon/icon72.png +0 -0
- data/res/generators/templates/application/public/css/iphone.css +96 -0
- data/res/generators/templates/application/public/images/backButton.png +0 -0
- data/res/generators/templates/application/public/jqtouch/jqtouch.js +2 -1
- data/res/generators/templates/application/rhoconfig.txt +2 -0
- data/rhodes.gemspec +1 -1
- data/spec/phone_spec/app/spec/array_pack_spec.rb +108 -0
- data/spec/phone_spec/app/spec/bulksync_spec.rb +1 -0
- data/spec/phone_spec/app/spec/date_spec.rb +27 -0
- data/spec/phone_spec/app/spec/fixtures/classes.rb +91 -0
- data/spec/phone_spec/app/spec/lstrip_spec.rb +57 -0
- data/spec/phone_spec/app/spec/rho_spec.rb +50 -19
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +78 -0
- data/spec/phone_spec/app/spec/rstrip_spec.rb +51 -0
- data/spec/phone_spec/app/spec/strip_spec.rb +50 -0
- data/spec/phone_spec/app/spec/syncengine_spec.rb +46 -3
- data/spec/phone_spec/app/spec_runner.rb +6 -0
- metadata +34 -4
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## 2.2.5
|
|
2
|
+
* support iPhone and iPad 4.2
|
|
3
|
+
* support Blackberry 6
|
|
4
|
+
* support Samsung Galaxy
|
|
5
|
+
* GPS stops by timeout on Android
|
|
6
|
+
* fixed several schema model issues
|
|
7
|
+
* NativeView on Android and Windows Mobile
|
|
8
|
+
* Tabbar badge for iPhone
|
|
9
|
+
* sms link fix for Blackberry
|
|
10
|
+
|
|
1
11
|
## 2.2.4
|
|
2
12
|
* Launch external browser
|
|
3
13
|
* Open any url (http, file etc), and run external application associated with it
|
data/Rakefile
CHANGED
|
@@ -51,6 +51,94 @@ namespace "framework" do
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
|
|
54
|
+
$application_build_configs_keys = ['security_token']
|
|
55
|
+
|
|
56
|
+
def make_application_build_config_header_file
|
|
57
|
+
inc_file = File.join($startdir, "platform", "shared", "common", "app_build_configs.c")
|
|
58
|
+
File.open(inc_file, "w") do |f|
|
|
59
|
+
f.puts "// WARNING! THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT IT MANUALLY!"
|
|
60
|
+
f.puts "// Generated #{Time.now.to_s}"
|
|
61
|
+
f.puts ""
|
|
62
|
+
f.puts "#include <string.h>"
|
|
63
|
+
f.puts ""
|
|
64
|
+
f.puts '#include "app_build_configs.h"'
|
|
65
|
+
f.puts ""
|
|
66
|
+
|
|
67
|
+
f.puts 'static const char* keys[] = { ""'
|
|
68
|
+
$application_build_configs.keys.each do |key|
|
|
69
|
+
f.puts ',"'+key+'"'
|
|
70
|
+
end
|
|
71
|
+
f.puts '};'
|
|
72
|
+
f.puts ''
|
|
73
|
+
|
|
74
|
+
count = 1
|
|
75
|
+
|
|
76
|
+
f.puts 'static const char* values[] = { ""'
|
|
77
|
+
$application_build_configs.keys.each do |key|
|
|
78
|
+
f.puts ',"'+$application_build_configs[key]+'"'
|
|
79
|
+
count = count + 1
|
|
80
|
+
end
|
|
81
|
+
f.puts '};'
|
|
82
|
+
f.puts ''
|
|
83
|
+
|
|
84
|
+
f.puts '#define APP_BUILD_CONFIG_COUNT '+count.to_s
|
|
85
|
+
f.puts ''
|
|
86
|
+
f.puts 'const char* get_app_build_config_item(const char* key) {'
|
|
87
|
+
f.puts ' int i;'
|
|
88
|
+
f.puts ' for (i = 1; i < APP_BUILD_CONFIG_COUNT; i++) {'
|
|
89
|
+
f.puts ' if (strcmp(key, keys[i]) == 0) {'
|
|
90
|
+
f.puts ' return values[i];'
|
|
91
|
+
f.puts ' }'
|
|
92
|
+
f.puts ' }'
|
|
93
|
+
f.puts ' return 0;'
|
|
94
|
+
f.puts '}'
|
|
95
|
+
f.puts ''
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def make_application_build_config_java_file
|
|
101
|
+
file_name = $startdir + "/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java"
|
|
102
|
+
|
|
103
|
+
File.open(file_name, "w") do |f|
|
|
104
|
+
f.puts "// WARNING! THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT IT MANUALLY!"
|
|
105
|
+
f.puts "// Generated #{Time.now.to_s}"
|
|
106
|
+
|
|
107
|
+
f.puts "package com.rho;"
|
|
108
|
+
f.puts ""
|
|
109
|
+
f.puts "public class AppBuildConfig {"
|
|
110
|
+
|
|
111
|
+
f.puts 'static final String keys[] = { ""'
|
|
112
|
+
$application_build_configs.keys.each do |key|
|
|
113
|
+
f.puts ',"'+key+'"'
|
|
114
|
+
end
|
|
115
|
+
f.puts '};'
|
|
116
|
+
f.puts ''
|
|
117
|
+
|
|
118
|
+
count = 1
|
|
119
|
+
|
|
120
|
+
f.puts 'static final String values[] = { ""'
|
|
121
|
+
$application_build_configs.keys.each do |key|
|
|
122
|
+
f.puts ',"'+$application_build_configs[key]+'"'
|
|
123
|
+
count = count + 1
|
|
124
|
+
end
|
|
125
|
+
f.puts '};'
|
|
126
|
+
f.puts ''
|
|
127
|
+
|
|
128
|
+
f.puts 'static final int APP_BUILD_CONFIG_COUNT = '+count.to_s + ';'
|
|
129
|
+
f.puts ''
|
|
130
|
+
f.puts 'public static String getItem(String key){'
|
|
131
|
+
f.puts ' for (int i = 1; i < APP_BUILD_CONFIG_COUNT; i++) {'
|
|
132
|
+
f.puts ' if ( key.compareTo( keys[i]) == 0) {'
|
|
133
|
+
f.puts ' return values[i];'
|
|
134
|
+
f.puts ' }'
|
|
135
|
+
f.puts ' }'
|
|
136
|
+
f.puts ' return null;'
|
|
137
|
+
f.puts '}'
|
|
138
|
+
f.puts "}"
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
54
142
|
namespace "config" do
|
|
55
143
|
task :common do
|
|
56
144
|
$startdir = File.dirname(__FILE__)
|
|
@@ -106,6 +194,32 @@ namespace "config" do
|
|
|
106
194
|
extensions += $app_config[$config["platform"]]["extensions"] if $app_config[$config["platform"]] and
|
|
107
195
|
$app_config[$config["platform"]]["extensions"] and $app_config[$config["platform"]]["extensions"].is_a? Array
|
|
108
196
|
$app_config["extensions"] = extensions
|
|
197
|
+
|
|
198
|
+
$hidden_app = $app_config["hidden_app"].nil?() ? "0" : $app_config["hidden_app"]
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
#application build configs
|
|
202
|
+
application_build_configs = {}
|
|
203
|
+
|
|
204
|
+
$application_build_configs_keys.each do |key|
|
|
205
|
+
value = $app_config[key]
|
|
206
|
+
if $app_config[$config["platform"]] != nil
|
|
207
|
+
if $app_config[$config["platform"]][key] != nil
|
|
208
|
+
value = $app_config[$config["platform"]][key]
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
if value != nil
|
|
212
|
+
application_build_configs[key] = value
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
$application_build_configs = application_build_configs
|
|
216
|
+
|
|
217
|
+
if $current_platform == "bb"
|
|
218
|
+
make_application_build_config_java_file
|
|
219
|
+
else
|
|
220
|
+
make_application_build_config_header_file
|
|
221
|
+
end
|
|
222
|
+
|
|
109
223
|
end
|
|
110
224
|
|
|
111
225
|
out = `javac -version 2>&1`
|
|
@@ -311,7 +425,7 @@ def common_bundle_start(startdir, dest)
|
|
|
311
425
|
clear_linker_settings
|
|
312
426
|
|
|
313
427
|
init_extensions(startdir, dest)
|
|
314
|
-
|
|
428
|
+
|
|
315
429
|
chdir startdir
|
|
316
430
|
#throw "ME"
|
|
317
431
|
cp_r app + '/app',File.join($srcdir,'apps'), :preserve => true
|
|
@@ -419,6 +533,7 @@ namespace "build" do
|
|
|
419
533
|
task :xruby do
|
|
420
534
|
#needs $config, $srcdir, $excludelib, $bindir
|
|
421
535
|
app = $app_path
|
|
536
|
+
jpath = $config["env"]["paths"]["java"]
|
|
422
537
|
startdir = pwd
|
|
423
538
|
dest = $srcdir
|
|
424
539
|
xruby = File.dirname(__FILE__) + '/res/build-tools/xruby-0.3.3.jar'
|
|
@@ -482,8 +597,9 @@ namespace "build" do
|
|
|
482
597
|
rm_rf $tmpdir
|
|
483
598
|
mkdir_p $tmpdir
|
|
484
599
|
chdir $srcdir
|
|
485
|
-
=end
|
|
486
|
-
|
|
600
|
+
=end
|
|
601
|
+
|
|
602
|
+
puts `"#{File.join(jpath,'jar')}" uf ../RhoBundle.jar apps/#{$all_files_mask}`
|
|
487
603
|
unless $? == 0
|
|
488
604
|
puts "Error creating Rhobundle.jar"
|
|
489
605
|
exit 1
|
data/lib/build/jake.rb
CHANGED
|
@@ -361,7 +361,21 @@ class Jake
|
|
|
361
361
|
f.write "MIDlet-1: " + title + "," + icon + ",\n"
|
|
362
362
|
puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! service_enabled: #{$service_enabled}"
|
|
363
363
|
$stdout.flush
|
|
364
|
-
|
|
364
|
+
|
|
365
|
+
if $service_enabled
|
|
366
|
+
if $hidden_app == "0"
|
|
367
|
+
f.write "RIM-MIDlet-Flags-1: 1\n"
|
|
368
|
+
else
|
|
369
|
+
f.write "RIM-MIDlet-Flags-1: 3\n"
|
|
370
|
+
end
|
|
371
|
+
else
|
|
372
|
+
if $hidden_app == "0"
|
|
373
|
+
f.write "RIM-MIDlet-Flags-1: 0\n"
|
|
374
|
+
else
|
|
375
|
+
f.write "RIM-MIDlet-Flags-1: 2\n"
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
|
|
365
379
|
end
|
|
366
380
|
|
|
367
381
|
f.close
|
data/lib/framework/dateME.rb
CHANGED
|
@@ -24,9 +24,14 @@ class Time
|
|
|
24
24
|
|
|
25
25
|
strRes += __makeTwoDigit(mon()) + '/' + __makeTwoDigit(mday()) + '/' + year().to_s + ', ' + __makeTwoDigit(nHour) + ':' + __makeTwoDigit(min()) + strPM;
|
|
26
26
|
return strRes
|
|
27
|
+
elsif fmt == "%Y%m%dT%H%M%S.000 GMT"
|
|
28
|
+
strRes = year().to_s() + __makeTwoDigit(mon()) + __makeTwoDigit(mday()) + "T" + __makeTwoDigit(hour()) + __makeTwoDigit(min()) + __makeTwoDigit(sec()) +
|
|
29
|
+
".000 GMT"
|
|
30
|
+
|
|
31
|
+
return strRes
|
|
27
32
|
end
|
|
28
33
|
|
|
29
|
-
DateTime.new(self
|
|
34
|
+
DateTime.new(self).strftime(fmt)
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
end
|
data/lib/framework/rho/render.rb
CHANGED
|
@@ -61,6 +61,16 @@ module Rho
|
|
|
61
61
|
binding
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
+
@@cached_metadata = {}
|
|
65
|
+
def self.cached_metadata
|
|
66
|
+
@@cached_metadata
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.clean_cached_metadata
|
|
70
|
+
@@cached_metadata.clear()
|
|
71
|
+
puts "meta deleted"
|
|
72
|
+
end
|
|
73
|
+
|
|
64
74
|
def render(options = nil)
|
|
65
75
|
if @params['rho_callback']
|
|
66
76
|
rho_error( "render call in callback. Call WebView.navigate instead" )
|
|
@@ -71,7 +81,6 @@ module Rho
|
|
|
71
81
|
options = options.symbolize_keys
|
|
72
82
|
|
|
73
83
|
metaenabled = false
|
|
74
|
-
clean_metadata = false
|
|
75
84
|
|
|
76
85
|
action = nil
|
|
77
86
|
action = options[:action] if options[:action]
|
|
@@ -79,14 +88,10 @@ module Rho
|
|
|
79
88
|
|
|
80
89
|
if $".include?( "rhodes_translator") and @request['model'] != nil
|
|
81
90
|
model = nil
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
end
|
|
86
|
-
if model.respond_to?( :metadata ) and model.metadata != nil
|
|
87
|
-
clean_metadata = true
|
|
88
|
-
metaenabled = model.metadata[action.to_s] != nil
|
|
89
|
-
end
|
|
91
|
+
model = Object.const_get(@request['model'].to_sym) if Object.const_defined?(@request['model'].to_sym)
|
|
92
|
+
if model && model.respond_to?( :metadata ) and model.metadata != nil
|
|
93
|
+
metaenabled = model.metadata[action.to_s] != nil
|
|
94
|
+
end
|
|
90
95
|
end
|
|
91
96
|
|
|
92
97
|
if not options[:string].nil?
|
|
@@ -133,17 +138,15 @@ module Rho
|
|
|
133
138
|
RhoController.start_geoview_notification()
|
|
134
139
|
@back_action = options[:back] if options[:back]
|
|
135
140
|
@rendered = true
|
|
136
|
-
model.clean_cached_metadata() if clean_metadata
|
|
137
141
|
@content
|
|
138
142
|
end
|
|
139
143
|
|
|
140
144
|
def render_metadata(action = nil,metadata = nil)
|
|
141
145
|
if metadata.nil?
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if model.respond_to?( :metadata ) and model.metadata != nil
|
|
146
|
+
model = nil
|
|
147
|
+
model = Object.const_get(@request['model'].to_sym) if Object.const_defined?(@request['model'].to_sym)
|
|
148
|
+
|
|
149
|
+
if model && model.respond_to?( :metadata ) and model.metadata != nil
|
|
147
150
|
metadata = model.metadata
|
|
148
151
|
end
|
|
149
152
|
end
|
data/lib/framework/rho/rho.rb
CHANGED
|
@@ -119,7 +119,8 @@ module Rho
|
|
|
119
119
|
|
|
120
120
|
#puts "model name: #{modelName}"
|
|
121
121
|
|
|
122
|
-
modelClass =
|
|
122
|
+
modelClass = nil
|
|
123
|
+
modelClass = Object.const_get(modelName) if Object.const_defined?(modelName)
|
|
123
124
|
if modelClass
|
|
124
125
|
if modelClass.respond_to?( :get_model_params )
|
|
125
126
|
Rho::RhoConfig::add_source(modelName,modelClass.get_model_params())
|
|
@@ -197,9 +198,26 @@ module Rho
|
|
|
197
198
|
arSrcs = db.select_from_table('sources','source_id, name, sync_priority, partition, sync_type, schema, schema_version, associations, blob_attribs',
|
|
198
199
|
{'partition'=>str_partition} )
|
|
199
200
|
arSrcs.each do |src|
|
|
200
|
-
src['schema'] = '<empty_schema>' if src && !src['schema'] && db.table_exist?(src['name'])
|
|
201
201
|
|
|
202
|
+
if src && src['schema'] && src['schema'].length() > 0
|
|
203
|
+
|
|
204
|
+
#puts "src['schema'] : #{src['schema']}"
|
|
205
|
+
hashSchema = Rho::JSON.parse(src['schema'])
|
|
206
|
+
#puts "hashSchema : #{hashSchema}"
|
|
207
|
+
|
|
208
|
+
src['schema'] = {}
|
|
209
|
+
src['schema']['sql'] = ::Rho::RHO.make_createsql_script( src['name'], hashSchema)
|
|
210
|
+
src['schema_version'] = hashSchema['version']
|
|
211
|
+
|
|
212
|
+
db.update_into_table('sources', {"schema"=>src['schema']['sql'], "schema_version"=>src['schema_version']},{"name"=>src['name']})
|
|
213
|
+
|
|
214
|
+
if str_partition != 'user'
|
|
215
|
+
@db_partitions['user'].update_into_table('sources', {"schema"=>src['schema']['sql'], "schema_version"=>src['schema_version']},{"name"=>src['name']})
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
202
219
|
Rho::RhoConfig::sources()[ src['name'] ] = src
|
|
220
|
+
|
|
203
221
|
end
|
|
204
222
|
|
|
205
223
|
puts "sources after: #{Rho::RhoConfig::sources()}"
|
|
@@ -268,7 +286,9 @@ module Rho
|
|
|
268
286
|
init_db_sources(db, uniq_sources, partition,hash_migrate)
|
|
269
287
|
db.commit
|
|
270
288
|
rescue Exception => e
|
|
271
|
-
|
|
289
|
+
trace_msg = e.backtrace.join("\n")
|
|
290
|
+
puts "exception when init_db_sources: #{e}; Trace:" + trace_msg
|
|
291
|
+
|
|
272
292
|
db.rollback
|
|
273
293
|
end
|
|
274
294
|
|
|
@@ -276,6 +296,13 @@ module Rho
|
|
|
276
296
|
end
|
|
277
297
|
|
|
278
298
|
::Rho::RHO.init_schema_sources(hash_migrate)
|
|
299
|
+
|
|
300
|
+
Rho::RhoConfig::sources.values.each do|src|
|
|
301
|
+
['pass_through'].each do |prop|
|
|
302
|
+
next unless src.has_key?(prop)
|
|
303
|
+
SyncEngine.set_source_property(src['source_id'], prop, src[prop] ? src[prop].to_s() : '' )
|
|
304
|
+
end
|
|
305
|
+
end
|
|
279
306
|
end
|
|
280
307
|
|
|
281
308
|
def self.processIndexes(index_param, src_name, is_unique)
|
|
@@ -317,6 +344,7 @@ module Rho
|
|
|
317
344
|
db = get_src_db(source['name'])
|
|
318
345
|
|
|
319
346
|
next unless source['schema']
|
|
347
|
+
raise ArgumentError, "schema parameter should be Hash!" unless source['schema'].is_a?(Hash)
|
|
320
348
|
|
|
321
349
|
call_migrate = false
|
|
322
350
|
if db.table_exist?(source['name'])
|
|
@@ -324,25 +352,7 @@ module Rho
|
|
|
324
352
|
call_migrate = true
|
|
325
353
|
end
|
|
326
354
|
|
|
327
|
-
strCreate = source['
|
|
328
|
-
if source['schema']['property']
|
|
329
|
-
arCols = source['schema']['property']
|
|
330
|
-
arCols = arCols
|
|
331
|
-
strCols = ""
|
|
332
|
-
arCols.each do |col, type|
|
|
333
|
-
strCols += ',' if strCols.length() > 0
|
|
334
|
-
strCols += "\"#{col}\" varchar default NULL"
|
|
335
|
-
#TODO: support column type
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
strCols += ",\"object\" varchar(255) PRIMARY KEY"
|
|
339
|
-
strCreate = "CREATE TABLE #{source['name']} ( #{strCols} )"
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
|
343
|
-
strCreate += processIndexes(source['schema']['index'], source['name'], false)
|
|
344
|
-
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
|
345
|
-
strCreate += processIndexes(source['schema']['unique_index'], source['name'], true)
|
|
355
|
+
strCreate = make_createsql_script(source['name'], source['schema'])
|
|
346
356
|
|
|
347
357
|
if call_migrate
|
|
348
358
|
db.update_into_table('sources', {"schema"=>strCreate},{"name"=>source['name']})
|
|
@@ -356,6 +366,32 @@ module Rho
|
|
|
356
366
|
end
|
|
357
367
|
end
|
|
358
368
|
|
|
369
|
+
def self.make_createsql_script(name,schema_attr)
|
|
370
|
+
strCreate = schema_attr['sql']
|
|
371
|
+
strCreate = "" unless strCreate
|
|
372
|
+
if schema_attr['property']
|
|
373
|
+
arCols = schema_attr['property']
|
|
374
|
+
arCols = arCols
|
|
375
|
+
strCols = ""
|
|
376
|
+
arCols.each do |col, type|
|
|
377
|
+
strCols += ',' if strCols.length() > 0
|
|
378
|
+
strCols += "\"#{col}\" varchar default NULL"
|
|
379
|
+
#TODO: support column type
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
strCols += ',' if strCols.length() > 0
|
|
383
|
+
strCols += "\"object\" varchar(255) PRIMARY KEY"
|
|
384
|
+
strCreate = "CREATE TABLE \"#{name}\" ( #{strCols} )"
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
|
388
|
+
strCreate += processIndexes(schema_attr['index'], name, false)
|
|
389
|
+
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
|
390
|
+
strCreate += processIndexes(schema_attr['unique_index'], name, true)
|
|
391
|
+
|
|
392
|
+
strCreate
|
|
393
|
+
end
|
|
394
|
+
|
|
359
395
|
def process_blob_attribs(source, db)
|
|
360
396
|
return source['str_blob_attribs'] if source['str_blob_attribs']
|
|
361
397
|
source['str_blob_attribs'] = ""
|
|
@@ -386,16 +422,35 @@ module Rho
|
|
|
386
422
|
source['str_blob_attribs']
|
|
387
423
|
|
|
388
424
|
end
|
|
425
|
+
|
|
426
|
+
def get_start_id(db_sources)
|
|
427
|
+
start_id = 0
|
|
428
|
+
db_sources.each do |db_src|
|
|
429
|
+
src_id = db_src['source_id']
|
|
430
|
+
start_id = src_id if src_id > start_id
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
start_id = Rho::RhoConfig.max_config_srcid()+2 if start_id < Rho::RhoConfig.max_config_srcid
|
|
434
|
+
puts "start_id: #{start_id}"
|
|
435
|
+
start_id
|
|
436
|
+
end
|
|
389
437
|
|
|
390
|
-
def
|
|
438
|
+
def find_src_byname(db_sources, name)
|
|
439
|
+
db_sources.each do |db_src|
|
|
440
|
+
return db_src if db_src['name'] == name
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
nil
|
|
444
|
+
end
|
|
391
445
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
446
|
+
def init_db_sources(db, uniq_sources, db_partition, hash_migrate)
|
|
447
|
+
puts "init_db_sources"
|
|
448
|
+
|
|
449
|
+
db_sources = db.select_from_table('sources','sync_priority,source_id,partition, sync_type, schema_version, associations, blob_attribs, name' )
|
|
450
|
+
start_id = get_start_id(db_sources)
|
|
396
451
|
|
|
397
452
|
uniq_sources.each do |source|
|
|
398
|
-
puts "init_db_sources(#{source['name']}) : #{source}"
|
|
453
|
+
#puts "init_db_sources(#{source['name']}) : #{source}"
|
|
399
454
|
name = source['name']
|
|
400
455
|
sync_priority = source['sync_priority']
|
|
401
456
|
partition = source['partition']
|
|
@@ -404,34 +459,36 @@ module Rho
|
|
|
404
459
|
associations = source['str_associations']
|
|
405
460
|
blob_attribs = process_blob_attribs(source, db)
|
|
406
461
|
|
|
407
|
-
attribs = db.select_from_table('sources','sync_priority,source_id,partition, sync_type, schema_version, associations, blob_attribs', {'name'=>name})
|
|
408
|
-
|
|
409
|
-
|
|
462
|
+
#attribs = db.select_from_table('sources','sync_priority,source_id,partition, sync_type, schema_version, associations, blob_attribs', {'name'=>name})
|
|
463
|
+
attribs = find_src_byname(db_sources,name)
|
|
464
|
+
|
|
465
|
+
if attribs
|
|
466
|
+
if attribs['sync_priority'].to_i != sync_priority.to_i
|
|
410
467
|
db.update_into_table('sources', {"sync_priority"=>sync_priority},{"name"=>name})
|
|
411
468
|
end
|
|
412
|
-
if attribs[
|
|
469
|
+
if attribs['sync_type'] != sync_type
|
|
413
470
|
db.update_into_table('sources', {"sync_type"=>sync_type},{"name"=>name})
|
|
414
471
|
end
|
|
415
|
-
if attribs[
|
|
472
|
+
if attribs['schema_version'] != schema_version
|
|
416
473
|
if db_partition == partition
|
|
417
|
-
hash_migrate[name] = attribs[
|
|
474
|
+
hash_migrate[name] = attribs['schema_version']
|
|
418
475
|
else
|
|
419
476
|
db.update_into_table('sources', {"schema_version"=>schema_version},{"name"=>name})
|
|
420
477
|
end
|
|
421
478
|
end
|
|
422
|
-
if attribs[
|
|
479
|
+
if attribs['partition'] != partition
|
|
423
480
|
db.update_into_table('sources', {"partition"=>partition},{"name"=>name})
|
|
424
481
|
end
|
|
425
|
-
if attribs[
|
|
482
|
+
if attribs['associations'] != associations
|
|
426
483
|
db.update_into_table('sources', {"associations"=>associations},{"name"=>name})
|
|
427
484
|
end
|
|
428
|
-
if attribs[
|
|
485
|
+
if attribs['blob_attribs'] != blob_attribs
|
|
429
486
|
db.update_into_table('sources', {"blob_attribs"=>blob_attribs},{"name"=>name})
|
|
430
487
|
end
|
|
431
488
|
|
|
432
489
|
if !source['source_id']
|
|
433
|
-
source['source_id'] = attribs[
|
|
434
|
-
Rho::RhoConfig::sources[name]['source_id'] = attribs[
|
|
490
|
+
source['source_id'] = attribs['source_id'].to_i
|
|
491
|
+
Rho::RhoConfig::sources[name]['source_id'] = attribs['source_id'].to_i
|
|
435
492
|
end
|
|
436
493
|
|
|
437
494
|
else
|
|
@@ -455,9 +512,11 @@ module Rho
|
|
|
455
512
|
|
|
456
513
|
def serve(req)
|
|
457
514
|
begin
|
|
458
|
-
puts
|
|
515
|
+
puts "RHO serve: " + (req ? "#{req['request-uri']}" : '')
|
|
459
516
|
res = init_response
|
|
460
517
|
get_app(req['application']).send :serve, req, res
|
|
518
|
+
|
|
519
|
+
Rho::RhoController.clean_cached_metadata()
|
|
461
520
|
return send_response(res)
|
|
462
521
|
rescue Exception => e
|
|
463
522
|
return send_error(e)
|
|
@@ -466,9 +525,10 @@ module Rho
|
|
|
466
525
|
|
|
467
526
|
def serve_hash(req)
|
|
468
527
|
begin
|
|
469
|
-
puts
|
|
528
|
+
puts "RHO serve: " + (req ? "#{req['request-uri']}" : '')
|
|
470
529
|
res = init_response
|
|
471
530
|
get_app(req['application']).send :serve, req, res
|
|
531
|
+
Rho::RhoController.clean_cached_metadata()
|
|
472
532
|
return send_response_hash(res)
|
|
473
533
|
rescue Exception => e
|
|
474
534
|
return send_error(e,500,true)
|
|
@@ -479,9 +539,10 @@ module Rho
|
|
|
479
539
|
# TODO: Removed hardcoded appname
|
|
480
540
|
get_app(APPNAME).set_menu
|
|
481
541
|
begin
|
|
482
|
-
puts
|
|
542
|
+
puts "RHO serve_index: " + (req ? "#{req['request-uri']}" : '')
|
|
483
543
|
res = init_response
|
|
484
544
|
res['request-body'] = RhoController::renderfile(index_name, req, res)
|
|
545
|
+
Rho::RhoController.clean_cached_metadata()
|
|
485
546
|
return send_response(res)
|
|
486
547
|
rescue Exception => e
|
|
487
548
|
return send_error(e)
|
|
@@ -492,9 +553,10 @@ module Rho
|
|
|
492
553
|
# TODO: Removed hardcoded appname
|
|
493
554
|
get_app(APPNAME).set_menu
|
|
494
555
|
begin
|
|
495
|
-
puts
|
|
556
|
+
puts "RHO serve_index: " + (req ? "#{req['request-uri']}" : '')
|
|
496
557
|
res = init_response
|
|
497
558
|
res['request-body'] = RhoController::renderfile(index_name, req, res)
|
|
559
|
+
Rho::RhoController.clean_cached_metadata()
|
|
498
560
|
return send_response_hash(res)
|
|
499
561
|
rescue Exception => e
|
|
500
562
|
return send_error(e, 500, true)
|
|
@@ -70,7 +70,7 @@ module Rho
|
|
|
70
70
|
@default_menu = {} if @default_menu.nil?
|
|
71
71
|
disp_menu = menu ? menu.dup : @default_menu.dup
|
|
72
72
|
disp_menu['Back'] = back_action if back_action
|
|
73
|
-
puts "RhoApplication: Using menu - #{disp_menu.inspect}"
|
|
73
|
+
#puts "RhoApplication: Using menu - #{disp_menu.inspect}"
|
|
74
74
|
WebView.set_menu_items(disp_menu)
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -3,24 +3,40 @@ require 'bsearch'
|
|
|
3
3
|
module Rho
|
|
4
4
|
class RhoContact
|
|
5
5
|
class << self
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
def open_phonebook()
|
|
7
|
+
return Phonebook::openPhonebook
|
|
8
|
+
end
|
|
9
|
+
def close_phonebook(phonebook)
|
|
10
|
+
Phonebook::closePhonebook(phonebook)
|
|
11
|
+
end
|
|
12
|
+
def find(param, properties_list = nil, phonebook = nil)
|
|
13
|
+
pb = phonebook
|
|
14
|
+
if phonebook == nil
|
|
15
|
+
pb = Phonebook::openPhonebook
|
|
16
|
+
end
|
|
8
17
|
if pb.nil?
|
|
9
18
|
puts "Can't open phonebook"
|
|
10
19
|
return nil
|
|
11
20
|
elsif param == :all or param == 'all'
|
|
12
21
|
records = Phonebook::getallPhonebookRecords(pb)
|
|
13
|
-
|
|
22
|
+
if phonebook == nil
|
|
23
|
+
Phonebook::closePhonebook(pb)
|
|
24
|
+
end
|
|
14
25
|
return records
|
|
15
26
|
else
|
|
16
27
|
record = Phonebook::getPhonebookRecord(pb,param)
|
|
17
|
-
|
|
28
|
+
if phonebook == nil
|
|
29
|
+
Phonebook::closePhonebook(pb)
|
|
30
|
+
end
|
|
18
31
|
return record
|
|
19
32
|
end
|
|
20
33
|
end
|
|
21
34
|
|
|
22
|
-
def create!(properties)
|
|
23
|
-
|
|
35
|
+
def create!(properties, phonebook = nil)
|
|
36
|
+
pb = phonebook
|
|
37
|
+
if phonebook == nil
|
|
38
|
+
pb = Phonebook::openPhonebook
|
|
39
|
+
end
|
|
24
40
|
unless pb.nil?
|
|
25
41
|
record = Phonebook::createRecord(pb)
|
|
26
42
|
if record.nil?
|
|
@@ -31,12 +47,17 @@ module Rho
|
|
|
31
47
|
end
|
|
32
48
|
Phonebook::addRecord(pb,record)
|
|
33
49
|
end
|
|
34
|
-
|
|
50
|
+
if phonebook == nil
|
|
51
|
+
Phonebook::closePhonebook(pb)
|
|
52
|
+
end
|
|
35
53
|
end
|
|
36
54
|
end
|
|
37
55
|
|
|
38
|
-
def destroy(recordId)
|
|
39
|
-
|
|
56
|
+
def destroy(recordId, phonebook = nil)
|
|
57
|
+
pb = phonebook
|
|
58
|
+
if phonebook == nil
|
|
59
|
+
pb = Phonebook::openPhonebook
|
|
60
|
+
end
|
|
40
61
|
unless pb.nil?
|
|
41
62
|
record = Phonebook::openPhonebookRecord(pb,recordId)
|
|
42
63
|
if record.nil?
|
|
@@ -44,12 +65,17 @@ module Rho
|
|
|
44
65
|
else
|
|
45
66
|
Phonebook::deleteRecord(pb,record)
|
|
46
67
|
end
|
|
47
|
-
|
|
68
|
+
if phonebook == nil
|
|
69
|
+
Phonebook::closePhonebook(pb)
|
|
70
|
+
end
|
|
48
71
|
end
|
|
49
72
|
end
|
|
50
73
|
|
|
51
|
-
def update_attributes(properties)
|
|
52
|
-
|
|
74
|
+
def update_attributes(properties, phonebook = nil)
|
|
75
|
+
pb = phonebook
|
|
76
|
+
if phonebook == nil
|
|
77
|
+
pb = Phonebook::openPhonebook
|
|
78
|
+
end
|
|
53
79
|
unless pb.nil?
|
|
54
80
|
record = Phonebook::openPhonebookRecord(pb,properties['id'])
|
|
55
81
|
if record.nil?
|
|
@@ -60,7 +86,9 @@ module Rho
|
|
|
60
86
|
end
|
|
61
87
|
Phonebook::saveRecord(pb,record)
|
|
62
88
|
end
|
|
63
|
-
|
|
89
|
+
if phonebook == nil
|
|
90
|
+
Phonebook::closePhonebook(pb)
|
|
91
|
+
end
|
|
64
92
|
end
|
|
65
93
|
end
|
|
66
94
|
|
|
@@ -7,7 +7,7 @@ module Rho
|
|
|
7
7
|
attr_accessor :menu
|
|
8
8
|
|
|
9
9
|
@@rholog = RhoLog.new
|
|
10
|
-
|
|
10
|
+
@@before = nil
|
|
11
11
|
def rho_info(str)
|
|
12
12
|
@@rholog.info("RHO " + self.class.to_s, str)
|
|
13
13
|
end
|
|
@@ -42,6 +42,11 @@ module Rho
|
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
def self.before(&block)
|
|
46
|
+
@@before = {} unless @@before
|
|
47
|
+
@@before[self.to_s] = block if block_given?
|
|
48
|
+
end
|
|
49
|
+
|
|
45
50
|
def serve(application,object_mapping,req,res)
|
|
46
51
|
@request, @response = req, res
|
|
47
52
|
@object_mapping = object_mapping
|
|
@@ -51,6 +56,10 @@ module Rho
|
|
|
51
56
|
|
|
52
57
|
RhoController.process_rho_object(@params)
|
|
53
58
|
|
|
59
|
+
if @@before and @@before[self.class.to_s] and not @params['rho_callback']
|
|
60
|
+
@@before[self.class.to_s].call(@params,@request)
|
|
61
|
+
end
|
|
62
|
+
|
|
54
63
|
act = req['action'].nil? ? default_action : req['action']
|
|
55
64
|
if self.respond_to?(act)
|
|
56
65
|
res = send req['action'].nil? ? default_action : req['action']
|