rhodes 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/Manifest.txt +1 -0
- data/generators/templates/model/controller.rb +3 -3
- data/generators/templates/model/edit.erb +2 -2
- data/generators/templates/model/index.erb +2 -2
- data/generators/templates/model/new.erb +1 -1
- data/generators/templates/model/show.erb +1 -1
- data/lib/builtinME.rb +2 -1
- data/lib/rho/rho.rb +0 -2
- data/lib/rho/rhocontroller.rb +5 -8
- data/lib/rho/rhoviewhelpers.rb +109 -33
- data/lib/rhodes.rb +1 -1
- data/lib/rhom/rhom.rb +5 -0
- data/lib/rhom/rhom_object_factory.rb +5 -26
- data/spec/rho_controller_spec.rb +139 -0
- data/spec/rho_spec.rb +7 -7
- data/spec/rhom_object_factory_spec.rb +3 -3
- data/spec/stubs.rb +1 -1
- metadata +3 -2
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -30,20 +30,20 @@ class <%= class_name %>Controller < Rho::RhoController
|
|
30
30
|
def create
|
31
31
|
@<%= name %> = <%= class_name %>.new(@params['<%= name %>'])
|
32
32
|
@<%= name %>.save
|
33
|
-
redirect :index
|
33
|
+
redirect :action => :index
|
34
34
|
end
|
35
35
|
|
36
36
|
# POST /<%= class_name %>/1/update
|
37
37
|
def update
|
38
38
|
@<%= name %> = <%= class_name %>.find(@params['id'])
|
39
39
|
@<%= name %>.update_attributes(@params['<%= name %>'])
|
40
|
-
redirect :index
|
40
|
+
redirect :action => :index
|
41
41
|
end
|
42
42
|
|
43
43
|
# POST /<%= class_name %>/1/delete
|
44
44
|
def delete
|
45
45
|
@<%= name %> = <%= class_name %>.find(@params['id'])
|
46
46
|
@<%= name %>.destroy
|
47
|
-
redirect :index
|
47
|
+
redirect :action => :index
|
48
48
|
end
|
49
49
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
class="panel"
|
3
3
|
id="<%= name %>_edit_form"
|
4
4
|
method="POST"
|
5
|
-
action="<%%=url_for(
|
5
|
+
action="<%%=url_for(:action => :update)%>">
|
6
6
|
<fieldset>
|
7
7
|
<input type="hidden" name="id" value="<%%=@<%= name %>.object%>"/>
|
8
8
|
<% attributes.each do |attribute| %>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
</fieldset>
|
15
15
|
<input type="submit" value="Update"/>
|
16
16
|
<p align="center">
|
17
|
-
<a href="<%%=url_for(
|
17
|
+
<a href="<%%=url_for(:action => :delete, :id => @<%= name %>.object)%>">
|
18
18
|
<font color="#990000">Delete</font>
|
19
19
|
</a>
|
20
20
|
</p>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<ul id="<%= name.pluralize %>" title="<%= class_name.pluralize %>">
|
2
2
|
<%%@<%=name.pluralize%>.each do |x|%>
|
3
3
|
<%if self.attributes?%>
|
4
|
-
<li><%%=link_to "#{x.<%=attributes[0]%>}",
|
4
|
+
<li><%%=link_to "#{x.<%=attributes[0]%>}", :action => :show, :id => x.object%></li>
|
5
5
|
<%else%>
|
6
6
|
<li>Some list entry...</li>
|
7
7
|
<%end%>
|
8
8
|
<%%end%>
|
9
|
-
<li><font color="blue"><%%=link_to "New <%= class_name %>",
|
9
|
+
<li><font color="blue"><%%=link_to "New <%= class_name %>", :action => :new%></font></li>
|
10
10
|
</ul>
|
@@ -2,5 +2,5 @@
|
|
2
2
|
<% attributes.each do |attribute| %>
|
3
3
|
<li><%%=@<%=name%>.<%=attribute%>%></li>
|
4
4
|
<% end %>
|
5
|
-
<li><%%=link_to "Edit #{@<%=name%>.<%=attributes[0]%>}",
|
5
|
+
<li><%%=link_to "Edit #{@<%=name%>.<%=attributes[0]%>}", :action => :edit, :id => @<%=name%>.object%></li>
|
6
6
|
</ul>
|
data/lib/builtinME.rb
CHANGED
@@ -154,7 +154,6 @@ class Array
|
|
154
154
|
alias map! collect!
|
155
155
|
alias size length
|
156
156
|
alias to_ary to_a
|
157
|
-
alias to_s inspect
|
158
157
|
|
159
158
|
def inspect
|
160
159
|
str = "["
|
@@ -168,6 +167,8 @@ class Array
|
|
168
167
|
}
|
169
168
|
str << "]"
|
170
169
|
end
|
170
|
+
|
171
|
+
alias to_s inspect
|
171
172
|
|
172
173
|
end
|
173
174
|
|
data/lib/rho/rho.rb
CHANGED
@@ -34,7 +34,6 @@ module Rho
|
|
34
34
|
# setup the sources table and model attributes for all applications
|
35
35
|
def init_sources
|
36
36
|
if defined? Rho::RhoConfig::sources
|
37
|
-
src_attribs = []
|
38
37
|
|
39
38
|
# quick and dirty way to get unique array of hashes
|
40
39
|
uniq_sources = Rho::RhoConfig::sources.values.inject([]) { |result,h|
|
@@ -47,7 +46,6 @@ module Rho
|
|
47
46
|
src_id = source['source_id']
|
48
47
|
url = source['url']
|
49
48
|
if !self.source_initialized?(src_id)
|
50
|
-
puts "initializing source #{src_id}..."
|
51
49
|
Rhom::RhomDbAdapter::insert_into_table('sources',
|
52
50
|
{"source_id"=>src_id,"source_url"=>url})
|
53
51
|
end
|
data/lib/rho/rhocontroller.rb
CHANGED
@@ -5,10 +5,6 @@ require 'rho/rhoviewhelpers'
|
|
5
5
|
module Rho
|
6
6
|
class RhoController
|
7
7
|
|
8
|
-
#def initialize
|
9
|
-
# self.class.layout 'layout'
|
10
|
-
#end
|
11
|
-
|
12
8
|
def default_action
|
13
9
|
return Hash['GET','show','PUT','update','POST','update',
|
14
10
|
'DELETE','delete'][@request['request-method']] unless @request['id'].nil?
|
@@ -28,11 +24,12 @@ module Rho
|
|
28
24
|
end
|
29
25
|
alias xhr? :xml_http_request?
|
30
26
|
|
31
|
-
def redirect(
|
32
|
-
@response['status'] = 302
|
33
|
-
@response['headers']['Location'] = url_for(
|
34
|
-
@response['message'] = 'Moved temporarily'
|
27
|
+
def redirect(url_params = {},options = {})
|
28
|
+
@response['status'] = options['status'] || 302
|
29
|
+
@response['headers']['Location'] = url_for(url_params)
|
30
|
+
@response['message'] = options['message'] || 'Moved temporarily'
|
35
31
|
return ''
|
36
32
|
end
|
33
|
+
|
37
34
|
end # RhoController
|
38
35
|
end # Rho
|
data/lib/rho/rhoviewhelpers.rb
CHANGED
@@ -1,45 +1,121 @@
|
|
1
1
|
module Rho
|
2
2
|
class RhoController
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
4
|
+
def truncate(text,length)
|
5
|
+
if text
|
6
|
+
omission = '...'
|
7
|
+
l = length - omission.length
|
8
|
+
(text.length > length ? text[0...l] + omission : text).to_s
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def click_to_call(phone,description=nil)
|
13
|
+
description = phone if description.nil?
|
14
|
+
return "" if phone.nil? or phone.length == 0
|
15
|
+
"<a href=\"tel:#{phone}\" target=\"_self\">#{description}</a>"
|
16
|
+
end
|
17
|
+
|
18
|
+
def mailto(address,description=nil)
|
19
|
+
description = address if description.nil?
|
20
|
+
return "" if address.nil? or address.length == 0
|
21
|
+
"<a href=\"mailto:#{address}\" target=\"_self\">#{description}</a>"
|
22
|
+
end
|
23
|
+
|
24
|
+
# Examples of how to use link_to method:
|
25
|
+
#
|
26
|
+
# link_to "Visit Other Site", "http://www.rhomobile.com/"
|
27
|
+
# ==> <a href=\"http://www.rhomobile.com/\" >Visit Other Site</a>
|
28
|
+
#
|
29
|
+
# link_to "Help", { :action => "help" }
|
30
|
+
# ==> <a href=\"/application/model/help\" >Help</a>
|
31
|
+
#
|
32
|
+
# link_to "Delete", { :action => "delete", :id => '{12}' }
|
33
|
+
# ==> <a href="/application/model/{12}/delete" onclick="var f = document.createElement('form');
|
34
|
+
# f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST';
|
35
|
+
# f.action = this.href;f.submit();return false;">Delete</a>
|
36
|
+
#
|
37
|
+
# link_to "Show", { :action => "show", :id => '{12}'},"style=\"height:4px;width:7px;border-width:0px;\""
|
38
|
+
# ==> <a href="/application/model/{12}/show" style="height:4px;width:7px;border-width:0px;">Show</a>
|
39
|
+
#
|
40
|
+
# link_to "Delete", { :action => "delete", :id => '{12}' }, "class=\"delete_link\""
|
41
|
+
# ==> <a href="/application/model/{12}/delete" class="delete_link" onclick="var f = document.createElement('form');
|
42
|
+
# f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST';
|
43
|
+
# f.action = this.href;f.submit();return false;\">Delete</a>"
|
44
|
+
#
|
45
|
+
# link_to "Invate",:action => :invite, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}
|
46
|
+
# ==> <a href="/application/model/invite?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com" >Invate</a>
|
47
|
+
#
|
48
|
+
def link_to(name,url_params = {},html_options = "",confirm = nil)
|
49
|
+
url = url_for(url_params)
|
50
|
+
if (url_params[:action].to_s != 'delete')
|
51
|
+
"<a href=\"#{url}\" #{html_options}>#{name || url}</a>"
|
28
52
|
else
|
29
|
-
"<a href=\"#{
|
53
|
+
"<a href=\"#{url}\" #{html_options} onclick=\""+ #if (confirm('#{confirm}')) {
|
30
54
|
"var f = document.createElement('form'); f.style.display = 'none';" +
|
31
|
-
|
32
|
-
|
55
|
+
"this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit();"+
|
56
|
+
"return false;\">#{name || url}</a>"
|
33
57
|
end
|
34
58
|
end
|
35
59
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
60
|
+
# Examples of how to use url_for method:
|
61
|
+
#
|
62
|
+
# url_for '/some_url'
|
63
|
+
# ==> /some_url
|
64
|
+
#
|
65
|
+
# When generating a new URL, missing values may be filled in from the current request's parameters.
|
66
|
+
# For example, if application name or model are not specifyed in the call parameters, they would be filled from the request.
|
67
|
+
#
|
68
|
+
# url_for :action => :index
|
69
|
+
# ==> /application/model
|
70
|
+
#
|
71
|
+
# url_for :action => :create
|
72
|
+
# ==> /application/model
|
73
|
+
#
|
74
|
+
# url_for :action => :new
|
75
|
+
# ==> /application/model/new
|
76
|
+
#
|
77
|
+
# url_for :action => :show, :id => '{12}'
|
78
|
+
# ==> /application/model/{12}/show
|
79
|
+
#
|
80
|
+
# url_for :model => :another_model, :action => :show, :id => '{12}'
|
81
|
+
# ==> /application/another_model/{12}/show
|
82
|
+
#
|
83
|
+
# url_for :application => :another_app, :model => :another_model, :action => :show, :id => '{12}'
|
84
|
+
# ==> /another_app/another_model/{12}/show
|
85
|
+
#
|
86
|
+
# url_for :action => :create, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}
|
87
|
+
# ==> /application/model?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com
|
88
|
+
#
|
89
|
+
# url_for :action => :show, :id => '{12}', :fragment => "an-anchor"
|
90
|
+
# ==> /application/model/{12}/show#an-anchor
|
91
|
+
#
|
92
|
+
def url_for(params = {})
|
93
|
+
return params.to_s if params.is_a? String or params.is_a? Symbol
|
94
|
+
return '/' if not params.is_a? Hash or params.nil?
|
95
|
+
|
96
|
+
application = params[:application] || @request['application']
|
97
|
+
model = params[:model] || @request['model']
|
98
|
+
action = params[:action].nil? ? nil : params[:action].to_s
|
99
|
+
id = params[:id].nil? ? nil : params[:id].to_s
|
100
|
+
query = query_to_s(params[:query])
|
101
|
+
fragment = params[:fragment].nil? ? '' : '#' + params[:fragment]
|
102
|
+
|
103
|
+
amurl = '/' + application.to_s + '/' + model.to_s
|
104
|
+
|
105
|
+
return amurl + query + fragment if action.nil? or action == 'create' or action == 'index'
|
106
|
+
return amurl +'/'+ (id.nil? ? action : id + '/' + action) + query + fragment
|
42
107
|
end
|
43
108
|
|
109
|
+
private
|
110
|
+
def query_to_s(query)
|
111
|
+
return '' if query.nil?
|
112
|
+
qstring = '?'
|
113
|
+
query.each do |key,value|
|
114
|
+
qstring += '&' if qstring.length > 1
|
115
|
+
qstring += ERB::Util.url_encode(key.to_s) + '=' + ERB::Util.url_encode(value.to_s)
|
116
|
+
end
|
117
|
+
qstring
|
118
|
+
end
|
119
|
+
|
44
120
|
end # RhoController
|
45
121
|
end # Rho
|
data/lib/rhodes.rb
CHANGED
data/lib/rhom/rhom.rb
CHANGED
@@ -26,25 +26,9 @@ module Rhom
|
|
26
26
|
|
27
27
|
def initialize
|
28
28
|
unless not defined? Rho::RhoConfig::sources
|
29
|
-
::Rhom::RhomObjectFactory::init_source_attribs
|
30
29
|
init_objects
|
31
30
|
end
|
32
31
|
end
|
33
|
-
|
34
|
-
class << self
|
35
|
-
def init_source_attribs
|
36
|
-
# merge source attributes into config hash
|
37
|
-
# TODO: This shouldn't reference 'source[1]' directly
|
38
|
-
Rho::RhoConfig::sources.each do |source|
|
39
|
-
src_attribs = ::Rhom::RhomDbAdapter::select_from_table(::Rhom::TABLE_NAME,
|
40
|
-
'attrib',
|
41
|
-
{"source_id"=>source[1]['source_id'].to_s},
|
42
|
-
{"distinct"=>true})
|
43
|
-
# update our source with the proper attributes
|
44
|
-
source[1].merge!({"attribs"=>src_attribs})
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
32
|
|
49
33
|
# Initialize new object with dynamic attributes
|
50
34
|
def init_objects
|
@@ -60,12 +44,12 @@ module Rhom
|
|
60
44
|
# create a temp id for the create type
|
61
45
|
# TODO: This is duplicative of get_new_obj
|
62
46
|
temp_objid = djb_hash(obj.values.to_s, 10).to_s
|
63
|
-
self.send
|
64
|
-
self.send
|
65
|
-
self.send
|
47
|
+
self.send("object=".to_sym(), temp_objid)
|
48
|
+
self.send("source_id=".to_sym(), obj['source_id'].to_s)
|
49
|
+
self.send("update_type=".to_sym(), 'create')
|
66
50
|
obj.each do |key,value|
|
67
51
|
val = self.inst_strip_braces(value)
|
68
|
-
self.send
|
52
|
+
self.send("#{key}=".to_sym(), val)
|
69
53
|
end
|
70
54
|
end
|
71
55
|
|
@@ -83,11 +67,6 @@ module Rhom
|
|
83
67
|
list = []
|
84
68
|
hash_list = {}
|
85
69
|
conditions = {}
|
86
|
-
attrib_length = 0
|
87
|
-
source = Rho::RhoConfig::sources[self.name.to_s]
|
88
|
-
attrib_length = source['attribs'].length if source
|
89
|
-
# source attributes are not initialized, try again
|
90
|
-
::Rhom::RhomObjectFactory::init_source_attribs if attrib_length == 0
|
91
70
|
|
92
71
|
# first find all query objects
|
93
72
|
if args.first == :all
|
@@ -131,7 +110,7 @@ module Rhom
|
|
131
110
|
# returns new model instance with a temp object id
|
132
111
|
def get_new_obj(obj, type='query')
|
133
112
|
tmp_obj = self.new
|
134
|
-
tmp_obj.send
|
113
|
+
tmp_obj.send("object=".to_sym(), "{#{obj['object'].to_s}}")
|
135
114
|
tmp_obj
|
136
115
|
end
|
137
116
|
end #class methods
|
@@ -0,0 +1,139 @@
|
|
1
|
+
#
|
2
|
+
# rho_controller_spec.rb
|
3
|
+
# rhodes
|
4
|
+
#
|
5
|
+
# Copyright (C) 2008 Lars Burgess. All rights reserved.
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
21
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
22
|
+
require 'rho/rhocontroller'
|
23
|
+
|
24
|
+
describe "Rho" do
|
25
|
+
|
26
|
+
it_should_behave_like "rho initializer"
|
27
|
+
|
28
|
+
describe "url_for and link_to" do
|
29
|
+
|
30
|
+
before(:each) do
|
31
|
+
@c = Rho::RhoController.new
|
32
|
+
@c.stub!(:send).and_return(nil)
|
33
|
+
@c.serve(nil,{'application' => 'application', 'model' => 'model'},{})
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should generate urls for empty params" do
|
37
|
+
@c.url_for().should == '/application/model'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should generate urls for a url" do
|
41
|
+
@c.url_for('/some_url').should == '/some_url'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should generate urls for a symbol" do
|
45
|
+
@c.url_for(:new).should == 'new'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should generate urls for an action" do
|
49
|
+
@c.url_for(:action => :new).should == '/application/model/new'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should generate urls for an action and id" do
|
53
|
+
@c.url_for(:action => :show, :id => '{12}').should == '/application/model/{12}/show'
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should generate urls for create or index actions" do
|
57
|
+
@c.url_for(:action => :index, :id => '{12}').should == '/application/model'
|
58
|
+
@c.url_for(:action => :create).should == '/application/model'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should generate urls for an model, action, and id" do
|
62
|
+
@c.url_for(:model => 'another_model', :action => :show, :id => '{12}').should == '/application/another_model/{12}/show'
|
63
|
+
@c.url_for(:model => :another_model, :action => :show, :id => '{12}').should == '/application/another_model/{12}/show'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should generate urls for an application, model, action, and id" do
|
67
|
+
@c.url_for(:application => :another_app, :model => :another_model,
|
68
|
+
:action => :show, :id => '{12}').should == '/another_app/another_model/{12}/show'
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should generate urls with a query" do
|
72
|
+
@c.url_for(:action => :create, :query => {:name => 'John Smith',
|
73
|
+
'address' => "http://john.smith.com"}).should == '/application/model?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com'
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should generate urls with a fragment" do
|
77
|
+
@c.url_for(:action => :show, :id => '{12}', :fragment => "an-anchor").should == '/application/model/{12}/show#an-anchor'
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should generate link for a url" do
|
81
|
+
@c.link_to("Visit Other Site", "http://www.rhomobile.com/").should == "<a href=\"http://www.rhomobile.com/\" >Visit Other Site</a>"
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should generate link for an action" do
|
85
|
+
@c.link_to("Help", :action => "help").should == "<a href=\"/application/model/help\" >Help</a>"
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should generate link for 'delete' action" do
|
89
|
+
@c.link_to("Delete", :action => "delete", :id => '{12}').should == "<a href=\"/application/model/{12}/delete\" onclick=\"var f = document.createElement('form'); f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit();return false;\">Delete</a>"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should generate link for an action and style it" do
|
93
|
+
@c.link_to("Show", { :action => "show", :id => '{12}'},"style=\"height:4px;width:7px;border-width:0px;\"").should == "<a href=\"/application/model/{12}/show\" style=\"height:4px;width:7px;border-width:0px;\">Show</a>"
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should generate link for 'delete' action and style it" do
|
97
|
+
@c.link_to("Delete", { :action => "delete", :id => '{12}' }, "class=\"delete_link\"").should == "<a href=\"/application/model/{12}/delete\" class=\"delete_link\" onclick=\"var f = document.createElement('form'); f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit();return false;\">Delete</a>"
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should generate link with a query" do
|
101
|
+
@c.link_to("Invate",:action => :invite, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}).should == "<a href=\"/application/model/invite?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com\" >Invate</a>"
|
102
|
+
end
|
103
|
+
|
104
|
+
end #describe "url_for and link_to"
|
105
|
+
|
106
|
+
describe "redirect" do
|
107
|
+
|
108
|
+
before(:each) do
|
109
|
+
@response = Hash.new
|
110
|
+
@response['headers'] = {}
|
111
|
+
@c = Rho::RhoController.new
|
112
|
+
@c.stub!(:send).and_return(nil)
|
113
|
+
@c.serve(nil,{'application' => 'application', 'model' => 'model'},@response)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should redirect to a url" do
|
117
|
+
@c.redirect "/start-page"
|
118
|
+
@response['headers']['Location'].should == "/start-page"
|
119
|
+
@response['status'].should == 302
|
120
|
+
@response['message'].should == 'Moved temporarily'
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should redirect to an action" do
|
124
|
+
@c.redirect :action => :show, :id => '{12}'
|
125
|
+
@response['headers']['Location'].should == "/application/model/{12}/show"
|
126
|
+
@response['status'].should == 302
|
127
|
+
@response['message'].should == 'Moved temporarily'
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should redirect to an action with 301 status code and status message" do
|
131
|
+
@c.redirect({:action => :show, :id => '{12}'}, {'status' => 301, 'message' => 'Moved permanently'})
|
132
|
+
@response['headers']['Location'].should == "/application/model/{12}/show"
|
133
|
+
@response['status'].should == 301
|
134
|
+
@response['message'].should == 'Moved permanently'
|
135
|
+
end
|
136
|
+
|
137
|
+
end #describe "redirect"
|
138
|
+
|
139
|
+
end
|
data/spec/rho_spec.rb
CHANGED
@@ -21,39 +21,39 @@ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
21
21
|
require File.dirname(__FILE__) + "/spec_helper"
|
22
22
|
|
23
23
|
describe "Rho" do
|
24
|
-
|
24
|
+
|
25
25
|
it_should_behave_like "rho initializer"
|
26
26
|
|
27
27
|
it "should populate configuration in sources table" do
|
28
28
|
sources = Rhom::RhomDbAdapter::select_from_table('sources','*')
|
29
29
|
sources.size.should > 1
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
it "should initialize configuration only once" do
|
33
33
|
Rhom::RhomDbAdapter::delete_all_from_table('sources')
|
34
34
|
@rho.source_initialized?(1).should == false
|
35
35
|
@rho.init_sources
|
36
36
|
@rho.source_initialized?(1).should == true
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
it "should have start_path" do
|
40
40
|
Rho::RhoConfig.start_path.should == '/'
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "should set start_path" do
|
44
44
|
Rho::RhoConfig.start_path = '/foo/bar'
|
45
45
|
Rho::RhoConfig.start_path.should == '/foo/bar'
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
it "should retrieve start_path" do
|
49
49
|
Rho::RhoConfig.start_path = '/'
|
50
50
|
@rho.get_start_path.should == '/'
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
it "should return from get_app" do
|
54
54
|
pending "fix relative paths for testing of get_app"
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
it "should serve request" do
|
58
58
|
pending "need to mock request"
|
59
59
|
end
|
@@ -32,9 +32,9 @@ describe "RhomObjectFactory" do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should set source_id attributes" do
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
Account.get_source_id.should == "1"
|
36
|
+
Case.get_source_id.should == "2"
|
37
|
+
Employee.get_source_id.should == "3"
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should dynamically assign values" do
|
data/spec/stubs.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhodes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rhomobile Dev
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-29 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- spec/configs/employee.rb
|
173
173
|
- spec/generator_spec_helper.rb
|
174
174
|
- spec/model_generator_spec.rb
|
175
|
+
- spec/rho_controller_spec.rb
|
175
176
|
- spec/rho_spec.rb
|
176
177
|
- spec/rhom_object_factory_spec.rb
|
177
178
|
- spec/source_generator_spec.rb
|