Skip to content

Commit

Permalink
javascript_api_spec added
Browse files Browse the repository at this point in the history
  • Loading branch information
timashev committed Mar 5, 2013
1 parent 46e13bb commit 44e239c
Show file tree
Hide file tree
Showing 116 changed files with 33,512 additions and 1 deletion.
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,15 @@ spec/**/faillog.txt
spec/**/rholog-*.txt
spec/**/app/local_server.rb
spec/**/RhoLogSpec.txt
spec/**/rhosimulator/*
spec/**/rhosimulator/
spec/javascript_api_spec/**/generated/
spec/javascript_api_spec/*/*/generated/
spec/javascript_api_spec/*/*/*/generated/
spec/javascript_api_spec/*/*/*/generated/
spec/javascript_api_spec/*/*/*/*/generated/
spec/javascript_api_spec/*/*/*/*/*/generated/
spec/javascript_api_spec/*/*/*/*/*/*/generated/
spec/javascript_api_spec/*/*/*/*/*/*/*/generated/

platform/bb/.metadata/*
platform/bb/bin/*
Expand Down
8 changes: 8 additions & 0 deletions spec/javascript_api_spec/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# logs and symlinks
rholog.txt
rholog-*
sim-*

# build output
bin/
public/api/generated/
37 changes: 37 additions & 0 deletions spec/javascript_api_spec/Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
require 'yaml'

unless File.exists? "build.yml"
puts "Cannot find build.yml"
exit 1
end


$app_config = YAML::load_file("build.yml")
$app_path = File.expand_path(File.dirname(__FILE__))

if ENV["RHO_HOME"].nil?
if $app_config["sdk"]
rakefilepath = File.join(File.expand_path($app_config['sdk']), 'Rakefile')
else
begin
rakefilepath = `get-rhodes-info --rhodes-path`.chomp
rakefilepath = File.join(rakefilepath, "Rakefile")
rescue
rakefilepath = ""
end
end
else
rakefilepath = "#{ENV["RHO_HOME"]}/Rakefile"
end

unless File.exists? rakefilepath
puts "\nCannot find your Rhodes gem or source path: #{rakefilepath}"
puts "\nIf you have the sdk on your path or have installed the gem this"
puts "can be resolved by running 'set-rhodes-sdk'"
puts "\nYou can also set this manually by modifying your build.yml or"
puts "setting the environment variable RHO_HOME"
exit 1
end

load rakefilepath

26 changes: 26 additions & 0 deletions spec/javascript_api_spec/app/RhoJavascriptApi/index.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<script type="text/javascript">
(function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;

var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);

jasmineEnv.specFilter = function (spec) {
return htmlReporter.specFilter(spec);
};

var currentWindowOnload = window.onload;
window.onload = function() {
if (currentWindowOnload) {
currentWindowOnload();
}
execJasmine();
};

function execJasmine() {
jasmineEnv.execute();
}
})();
</script>

26 changes: 26 additions & 0 deletions spec/javascript_api_spec/app/RhoJavascriptApi/layout.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>BluetoothChat</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width"/>
<% if System::get_property('platform') == 'WINDOWS' && System::get_property('webview_framework') !~ /^WEBKIT/ %>
<% elsif System::get_property('platform') != 'Blackberry' || System::get_property('webview_framework') =~ /^WEBKIT/ %>
<script src="/public/jquery/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="/public/jquery/jquery.json-2.3.min.js" type="text/javascript"></script>

<link rel="stylesheet" type="text/css" href="/public/jasmine/jasmine.css">
<script type="text/javascript" src="/public/jasmine/jasmine.js"></script>
<script type="text/javascript" src="/public/jasmine/jasmine-html.js"></script>

<script type="text/javascript" charset="utf-8" src="/public/api/generated/rhoapi.js"></script>
<script type="text/javascript" charset="utf-8" src="/public/api/generated/rhoapi-modules.js"></script>

<script type="text/javascript" charset="utf-8" src="/public/api/spec-rhoapi.js"></script>

<% end %>
</head>
<body onUnload="onUnload();">
<%= @content %>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
require 'rho/rhocontroller'
require 'helpers/application_helper'
require 'helpers/browser_helper'
require 'json'

class RhoJavascriptApiController < Rho::RhoController
include ApplicationHelper
include BrowserHelper

LOG_TAG = 'JSAPI'
RHO_ID_PARAM = '__rhoID'
COMMAND_REGEXP = /^command_proxy_/

@layout = 'RhoJavascriptApi/layout'

def command_handler
RhoLog.info LOG_TAG, "command_handler: #{@params}"

data = Rho::JSON.parse(@params['data'])

# data['method'] contain it as 'Rho.ModuleName.methodName' or 'Rho:ModuleName.methodName'
id = data['id']
module_name = data['method'][0 .. data['method'].rindex('.') - 1].gsub(/\:/, '.')
method_name = data['method'][data['method'].rindex('.') + 1 .. -1].gsub(/is_(.*)/, '\1?')
method_args = data['args']

begin
if module_name.nil?
err_message = "Undefined module: #{data['module']}"
RhoLog.error LOG_TAG, err_message
raise ArgumentError, err_message
end

puts "method_args : #{method_args}"

proxy_method = "command_proxy_#{module_name.gsub(/::|:|\./, '_')}_#{method_name}"
res = self.send(proxy_method.to_sym(), module_name, method_name.to_sym(), method_args)
jsonrpc = { 'jsonrpc' => '2.0', 'id' => id, 'result' => res }
rescue Exception => e
@response['status'] = 500
@response['message'] = e.message
res = {'code' => -1, 'message' => e.message, 'stack' => e.backtrace}
jsonrpc = { 'jsonrpc' => '2.0', 'id' => id, 'error' => res }
end

jsonrpc = ::JSON.generate(jsonrpc)
render :string => "#{jsonrpc}"
end

def command_proxy_Rho_Barcode_testMethod(module_name, method_name, method_args)
result = '';
method_args.each { |arg| result.concat arg.to_s }
{'value' => result, 'type' => 'string'}
end

def command_proxy_Rho_Barcode_getDefaultID(module_name, method_name, method_args)
{'value' => '00001', 'type' => 'instance', 'class' => 'Rho.Barcode'}
end

def command_proxy_Rho_Barcode_enumerate(module_name, method_name, method_args)
{'value' => '00001 00002 00003', 'type' => 'instance', 'class' => 'Rho.Barcode'}
end

def command_proxy_Rho_Barcode_getProperties(module_name, method_name, method_args)
{'value' => { 'resolution' => '1024x768' }, 'type' => 'object'}
end

def command_proxy_Rho_Barcode_setProperties(module_name, method_name, method_args)
{'value' => { 'resolution' => method_args[0]['resolution'] }, 'type' => 'object'}
end

end
121 changes: 121 additions & 0 deletions spec/javascript_api_spec/app/Settings/controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
require 'rho'
require 'rho/rhocontroller'
require 'rho/rhoerror'
require 'helpers/browser_helper'

class SettingsController < Rho::RhoController
include BrowserHelper

def index
@msg = @params['msg']
render
end


def login
@msg = @params['msg']
render :action => :login
end

def login_callback
errCode = @params['error_code'].to_i
if errCode == 0
# run sync if we were successful
WebView.navigate Rho::RhoConfig.options_path
SyncEngine.dosync
else
if errCode == Rho::RhoError::ERR_CUSTOMSYNCSERVER
@msg = @params['error_message']
end

if !@msg || @msg.length == 0
@msg = Rho::RhoError.new(errCode).message
end

WebView.navigate ( url_for :action => :login, :query => {:msg => @msg} )
end
end

def do_login
if @params['login'] and @params['password']
begin
SyncEngine.login(@params['login'], @params['password'], (url_for :action => :login_callback) )
@response['headers']['Wait-Page'] = 'true'
render :action => :wait
rescue Rho::RhoError => e
@msg = e.message
render :action => :login
end
else
@msg = Rho::RhoError.err_message(Rho::RhoError::ERR_UNATHORIZED) unless @msg && @msg.length > 0
render :action => :login
end
end

def logout
SyncEngine.logout
@msg = "You have been logged out."
render :action => :login
end

def reset
render :action => :reset
end

def do_reset
Rhom::Rhom.database_full_reset
SyncEngine.dosync
@msg = "Database has been reset."
redirect :action => :index, :query => {:msg => @msg}
end

def do_sync
SyncEngine.dosync
@msg = "Sync has been triggered."
redirect :action => :index, :query => {:msg => @msg}
end

def sync_notify
status = @params['status'] ? @params['status'] : ""

# un-comment to show a debug status pop-up
#Alert.show_status( "Status", "#{@params['source_name']} : #{status}", Rho::RhoMessages.get_message('hide'))

if status == "in_progress"
# do nothing
elsif status == "complete"
WebView.navigate Rho::RhoConfig.start_path if @params['sync_type'] != 'bulk'
elsif status == "error"

if @params['server_errors'] && @params['server_errors']['create-error']
SyncEngine.on_sync_create_error(
@params['source_name'], @params['server_errors']['create-error'].keys, :delete )
end

if @params['server_errors'] && @params['server_errors']['update-error']
SyncEngine.on_sync_update_error(
@params['source_name'], @params['server_errors']['update-error'], :retry )
end

err_code = @params['error_code'].to_i
rho_error = Rho::RhoError.new(err_code)

@msg = @params['error_message'] if err_code == Rho::RhoError::ERR_CUSTOMSYNCSERVER
@msg = rho_error.message unless @msg && @msg.length > 0

if rho_error.unknown_client?( @params['error_message'] )
Rhom::Rhom.database_client_reset
SyncEngine.dosync
elsif err_code == Rho::RhoError::ERR_UNATHORIZED
WebView.navigate(
url_for :action => :login,
:query => {:msg => "Server credentials are expired"} )
elsif err_code != Rho::RhoError::ERR_CUSTOMSYNCSERVER
WebView.navigate( url_for :action => :err_sync, :query => { :msg => @msg } )
end
end
end



end
11 changes: 11 additions & 0 deletions spec/javascript_api_spec/app/Settings/err_sync.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<div data-role="page">

<div data-role="header" data-position="inline">
<h1>Sync error</h1>
</div>

<div data-role="content">
<div class="error-message"><%= @params['msg'] %></div>
</div>

</div>
21 changes: 21 additions & 0 deletions spec/javascript_api_spec/app/Settings/home.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<div data-role="page">


<div data-role="header" data-position="inline">
<h1>Home</h1>
<% if SyncEngine::logged_in > 0 %>
<a href="<%= url_for :action => :do_sync %>" class="ui-btn-left" data-icon="refresh">Sync</a>
<a href="<%= url_for :action => :logout %>" class="ui-btn-right" data-icon="star">Logout</a>
<% else %>
<a href="<%= url_for :action => :login %>" class="ui-btn-right" data-icon="star">Login</a>
<% end %>
</div>


<div data-role="content">
<ul data-role="listview">
<li><a href="#">Add Links Here...</a></li>
</ul>
</div>

</div>
33 changes: 33 additions & 0 deletions spec/javascript_api_spec/app/Settings/index.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<div data-role="page">

<div data-role="header" data-position="inline">
<h1>Settings</h1>
</div>

<div data-role="content">
<ul data-role="listview">
<% if @msg %>
<li class="error-message"><%= @msg %></li>
<% end %>


<li>
<div class="itemLabel">
<span class="title">Client ID:</span>
</div>
<div class="itemValue">
<span class="clientID"><%= Rhom::Rhom::client_id %></span>
</div>
</li>

<li><a href="<%= url_for :action => :reset %>">Reset Database</a></li>
<li><a href="<%= url_for :action => :do_sync %>">Perform Sync</a></li>
<% if SyncEngine::logged_in > 0 %>
<li><a href="<%= url_for :action => :logout %>">Logout</a></li>
<% else %>
<li><a href="<%= url_for :action => :login %>">Login</a></li>
<% end %>

</ul>
</div>
</div>
Loading

0 comments on commit 44e239c

Please sign in to comment.