datagrid 1.5.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,10 +19,6 @@ module Datagrid
19
19
  label(filter.name, text, options, &block)
20
20
  end
21
21
 
22
- def datagrid_extra_checkbox_options
23
- ::ActionPack::VERSION::MAJOR >= 4 ? {:include_hidden => false} : {}
24
- end
25
-
26
22
  protected
27
23
  def datagrid_boolean_enum_filter(attribute_or_filter, options = {})
28
24
  datagrid_enum_filter(attribute_or_filter, options)
@@ -62,18 +58,18 @@ module Datagrid
62
58
  @template.render(
63
59
  :partial => partial,
64
60
  :locals => {
65
- :elements => elements,
66
- :form => self,
61
+ :elements => elements,
62
+ :form => self,
67
63
  :filter => filter,
68
64
  :options => options,
69
- }
65
+ }
70
66
  )
71
67
  else
72
68
  if !options.has_key?(:multiple) && filter.multiple?
73
69
  options[:multiple] = true
74
70
  end
75
71
  select(
76
- filter.name,
72
+ filter.name,
77
73
  object.select_options(filter) || [],
78
74
  {:include_blank => filter.include_blank,
79
75
  :prompt => filter.prompt,
@@ -219,7 +215,7 @@ module Datagrid
219
215
  def partial_path(options, name)
220
216
  if partials = options.delete(:partials)
221
217
  partial_name = File.join(partials, name)
222
- # Second argument is []: no magical namespaces to lookup added from controller
218
+ # Second argument is []: no magical namespaces to lookup added from controller
223
219
  if @template.lookup_context.template_exists?(partial_name, [], true)
224
220
  return partial_name
225
221
  end
@@ -132,6 +132,10 @@ module Datagrid
132
132
  !property_availability(grid, unless_option, false)
133
133
  end
134
134
 
135
+ def callable(value)
136
+ value.respond_to?(:call) ? value.call : value
137
+ end
138
+
135
139
  protected
136
140
  def property_availability(grid, option, default)
137
141
  case option
@@ -71,7 +71,7 @@ describe Datagrid::Core do
71
71
  end
72
72
  end
73
73
 
74
- describe ".inspect" do
74
+ describe "#inspect" do
75
75
  it "should show all attribute values" do
76
76
  class InspectTest
77
77
  include Datagrid
@@ -84,4 +84,29 @@ describe Datagrid::Core do
84
84
  expect(grid.inspect).to eq('#<InspectTest order: :name, descending: true, created_at: [Wed, 01 Jan 2014, Tue, 05 Aug 2014]>')
85
85
  end
86
86
  end
87
+
88
+ describe "#==" do
89
+ class EqualTest
90
+ include Datagrid
91
+ scope {Entry}
92
+ filter(:created_at, :date)
93
+ column(:name)
94
+ column(:created_at)
95
+ end
96
+ it "work on empty objects" do
97
+ expect(EqualTest.new).to eq(EqualTest.new)
98
+ end
99
+ it "sees the difference on the filter value" do
100
+ expect(EqualTest.new(created_at: Date.yesterday)).to_not eq(EqualTest.new(created_at: Date.today))
101
+ end
102
+ it "sees the difference on order" do
103
+ expect(EqualTest.new(order: :created_at)).to_not eq(EqualTest.new(order: :name))
104
+ end
105
+ it "doesn't destinguish between String and Symbol order" do
106
+ expect(EqualTest.new(order: :created_at)).to eq(EqualTest.new(order: "created_at"))
107
+ end
108
+ it "checks for redefined scope" do
109
+ expect(EqualTest.new).to_not eq(EqualTest.new {|s| s.reorder(:name)})
110
+ end
111
+ end
87
112
  end
@@ -25,12 +25,12 @@ describe Datagrid::Drivers::ActiveRecord do
25
25
  subject do
26
26
  test_report(:order => :test, :descending => true) do
27
27
  scope { Entry }
28
- column(:test, order: Arel::Nodes::Count.new(["entries.group_id"]))
28
+ column(:test, order: Entry.arel_table[:group_id].count)
29
29
  end.assets
30
30
  end
31
31
 
32
32
  it "should support ordering by Arel columns" do
33
- expect(subject.to_sql.strip).to include "ORDER BY COUNT('entries.group_id') DESC"
33
+ expect(subject.to_sql.strip).to include 'ORDER BY COUNT("entries"."group_id") DESC'
34
34
  end
35
35
  end
36
36
 
@@ -2,98 +2,100 @@ require "spec_helper"
2
2
 
3
3
  describe Datagrid::Drivers::MongoMapper, :mongomapper do
4
4
 
5
- describe ".match?" do
6
-
7
- subject { described_class }
5
+ if defined?(MongoMapper)
6
+ describe ".match?" do
8
7
 
9
- it {should be_match(MongoMapperEntry)}
10
- # MongoMapper doesn't have a scoped method, instead it has a query method which returns a Plucky::Query object
11
- it {should be_match(MongoMapperEntry.query)}
12
- it {should_not be_match(Entry.where(:id => 1))}
8
+ subject { described_class }
9
+
10
+ it {should be_match(MongoMapperEntry)}
11
+ # MongoMapper doesn't have a scoped method, instead it has a query method which returns a Plucky::Query object
12
+ it {should be_match(MongoMapperEntry.query)}
13
+ it {should_not be_match(Entry.where(:id => 1))}
13
14
 
14
- end
15
- describe "api" do
16
-
17
- subject do
18
- MongoMapperGrid.new(
19
- defined?(_attributes) ? _attributes : {}
20
- )
21
- end
22
-
23
- let!(:first) do
24
- MongoMapperEntry.create!(
25
- :group_id => 2,
26
- :name => "Main First",
27
- :disabled => false
28
- )
29
- end
30
- let!(:second) do
31
- MongoMapperEntry.create!(
32
- :group_id => 3,
33
- :name => "Main Second",
34
- :disabled => true
35
- )
36
- end
37
-
38
-
39
- describe '#assets' do
40
- subject { super().assets }
41
- it {should include(first, second)}
42
15
  end
43
-
44
- describe '#assets' do
45
- subject { super().assets }
46
- describe '#size' do
47
- subject { super().size }
48
- it {should == 2}
16
+ describe "api" do
17
+
18
+ subject do
19
+ MongoMapperGrid.new(
20
+ defined?(_attributes) ? _attributes : {}
21
+ )
49
22
  end
50
- end
51
23
 
52
- describe '#rows' do
53
- subject { super().rows }
54
- it {should == [["Main First", 2, false], ["Main Second", 3, true]]}
55
- end
24
+ let!(:first) do
25
+ MongoMapperEntry.create!(
26
+ :group_id => 2,
27
+ :name => "Main First",
28
+ :disabled => false
29
+ )
30
+ end
31
+ let!(:second) do
32
+ MongoMapperEntry.create!(
33
+ :group_id => 3,
34
+ :name => "Main Second",
35
+ :disabled => true
36
+ )
37
+ end
56
38
 
57
- describe '#header' do
58
- subject { super().header }
59
- it {should ==[ "Name", "Group", "Disabled"]}
60
- end
61
-
62
- describe '#data' do
63
- subject { super().data }
64
- it {should == [[ "Name", "Group", "Disabled"], ["Main First", 2, false], ["Main Second", 3, true]]}
65
- end
66
-
67
-
68
- describe "when some filters specified" do
69
- let(:_attributes) { {:from_group_id => 3} }
70
39
 
71
40
  describe '#assets' do
72
41
  subject { super().assets }
73
- it {should_not include(first)}
42
+ it {should include(first, second)}
74
43
  end
75
44
 
76
45
  describe '#assets' do
77
46
  subject { super().assets }
78
- it {should include(second)}
47
+ describe '#size' do
48
+ subject { super().size }
49
+ it {should == 2}
50
+ end
79
51
  end
80
- end
81
-
82
- describe "when reverse ordering is specified" do
83
- let(:_attributes) { {:order => :name, :descending => true} }
84
52
 
85
53
  describe '#rows' do
86
54
  subject { super().rows }
87
- it {should == [["Main Second", 3, true], ["Main First", 2, false]]}
55
+ it {should == [["Main First", 2, false], ["Main Second", 3, true]]}
56
+ end
57
+
58
+ describe '#header' do
59
+ subject { super().header }
60
+ it {should ==[ "Name", "Group", "Disabled"]}
61
+ end
62
+
63
+ describe '#data' do
64
+ subject { super().data }
65
+ it {should == [[ "Name", "Group", "Disabled"], ["Main First", 2, false], ["Main Second", 3, true]]}
66
+ end
67
+
68
+
69
+ describe "when some filters specified" do
70
+ let(:_attributes) { {:from_group_id => 3} }
71
+
72
+ describe '#assets' do
73
+ subject { super().assets }
74
+ it {should_not include(first)}
75
+ end
76
+
77
+ describe '#assets' do
78
+ subject { super().assets }
79
+ it {should include(second)}
80
+ end
81
+ end
82
+
83
+ describe "when reverse ordering is specified" do
84
+ let(:_attributes) { {:order => :name, :descending => true} }
85
+
86
+ describe '#rows' do
87
+ subject { super().rows }
88
+ it {should == [["Main Second", 3, true], ["Main First", 2, false]]}
89
+ end
90
+ end
91
+ it "should not provide default order for non declared fields" do
92
+ expect {
93
+ test_report(:order => :test) do
94
+ scope { MongoMapperEntry }
95
+ column(:test)
96
+ end.assets
97
+ }.to raise_error(Datagrid::OrderUnsupported)
98
+ end
88
99
  end
89
- end
90
- it "should not provide default order for non declared fields" do
91
- expect {
92
- test_report(:order => :test) do
93
- scope { MongoMapperEntry }
94
- column(:test)
95
- end.assets
96
- }.to raise_error(Datagrid::OrderUnsupported)
97
100
  end
98
101
  end
99
- end
@@ -26,7 +26,7 @@ describe Datagrid::Filters::EnumFilter do
26
26
  instance = klass.new
27
27
  expect(klass.filter_by_name(:group_id).select(instance)).to eq(instance.object_id)
28
28
  end
29
-
29
+
30
30
  it "should initialize select option only on instanciation" do
31
31
  class ReportWithLazySelect
32
32
  include Datagrid
@@ -37,7 +37,7 @@ describe Datagrid::Filters::EnumFilter do
37
37
 
38
38
 
39
39
  it "should support select given as symbol" do
40
- report = test_report do
40
+ report = test_report do
41
41
  scope {Entry}
42
42
  filter(:group_id, :enum, :select => :selectable_group_ids)
43
43
  def selectable_group_ids
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe Datagrid::Filters::IntegerFilter do
4
4
 
5
-
6
5
  let(:entry1) { Entry.create!(:group_id => 1) }
7
6
  let(:entry2) { Entry.create!(:group_id => 2) }
8
7
  let(:entry3) { Entry.create!(:group_id => 3) }
@@ -12,7 +11,7 @@ describe Datagrid::Filters::IntegerFilter do
12
11
 
13
12
  it "should support integer range argument" do
14
13
  report = test_report(:group_id => 3..5) do
15
- scope { Entry }
14
+ scope { Entry }
16
15
  filter(:group_id, :integer)
17
16
  end
18
17
  expect(report.assets).not_to include(entry1)
@@ -22,7 +21,7 @@ describe Datagrid::Filters::IntegerFilter do
22
21
 
23
22
  it "should support integer range given as array argument" do
24
23
  report = test_report(:group_id => [3.to_s, 5.to_s]) do
25
- scope { Entry }
24
+ scope { Entry }
26
25
  filter(:group_id, :integer, :range => true)
27
26
  end
28
27
  expect(report.assets).not_to include(entry7)
@@ -32,7 +31,7 @@ describe Datagrid::Filters::IntegerFilter do
32
31
 
33
32
  it "should support minimum integer argument" do
34
33
  report = test_report(:group_id => [5.to_s, nil]) do
35
- scope { Entry }
34
+ scope { Entry }
36
35
  filter(:group_id, :integer, :range => true)
37
36
  end
38
37
  expect(report.assets).not_to include(entry1)
@@ -42,7 +41,7 @@ describe Datagrid::Filters::IntegerFilter do
42
41
 
43
42
  it "should support maximum integer argument" do
44
43
  report = test_report(:group_id => [nil, 5.to_s]) do
45
- scope { Entry }
44
+ scope { Entry }
46
45
  filter(:group_id, :integer, :range => true)
47
46
  end
48
47
  expect(report.assets).to include(entry1)
@@ -53,7 +52,7 @@ describe Datagrid::Filters::IntegerFilter do
53
52
  it "should find something in one integer interval" do
54
53
 
55
54
  report = test_report(:group_id => (4..4)) do
56
- scope { Entry }
55
+ scope { Entry }
57
56
  filter(:group_id, :integer, :range => true)
58
57
  end
59
58
  expect(report.assets).not_to include(entry7)
@@ -63,7 +62,7 @@ describe Datagrid::Filters::IntegerFilter do
63
62
  it "should support invalid range" do
64
63
 
65
64
  report = test_report(:group_id => (7..1)) do
66
- scope { Entry }
65
+ scope { Entry }
67
66
  filter(:group_id, :integer, :range => true)
68
67
  end
69
68
  expect(report.assets).not_to include(entry7)
@@ -74,7 +73,7 @@ describe Datagrid::Filters::IntegerFilter do
74
73
 
75
74
  it "should support block" do
76
75
  report = test_report(:group_id => 5) do
77
- scope { Entry }
76
+ scope { Entry }
78
77
  filter(:group_id, :integer, :range => true) do |value|
79
78
  where("group_id >= ?", value)
80
79
  end
@@ -86,7 +85,7 @@ describe Datagrid::Filters::IntegerFilter do
86
85
 
87
86
  it "should not prefix table name if column is joined" do
88
87
  report = test_report(:rating => [4,nil]) do
89
- scope { Entry.joins(:group) }
88
+ scope { Entry.joins(:group) }
90
89
  filter(:rating, :integer, :range => true)
91
90
  end
92
91
  expect(report.rating).to eq([4,nil])
@@ -114,7 +113,7 @@ describe Datagrid::Filters::IntegerFilter do
114
113
  expect(report.assets).to include(entry2)
115
114
  expect(report.assets).not_to include(entry3)
116
115
  end
117
-
116
+
118
117
  it "should support multiple with allow_blank allow_nil options" do
119
118
  report = test_report do
120
119
  scope {Entry}
@@ -130,4 +129,14 @@ describe Datagrid::Filters::IntegerFilter do
130
129
  expect(report.assets).to include(entry1)
131
130
  expect(report.assets).to include(entry2)
132
131
  end
132
+
133
+ it "normalizes AR object to ID" do
134
+ group = Group.create!
135
+ report = test_report(group_id: group) do
136
+ scope {Entry}
137
+ filter(:group_id, :integer)
138
+ end
139
+
140
+ expect(report.group_id).to eq(group.id)
141
+ end
133
142
  end
@@ -18,7 +18,7 @@ describe Datagrid::FormBuilder do
18
18
  v.view_paths << File.expand_path("../../support/test_partials", __FILE__)
19
19
  end
20
20
  end
21
- let(:view) { ActionView::Helpers::FormBuilder.new(:report, _grid, template, {}, Proc.new {|f| })}
21
+ let(:view) { ActionView::Helpers::FormBuilder.new(:report, _grid, template, {})}
22
22
 
23
23
 
24
24
  describe ".datagrid_filter" do
@@ -44,7 +44,7 @@ describe Datagrid::FormBuilder do
44
44
  }
45
45
  let(:_filter) { :name }
46
46
  it { should equal_to_dom(
47
- '<input class="name default_filter" id="report_name" name="report[name]" size="30" type="text"/>'
47
+ '<input class="name default_filter" type="text" name="report[name]" id="report_name"/>'
48
48
  )}
49
49
  end
50
50
  context "with integer filter type" do
@@ -56,13 +56,13 @@ describe Datagrid::FormBuilder do
56
56
  end
57
57
  }
58
58
  it { should equal_to_dom(
59
- '<input class="group_id integer_filter" id="report_group_id" name="report[group_id]" size="30" type="text"/>'
59
+ '<input class="group_id integer_filter" type="text" name="report[group_id]" id="report_group_id"/>'
60
60
  )}
61
61
 
62
62
  context "when partials option is passed for filter that don't support range" do
63
63
  let(:_filter_options) { {partials: 'anything' } }
64
64
  it { should equal_to_dom(
65
- '<input class="group_id integer_filter" id="report_group_id" name="report[group_id]" size="30" type="text"/>'
65
+ '<input class="group_id integer_filter" type="text" name="report[group_id]" id="report_group_id"/>'
66
66
  )}
67
67
  end
68
68
  end
@@ -76,7 +76,7 @@ describe Datagrid::FormBuilder do
76
76
  end
77
77
  }
78
78
  it { should equal_to_dom(
79
- '<input class="created_at date_filter" id="report_created_at" name="report[created_at]" size="30" type="text"/>'
79
+ '<input class="created_at date_filter" type="text" name="report[created_at]" id="report_created_at"/>'
80
80
  )}
81
81
  context "when special date format specified" do
82
82
  around(:each) do |example|
@@ -86,7 +86,7 @@ describe Datagrid::FormBuilder do
86
86
  end
87
87
  end
88
88
  it { should equal_to_dom(
89
- '<input class="created_at date_filter" id="report_created_at" name="report[created_at]" size="30" type="text" value="01/02/2012"/>'
89
+ '<input value="01/02/2012" class="created_at date_filter" type="text" name="report[created_at]" id="report_created_at"/>'
90
90
  )}
91
91
  end
92
92
  end
@@ -103,27 +103,27 @@ describe Datagrid::FormBuilder do
103
103
  let(:_filter_options) { {:id => "hello"} }
104
104
  let(:_range) { [1,2]}
105
105
  it { should equal_to_dom(
106
- '<input class="group_id integer_filter from" id="from_hello" multiple name="report[group_id][]" size="30" type="text" value="1"/>' +
106
+ '<input id="from_hello" class="group_id integer_filter from" multiple value="1" type="text" name="report[group_id][]"/>' +
107
107
  '<span class="separator integer"> - </span>' +
108
- '<input class="group_id integer_filter to" id="to_hello" multiple name="report[group_id][]" size="30" type="text" value="2"/>'
108
+ '<input id="to_hello" class="group_id integer_filter to" multiple value="2" type="text" name="report[group_id][]"/>'
109
109
  )}
110
110
  end
111
111
  context "with only left bound" do
112
112
 
113
113
  let(:_range) { [10, nil]}
114
114
  it { should equal_to_dom(
115
- '<input class="group_id integer_filter from" multiple name="report[group_id][]" size="30" type="text" value="10"/>' +
115
+ '<input class="group_id integer_filter from" multiple value="10" type="text" name="report[group_id][]"/>' +
116
116
  '<span class="separator integer"> - </span>' +
117
- '<input class="group_id integer_filter to" multiple name="report[group_id][]" size="30" type="text"/>'
117
+ '<input class="group_id integer_filter to" multiple type="text" name="report[group_id][]"/>'
118
118
  )}
119
119
  it { should be_html_safe }
120
120
  end
121
121
  context "with only right bound" do
122
122
  let(:_range) { [nil, 10]}
123
123
  it { should equal_to_dom(
124
- '<input class="group_id integer_filter from" multiple name="report[group_id][]" size="30" type="text"/>' +
124
+ '<input class="group_id integer_filter from" multiple type="text" name="report[group_id][]"/>' +
125
125
  '<span class="separator integer"> - </span>' +
126
- '<input class="group_id integer_filter to" multiple name="report[group_id][]" size="30" type="text" value="10"/>'
126
+ '<input class="group_id integer_filter to" multiple value="10" type="text" name="report[group_id][]"/>'
127
127
  )}
128
128
  it { should be_html_safe }
129
129
  end
@@ -131,9 +131,9 @@ describe Datagrid::FormBuilder do
131
131
  context "with invalid range value" do
132
132
  let(:_range) { 2..1 }
133
133
  it { should equal_to_dom(
134
- '<input class="group_id integer_filter from" multiple name="report[group_id][]" size="30" type="text" value="2"/>' +
134
+ '<input class="group_id integer_filter from" multiple value="2" type="text" name="report[group_id][]"/>' +
135
135
  '<span class="separator integer"> - </span>' +
136
- '<input class="group_id integer_filter to" multiple name="report[group_id][]" size="30" type="text" value="1"/>'
136
+ '<input class="group_id integer_filter to" multiple value="1" type="text" name="report[group_id][]"/>'
137
137
  )}
138
138
  end
139
139
 
@@ -149,7 +149,7 @@ describe Datagrid::FormBuilder do
149
149
  let(:_filter_options) { { :partials => 'not_existed' } }
150
150
  let(:_range) { nil }
151
151
  it { should equal_to_dom(
152
- '<input class="group_id integer_filter from" multiple name="report[group_id][]" size="30" type="text"><span class="separator integer"> - </span><input class="group_id integer_filter to" multiple name="report[group_id][]" size="30" type="text">'
152
+ '<input class="group_id integer_filter from" multiple type="text" name="report[group_id][]"><span class="separator integer"> - </span><input class="group_id integer_filter to" multiple type="text" name="report[group_id][]">'
153
153
  ) }
154
154
 
155
155
  end
@@ -164,7 +164,7 @@ describe Datagrid::FormBuilder do
164
164
  end
165
165
  end
166
166
  it { should equal_to_dom(
167
- 'from <input class="group_id integer_filter from" multiple name="report[group_id][]" size="30" type="text"> to <input class="group_id integer_filter to" multiple name="report[group_id][]" size="30" type="text">'
167
+ 'from <input class="group_id integer_filter from" multiple type="text" name="report[group_id][]"> to <input class="group_id integer_filter to" multiple type="text" name="report[group_id][]">'
168
168
  )}
169
169
  end
170
170
  context "when deprecated separator is specified" do
@@ -177,7 +177,7 @@ describe Datagrid::FormBuilder do
177
177
  end
178
178
  end
179
179
  it { should equal_to_dom(
180
- '<input class="group_id integer_filter from" multiple name="report[group_id][]" size="30" type="text"> | <input class="group_id integer_filter to" multiple name="report[group_id][]" size="30" type="text">'
180
+ '<input class="group_id integer_filter from" multiple type="text" name="report[group_id][]"> | <input class="group_id integer_filter to" multiple type="text" name="report[group_id][]">'
181
181
  )}
182
182
  end
183
183
  end
@@ -191,9 +191,9 @@ describe Datagrid::FormBuilder do
191
191
  }
192
192
  let(:_range) { [1.5,2.5]}
193
193
  it { should equal_to_dom(
194
- '<input class="rating float_filter from" multiple name="report[rating][]" size="30" type="text" value="1.5"/>' +
194
+ '<input class="rating float_filter from" multiple value="1.5" type="text" name="report[rating][]"/>' +
195
195
  '<span class="separator float"> - </span>' +
196
- '<input class="rating float_filter to" multiple name="report[rating][]" size="30" type="text" value="2.5"/>'
196
+ '<input class="rating float_filter to" multiple value="2.5" type="text" name="report[rating][]"/>'
197
197
  )}
198
198
  end
199
199
 
@@ -210,9 +210,9 @@ describe Datagrid::FormBuilder do
210
210
 
211
211
  let(:_range) { ["2012-01-03", nil]}
212
212
  it { should equal_to_dom(
213
- '<input class="created_at date_filter from" multiple name="report[created_at][]" size="30" type="text" value="2012-01-03"/>' +
213
+ '<input class="created_at date_filter from" multiple value="2012-01-03" type="text" name="report[created_at][]"/>' +
214
214
  '<span class="separator date"> - </span>' +
215
- '<input class="created_at date_filter to" multiple name="report[created_at][]" size="30" type="text"/>'
215
+ '<input class="created_at date_filter to" multiple type="text" name="report[created_at][]"/>'
216
216
  )}
217
217
  it { should be_html_safe }
218
218
  end
@@ -224,18 +224,18 @@ describe Datagrid::FormBuilder do
224
224
  end
225
225
  let(:_range) { ["2013/01/01", '2013/02/02']}
226
226
  it { should equal_to_dom(
227
- '<input class="created_at date_filter from" multiple name="report[created_at][]" size="30" type="text" value="01/01/2013"/>' +
227
+ '<input class="created_at date_filter from" multiple value="01/01/2013" type="text" name="report[created_at][]"/>' +
228
228
  '<span class="separator date"> - </span>' +
229
- '<input class="created_at date_filter to" multiple name="report[created_at][]" size="30" type="text" value="02/02/2013"/>'
229
+ '<input class="created_at date_filter to" multiple value="02/02/2013" type="text" name="report[created_at][]"/>'
230
230
  )}
231
231
  end
232
232
  context "with only right bound" do
233
233
 
234
234
  let(:_range) { [nil, "2012-01-03"]}
235
235
  it { should equal_to_dom(
236
- '<input class="created_at date_filter from" multiple name="report[created_at][]" size="30" type="text"/>' +
236
+ '<input class="created_at date_filter from" multiple type="text" name="report[created_at][]"/>' +
237
237
  '<span class="separator date"> - </span>' +
238
- '<input class="created_at date_filter to" multiple name="report[created_at][]" size="30" type="text" value="2012-01-03"/>'
238
+ '<input class="created_at date_filter to" multiple value="2012-01-03" type="text" name="report[created_at][]"/>'
239
239
  )}
240
240
  it { should be_html_safe }
241
241
  end
@@ -243,9 +243,9 @@ describe Datagrid::FormBuilder do
243
243
  context "with invalid range value" do
244
244
  let(:_range) { Date.parse('2012-01-02')..Date.parse('2012-01-01') }
245
245
  it { should equal_to_dom(
246
- '<input class="created_at date_filter from" multiple name="report[created_at][]" size="30" type="text" value="2012-01-02"/>' +
246
+ '<input class="created_at date_filter from" multiple value="2012-01-02" type="text" name="report[created_at][]"/>' +
247
247
  '<span class="separator date"> - </span>' +
248
- '<input class="created_at date_filter to" multiple name="report[created_at][]" size="30" type="text" value="2012-01-01"/>'
248
+ '<input class="created_at date_filter to" multiple value="2012-01-01" type="text" name="report[created_at][]"/>'
249
249
  )}
250
250
  end
251
251
  context "with blank range value" do
@@ -256,9 +256,9 @@ describe Datagrid::FormBuilder do
256
256
  end
257
257
  let(:_range) { [nil, nil] }
258
258
  it { should equal_to_dom(
259
- '<input class="created_at date_filter from" multiple name="report[created_at][]" size="30" type="text"/>' +
259
+ '<input class="created_at date_filter from" multiple type="text" name="report[created_at][]"/>' +
260
260
  '<span class="separator date"> - </span>' +
261
- '<input class="created_at date_filter to" multiple name="report[created_at][]" size="30" type="text"/>'
261
+ '<input class="created_at date_filter to" multiple type="text" name="report[created_at][]"/>'
262
262
  )}
263
263
  end
264
264
  end
@@ -273,7 +273,7 @@ describe Datagrid::FormBuilder do
273
273
  end
274
274
  }
275
275
  it { should equal_to_dom(
276
- '<select class="category enum_filter" id="report_category" name="report[category]"><option value=""></option>
276
+ '<select class="category enum_filter" name="report[category]" id="report_category"><option value=""></option>
277
277
  <option value="first">first</option>
278
278
  <option value="second">second</option></select>'
279
279
  )}
@@ -282,9 +282,14 @@ describe Datagrid::FormBuilder do
282
282
  before(:each) do
283
283
  skip("not supported by rails < 4.1") if Rails.version < '4.1'
284
284
  end
285
- let(:_filter_block ) { proc { template.content_tag(:option, 'block option', :value => 'block_value') }}
285
+ let(:_filter_block ) do
286
+ proc do
287
+ template.content_tag(:option, 'block option', :value => 'block_value')
288
+ end
289
+ end
286
290
  it { should equal_to_dom(
287
- '<select class="category enum_filter" id="report_category" name="report[category]"><option value=\"block_value\">block option</option></select>'
291
+ '<select class="category enum_filter" name="report[category]" id="report_category"><option value=""></option>
292
+ <option value="block_value">block option</option></select>'
288
293
  )}
289
294
  end
290
295
  context "when first option is selected" do
@@ -292,23 +297,39 @@ describe Datagrid::FormBuilder do
292
297
  _grid.category = "first"
293
298
  end
294
299
  it { should equal_to_dom(
295
- '<select class="category enum_filter" id="report_category" name="report[category]"><option value=""></option>
296
- <option value="first" selected="true">first</option>
300
+ '<select class="category enum_filter" name="report[category]" id="report_category"><option value=""></option>
301
+ <option selected value="first">first</option>
297
302
  <option value="second">second</option></select>'
298
303
  )}
299
304
  end
300
305
  context "with include_blank option set to false" do
301
306
  let(:_filter) { :category_without_include_blank }
302
307
  it { should equal_to_dom(
303
- '<select class="category_without_include_blank enum_filter" id="report_category_without_include_blank" name="report[category_without_include_blank]">
308
+ '<select class="category_without_include_blank enum_filter" name="report[category_without_include_blank]" id="report_category_without_include_blank">
304
309
  <option value="first">first</option>
305
310
  <option value="second">second</option></select>'
306
311
  )}
307
312
  end
313
+ context "with dynamic include_blank option" do
314
+ let(:_grid) do
315
+ test_report do
316
+ scope {Entry}
317
+ filter(:category, :enum, :select => ["first", "second"], :include_blank => proc { "Choose plz" })
318
+ end
319
+ end
320
+ let(:_filter) { :category }
321
+ it { should equal_to_dom(
322
+ '<select class="category enum_filter" name="report[category]" id="report_category">
323
+ <option value="">Choose plz</option>
324
+ <option value="first">first</option>
325
+ <option value="second">second</option></select>'
326
+ )}
327
+ end
328
+
308
329
  context "with prompt option" do
309
330
  let(:_filter) { :category_with_prompt }
310
331
  it { should equal_to_dom(
311
- '<select class="category_with_prompt enum_filter" id="report_category_with_prompt" name="report[category_with_prompt]"><option value="">My Prompt</option>
332
+ '<select class="category_with_prompt enum_filter" name="report[category_with_prompt]" id="report_category_with_prompt"><option value="">My Prompt</option>
312
333
  <option value="first">first</option>
313
334
  <option value="second">second</option></select>'
314
335
  )}
@@ -324,8 +345,8 @@ describe Datagrid::FormBuilder do
324
345
  if Rails.version >= "4.1"
325
346
  it { should equal_to_dom(
326
347
  '
327
- <label class="category enum_filter checkboxes" for="report_category_first"><input id="report_category_first" name="report[category][]" type="checkbox" value="first" />first</label>
328
- <label class="category enum_filter checkboxes" for="report_category_second"><input id="report_category_second" name="report[category][]" type="checkbox" value="second" />second</label>
348
+ <label class="category enum_filter checkboxes" for="report_category_first"><input id="report_category_first" type="checkbox" value="first" name="report[category][]" />first</label>
349
+ <label class="category enum_filter checkboxes" for="report_category_second"><input id="report_category_second" type="checkbox" value="second" name="report[category][]" />second</label>
329
350
  '
330
351
  )}
331
352
  else
@@ -356,7 +377,7 @@ describe Datagrid::FormBuilder do
356
377
  end
357
378
  it { should equal_to_dom(
358
379
  # hidden is important when default is set to true
359
- '<input name="report[disabled]" type="hidden" value="0"><input checked class="disabled boolean_filter" id="report_disabled" name="report[disabled]" type="checkbox" value="1">'
380
+ '<input name="report[disabled]" type="hidden" value="0"><input class="disabled boolean_filter" type="checkbox" value="1" checked name="report[disabled]" id="report_disabled">'
360
381
  )}
361
382
  end
362
383
  context "with xboolean filter type" do
@@ -368,7 +389,7 @@ describe Datagrid::FormBuilder do
368
389
  end
369
390
  end
370
391
  it { should equal_to_dom(
371
- '<select class="disabled extended_boolean_filter" id="report_disabled" name="report[disabled]"><option value=""></option>
392
+ '<select class="disabled extended_boolean_filter" name="report[disabled]" id="report_disabled"><option value=""></option>
372
393
  <option value="YES">Yes</option>
373
394
  <option value="NO">No</option></select>'
374
395
  )}
@@ -383,7 +404,7 @@ describe Datagrid::FormBuilder do
383
404
 
384
405
  let(:_filter) { :name }
385
406
 
386
- it {should equal_to_dom('<input class="name string_filter" id="report_name" name="report[name]" size="30" type="text">')}
407
+ it {should equal_to_dom('<input class="name string_filter" type="text" name="report[name]" id="report_name">')}
387
408
 
388
409
  context "when multiple option is set" do
389
410
  let(:_grid) do
@@ -395,7 +416,7 @@ describe Datagrid::FormBuilder do
395
416
 
396
417
  let(:_filter) { :name }
397
418
 
398
- it {should equal_to_dom('<input class="name string_filter" id="report_name" name="report[name]" size="30" type="text" value="one,two">')}
419
+ it {should equal_to_dom('<input value="one,two" class="name string_filter" type="text" name="report[name]" id="report_name">')}
399
420
  end
400
421
  end
401
422
 
@@ -412,7 +433,7 @@ describe Datagrid::FormBuilder do
412
433
  end
413
434
  end
414
435
  let(:_filter) { :name }
415
- it {should equal_to_dom('<select class="name enum_filter" id="report_name" name="report[name]"></select>')}
436
+ it {should equal_to_dom('<select class="name enum_filter" name="report[name]" id="report_name"></select>')}
416
437
  end
417
438
  context "with float filter type" do
418
439
  let(:_grid) {
@@ -423,7 +444,7 @@ describe Datagrid::FormBuilder do
423
444
  }
424
445
  let(:_filter) { :group_id }
425
446
  it { should equal_to_dom(
426
- '<input class="group_id float_filter" id="report_group_id" name="report[group_id]" size="30" type="text"/>'
447
+ '<input class="group_id float_filter" type="text" name="report[group_id]" id="report_group_id"/>'
427
448
  )}
428
449
 
429
450
  end
@@ -437,17 +458,10 @@ describe Datagrid::FormBuilder do
437
458
  end
438
459
  let(:_filter) { :group_id }
439
460
  let(:expected_html) do
440
- if ActionPack::VERSION::MAJOR == 3 && ActionPack::VERSION::MINOR < 2
441
- <<-HTML
442
- <select class="group_id enum_filter" id="report_group_id" multiple name="report[group_id][]">
443
- <option value="hello">hello</option></select>
444
- HTML
445
- else
446
- <<-HTML
447
- <input name="report[group_id][]" type="hidden" value=""><select class="group_id enum_filter" id="report_group_id" multiple name="report[group_id][]">
461
+ <<-HTML
462
+ <select class="group_id enum_filter" multiple name="report[group_id][]" id="report_group_id">
448
463
  <option value="hello">hello</option></select>
449
- HTML
450
- end
464
+ HTML
451
465
  end
452
466
 
453
467
  it { should equal_to_dom(expected_html) }
@@ -467,19 +481,11 @@ describe Datagrid::FormBuilder do
467
481
  end
468
482
  let(:_filter) { :column_names }
469
483
  let(:expected_html) do
470
- if ActionPack::VERSION::MAJOR == 3 && ActionPack::VERSION::MINOR < 2
471
- <<-HTML
472
- <select class="column_names enum_filter" id="report_column_names" multiple name="report[column_names][]"><option value="id" selected>Id</option>
473
- <option value="name" selected>Name</option>
484
+ <<-HTML
485
+ <select class="column_names enum_filter" multiple name="report[column_names][]" id="report_column_names"><option selected value="id">Id</option>
486
+ <option selected value="name">Name</option>
474
487
  <option value="category">Category</option></select>
475
- HTML
476
- else
477
- <<-HTML
478
- <input name="report[column_names][]" type="hidden" value=""><select class="column_names enum_filter" id="report_column_names" multiple name="report[column_names][]"><option value="id" selected>Id</option>
479
- <option value="name" selected>Name</option>
480
- <option value="category">Category</option></select>
481
- HTML
482
- end
488
+ HTML
483
489
  end
484
490
 
485
491
  it { should equal_to_dom(expected_html) }
@@ -499,9 +505,9 @@ describe Datagrid::FormBuilder do
499
505
  let(:_filter) { :column_names }
500
506
  let(:expected_html) do
501
507
  <<DOM
502
- <label class="column_names enum_filter checkboxes" for="report_column_names_id"><input checked id="report_column_names_id" name="report[column_names][]" type="checkbox" value="id">Id</label>
503
- <label class="column_names enum_filter checkboxes" for="report_column_names_name"><input checked id="report_column_names_name" name="report[column_names][]" type="checkbox" value="name">Name</label>
504
- <label class="column_names enum_filter checkboxes" for="report_column_names_category"><input id="report_column_names_category" name="report[column_names][]" type="checkbox" value="category">Category</label>
508
+ <label class="column_names enum_filter checkboxes" for="report_column_names_id"><input id="report_column_names_id" type="checkbox" value="id" checked name="report[column_names][]">Id</label>
509
+ <label class="column_names enum_filter checkboxes" for="report_column_names_name"><input id="report_column_names_name" type="checkbox" value="name" checked name="report[column_names][]">Name</label>
510
+ <label class="column_names enum_filter checkboxes" for="report_column_names_category"><input id="report_column_names_category" type="checkbox" value="category" name="report[column_names][]">Category</label>
505
511
  DOM
506
512
  end
507
513
 
@@ -526,7 +532,7 @@ DOM
526
532
  context "with no options" do
527
533
  let(:expected_html) do
528
534
  <<-HTML
529
- <select class="condition dynamic_filter field" id="report_condition" name="report[condition][]"><option value="id">Id</option>
535
+ <select class="condition dynamic_filter field" name="report[condition][]" id="report_condition"><option value="id">Id</option>
530
536
  <option value="group_id">Group</option>
531
537
  <option value="name">Name</option>
532
538
  <option value="category">Category</option>
@@ -536,10 +542,10 @@ DOM
536
542
  <option value="confirmed">Confirmed</option>
537
543
  <option value="shipping_date">Shipping date</option>
538
544
  <option value="created_at">Created at</option>
539
- <option value="updated_at">Updated at</option></select><select class="condition dynamic_filter operation" id="report_condition" name="report[condition][]"><option value="=">=</option>
545
+ <option value="updated_at">Updated at</option></select><select class="condition dynamic_filter operation" name="report[condition][]" id="report_condition"><option value="=">=</option>
540
546
  <option value="=~">&asymp;</option>
541
547
  <option value="&gt;=">&ge;</option>
542
- <option value="&lt;=">&le;</option></select><input class="condition dynamic_filter value" id="report_condition" name="report[condition][]" size="30" type="text">
548
+ <option value="&lt;=">&le;</option></select><input class="condition dynamic_filter value" name="report[condition][]" type="text" id="report_condition">
543
549
  HTML
544
550
  end
545
551
  it {should equal_to_dom(expected_html)}
@@ -551,11 +557,11 @@ DOM
551
557
  end
552
558
  let(:expected_html) do
553
559
  <<-HTML
554
- <select class="condition dynamic_filter field" id="report_condition" name="report[condition][]"><option value="id" selected>id</option>
555
- <option value="name">name</option></select><select class="condition dynamic_filter operation" id="report_condition" name="report[condition][]"><option value="=">=</option>
560
+ <select class="condition dynamic_filter field" name="report[condition][]" id="report_condition"><option selected value="id">id</option>
561
+ <option value="name">name</option></select><select class="condition dynamic_filter operation" name="report[condition][]" id="report_condition"><option value="=">=</option>
556
562
  <option value="=~">&asymp;</option>
557
- <option value="&gt;=" selected>&ge;</option>
558
- <option value="&lt;=">&le;</option></select><input class="condition dynamic_filter value" id="report_condition" name="report[condition][]" size="30" type="text" value="1">
563
+ <option selected value="&gt;=">&ge;</option>
564
+ <option value="&lt;=">&le;</option></select><input class="condition dynamic_filter value" name="report[condition][]" value="1" type="text" id="report_condition">
559
565
  HTML
560
566
  end
561
567
  it {should equal_to_dom(expected_html)}
@@ -567,11 +573,11 @@ DOM
567
573
  end
568
574
  let(:expected_html) do
569
575
  <<-HTML
570
- <select class="condition dynamic_filter field" id="report_condition" name="report[condition][]"><option value="id">id</option>
571
- <option value="name">name</option></select><select class="condition dynamic_filter operation" id="report_condition" name="report[condition][]"><option value="=">=</option>
576
+ <select class="condition dynamic_filter field" name="report[condition][]" id="report_condition"><option value="id">id</option>
577
+ <option value="name">name</option></select><select class="condition dynamic_filter operation" name="report[condition][]" id="report_condition"><option value="=">=</option>
572
578
  <option value="=~">&asymp;</option>
573
579
  <option value="&gt;=">&ge;</option>
574
- <option value="&lt;=">&le;</option></select><input class="condition dynamic_filter value" id="report_condition" name="report[condition][]" size="30" type="text">
580
+ <option value="&lt;=">&le;</option></select><input class="condition dynamic_filter value" name="report[condition][]" type="text" id="report_condition">
575
581
  HTML
576
582
  end
577
583
  it {should equal_to_dom(expected_html)}
@@ -584,8 +590,8 @@ DOM
584
590
  end
585
591
  let(:expected_html) do
586
592
  <<-HTML
587
- <select class="condition dynamic_filter field" id="report_condition" name="report[condition][]"><option value="id">id</option></select><select class="condition dynamic_filter operation" id="report_condition" name="report[condition][]"><option value="&gt;=">≥</option>
588
- <option value="&lt;=">≤</option></select><input class="condition dynamic_filter value" id="report_condition" name="report[condition][]" size="30" type="text">
593
+ <select class="condition dynamic_filter field" name="report[condition][]" id="report_condition"><option value="id">id</option></select><select class="condition dynamic_filter operation" name="report[condition][]" id="report_condition"><option value="&gt;=">≥</option>
594
+ <option value="&lt;=">≤</option></select><input class="condition dynamic_filter value" name="report[condition][]" type="text" id="report_condition">
589
595
  HTML
590
596
  end
591
597
  it {should equal_to_dom(expected_html)}