gridify 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +3 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +26 -0
- data/README.rdoc +264 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/autotest/discover.rb +5 -0
- data/init.rb +1 -0
- data/lib/gridify.rb +44 -0
- data/lib/gridify/assertions.rb +37 -0
- data/lib/gridify/grid.rb +149 -0
- data/lib/gridify/grid_column.rb +121 -0
- data/lib/gridify/grid_finder.rb +197 -0
- data/lib/gridify/grid_options.rb +261 -0
- data/lib/gridify/grid_view.rb +346 -0
- data/spec/db/database.yml +3 -0
- data/spec/db/gridify.sqlite3.db +0 -0
- data/spec/db/schema.rb +7 -0
- data/spec/grid_column_spec.rb +72 -0
- data/spec/grid_finder_spec.rb +192 -0
- data/spec/grid_spec.rb +38 -0
- data/spec/grid_view_spec.rb +423 -0
- data/spec/gridify_spec.rb +34 -0
- data/spec/spec_helper.rb +20 -0
- data/tasks/gridify_tasks.rake +4 -0
- metadata +137 -0
Binary file
|
data/spec/db/schema.rb
ADDED
@@ -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
|
data/spec/grid_spec.rb
ADDED
@@ -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": " "')
|
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
|