jqgrid_for_rails 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZmIyYjQyZjRjOWQ4MmRmMzJlODVjOTQ3OGExZDQzNTI4NTVhNDViOQ==
5
+ data.tar.gz: !binary |-
6
+ NTFhODFhYzgwZjkwZTVmYzU0YjQ0MzlhMTg4MzlmYWM4MDcyY2JlNA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YjM5NjhmZDA5MjEwMDM4MjI3MzU0NmE4Y2U3NmM5MmE1MWRmYmIxMWM1Nzhh
10
+ MDI3YzczNzM3ZDMxZTBmN2MwMjM5MmJlYTNjNDJlNTk3M2Q4MjhhMmIwNjM1
11
+ MzNmOGU2ZGNkZGM1ODM4NDAxNWYyOWQyYjg1Mjk2ZTcxODNhMTQ=
12
+ data.tar.gz: !binary |-
13
+ MjFkYzQ2YTk1MzY4NWIxNTQ3NDFlNzYzYWRhZjQ5NTA1ZjFiNmI2NWRjMTgy
14
+ ZGU5NTY3YzlhMjViZDAzMTNkZGUyZDk5Yjk3ODQ5ZjRhZjBjNWE5Mzc1ZTA0
15
+ NzBmN2RlYmRjNTY0MTkwOTdiNmZjYTExYjQ5NTY4YjY3MDUxMDM=
@@ -1,3 +1,16 @@
1
+ == 1.0.2
2
+
3
+ * enhancements
4
+ * Support joins and includes in column names.
5
+ * A proc is now accepted by id_column option in json_for_jqgrid method.
6
+ * Allow the column name in the 'order_by' helper to be quoted.
7
+ * View helpers are now tested using ActionView::TestCase.
8
+ * col_model_for_jqgrid is moved from controller helpers to view helpers.
9
+ * :format option added to json_for_jqgrid helper.
10
+
11
+ * bug fixes
12
+ * Fixes issue when using id_column in json_for_jqgrid method.
13
+
1
14
  == 1.0.1
2
15
 
3
16
  * enhancements
@@ -111,39 +111,23 @@ You can do it better using +content_for+ in the view:
111
111
 
112
112
  Don't forget to include the jquery and jqgrid javascript and stylesheet files!
113
113
 
114
- == Controllers
115
-
116
- There are convenient methods available in the controllers
117
-
118
114
  === col_model_for_jqgrid
119
115
 
120
- This method easily creates an array to be used as col_model.
116
+ This helper easily creates an array to be used as col_model.
121
117
 
122
118
  col_model_for_jqgrid(['inv_date', 'total' ], {:width => 100})
123
119
 
124
120
  #=> [{:name=>"inv_date", :index=>"inv_date", :width=>100}, {:name=>"total", :index=>"total", :width=>100}]
125
121
 
126
122
 
127
- So, in the controller:
128
-
129
- # app/controllers/invoices_controller.rb
130
-
131
- class InvoicesController < ApplicationController
132
-
133
- def show
134
- @col_model = col_model_for_jqgrid(['inv_date', 'total' ], {:width => 180})
135
- end
136
- end
137
-
138
-
139
- And then you can use it when creating the grid in the helper:
123
+ So you you can use it when creating the grid in the helper:
140
124
 
141
125
  grid = [{
142
126
  :url => '/invoices',
143
127
  :datatype => 'json',
144
128
  :mtype => 'GET',
145
129
  :colNames => ['Inv No','Date'],
146
- :colModel => @col_model,
130
+ :colModel => col_model_for_jqgrid(['Inv No','Date']),
147
131
  :pager => '#invoices_pager',
148
132
  :rowNum => 10,
149
133
  :rowList => [10, 20, 30],
@@ -153,6 +137,10 @@ And then you can use it when creating the grid in the helper:
153
137
 
154
138
  jqgrid_api 'invoices_list', grid
155
139
 
140
+ == Controllers
141
+
142
+ There are convenient methods available in the controllers
143
+
156
144
  === json_for_jqgrid
157
145
 
158
146
  This method generates the json response for the grid. It takes the records found by the +paginate+ method offered by will_paginate[https://github.com/mislav/will_paginate].
@@ -107,6 +107,47 @@ module JqgridsHelper
107
107
  end
108
108
  end
109
109
 
110
+ # Returns an array to be used as col_model for the grid where each item
111
+ # is a hash for each column. Each hash will have at least two keys by
112
+ # default, the +name+ and the +index+, whose values will be the name of
113
+ # the column. Other keys will be included if present in the +options+
114
+ # hash.
115
+ #
116
+ # * +columns+ - Array with the name of the columns to include in the
117
+ # col_model.
118
+ #
119
+ # ==== Options
120
+ #
121
+ # Every item in the options hash will be a property in the col_model for
122
+ # every column, unless the item is also a hash, where only will be included
123
+ # in the specified columns. An item can be also a Proc, that will be called
124
+ # passing +columns+ as parameter.
125
+ #
126
+ # ==== Examples
127
+ #
128
+ # col_model_for_jqgrid(['inv_date', 'total' ])
129
+ #
130
+ # #=> [{:name=>"inv_date", :index=>"inv_date"}, {:name=>"total", :index=>"total"}]
131
+ #
132
+ # col_model_for_jqgrid(['inv_date', 'total' ], {:width => 100})
133
+ #
134
+ # #=> [{:name=>"inv_date", :index=>"inv_date", :width=>100}, {:name=>"total", :index=>"total", :width=>100}]
135
+ #
136
+ # col_model_for_jqgrid(['inv_date', 'total'], {:width => {'inv_date' => 100}})
137
+ #
138
+ # #=> [{:name => 'inv_date', :index => 'inv_date', :width => 100}, {:name => 'total', :index => 'total'}]
139
+ #
140
+ # col_model_for_jqgrid(['inv_date'], {:prop => Proc.new {|c| c.camelize}})
141
+ #
142
+ # #=> [{:name => 'inv_date', :index => 'inv_date', :prop => 'InvDate'}]
143
+ #
144
+ def col_model_for_jqgrid columns, options = {}
145
+ columns.map do |c|
146
+ h = {:name => c, :index => c}
147
+ h.merge property_from_options(c, options)
148
+ end
149
+ end
150
+
110
151
  private
111
152
 
112
153
  def wrap_with_document_ready! str
@@ -117,5 +158,20 @@ private
117
158
  str.replace("<script>\n#{str}\n</script>")
118
159
  end
119
160
 
161
+ def property_from_options col_name, options
162
+ h = {}
163
+ options.each do |k, v|
164
+ case v.class.to_s
165
+ when "Proc"
166
+ h[k] = v.call(col_name)
167
+ when "Hash"
168
+ h[k] = v[col_name] if v.has_key?(col_name)
169
+ else
170
+ h[k] = v
171
+ end
172
+ end
173
+ h
174
+ end
175
+
120
176
  end
121
177
 
@@ -3,46 +3,12 @@ module JqgridForRails
3
3
  # Those helpers are convenience methods added to ApplicationController.
4
4
  module Helpers
5
5
 
6
- # Returns an array to be used as col_model for the grid where each item
7
- # is a hash for each column. Each hash will have at least two keys by
8
- # default, the +name+ and the +index+, whose values will be the name of
9
- # the column. Other keys will be included if present in the +options+
10
- # hash.
11
- #
12
- # * +columns+ - Array with the name of the columns to include in the
13
- # col_model.
14
- #
15
- # ==== Options
16
- #
17
- # Every item in the options hash will be a property in the col_model for
18
- # every column, unless the item is also a hash, where only will be included
19
- # in the specified columns. An item can be also a Proc, that will be called
20
- # passing +columns+ as parameter.
21
- #
22
- # ==== Examples
23
- #
24
- # col_model_for_jqgrid(['inv_date', 'total' ])
25
- #
26
- # #=> [{:name=>"inv_date", :index=>"inv_date"}, {:name=>"total", :index=>"total"}]
27
- #
28
- # col_model_for_jqgrid(['inv_date', 'total' ], {:width => 100})
29
- #
30
- # #=> [{:name=>"inv_date", :index=>"inv_date", :width=>100}, {:name=>"total", :index=>"total", :width=>100}]
31
- #
32
- # col_model_for_jqgrid(['inv_date', 'total'], {:width => {'inv_date' => 100}})
33
- #
34
- # #=> [{:name => 'inv_date', :index => 'inv_date', :width => 100}, {:name => 'total', :index => 'total'}]
35
- #
36
- # col_model_for_jqgrid(['inv_date'], {:prop => Proc.new {|c| c.camelize}})
37
- #
38
- # #=> [{:name => 'inv_date', :index => 'inv_date', :prop => 'InvDate'}]
39
- #
6
+ # DEPRECATED! Moved to jqgrids_helper.rb
40
7
  def col_model_for_jqgrid columns, options = {}
41
8
  columns.map do |c|
42
9
  h = {:name => c, :index => c}
43
10
  h.merge property_from_options(c, options)
44
11
  end
45
-
46
12
  end
47
13
 
48
14
  # Returns a json string ready to be sent to a jqgrid component.
@@ -55,7 +21,9 @@ module JqgridForRails
55
21
  # ==== Options
56
22
  #
57
23
  # * <tt>:id_column</tt> - Says which is the column that should be used as
58
- # the row id.
24
+ # the row id. This should a be the column name, but it can also be a
25
+ # Proc, in which case the record will be passed to the proc. See examples
26
+ # for more info.
59
27
  #
60
28
  # * <tt>:id_prefix</tt> - If specified, the +column_id+ option will be
61
29
  # concatenated to this prefix. This helps to keep the html id unique in
@@ -65,9 +33,29 @@ module JqgridForRails
65
33
  # localized with the <tt>I18n.l</tt> method. The field content must be
66
34
  # of any class accepted by the method. I.e. Time, DateTime, Date.
67
35
  #
36
+ # * <tt>:format</tt> - Says the proc and the columns where to apply it. It
37
+ # can be used to change the format of the field as well as to run any other
38
+ # code on it. If the key of the hash is not a column name but an array of
39
+ # column names, the proc is applied to all of them.
40
+ #
68
41
  # * <tt>:page</tt> - Says the page number (Deprecated. The page number is
69
42
  # now inferred from +records+.
70
43
  #
44
+ # ==== Examples
45
+ #
46
+ # records = Invoice.paginate(:page => 1)
47
+ # my_proc = Proc.new {|r| "invid_#{r.invid}" }
48
+ # json_for_jqgrid(records, ['invdate', 'amount', 'total' ], {:id_column => my_proc })
49
+ #
50
+ # # => {"rows":[{"cell":["2011-01-01T00:00:00Z",10.0,11.0],"id":"invid_1"}],"total":1,"page":1,"records":1}
51
+ #
52
+ # records = Invoice.paginate(:page => 1)
53
+ # my_format = Proc.new {|val| val + 100 }
54
+ # json_for_jqgrid(records, ['invdate', 'amount', 'total' ], {:format => { 'total' => my_format })
55
+ #
56
+ # # Because of the :format option, 100 is added to 'total' field.
57
+ # # => {"rows":[{"cell":["2011-01-01T00:00:00Z",10.0,111.0],"id":"invid_1"}],"total":2,"page":1,"records":1}
58
+ #
71
59
  def json_for_jqgrid records, columns = nil, options = {}
72
60
 
73
61
  columns ||= (records.first.attributes.keys rescue [])
@@ -83,34 +71,51 @@ module JqgridForRails
83
71
  end
84
72
 
85
73
  # Returns the 'order by' string created using the params received from the jqgrid.
74
+ # If +quote_char+ is specified, the column name used in the 'order by' clause will
75
+ # be quoted.
86
76
  #
87
77
  # ==== Example
88
78
  #
89
79
  # order_by_from_params({'sidx' => 'updated_at', 'sord' => 'asc'})
90
80
  # #=> 'updated_at asc'
91
81
  #
92
- def order_by_from_params params
93
- order_by = params['sidx'] unless params['sidx'].blank?
82
+ # order_by_from_params({'sidx' => 'updated_at', 'sord' => 'desc'}, '`')
83
+ # #=> '`updated_at` desc'
84
+ #
85
+ def order_by_from_params params, quote_char = nil
86
+ order_by = quote(params['sidx'], quote_char) unless params['sidx'].blank?
94
87
  order_by << " #{params['sord']}" if params['sord'] && order_by
95
88
  order_by
96
89
  end
97
90
 
98
91
  private
99
92
 
93
+ def quote value, quote_char
94
+ "#{quote_char}#{value}#{quote_char}"
95
+ end
96
+
100
97
  # Returns a hash with the values for a jqgrid json row.
101
98
  def row_from_record(r, columns, options)
102
- attribs = r.attributes
99
+ localize(attribs, options[:translate]) if options[:translate]
103
100
 
104
- # Localize Date, Time or DateTime fields
105
- locale_classes = [Time, Date, DateTime]
106
- if options[:translate].is_a?(Array) && I18n
107
- options[:translate].each do |col|
108
- attribs[col.to_s] = I18n.l(attribs[col.to_s]) if locale_classes.include?(attribs[col.to_s].class)
109
- end
101
+ format(attribs, options[:format]) if options[:format]
102
+
103
+ values = columns.map do |column|
104
+ column.split('.').inject(r) { |o, a| o.public_send(a) }
110
105
  end
111
106
 
112
- {:id => "#{options[:id_prefix]}#{attribs[options[:id_column]]}",
113
- :cell => attribs.values_at(*columns) }
107
+ {
108
+ :id => "#{options[:id_prefix]}#{id_column_from_options(r, options)}",
109
+ :cell => values
110
+ }
111
+ end
112
+
113
+ def id_column_from_options record, options
114
+ if options[:id_column].class.to_s == 'Proc'
115
+ options[:id_column].call(record)
116
+ else
117
+ record.attributes[options[:id_column]]
118
+ end
114
119
  end
115
120
 
116
121
  def property_from_options col_name, options
@@ -127,6 +132,30 @@ module JqgridForRails
127
132
  end
128
133
  h
129
134
  end
135
+
136
+ # Localize Date, Time or DateTime fields
137
+ def localize attribs, translate
138
+ locale_classes = [Time, Date, DateTime]
139
+ if translate.is_a?(Array) && I18n
140
+ translate.each do |col|
141
+ attribs[col.to_s] = I18n.l(attribs[col.to_s]) if locale_classes.include?(attribs[col.to_s].class)
142
+ end
143
+ end
144
+ end
145
+
146
+ # Format fields
147
+ def format attribs, format
148
+ if format.is_a?(Hash)
149
+ format.each do |col, pr|
150
+ if col.is_a?(Array)
151
+ col.each {|c| attribs[c] = pr.call(attribs[c])}
152
+ else
153
+ attribs[col] = pr.call(attribs[col])
154
+ end
155
+ end
156
+ end
157
+ end
158
+
130
159
  end
131
160
  end
132
161
  end
@@ -1,4 +1,4 @@
1
1
  module JqgridForRails
2
- VERSION = "1.0.1".freeze
2
+ VERSION = "1.0.2".freeze
3
3
  end
4
4
 
@@ -1,4 +1,4 @@
1
- require 'test/test_helper'
1
+ require 'test/test_helper'
2
2
 
3
3
  class MockController < ApplicationController
4
4
  end
@@ -31,6 +31,11 @@ class ControllerHelpersTest < ActionController::TestCase
31
31
  assert_nil @controller.order_by_from_params(params)
32
32
  end
33
33
 
34
+ test "order_by_from with quoting char" do
35
+ params = {'sidx' => 'updated_at', 'sord' => 'desc'}
36
+ assert_equal '`updated_at` desc', @controller.order_by_from_params(params, '`')
37
+ end
38
+
34
39
  test "json_for_grid with empty records result" do
35
40
  records = Invoice.paginate(:page => 1)
36
41
  json = @controller.json_for_jqgrid(records)
@@ -44,64 +49,49 @@ class ControllerHelpersTest < ActionController::TestCase
44
49
  test "json_for_grid with one record and id prefix" do
45
50
  tmp_record = Invoice.create({:invid => 1, :invdate => '2011-01-01 00:00:00', :amount => 10, :tax => 1, :total => 11, :note => '' })
46
51
  records = Invoice.paginate(:page => 1)
47
- json = @controller.json_for_jqgrid(records, ['invdate', 'amount', 'total' ], {:id_column => 'invid', :id_prefix => 'mygrid_row_'})
52
+ json = @controller.json_for_jqgrid(records, ['amount', 'total' ], {:id_column => 'invid', :id_prefix => 'mygrid_row_'})
48
53
  hash = ActiveSupport::JSON.decode(json)
49
54
  Invoice.delete(tmp_record.id)
50
- assert_equal hash["total"], 1
51
- assert_equal hash["page"], 1
52
- assert_equal hash["records"], 1
53
- assert_equal hash["rows"][0]["cell"], [Time.utc('2011-01-01 00:00:00'), 10.0, 11.0]
54
- assert_equal hash["rows"][0]["id"], "mygrid_row_1"
55
+ assert_equal 1, hash["total"]
56
+ assert_equal 1, hash["page"]
57
+ assert_equal 1, hash["records"]
58
+ assert_equal [10.0, 11.0], hash["rows"][0]["cell"]
59
+ assert_equal "mygrid_row_1", hash["rows"][0]["id"]
55
60
  end
56
61
 
57
- test "col_model_for_jqgrid should return a valid model for the grid" do
58
- columns = ['inv_date', 'amount', 'total' ]
59
- result = @controller.col_model_for_jqgrid(columns)
60
- assert_equal [
61
- {:name => 'inv_date', :index => 'inv_date'},
62
- {:name => 'amount', :index => 'amount'},
63
- {:name => 'total', :index => 'total'}
64
- ], result
65
- end
62
+ test "json_for_jqgrid with proc for id_column" do
63
+ tmp_record = Invoice.create({:invid => 1, :invdate => '2011-01-01 00:00:00', :amount => 10, :tax => 1, :total => 11, :note => '' })
64
+ records = Invoice.paginate(:page => 1)
65
+ my_proc = Proc.new { |r| "invid_#{r.invid}" }
66
+ json = @controller.json_for_jqgrid(records, ['invdate', 'amount', 'total' ], {:id_column => my_proc })
67
+ hash = ActiveSupport::JSON.decode(json)
68
+ Invoice.delete(tmp_record.id)
66
69
 
67
- test "col_model_for_jqgrid with default width for every column" do
68
- columns = ['inv_date', 'amount', 'total' ]
69
- result = @controller.col_model_for_jqgrid(columns, {:width => 100})
70
- assert_equal [
71
- {:name => 'inv_date', :index => 'inv_date', :width => 100},
72
- {:name => 'amount', :index => 'amount', :width => 100},
73
- {:name => 'total', :index => 'total', :width => 100}
74
- ], result
70
+ assert_equal 'invid_1', hash["rows"].first["id"]
75
71
  end
76
72
 
77
- test "col_model_for_jqgrid with explicity width for some columns" do
78
- columns = ['inv_date', 'amount', 'total' ]
79
- result = @controller.col_model_for_jqgrid(columns, {:width => {'inv_date' => 100, 'total' => 150}})
80
- assert_equal [
81
- {:name => 'inv_date', :index => 'inv_date', :width => 100},
82
- {:name => 'amount', :index => 'amount'},
83
- {:name => 'total', :index => 'total', :width => 150}
84
- ], result
85
- end
73
+ test "json_for_jqgrid should allow to format field with a proc" do
74
+ tmp_record = Invoice.create({:invid => 1, :invdate => '2011-01-01 00:00:00', :amount => 10, :tax => 1, :total => 11, :note => '123,456.123' })
75
+ records = Invoice.paginate(:page => 1)
76
+ my_proc = Proc.new { |r| (r.gsub(/,/, '').to_f) }
77
+ json = @controller.json_for_jqgrid(records, ['invdate', 'amount', 'total', 'note' ], {:format => {'note' => my_proc }})
78
+ hash = ActiveSupport::JSON.decode(json)
79
+ Invoice.delete(tmp_record.id)
86
80
 
87
- test "col_model_for_jqgrid with explicity property for some columns" do
88
- columns = ['inv_date', 'amount', 'total' ]
89
- result = @controller.col_model_for_jqgrid(columns, {:property_1 => {'inv_date' => 'high', 'total' => 'low'}, :property_2 => true})
90
- assert_equal [
91
- {:name => 'inv_date', :index => 'inv_date', :property_1 => 'high', :property_2 => true},
92
- {:name => 'amount', :index => 'amount', :property_2 => true},
93
- {:name => 'total', :index => 'total', :property_1 => 'low', :property_2 => true}
94
- ], result
81
+ assert_equal 123456.123, hash["rows"].first["cell"].last
95
82
  end
96
83
 
97
- test "col_model_for_jqgrid with proc as property" do
98
- columns = ['inv_date', 'amount', 'total' ]
99
- result = @controller.col_model_for_jqgrid(columns, {:property_1 => Proc.new {|c| c.camelize}})
100
- assert_equal [
101
- {:name => 'inv_date', :property_1 => 'InvDate', :index => 'inv_date'},
102
- {:name => 'amount', :property_1 => 'Amount', :index => 'amount'},
103
- {:name => 'total', :property_1 => 'Total', :index => 'total'}
104
- ], result
84
+ test "json_for_jqgrid should allow to format many fields with a proc" do
85
+ tmp_record = Invoice.create({:invid => 1, :invdate => '2011-01-01 00:00:00', :amount => 10, :tax => 1, :total => 11, :note => '123,456.123' })
86
+ records = Invoice.paginate(:page => 1)
87
+ my_proc = Proc.new { |r| (r * 2) }
88
+ json = @controller.json_for_jqgrid(records, ['invdate', 'amount', 'total', 'note' ], {:format => {['amount', 'total'] => my_proc }})
89
+ hash = ActiveSupport::JSON.decode(json)
90
+ Invoice.delete(tmp_record.id)
91
+
92
+ assert_equal 20, hash["rows"].first["cell"][1]
93
+ assert_equal 22, hash["rows"].first["cell"][2]
105
94
  end
106
95
 
96
+
107
97
  end
@@ -1,14 +1,17 @@
1
+ require "action_view/test_case"
1
2
  require File.dirname(__FILE__) + '/test_helper.rb'
2
3
 
3
4
  class MockView < ActionView::Base
4
5
  include JqgridsHelper
5
6
  end
6
7
 
7
- class JqgridsHelperTest < Test::Unit::TestCase
8
-
9
- def test_jqgrid_small
8
+ class JqgridsHelperTest < ActionView::TestCase
10
9
 
10
+ def setup
11
11
  @template = MockView.new
12
+ end
13
+
14
+ test "jqgrid small" do
12
15
 
13
16
  grid_id = 'grid_id'
14
17
  grid_options = [{:url => "/jqGridModel?model=Wine" }]
@@ -18,12 +21,9 @@ class JqgridsHelperTest < Test::Unit::TestCase
18
21
  expected << '</script>'
19
22
 
20
23
  assert_equal(expected, @template.jqgrid_api(grid_id, grid_options, {:script_tags => true}))
21
-
22
24
  end
23
25
 
24
- def test_jqgrid_medium
25
-
26
- @template = MockView.new
26
+ test "jqgrid_medium" do
27
27
 
28
28
  grid_id = 'grid_id'
29
29
  pager_id = 'gridpager'
@@ -38,23 +38,7 @@ class JqgridsHelperTest < Test::Unit::TestCase
38
38
  assert_equal(expected, @template.jqgrid_api(grid_id, grid_options, options))
39
39
  end
40
40
 
41
- def expected_grid grid_id, pager_id, options
42
-
43
- options[:script_tags] ||= true
44
-
45
- js = 'jQuery(document).ready(function() {
46
- jQuery("#' + grid_id + '").jqGrid({
47
- "pager":jQuery(\'#' + pager_id + '\')
48
- });
49
- });'
50
- js.gsub!(/\n\s+/, '')
51
- js = "<script>\n#{js}\n</script>" if options[:script_tags]
52
- js
53
-
54
- end
55
-
56
- def test_jqgrid_nav_options
57
- @template = MockView.new
41
+ test "jqgrid nav_options" do
58
42
 
59
43
  grid_id = 'grid_id'
60
44
  pager_id = 'pager_id'
@@ -69,17 +53,14 @@ class JqgridsHelperTest < Test::Unit::TestCase
69
53
  assert_equal(expected, @template.jqgrid_api(grid_id, [grid_options], [:navGrid, "##{pager_id}", {:del => true }, {}, {}, {:closeOnEscape => true}], options))
70
54
  end
71
55
 
72
- def test_pager_id_from_options
73
- @template = MockView.new
74
-
56
+ test "pager_id_from_options" do
75
57
  assert_equal 'my_pager_div', @template.send(:pager_id_from_options, {:pager => "jQuery('#my_pager_div')"})
76
58
  assert_equal 'my_pager_div', @template.send(:pager_id_from_options, {:pager => 'jQuery("#my_pager_div")'})
77
59
  assert_equal 'my_pager_div', @template.send(:pager_id_from_options, {:pager => "#my_pager_div"})
78
60
  assert_equal 'my_pager_div', @template.send(:pager_id_from_options, {:pager => "my_pager_div"})
79
61
  end
80
62
 
81
- def test_chained_functions
82
- @template = MockView.new
63
+ test "chained_functions" do
83
64
  div_id = 'my_grid'
84
65
  nav_button = [:navButtonAdd, '#pager', { :caption => 'Add'}]
85
66
  nav_separator = [:navSeparatorAdd, '#pager']
@@ -90,4 +71,71 @@ class JqgridsHelperTest < Test::Unit::TestCase
90
71
 
91
72
  end
92
73
 
74
+ test "col_model_for_jqgrid should return a valid model for the grid" do
75
+ columns = ['inv_date', 'amount', 'total' ]
76
+ result = @template.col_model_for_jqgrid(columns)
77
+ assert_equal [
78
+ {:name => 'inv_date', :index => 'inv_date'},
79
+ {:name => 'amount', :index => 'amount'},
80
+ {:name => 'total', :index => 'total'}
81
+ ], result
82
+ end
83
+
84
+ test "col_model_for_jqgrid with default width for every column" do
85
+ columns = ['inv_date', 'amount', 'total' ]
86
+ result = @template.col_model_for_jqgrid(columns, {:width => 100})
87
+ assert_equal [
88
+ {:name => 'inv_date', :index => 'inv_date', :width => 100},
89
+ {:name => 'amount', :index => 'amount', :width => 100},
90
+ {:name => 'total', :index => 'total', :width => 100}
91
+ ], result
92
+ end
93
+
94
+ test "col_model_for_jqgrid with explicity width for some columns" do
95
+ columns = ['inv_date', 'amount', 'total' ]
96
+ result = @template.col_model_for_jqgrid(columns, {:width => {'inv_date' => 100, 'total' => 150}})
97
+ assert_equal [
98
+ {:name => 'inv_date', :index => 'inv_date', :width => 100},
99
+ {:name => 'amount', :index => 'amount'},
100
+ {:name => 'total', :index => 'total', :width => 150}
101
+ ], result
102
+ end
103
+
104
+ test "col_model_for_jqgrid with explicity property for some columns" do
105
+ columns = ['inv_date', 'amount', 'total' ]
106
+ result = @template.col_model_for_jqgrid(columns, {:property_1 => {'inv_date' => 'high', 'total' => 'low'}, :property_2 => true})
107
+ assert_equal [
108
+ {:name => 'inv_date', :index => 'inv_date', :property_1 => 'high', :property_2 => true},
109
+ {:name => 'amount', :index => 'amount', :property_2 => true},
110
+ {:name => 'total', :index => 'total', :property_1 => 'low', :property_2 => true}
111
+ ], result
112
+ end
113
+
114
+ test "col_model_for_jqgrid with proc as property" do
115
+ columns = ['inv_date', 'amount', 'total' ]
116
+ result = @template.col_model_for_jqgrid(columns, {:property_1 => Proc.new {|c| c.camelize}})
117
+ assert_equal [
118
+ {:name => 'inv_date', :property_1 => 'InvDate', :index => 'inv_date'},
119
+ {:name => 'amount', :property_1 => 'Amount', :index => 'amount'},
120
+ {:name => 'total', :property_1 => 'Total', :index => 'total'}
121
+ ], result
122
+ end
123
+
124
+ private
125
+
126
+ def expected_grid grid_id, pager_id, options
127
+
128
+ options[:script_tags] ||= true
129
+
130
+ js = 'jQuery(document).ready(function() {
131
+ jQuery("#' + grid_id + '").jqGrid({
132
+ "pager":jQuery(\'#' + pager_id + '\')
133
+ });
134
+ });'
135
+ js.gsub!(/\n\s+/, '')
136
+ js = "<script>\n#{js}\n</script>" if options[:script_tags]
137
+ js
138
+
139
+ end
140
+
93
141
  end
metadata CHANGED
@@ -1,44 +1,35 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jqgrid_for_rails
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 1
9
- version: 1.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Juan Manuel Cuello
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2011-04-13 00:00:00 -03:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2013-03-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: will_paginate
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
31
20
  type: :runtime
32
- version_requirements: *id001
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
33
27
  description: Simple solution to create jqgrids easily using Rails
34
28
  email: juanmacuello@gmail.com
35
29
  executables: []
36
-
37
30
  extensions: []
38
-
39
31
  extra_rdoc_files: []
40
-
41
- files:
32
+ files:
42
33
  - .gitignore
43
34
  - CHANGELOG.rdoc
44
35
  - MIT-LICENSE
@@ -62,37 +53,27 @@ files:
62
53
  - test/schema.rb
63
54
  - test/test_helper.rb
64
55
  - uninstall.rb
65
- has_rdoc: true
66
56
  homepage: http://github.com/Juanmcuello/jqgrid_for_rails
67
57
  licenses: []
68
-
58
+ metadata: {}
69
59
  post_install_message:
70
60
  rdoc_options: []
71
-
72
- require_paths:
61
+ require_paths:
73
62
  - lib
74
- required_ruby_version: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- segments:
80
- - 0
81
- version: "0"
82
- required_rubygems_version: !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
- version: "0"
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
90
73
  requirements: []
91
-
92
74
  rubyforge_project:
93
- rubygems_version: 1.3.7
75
+ rubygems_version: 2.0.3
94
76
  signing_key:
95
- specification_version: 3
77
+ specification_version: 4
96
78
  summary: Simple solution to create jqgrids easily using Rails
97
79
  test_files: []
98
-