sorting_table_for 0.1.0
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/MIT-LICENSE +20 -0
- data/README.mdown +213 -0
- data/Rakefile +11 -0
- data/init.rb +7 -0
- data/lib/model/sorting_table_model_scope.rb +53 -0
- data/lib/sorting_table_for.rb +37 -0
- data/lib/sorting_table_for/i18n.rb +36 -0
- data/lib/sorting_table_for/table_builder.rb +366 -0
- data/lib/sorting_table_for/tools.rb +43 -0
- data/spec/db/database.yml +3 -0
- data/spec/db/schema.rb +20 -0
- data/spec/fixtures/user.rb +24 -0
- data/spec/helpers/builder_spec.rb +47 -0
- data/spec/helpers/cell_value_spec.rb +85 -0
- data/spec/helpers/column_spec.rb +359 -0
- data/spec/helpers/header_spec.rb +337 -0
- data/spec/helpers/i18n_spec.rb +54 -0
- data/spec/locales/test.yml +92 -0
- data/spec/locales/test_rails3.yml +92 -0
- data/spec/model/sorting_table_model_scope_spec.rb +89 -0
- data/spec/spec_helper.rb +70 -0
- metadata +89 -0
@@ -0,0 +1,337 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../fixtures/user')
|
5
|
+
|
6
|
+
include SortingTableForSpecHelper
|
7
|
+
|
8
|
+
describe SortingTableFor, :type => :helper do
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
@users = User.all
|
12
|
+
helper.stub!(:url_for).and_return('fake_link')
|
13
|
+
helper.stub!(:params).and_return({ :controller => 'fakes', :action => 'index' })
|
14
|
+
helper.output_buffer = ''
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ' #header table' do
|
18
|
+
|
19
|
+
describe ' #default usage' do
|
20
|
+
|
21
|
+
it "should works" do
|
22
|
+
helper.sorting_table_for(@users) do |table|
|
23
|
+
html = table.headers
|
24
|
+
html.should have_comp_tag("thead", :count => 1)
|
25
|
+
html.should have_comp_tag("tr", :count => 1)
|
26
|
+
html.should have_comp_tag("th", :count => 11)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should add sorting class on th" do
|
31
|
+
helper.sorting_table_for(@users) do |table|
|
32
|
+
table.headers.should have_comp_tag("th[class='cur-sort-not']", :count => 9)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have link for sorting" do
|
37
|
+
helper.sorting_table_for(@users) do |table|
|
38
|
+
table.headers.should have_comp_tag("a", :count => 9)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not sort" do
|
43
|
+
helper.sorting_table_for(@users, :sort => false) do |table|
|
44
|
+
table.headers.should_not have_comp_tag("th[class='cur-sort-not']")
|
45
|
+
table.headers.should_not have_comp_tag("a")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be customize with html" do
|
50
|
+
table_html = helper.sorting_table_for(@users, :html => { :class => 'table_class', :id => 'table_id' }) do |table|
|
51
|
+
html = table.headers(:html => { :class => 'header_class', :id => 'header_id' })
|
52
|
+
html.should have_comp_tag("tr[class=header_class][id=header_id]")
|
53
|
+
end
|
54
|
+
helper.output_buffer.concat(table_html)
|
55
|
+
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ' #custom headers' do
|
61
|
+
|
62
|
+
it "should choose one column" do
|
63
|
+
helper.sorting_table_for(@users) do |table|
|
64
|
+
table.headers(:username).should have_comp_tag("th", :count => 1)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should choose multi columns" do
|
69
|
+
helper.sorting_table_for(@users) do |table|
|
70
|
+
table.headers(:username, :price).should have_comp_tag("th", :count => 2)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should choose multi columns and one action" do
|
75
|
+
helper.sorting_table_for(@users) do |table|
|
76
|
+
table.headers(:username, :price, :actions => :edit).should have_comp_tag("th", :count => 3)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should choose multi columns and actions" do
|
81
|
+
helper.sorting_table_for(@users) do |table|
|
82
|
+
table.headers(:username, :price, :actions => [:edit, :edit_password]).should have_comp_tag("th", :count => 4)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should works with non symbol field" do
|
87
|
+
helper.sorting_table_for(@users) do |table|
|
88
|
+
html = table.headers(:username, 'test', image_tag('rails.png'))
|
89
|
+
html.should have_comp_tag("th", :count => 3)
|
90
|
+
html.should have_comp_tag("th:nth-child(2)", :text => 'test')
|
91
|
+
html.should have_comp_tag("th:nth-child(3) img")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should works with non key symbol" do
|
96
|
+
helper.sorting_table_for(@users) do |table|
|
97
|
+
table.headers(:username, :test).should have_comp_tag("th", :count => 2)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should works with i18n for symbol" do
|
102
|
+
helper.sorting_table_for(@users) do |table|
|
103
|
+
html = table.headers(:username, :firstname, 'hello', :my_fake, :actions => :edit)
|
104
|
+
html.should have_comp_tag("th:nth-child(1)", :text => 'Usernames')
|
105
|
+
html.should have_comp_tag("th:nth-child(2)", :text => 'Firstnames')
|
106
|
+
html.should have_comp_tag("th:nth-child(3)", :text => 'hello')
|
107
|
+
html.should have_comp_tag("th:nth-child(4)", :text => 'Hello fake')
|
108
|
+
html.should have_comp_tag("th:nth-child(5)", :text => 'Edit users')
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
describe " #custom header" do
|
115
|
+
|
116
|
+
it "should works" do
|
117
|
+
helper.sorting_table_for(@users) do |table|
|
118
|
+
html = table.headers do
|
119
|
+
table.header(:username)
|
120
|
+
end
|
121
|
+
html.should have_comp_tag("thead", :count => 1)
|
122
|
+
html.should have_comp_tag("tr", :count => 1)
|
123
|
+
html.should have_comp_tag("th", :count => 1)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should works all value" do
|
128
|
+
helper.sorting_table_for(@users) do |table|
|
129
|
+
html = table.headers do
|
130
|
+
table.header :username
|
131
|
+
table.header :price
|
132
|
+
table.header 'test'
|
133
|
+
table.header image_tag('rails.png')
|
134
|
+
table.header I18n.t('my_test', :scope => [:fake_scope])
|
135
|
+
end
|
136
|
+
html.should have_comp_tag("th", :count => 5)
|
137
|
+
html.should have_comp_tag("th[class=cur-sort-not]", :count => 2)
|
138
|
+
html.should have_comp_tag("th:nth-child(3)", :text => 'test')
|
139
|
+
html.should have_comp_tag("th:nth-child(4) img")
|
140
|
+
html.should have_comp_tag('th:nth-child(5)', :text => 'Hello')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should be customize with html" do
|
145
|
+
table_html = helper.sorting_table_for(@users, :html => { :class => 'table_class', :id => 'table_id' }) do |table|
|
146
|
+
html = table.headers(:html => { :class => 'header_class', :id => 'header_id' }) do
|
147
|
+
table.header :username, :html => { :class => 'cell_1_class', :id => 'cell_1_id', :title => 'hello_1' }
|
148
|
+
table.header :firstname, :html => { :class => 'cell_2_class', :id => 'cell_2_id', :title => 'hello_2' }
|
149
|
+
table.header 'hello', :html => { :class => 'cell_3_class', :id => 'cell_3_id', :title => 'hello_3' }
|
150
|
+
end
|
151
|
+
html.should have_comp_tag("tr[class=header_class][id=header_id]")
|
152
|
+
html.should have_comp_tag("th:nth-child(1)[class='cell_1_class cur-sort-not'][id=cell_1_id][title=hello_1]")
|
153
|
+
html.should have_comp_tag("th:nth-child(2)[class='cell_2_class cur-sort-not'][id=cell_2_id][title=hello_2]")
|
154
|
+
html.should have_comp_tag("th:nth-child(3)[class=cell_3_class][id=cell_3_id][title=hello_3]")
|
155
|
+
end
|
156
|
+
helper.output_buffer.concat(table_html)
|
157
|
+
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should works with i18n for symbol" do
|
161
|
+
helper.sorting_table_for(@users) do |table|
|
162
|
+
html = table.headers do
|
163
|
+
table.header :username
|
164
|
+
table.header :firstname
|
165
|
+
table.header 'hello'
|
166
|
+
table.header :my_fake
|
167
|
+
table.header :action => :edit
|
168
|
+
end
|
169
|
+
html.should have_comp_tag("th:nth-child(1)", :text => 'Usernames')
|
170
|
+
html.should have_comp_tag("th:nth-child(2)", :text => 'Firstnames')
|
171
|
+
html.should have_comp_tag("th:nth-child(3)", :text => 'hello')
|
172
|
+
html.should have_comp_tag("th:nth-child(4)", :text => 'Hello fake')
|
173
|
+
html.should have_comp_tag("th:nth-child(5)", :text => 'Edit users')
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should not sort all columns" do
|
178
|
+
helper.sorting_table_for(@users, :sort => false) do |table|
|
179
|
+
html = table.headers do
|
180
|
+
table.header :username
|
181
|
+
table.header :price
|
182
|
+
end
|
183
|
+
html.should_not have_comp_tag("th[class=cur-sort-not]")
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should not sort on select columns" do
|
188
|
+
helper.sorting_table_for(@users) do |table|
|
189
|
+
html = table.headers do
|
190
|
+
table.header :username, :sort => true
|
191
|
+
table.header :price, :sort => false
|
192
|
+
end
|
193
|
+
html.should have_comp_tag("th:nth-child(1)[class=cur-sort-not]")
|
194
|
+
html.should_not have_comp_tag("th:nth-child(2)[class=cur-sort-not]")
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should not sort on select columns with global" do
|
199
|
+
helper.sorting_table_for(@users, :sort => false) do |table|
|
200
|
+
html = table.headers do
|
201
|
+
table.header :username, :sort => true
|
202
|
+
table.header :price, :sort => false
|
203
|
+
end
|
204
|
+
html.should have_comp_tag("th:nth-child(1)[class=cur-sort-not]")
|
205
|
+
html.should_not have_comp_tag("th:nth-child(2)[class=cur-sort-not]")
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
describe ' #custom sub header' do
|
212
|
+
|
213
|
+
it "should works" do
|
214
|
+
helper.sorting_table_for(@users) do |table|
|
215
|
+
html = table.headers do
|
216
|
+
table.header do
|
217
|
+
:username
|
218
|
+
end
|
219
|
+
table.header do
|
220
|
+
:firstname
|
221
|
+
end
|
222
|
+
end
|
223
|
+
html.should have_comp_tag("th", :count => 2)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should not set link for sorting" do
|
228
|
+
helper.sorting_table_for(@users) do |table|
|
229
|
+
html = table.headers do
|
230
|
+
table.header do
|
231
|
+
:username
|
232
|
+
end
|
233
|
+
end
|
234
|
+
html.should_not have_comp_tag("a")
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
it "should not add html class for sorting" do
|
239
|
+
helper.sorting_table_for(@users) do |table|
|
240
|
+
html = table.headers do
|
241
|
+
table.header do
|
242
|
+
:username
|
243
|
+
end
|
244
|
+
end
|
245
|
+
html.should_not have_comp_tag("th[class=cur-sort-not]")
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
it "should not set I18n ici" do
|
250
|
+
helper.sorting_table_for(@users) do |table|
|
251
|
+
html = table.headers do
|
252
|
+
table.header do
|
253
|
+
:username
|
254
|
+
end
|
255
|
+
table.header do
|
256
|
+
'firstname'
|
257
|
+
end
|
258
|
+
table.header do
|
259
|
+
I18n.t(:my_test, :scope => :fake_scope)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
if SortingTableFor::Tools::rails3?
|
263
|
+
html.should have_comp_tag("th:nth-child(1)", :text => '')
|
264
|
+
else
|
265
|
+
html.should have_comp_tag("th:nth-child(1)", :text => 'username')
|
266
|
+
end
|
267
|
+
html.should have_comp_tag("th:nth-child(2)", :text => 'firstname')
|
268
|
+
html.should have_comp_tag("th:nth-child(3)", :text => 'Hello')
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should be customize with html" do
|
273
|
+
table_html = helper.sorting_table_for(@users, :html => { :class => 'table_class', :id => 'table_id' }) do |table|
|
274
|
+
html = table.headers(:html => { :class => 'header_class', :id => 'header_id' }) do
|
275
|
+
table.header :html => { :class => 'cell_1_class', :id => 'cell_1_id', :title => 'hello_1' } do
|
276
|
+
:username
|
277
|
+
end
|
278
|
+
table.header :html => { :class => 'cell_2_class', :id => 'cell_2_id', :title => 'hello_2' } do
|
279
|
+
:firstname
|
280
|
+
end
|
281
|
+
table.header :html => { :class => 'cell_3_class', :id => 'cell_3_id', :title => 'hello_3' } do
|
282
|
+
'hello'
|
283
|
+
end
|
284
|
+
end
|
285
|
+
html.should have_comp_tag("tr[class=header_class][id=header_id]")
|
286
|
+
html.should have_comp_tag("th:nth-child(1)[class='cell_1_class'][id=cell_1_id][title=hello_1]")
|
287
|
+
html.should have_comp_tag("th:nth-child(2)[class='cell_2_class'][id=cell_2_id][title=hello_2]")
|
288
|
+
html.should have_comp_tag("th:nth-child(3)[class=cell_3_class][id=cell_3_id][title=hello_3]")
|
289
|
+
end
|
290
|
+
helper.output_buffer.concat(table_html)
|
291
|
+
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
292
|
+
end
|
293
|
+
|
294
|
+
end
|
295
|
+
|
296
|
+
describe ' #With editable options' do
|
297
|
+
|
298
|
+
before :each do
|
299
|
+
## Restaure default values
|
300
|
+
SortingTableFor::TableBuilder.reserved_columns = [:id, :password, :salt]
|
301
|
+
SortingTableFor::TableBuilder.default_actions = [:edit, :delete]
|
302
|
+
SortingTableFor::TableBuilder.params_sort_table = :table_sort
|
303
|
+
end
|
304
|
+
|
305
|
+
it "should edit reserved columns" do
|
306
|
+
SortingTableFor::TableBuilder.reserved_columns = [:id, :firstname, :lastname, :position, :salary, :price, :active, :created_at, :updated_at]
|
307
|
+
helper.sorting_table_for(@users) do |table|
|
308
|
+
table.headers.should have_comp_tag("th", :count => 3)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should edit params sort table" do
|
313
|
+
pending("Check if the link is edit")
|
314
|
+
SortingTableFor::TableBuilder.params_sort_table = :hello_table
|
315
|
+
helper.sorting_table_for(@users) do |table|
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
it "should edit default actions" do
|
320
|
+
SortingTableFor::TableBuilder.default_actions = [:show, :edit_password, :edit, :delete]
|
321
|
+
helper.sorting_table_for(@users) do |table|
|
322
|
+
table.headers.should have_comp_tag("th", :count => User.column_names.size + 3)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
it "should edit default actions" do
|
327
|
+
pending('check if the link is valid')
|
328
|
+
SortingTableFor::TableBuilder.default_actions = [:show, :edit_password]
|
329
|
+
helper.sorting_table_for(@users) do |table|
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
end
|
334
|
+
|
335
|
+
end
|
336
|
+
|
337
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../fixtures/user')
|
5
|
+
|
6
|
+
include SortingTableForSpecHelper
|
7
|
+
|
8
|
+
describe SortingTableFor do
|
9
|
+
describe ' #i18n' do
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
SortingTableFor::I18n.set_options({:controller => 'fakes_controller', :action => 'fake_action'}, 'user', '')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should works by default" do
|
16
|
+
SortingTableFor::I18n.set_options({}, 'user', '')
|
17
|
+
SortingTableFor::I18n.t(:test_name).should == 'i18n name'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should set default scope" do
|
21
|
+
SortingTableFor::I18n.t(:name).should == 'fake name'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not overwrite scope" do
|
25
|
+
SortingTableFor::I18n.t(:my_test, :scope => :fake_scope).should == 'Hello'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should works with i18n options" do
|
29
|
+
SortingTableFor::I18n.t(:my_test, :value => :hello).should == 'say hello'
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should set namespace scope" do
|
33
|
+
SortingTableFor::I18n.set_options({:controller => 'fakes_controller', :action => 'fake_action'}, 'user', 'fake_namespace')
|
34
|
+
SortingTableFor::I18n.t(:name).should == 'fake namespace'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should set scope with options" do
|
38
|
+
SortingTableFor::TableBuilder.i18n_default_scope = [ :action ]
|
39
|
+
SortingTableFor::I18n.t(:name).should == 'fake action'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should set scope with all options" do
|
43
|
+
SortingTableFor::TableBuilder.i18n_default_scope = [ :model, :namespace, :controller, :action ]
|
44
|
+
SortingTableFor::I18n.set_options({:controller => 'fakes_controller', :action => 'fake_action'}, 'user', 'fake_namespace')
|
45
|
+
SortingTableFor::I18n.t(:name).should == 'fake'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not replace keywords" do
|
49
|
+
SortingTableFor::TableBuilder.i18n_default_scope = [ :controller, :action, :my_add ]
|
50
|
+
SortingTableFor::I18n.t(:name).should == 'fake add'
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
test:
|
2
|
+
date:
|
3
|
+
formats:
|
4
|
+
default: "%Y-%m-%d"
|
5
|
+
short: "%b %d"
|
6
|
+
long: "%B %d, %Y"
|
7
|
+
|
8
|
+
day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
|
9
|
+
abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
|
10
|
+
|
11
|
+
month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
|
12
|
+
abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
|
13
|
+
order:
|
14
|
+
- :year
|
15
|
+
- :month
|
16
|
+
- :day
|
17
|
+
|
18
|
+
time:
|
19
|
+
formats:
|
20
|
+
default: "%a, %d %b %Y %H:%M:%S %z"
|
21
|
+
short: "%d %b %H:%M"
|
22
|
+
long: "%B %d, %Y %H:%M"
|
23
|
+
am: "am"
|
24
|
+
pm: "pm"
|
25
|
+
|
26
|
+
number:
|
27
|
+
format:
|
28
|
+
separator: "."
|
29
|
+
delimiter: ","
|
30
|
+
precision: 3
|
31
|
+
significant: false
|
32
|
+
strip_insignificant_zeros: false
|
33
|
+
|
34
|
+
currency:
|
35
|
+
format:
|
36
|
+
format: "%u%n"
|
37
|
+
unit: "$"
|
38
|
+
separator: "."
|
39
|
+
delimiter: ","
|
40
|
+
precision: 2
|
41
|
+
significant: false
|
42
|
+
strip_insignificant_zeros: false
|
43
|
+
|
44
|
+
sorting_table_for:
|
45
|
+
total_entries: "Total Entries {{value}}"
|
46
|
+
columns:
|
47
|
+
bool_true: 'True'
|
48
|
+
bool_false: 'False'
|
49
|
+
|
50
|
+
fakes:
|
51
|
+
index:
|
52
|
+
edit: 'Edit'
|
53
|
+
delete: 'Delete'
|
54
|
+
header:
|
55
|
+
username: 'Usernames'
|
56
|
+
firstname: 'Firstnames'
|
57
|
+
lastname: 'Lastnames'
|
58
|
+
position: 'Positions'
|
59
|
+
salary: 'Salary'
|
60
|
+
price: 'Prices'
|
61
|
+
active: 'Actives'
|
62
|
+
created_at: 'Created at'
|
63
|
+
updated_at: 'Updated at'
|
64
|
+
edit: 'Edit users'
|
65
|
+
delete: 'Delete users'
|
66
|
+
my_fake: 'Hello fake'
|
67
|
+
|
68
|
+
|
69
|
+
fake_scope:
|
70
|
+
my_test: 'Hello'
|
71
|
+
|
72
|
+
test_name: 'i18n name'
|
73
|
+
fakes_controller:
|
74
|
+
fake_action:
|
75
|
+
name: 'fake name'
|
76
|
+
my_test: 'say {{value}}'
|
77
|
+
my_add:
|
78
|
+
name: 'fake add'
|
79
|
+
|
80
|
+
user:
|
81
|
+
fake_namespace:
|
82
|
+
fakes_controller:
|
83
|
+
fake_action:
|
84
|
+
name: 'fake'
|
85
|
+
|
86
|
+
fake_namespace:
|
87
|
+
fakes_controller:
|
88
|
+
fake_action:
|
89
|
+
name: 'fake namespace'
|
90
|
+
|
91
|
+
fake_action:
|
92
|
+
name: 'fake action'
|