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.
- 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
|