gridify 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.
@@ -0,0 +1,3 @@
1
+ sqlite3:
2
+ :adapter: sqlite3
3
+ :database: vendor/plugins/gridify/spec/db/gridify.sqlite3.db
@@ -0,0 +1,7 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :chickens, :force => true do |t|
3
+ t.column :name, :string
4
+ t.column :age, :integer
5
+ t.column :created_at, :datetime
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ include Gridify
3
+
4
+ describe "Grid column model" do
5
+
6
+ def new_grid( options={} )
7
+ @grid = Grid.new( Chicken, options )
8
+ end
9
+
10
+ #------------------------------
11
+ it "should build for all attributes" do
12
+ new_grid
13
+ names = @grid.columns.map {|col| col.name}
14
+ names.should == ['id', 'name', 'age', 'created_at']
15
+ end
16
+
17
+ it "should handle :except option" do
18
+ new_grid :except => 'age'
19
+ names = @grid.columns.map {|col| col.name}
20
+ names.should_not include('age')
21
+ end
22
+
23
+ it "should handle :only option" do
24
+ new_grid :only => ['id', 'age']
25
+ names = @grid.columns.map {|col| col.name}
26
+ names.should_not include('name')
27
+ names.should include('age')
28
+ end
29
+
30
+ it "should support searchable per model" do
31
+ new_grid :searchable => false
32
+ @grid.columns.each do |col|
33
+ col.to_json.should include('"search": false')
34
+ end
35
+ end
36
+
37
+ it "should support editable per model" do
38
+ new_grid :editable => true
39
+ @grid.columns.each do |col|
40
+ unless col.key
41
+ col.to_json.should include('"editable": true')
42
+ end
43
+ end
44
+ end
45
+
46
+ it "should support sortable per model" do
47
+ new_grid :sortable => false
48
+ @grid.columns.each do |col|
49
+ col.to_json.should include('"sortable": false')
50
+ end
51
+ end
52
+
53
+ #it "should support default column widths"
54
+
55
+ it 'should get column_names' do
56
+ new_grid
57
+ @grid.column_names.should == ['Id', 'Name', 'Age', 'Created At']
58
+ end
59
+
60
+ it "should generate column_model" do
61
+ new_grid
62
+ @grid.columns[0].properties.should == {:name => "id", :label => "Id", :index => "id", :align => "right", :sorttype => "integer", :hidden => true}
63
+ @grid.columns[1].properties.should == {:name => "name", :label => "Name", :index => "name", :sorttype => "text" }
64
+ @grid.columns[2].properties.should == {:name => "age", :label => "Age", :index => "age", :align => "right", :sorttype => "integer"}
65
+ @grid.columns[3].properties.should == {:name => "created_at", :label => "Created At", :index => "created_at", :sorttype => "date", :formatter=>"date", :formatoptions=>{:newformat=>"FullDateTime", :srcformat=>"UniversalSortableDateTime"} }
66
+ end
67
+
68
+ it "should set current visiblity"
69
+ it "should set current width"
70
+ it "should set current column order"
71
+
72
+ end
@@ -0,0 +1,192 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ include Gridify
3
+
4
+ describe "Grid finder" do
5
+
6
+ def new_grid( options={} )
7
+ @grid = Grid.new( Chicken, options )
8
+ end
9
+
10
+ def params( p={} )
11
+ # this is like what we get in a request for grid with all default options
12
+ {
13
+ "controller"=>"chickens",
14
+ "action"=>"index",
15
+ "grid"=>"grid",
16
+ "nd"=>"1261595921149",
17
+ "page"=>"1",
18
+ "rows"=>"-1",
19
+ "sidx"=>"",
20
+ "sord"=>"asc",
21
+ "_search"=>"false"
22
+ }.merge( p )
23
+ end
24
+
25
+ describe "params" do
26
+ it "should process sort" do
27
+ new_grid :sortable => true
28
+ @grid.update_from_params params(
29
+ "sidx"=>"age",
30
+ "sord"=>"desc"
31
+ )
32
+ @grid.sort_by.should == 'age'
33
+ @grid.sort_order.should == 'desc'
34
+ end
35
+
36
+ it "should process page" do
37
+ new_grid :pager => true
38
+ @grid.update_from_params params(
39
+ "page"=>"3",
40
+ "rows"=>"25"
41
+ )
42
+ @grid.current_page.should == 3
43
+ @grid.rows_per_page.should == 25
44
+ end
45
+
46
+ it "should process simple search" do
47
+ new_grid :search_button => true
48
+ @grid.update_from_params params(
49
+ "_search"=>"true",
50
+ "searchField"=>"name",
51
+ "searchOper"=>"cn",
52
+ "searchString"=>"a"
53
+ )
54
+ @grid.search_rules.should == [{ "field" => "name", "op" => "cn", "data" => "a"}]
55
+ end
56
+
57
+ it "should process multiple search" do
58
+ #debugger
59
+ new_grid :search_advanced => true
60
+ @grid.update_from_params params(
61
+ "_search"=>"true",
62
+ "filters"=> %Q^ {
63
+ "groupOp":"OR",
64
+ "rules":[
65
+ {"field":"name","op":"cn","data":"a"},
66
+ {"field":"age","op":"eq","data":"12"}
67
+ ]}^
68
+ )
69
+ @grid.search_rules.should == [
70
+ { "field" => "name", "op" => "cn", "data" => "a"},
71
+ { "field" => "age", "op" => "eq", "data" => "12"}
72
+ ]
73
+ end
74
+
75
+ it "should process toolbar search" do
76
+ new_grid :search_toolbar => true
77
+ @grid.update_from_params params(
78
+ "_search"=>"true",
79
+ "name"=>"b",
80
+ "age" => "1"
81
+ )
82
+ @grid.search_rules.should == [
83
+ { "field" => "name", "op" => "cn", "data" => "b"},
84
+ { "field" => "age", "op" => "cn", "data" => "1"}
85
+ ]
86
+ end
87
+
88
+ end
89
+
90
+ describe "find" do
91
+ before :each do
92
+ Chicken.stub!(:find)
93
+ end
94
+
95
+ it "should find" do
96
+ new_grid
97
+ Chicken.should_receive(:find).with( :all, {} )
98
+ @grid.find params
99
+ end
100
+
101
+ it "should find with paging" do
102
+ new_grid :pager => true
103
+ Chicken.should_receive(:find).with( :all, { :limit => 25, :offset => 50 })
104
+ @grid.find params( "page"=>"3", "rows"=>"25" )
105
+ end
106
+
107
+ it "should find with sort" do
108
+ new_grid :sortable => true
109
+ Chicken.should_receive(:find).with( :all, { :order => 'age desc' })
110
+ @grid.find params( "sidx"=>"age", "sord"=>"desc" )
111
+ end
112
+
113
+ it "should find with search" do
114
+ # just do toolbar search, others tested above anyway
115
+ new_grid :search_toolbar => true
116
+ Chicken.should_receive(:find).with( :all, { :conditions => ["name LIKE ?", "%b%"] })
117
+ @grid.find params( "_search"=>true, "name"=>"b" )
118
+ end
119
+ end
120
+
121
+ describe "encode" do
122
+ before :each do
123
+ @records = [
124
+ Chicken.create( :name => 'Achick', :age => 10 ),
125
+ Chicken.create( :name => 'Bchick', :age => 20 )
126
+ ]
127
+ end
128
+
129
+ it "should encode xml" do
130
+ new_grid :pager => true, :current_page => 1, :data_type => :xml
131
+ xml = @grid.encode_records @records
132
+ xml.should == %Q^<?xml version="1.0" encoding="UTF-8"?>
133
+ <chickens>
134
+ <page>1</page>
135
+ <total_pages>1</total_pages>
136
+ <total_records>2</total_records>
137
+ <chicken>
138
+ <age>10</age>
139
+ <created_at>#{@records[0].created_at.iso8601}</created_at>
140
+ <id>1</id>
141
+ <name>Achick</name>
142
+ </chicken>
143
+ <chicken>
144
+ <age>20</age>
145
+ <created_at>#{@records[1].created_at.iso8601}</created_at>
146
+ <id>2</id>
147
+ <name>Bchick</name>
148
+ </chicken>
149
+ </chickens>
150
+ ^
151
+ end
152
+
153
+ it "should encode json" do
154
+ new_grid :pager => true, :current_page => 1, :data_type => :json
155
+ json = @grid.encode_records @records
156
+ # json.should == %Q^{"total_records": 2, "page": 1, \
157
+ # "chickens": [\
158
+ # {"chicken": {"name": "Achick", "created_at": "#{@records[0].created_at.iso8601}", "id": 1, "age": 10}}, \
159
+ # {"chicken": {"name": "Bchick", "created_at": "#{@records[1].created_at.iso8601}", "id": 2, "age": 20}}\
160
+ # ], \
161
+ # "total_pages": 1}^
162
+ json.should include('"total_records": 2')
163
+ json.should include('"page": 1')
164
+ json.should include('"total_pages": 1')
165
+ json.should include(
166
+ %Q^"chickens": [\
167
+ {"name": "Achick", "created_at": "#{@records[0].created_at.iso8601}", "id": 1, "age": 10}, \
168
+ {"name": "Bchick", "created_at": "#{@records[1].created_at.iso8601}", "id": 2, "age": 20}\
169
+ ]^)
170
+ end
171
+
172
+ end
173
+
174
+
175
+ describe "member_params" do
176
+ it "should collect attributes" do
177
+ new_grid
178
+ p = params(
179
+ "name" => 'Aaa',
180
+ "age" => '11'
181
+ )
182
+ @grid.member_params(p).should == { "name" => 'Aaa', "age" => '11'}
183
+ end
184
+ end
185
+
186
+ #describe "create"
187
+
188
+ #describe "update"
189
+
190
+ #describe "delete"
191
+
192
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ include Gridify
4
+
5
+ describe 'Grid' do
6
+
7
+ it "should create with default name :grid" do
8
+ grid = Grid.new( Chicken )
9
+ grid.name.should == :grid
10
+ end
11
+
12
+ it "should create with given name" do
13
+ grid = Grid.new( Chicken, :mygrid )
14
+ grid.name.should == :mygrid
15
+ end
16
+
17
+ it "should block eval" do
18
+ grid = Grid.new Chicken do |g|
19
+ g.width = 450
20
+ end
21
+ grid.width.should == 450
22
+ end
23
+
24
+ describe "column method" do
25
+ it "should modify existing columns"
26
+
27
+ it "should create columns" do
28
+ grid = Grid.new Chicken do |g|
29
+ g.column 'foo', :label => "FOOBAR"
30
+ end
31
+ col = grid.columns_hash['foo']
32
+ col.should_not be_nil
33
+ col.name.should == 'foo'
34
+ col.label.should == 'FOOBAR'
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,423 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ include Gridify
3
+
4
+ describe "Grid view" do
5
+
6
+ def new_grid( options={} )
7
+ @grid = Grid.new( Chicken, { :build_model => false }.merge(options) )
8
+ end
9
+
10
+ #------------------------------
11
+ describe 'default Grid view' do
12
+ before :each do
13
+ new_grid
14
+ end
15
+
16
+ describe "to_json" do
17
+ it "should generate default json" do
18
+ json = @grid.to_json
19
+ @grid.to_json.should include('"gridview": true')
20
+ @grid.to_json.should include('"autowidth": true')
21
+ @grid.to_json.should include('"forceFit": true')
22
+ @grid.to_json.should include('"hoverrows": false')
23
+ @grid.to_json.should include('"url": "/chickens"')
24
+ @grid.to_json.should include('"restful": true')
25
+ end
26
+
27
+ it "should extract embedded javascript:" do
28
+ json = @grid.to_json
29
+ @grid.to_json.should include('"resizeStop": gridify_fluid_recalc_width')
30
+ @grid.to_json.should include('"beforeSelectRow": function(){ false; }')
31
+ end
32
+ end
33
+
34
+ describe "to_javascript" do
35
+ it "should generate javascript" do
36
+ @grid.to_javascript.should include('<script type="text/javascript">')
37
+ @grid.to_javascript.should include('jQuery(document).ready(function(){')
38
+ @grid.to_javascript.should include('jQuery("#chickens_grid").jqGrid')
39
+ end
40
+ it "should generate javascript without script tag" do
41
+ @grid.to_javascript(:script => false).should_not include('<script type="text/javascript">')
42
+ end
43
+ it "should generate javascript without document ready" do
44
+ @grid.to_javascript(:ready => false).should_not include('jQuery(document).ready(function(){')
45
+ end
46
+ it "should generate table_to_grid" do
47
+ @grid = Grid.new( Chicken, :table_to_grid => true )
48
+ @grid.to_javascript.should include('tableToGrid("#chickens_grid",')
49
+ end
50
+ end
51
+
52
+ describe "to_s" do
53
+ it "should be same as to_javascript" do
54
+ @grid.should_receive(:to_javascript)
55
+ @grid.to_s
56
+ end
57
+ end
58
+
59
+ describe "dom_id" do
60
+ it "should default to resource_name" do
61
+ @grid.dom_id.should == "chickens_grid"
62
+ end
63
+ end
64
+ end
65
+
66
+ #------------------------------
67
+ describe "native jqgrid_options" do
68
+ it "should override any other set options" do
69
+ new_grid :jqgrid_options => { :gridview => false }
70
+ @grid.to_json.should include('"gridview": false')
71
+ end
72
+
73
+ it "should set options not handled by Gridify" do
74
+ new_grid :jqgrid_options => { :direction => 'rtl' }
75
+ @grid.to_json.should include('"direction": "rtl"')
76
+ end
77
+ end
78
+
79
+ #------------------------------
80
+ describe "width and height options" do
81
+
82
+ it "should be :width_fit => :fluid by default" do
83
+ new_grid
84
+ @grid.width_fit.should == :fluid
85
+ end
86
+
87
+ it "should set :width_fit => :fluid" do
88
+ new_grid :width_fit => :fluid
89
+ @grid.to_json.should include('"autowidth": true')
90
+ @grid.to_json.should include('"forceFit": true')
91
+ # recalc width after resizing columns
92
+ @grid.to_json.should include('"resizeStop": gridify_fluid_recalc_width')
93
+ # tag the grid as fluid for the gridify_fluid_recalc_width function
94
+ @grid.to_javascript.should include('.addClass("fluid")' )
95
+ # include the recalc function
96
+ @grid.to_javascript.should include('function gridify_fluid_recalc_width(){')
97
+ end
98
+
99
+ it "should set :width in pixels" do
100
+ new_grid :width => 400, :width_fit => :scroll
101
+ @grid.to_json.should include('"width": 400')
102
+ end
103
+
104
+ it "should set :width_fit => :scroll" do
105
+ new_grid :width_fit => :scroll
106
+ @grid.to_json.should include('"shrinkToFit": false')
107
+ end
108
+
109
+ it "should set :width_fit => :fitted" do
110
+ new_grid :width_fit => :fitted
111
+ @grid.to_json.should include('"forceFit": true')
112
+ end
113
+
114
+ it "should set height in pixels or :auto" do
115
+ new_grid :height => 400
116
+ @grid.to_json.should include('"height": 400')
117
+
118
+ new_grid :height => :auto
119
+ @grid.to_json.should include('"height": "auto"')
120
+ end
121
+
122
+ it "should set :resizable => true width and height" do
123
+ new_grid :width_fit => :fitted, :resizable => true
124
+ # min width and height
125
+ @grid.resizable.should include( "minWidth" => 150, "minHeight" => 80 )
126
+ # set via method
127
+ @grid.to_javascript.should include(".jqGrid('gridResize', {")
128
+ end
129
+
130
+ it "should set resizable height only when is fluid" do
131
+ new_grid :width_fit => :fluid, :resizable => true
132
+ @grid.resizable.should include( "handles" => 's' )
133
+ end
134
+
135
+ it "should set resizable => new minimums" do
136
+ new_grid :resizable => {"minWidth" => 200, "minHeight" => 250}
137
+ # min width and height
138
+ @grid.resizable.should include( "minWidth" => 200, "minHeight" => 250 )
139
+ end
140
+
141
+ end
142
+
143
+ #------------------------------
144
+ describe "header options" do
145
+ it "should set default title to model class pluralized" do
146
+ new_grid :title => true
147
+ @grid.to_json.should include('"caption": "Chickens"')
148
+ end
149
+
150
+ it "should set title given" do
151
+ new_grid :title => "My Little Chickens"
152
+ @grid.to_json.should include('"caption": "My Little Chickens"')
153
+ end
154
+
155
+ it "should set title blank when false and theres a header" do
156
+ new_grid :collapsible => true, :title => false
157
+ @grid.to_json.should include('"caption": "&nbsp;"')
158
+ end
159
+
160
+ it "should set not collapsible by default" do
161
+ new_grid :title => true
162
+ @grid.to_json.should include('"hidegrid": false')
163
+ end
164
+
165
+ it "should set collapsible" do
166
+ new_grid :collapsible => true
167
+ @grid.to_json.should_not include('"hidegrid": false') #default is true
168
+ end
169
+
170
+ it "should set collapsed state" do
171
+ new_grid :collapsed => true
172
+ @grid.to_json.should include('"hiddengrid": true')
173
+ end
174
+ end
175
+
176
+ #------------------------------
177
+ describe "pager options" do
178
+
179
+ it "should set pager with id {dom_id}_pager" do
180
+ new_grid :pager => true
181
+ @grid.to_json.should include('"pager": "#chickens_grid_pager"')
182
+ end
183
+
184
+ it "should set pager with id given" do
185
+ new_grid :pager => 'other_pgr'
186
+ @grid.to_json.should include('"pager": "#other_pgr"')
187
+ end
188
+
189
+ it "should set paging_choices default" do
190
+ new_grid :pager => true
191
+ @grid.to_json.should include('"rowList": [10, 25, 50, 100]')
192
+ end
193
+
194
+ it "should set paging_choices given" do
195
+ new_grid :pager => true, :paging_choices => [25, 50, 150]
196
+ @grid.to_json.should include('"rowList": [25, 50, 150]')
197
+ end
198
+
199
+ it "should set to hide paging_controls when false" do
200
+ new_grid :pager => true, :paging_controls => false
201
+ @grid.to_json.should include('"rowList": []')
202
+ @grid.to_json.should include('"pgbuttons": false')
203
+ @grid.to_json.should include('"pginput": false')
204
+ end
205
+
206
+ it "should override paging_controls when given" do
207
+ new_grid :pager => true, :paging_controls => { :pgbuttons => false }
208
+ @grid.to_json.should include('"pgbuttons": false')
209
+ @grid.to_json.should_not include('"pginput":') #to assert not like paging_controls => false
210
+ end
211
+
212
+ it "should display records count text" do
213
+ new_grid :pager => true
214
+ @grid.to_json.should include('"viewrecords": true')
215
+ end
216
+
217
+ it "should not display page number when paging_controls false" do
218
+ new_grid :pager => true, :paging_controls => false
219
+ @grid.to_json.should include('"recordtext": "{2} records"')
220
+ end
221
+ end
222
+
223
+ #------------------------------
224
+ describe "columns arranger" do
225
+ it "should set :arranger => :sortable to allow sortable with mouse" do
226
+ new_grid :arranger => :sortable
227
+ @grid.to_json.should include('"sortable": true')
228
+ end
229
+
230
+ it "should set :arranger => :hide_show a pager button for setColumns" do
231
+ new_grid :arranger => :hide_show
232
+ @grid.to_javascript.should include("navButtonAdd")
233
+ @grid.to_javascript.should include("setColumns")
234
+ # with this, we'll assume the actual js is there
235
+ end
236
+
237
+ it "should set :arranger => [:sortable, :hide_show]" do
238
+ new_grid :arranger => [:sortable, :hide_show]
239
+ @grid.to_json.should include('"sortable": true')
240
+ @grid.to_javascript.should include("navButtonAdd")
241
+ @grid.to_javascript.should include("setColumns")
242
+ end
243
+
244
+ it "should set :arranger => :chooser" do
245
+ new_grid :arranger => :chooser
246
+ @grid.to_javascript.should include("navButtonAdd")
247
+ @grid.to_javascript.should include("remapColumns")
248
+ # with this, we'll assume the actual js is there
249
+ end
250
+
251
+ it "should set jqGrid native options when hash values" do
252
+ new_grid :arranger => {:hide_show => {:title => "Use checkbox for column visiblity"}}
253
+ @grid.to_javascript.should include('"title": "Use checkbox for column visiblity"') #not a wonderful test but something
254
+ end
255
+ end
256
+
257
+ #------------------------------
258
+ describe "rows" do
259
+ it "should set alt_rows => true with default class" do
260
+ new_grid :alt_rows => true
261
+ @grid.to_json.should include('"altrows": true')
262
+ end
263
+
264
+ it "should set alt_rows => css class" do
265
+ new_grid :alt_rows => 'odd'
266
+ @grid.to_json.should include('"altrows": true')
267
+ @grid.to_json.should include('"altclass": "odd"')
268
+ end
269
+
270
+ it "should set row_numbers => true with default width" do
271
+ new_grid :row_numbers => true
272
+ @grid.to_json.should include('"rowNumbers": true')
273
+ end
274
+
275
+ it "should set row_numbers => nn to set width" do
276
+ new_grid :row_numbers => 24
277
+ @grid.to_json.should include('"rowNumbers": true')
278
+ @grid.to_json.should include('"rownumWidth": 24')
279
+ end
280
+
281
+ it "should set select_rows => false by default" do
282
+ new_grid
283
+ @grid.select_rows.should be_nil
284
+ end
285
+
286
+ it "should set select_rows => true when pager buttons for show, edit, or delete enabled"
287
+
288
+ it "should set select_rows => javascript"
289
+
290
+
291
+ end
292
+ #------------------------------
293
+ describe "nav buttons" do
294
+ it "edit_button => true with default action parameters" do
295
+ new_grid :pager => true, :edit_button => true
296
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
297
+ @grid.to_javascript.should include('"edit": true')
298
+ #:reloadAfterSubmit => false, :closeAfterEdit => true
299
+ end
300
+
301
+ it "add_button => true with default action parameters" do
302
+ new_grid :pager => true, :add_button => true
303
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
304
+ @grid.to_javascript.should include('"add": true')
305
+ #:reloadAfterSubmit => false, :closeAfterEdit => true
306
+ end
307
+
308
+ it "delete_button => true with default action parameters" do
309
+ new_grid :pager => true, :delete_button => true
310
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
311
+ @grid.to_javascript.should include('"del": true')
312
+ #:reloadAfterSubmit => false
313
+ end
314
+
315
+ it "search_button => true with default action parameters" do
316
+ new_grid :pager => true, :search_button => true
317
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
318
+ @grid.to_javascript.should include('"search": true')
319
+ end
320
+
321
+ it "view_button => true with default action parameters" do
322
+ new_grid :pager => true, :view_button => true
323
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
324
+ @grid.to_javascript.should include('"view": true')
325
+ end
326
+ # it "view_button => " do
327
+ # new_grid :pager => true, :show_button => {}
328
+ # @grid.to_json.should include('.navGrid("#chicken_grid_pager"')
329
+ # @grid.to_json.should include('view:true')
330
+ # end
331
+
332
+ it "refresh_button" do
333
+ new_grid :pager => true, :refresh_button => true
334
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
335
+ @grid.to_javascript.should include('"refresh": true')
336
+ end
337
+ end
338
+
339
+ #------------------------------
340
+ describe "search" do
341
+ it "should set search_toolbar" do
342
+ new_grid :search_toolbar => true
343
+ @grid.to_javascript.should include("filterToolbar")
344
+ # test lacks details
345
+ end
346
+ end
347
+
348
+ #------------------------------
349
+ describe "data" do
350
+ it "should set url to REST route based on resource" do
351
+ new_grid
352
+ @grid.to_json.should include('"url": "/chickens"')
353
+ end
354
+
355
+ it "should enable restful requests" do
356
+ new_grid
357
+ @grid.to_json.should include('"restful": true')
358
+ end
359
+
360
+ it "should set data_type" do
361
+ new_grid :data_type => :json
362
+ @grid.to_json.should include('"datatype": "json"')
363
+ end
364
+
365
+ it "should set data_format" do
366
+ new_grid :data_format => {:root => 'ducks', :page => 'ducks>page', :total => 'ducks>total_pages', :records => 'ducks>total_records', :row => 'duck', :repeatitems => :false, :id => :id}
367
+
368
+ #@grid.to_json.should include('"xmlReader": {"records": "ducks>total_records", "row": "duck", "repeatitems": "false", "root": "ducks", "page": "ducks>page", "id": "id", "total": "ducks>total_pages"}')
369
+ @grid.to_json.should include('xmlReader')
370
+ end
371
+
372
+ it "should omit data_format when false" do
373
+ new_grid :data_format => false
374
+ @grid.to_json.should_not include('xmlReader')
375
+ end
376
+
377
+ it "should set sort_by for next request" do
378
+ new_grid :sort_by => :body
379
+ @grid.to_json.should include('"sortname": "body"')
380
+ end
381
+
382
+ it "should set sort_order direction for next request" do
383
+ new_grid :sort_by => :body, :sort_order => :desc
384
+ @grid.to_json.should include('"sortorder": "desc"')
385
+ end
386
+
387
+ describe "rows_per_page" do
388
+ it "should set rows_per_page for next request" do
389
+ new_grid :pager => true, :rows_per_page => 18
390
+ @grid.to_json.should include('"rowNum": 18')
391
+ end
392
+ it "should set rows_per_page to false for no paging" do
393
+ new_grid :pager => true, :rows_per_page => false
394
+ @grid.to_json.should include('"rowNum": -1')
395
+ end
396
+ it "should set rows_per_page to false when no pager" do
397
+ new_grid
398
+ @grid.to_json.should include('"rowNum": -1')
399
+ end
400
+ it "should set rows_per_page to false when no pager controls" do
401
+ new_grid :pager => true, :paging_controls => false
402
+ @grid.to_json.should include('"rowNum": -1')
403
+ end
404
+ end
405
+
406
+ it "should set load_once" do
407
+ new_grid :load_once => true
408
+ @grid.to_json.should include('"loadonce": true')
409
+ end
410
+
411
+ it "should include grid name in requests" do
412
+ new_grid
413
+ @grid.to_json.should include('"postData": {"grid": "grid"}')
414
+ mygrid = Grid.new( Chicken, :mygrid )
415
+ mygrid.to_json.should include('"postData": {"grid": "mygrid"}')
416
+ end
417
+
418
+ it "should set col_names"
419
+ it "should set col_model"
420
+ end
421
+ #------------------------------
422
+
423
+ end