datagrid 0.3.5 → 0.3.6
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/Readme.markdown +2 -1
- data/VERSION +1 -1
- data/datagrid.gemspec +3 -2
- data/lib/datagrid/filters/composite_filters.rb +2 -2
- data/lib/datagrid/filters/enum_filter.rb +5 -2
- data/lib/datagrid/form_builder.rb +1 -1
- data/spec/datagrid/columns_spec.rb +8 -1
- data/spec/datagrid/filters/composite_filters_spec.rb +36 -0
- data/spec/datagrid/filters_spec.rb +2 -4
- data/spec/datagrid/form_builder_spec.rb +53 -6
- data/spec/datagrid/helper_spec.rb +8 -7
- data/spec/datagrid_spec.rb +2 -7
- data/spec/support/schema.rb +1 -0
- metadata +5 -4
data/Readme.markdown
CHANGED
@@ -20,7 +20,8 @@ In order to create a report, you need to define:
|
|
20
20
|
|
21
21
|
### Working grid example
|
22
22
|
|
23
|
-
[Datagrid DEMO application](
|
23
|
+
[Datagrid DEMO application](http://datagrid.heroku.com) is available live!
|
24
|
+
[Demo source code](https://github.com/bogdan/datagrid-demo).
|
24
25
|
|
25
26
|
In order to create a grid:
|
26
27
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.6
|
data/datagrid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{datagrid}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bogdan Gusiev"]
|
12
|
-
s.date = %q{2011-08-
|
12
|
+
s.date = %q{2011-08-22}
|
13
13
|
s.description = %q{This allows you to easily build datagrid aka data tables with sortable columns and filters}
|
14
14
|
s.email = %q{agresso@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -48,6 +48,7 @@ Gem::Specification.new do |s|
|
|
48
48
|
"lib/datagrid/utils.rb",
|
49
49
|
"spec/datagrid/active_model_spec.rb",
|
50
50
|
"spec/datagrid/columns_spec.rb",
|
51
|
+
"spec/datagrid/filters/composite_filters_spec.rb",
|
51
52
|
"spec/datagrid/filters/enum_filter_spec.rb",
|
52
53
|
"spec/datagrid/filters_spec.rb",
|
53
54
|
"spec/datagrid/form_builder_spec.rb",
|
@@ -15,10 +15,10 @@ module Datagrid
|
|
15
15
|
|
16
16
|
def date_range_filters(field, from_name = :"from_#{field}", to_name = :"to_#{field}")
|
17
17
|
filter(from_name, :date) do |date|
|
18
|
-
self.
|
18
|
+
self.scoped(:conditions => ["#{field} >= ?", date])
|
19
19
|
end
|
20
20
|
filter(to_name, :date) do |date|
|
21
|
-
self.
|
21
|
+
self.scoped(:conditions => ["#{field} <= ?", date])
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -15,9 +15,12 @@ class Datagrid::Filters::EnumFilter < Datagrid::Filters::BaseFilter
|
|
15
15
|
option.respond_to?(:call) ? option.call : option
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
18
|
def include_blank
|
20
|
-
self.options.has_key?(:include_blank) ? options[:include_blank] : true
|
19
|
+
self.options.has_key?(:include_blank) ? options[:include_blank] : true unless self.prompt
|
20
|
+
end
|
21
|
+
|
22
|
+
def prompt
|
23
|
+
self.options.has_key?(:prompt) ? options[:prompt] : false
|
21
24
|
end
|
22
25
|
|
23
26
|
def strict
|
@@ -39,7 +39,7 @@ module Datagrid
|
|
39
39
|
if !options.has_key?(:multiple) && filter.multiple
|
40
40
|
options[:multiple] = true
|
41
41
|
end
|
42
|
-
select filter.name, filter.select || [], {:include_blank => filter.include_blank}, options
|
42
|
+
select filter.name, filter.select || [], {:include_blank => filter.include_blank, :prompt => filter.prompt}, options
|
43
43
|
end
|
44
44
|
|
45
45
|
def datagrid_integer_filter(attribute_or_filter, options = {})
|
@@ -20,13 +20,20 @@ describe Datagrid::Columns do
|
|
20
20
|
subject.header.should == ["Group", "Name"]
|
21
21
|
end
|
22
22
|
|
23
|
-
it "should generate data" do
|
23
|
+
it "should generate table data" do
|
24
24
|
subject.data.should == [
|
25
25
|
subject.header,
|
26
26
|
subject.row_for(entry)
|
27
27
|
]
|
28
28
|
end
|
29
29
|
|
30
|
+
it "should generate hash for given asset" do
|
31
|
+
subject.hash_for(entry).should == {
|
32
|
+
:group => "Pop",
|
33
|
+
:name => "Star"
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
30
37
|
it "should support csv export" do
|
31
38
|
subject.to_csv.should == "Group,Name\nPop,Star\n"
|
32
39
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Datagrid::Filters::CompositeFilters do
|
4
|
+
|
5
|
+
describe ".date_range_filters" do
|
6
|
+
|
7
|
+
it "should generate from date and to date filters" do
|
8
|
+
e1 = Entry.create!(:shipping_date => 6.days.ago)
|
9
|
+
e2 = Entry.create!(:shipping_date => 4.days.ago)
|
10
|
+
e3 = Entry.create!(:shipping_date => 1.days.ago)
|
11
|
+
assets = test_report(:from_shipping_date => 5.days.ago, :to_shipping_date => 2.day.ago) do
|
12
|
+
scope {Entry}
|
13
|
+
date_range_filters(:shipping_date)
|
14
|
+
end.assets
|
15
|
+
|
16
|
+
assets.should include(e2)
|
17
|
+
assets.should_not include(e1, e3)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe ".integer_range_filters" do
|
22
|
+
|
23
|
+
it "should generate from integer and to integer filters" do
|
24
|
+
e1 = Entry.create!(:group_id => 1)
|
25
|
+
e2 = Entry.create!(:group_id => 3)
|
26
|
+
e3 = Entry.create!(:group_id => 5)
|
27
|
+
assets = test_report(:from_group_id => 2, :to_group_id => 4) do
|
28
|
+
scope {Entry}
|
29
|
+
integer_range_filters(:group_id)
|
30
|
+
end.assets
|
31
|
+
|
32
|
+
assets.should include(e2)
|
33
|
+
assets.should_not include(e1, e3)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -34,11 +34,9 @@ describe Datagrid::Filters do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "allow_blank and allow_nil options" do
|
37
|
-
before(:each) do
|
38
|
-
$FILTER_PERFORMED = false
|
39
|
-
end
|
40
37
|
|
41
38
|
def check_performed(value, result, options)
|
39
|
+
$FILTER_PERFORMED = false
|
42
40
|
report = test_report(:name => value) do
|
43
41
|
scope {Entry}
|
44
42
|
filter(:name, options) do |value|
|
@@ -57,7 +55,7 @@ describe Datagrid::Filters do
|
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
|
-
it "should support
|
58
|
+
it "should support allow_nil argument" do
|
61
59
|
check_performed(nil, true, :allow_nil => true)
|
62
60
|
end
|
63
61
|
|
@@ -13,8 +13,7 @@ end
|
|
13
13
|
describe Datagrid::FormBuilder do
|
14
14
|
|
15
15
|
let(:template) { ActionView::Base.new}
|
16
|
-
let(:
|
17
|
-
let(:view) { ActionView::Helpers::FormBuilder.new(:report, grid, template, {}, Proc.new {|f| })}
|
16
|
+
let(:view) { ActionView::Helpers::FormBuilder.new(:report, _grid, template, {}, Proc.new {|f| })}
|
18
17
|
subject { view }
|
19
18
|
|
20
19
|
|
@@ -22,6 +21,12 @@ describe Datagrid::FormBuilder do
|
|
22
21
|
|
23
22
|
subject { view.datagrid_filter(_filter)}
|
24
23
|
context "with default filter type" do
|
24
|
+
let(:_grid) {
|
25
|
+
test_report do
|
26
|
+
scope {Entry}
|
27
|
+
filter(:name)
|
28
|
+
end
|
29
|
+
}
|
25
30
|
let(:_filter) { :name }
|
26
31
|
it { should equal_to_dom(
|
27
32
|
'<input class="name default_filter" id="report_name" name="report[name]" size="30" type="text"/>'
|
@@ -29,12 +34,26 @@ describe Datagrid::FormBuilder do
|
|
29
34
|
end
|
30
35
|
context "with integer filter type" do
|
31
36
|
let(:_filter) { :group_id }
|
37
|
+
let(:_grid) {
|
38
|
+
test_report do
|
39
|
+
scope {Entry}
|
40
|
+
filter(:group_id, :integer)
|
41
|
+
end
|
42
|
+
}
|
32
43
|
it { should equal_to_dom(
|
33
|
-
'<input class="group_id integer_filter" id="report_group_id" name="report[group_id]" size="30" type="text"
|
44
|
+
'<input class="group_id integer_filter" id="report_group_id" name="report[group_id]" size="30" type="text"/>'
|
34
45
|
)}
|
35
46
|
end
|
36
47
|
context "with enum filter type" do
|
37
48
|
let(:_filter) { :category }
|
49
|
+
let(:_grid) {
|
50
|
+
test_report do
|
51
|
+
scope {Entry}
|
52
|
+
filter(:category, :enum, :select => ["first", "second"])
|
53
|
+
filter(:category_without_include_blank, :enum, :select => ["first", "second"], :include_blank => false)
|
54
|
+
filter(:category_with_prompt, :enum, :select => ["first", "second"], :prompt => "My Prompt")
|
55
|
+
end
|
56
|
+
}
|
38
57
|
it { should equal_to_dom(
|
39
58
|
'<select class="category enum_filter" id="report_category" name="report[category]"><option value=""></option>
|
40
59
|
<option value="first">first</option>
|
@@ -42,7 +61,7 @@ describe Datagrid::FormBuilder do
|
|
42
61
|
)}
|
43
62
|
context "when first option is selected" do
|
44
63
|
before(:each) do
|
45
|
-
|
64
|
+
_grid.category = "first"
|
46
65
|
end
|
47
66
|
it { should equal_to_dom(
|
48
67
|
'<select class="category enum_filter" id="report_category" name="report[category]"><option value=""></option>
|
@@ -50,10 +69,32 @@ describe Datagrid::FormBuilder do
|
|
50
69
|
<option value="second">second</option></select>'
|
51
70
|
)}
|
52
71
|
end
|
72
|
+
context "with include_blank option set to false" do
|
73
|
+
let(:_filter) { :category_without_include_blank }
|
74
|
+
it { should equal_to_dom(
|
75
|
+
'<select class="category_without_include_blank enum_filter" id="report_category_without_include_blank" name="report[category_without_include_blank]">
|
76
|
+
<option value="first">first</option>
|
77
|
+
<option value="second">second</option></select>'
|
78
|
+
)}
|
79
|
+
end
|
80
|
+
context "with prompt option" do
|
81
|
+
let(:_filter) { :category_with_prompt }
|
82
|
+
it { should equal_to_dom(
|
83
|
+
'<select class="category_with_prompt enum_filter" id="report_category_with_prompt" name="report[category_with_prompt]"><option value="">My Prompt</option>
|
84
|
+
<option value="first">first</option>
|
85
|
+
<option value="second">second</option></select>'
|
86
|
+
)}
|
87
|
+
end
|
53
88
|
end
|
54
89
|
|
55
90
|
context "with eboolean filter type" do
|
56
91
|
let(:_filter) { :disabled }
|
92
|
+
let(:_grid) do
|
93
|
+
test_report do
|
94
|
+
scope {Entry}
|
95
|
+
filter(:disabled, :eboolean)
|
96
|
+
end
|
97
|
+
end
|
57
98
|
it { should equal_to_dom(
|
58
99
|
'<select class="disabled boolean_enum_filter" id="report_disabled" name="report[disabled]"><option value=""></option>
|
59
100
|
<option value="YES">YES</option>
|
@@ -61,7 +102,7 @@ describe Datagrid::FormBuilder do
|
|
61
102
|
)}
|
62
103
|
end
|
63
104
|
context "with string filter" do
|
64
|
-
let(:
|
105
|
+
let(:_grid) do
|
65
106
|
test_report do
|
66
107
|
scope {Entry}
|
67
108
|
filter(:name, :string)
|
@@ -74,7 +115,7 @@ describe Datagrid::FormBuilder do
|
|
74
115
|
end
|
75
116
|
|
76
117
|
context "with non multiple filter" do
|
77
|
-
let(:
|
118
|
+
let(:_grid) do
|
78
119
|
test_report do
|
79
120
|
scope {Entry}
|
80
121
|
filter(
|
@@ -91,6 +132,12 @@ describe Datagrid::FormBuilder do
|
|
91
132
|
end
|
92
133
|
|
93
134
|
describe ".datagrid_label" do
|
135
|
+
let(:_grid) do
|
136
|
+
test_report do
|
137
|
+
scope {Entry}
|
138
|
+
filter(:name, :string)
|
139
|
+
end
|
140
|
+
end
|
94
141
|
it "should generate label for filter" do
|
95
142
|
view.datagrid_label(:name).should equal_to_dom(
|
96
143
|
'<label for="report_name">Name</label>'
|
@@ -25,8 +25,8 @@ describe Datagrid::Helper do
|
|
25
25
|
subject.stub!(:datagrid_order_for).and_return(subject.content_tag(:div, "", :class => "order"))
|
26
26
|
end
|
27
27
|
it "should return data table html" do
|
28
|
-
subject.datagrid_table(grid).should equal_to_dom(
|
29
|
-
|
28
|
+
subject.datagrid_table(grid).should equal_to_dom(<<-HTML)
|
29
|
+
<table class="datagrid">
|
30
30
|
<tr>
|
31
31
|
<th>Group<div class="order"></div>
|
32
32
|
</th>
|
@@ -38,16 +38,17 @@ describe Datagrid::Helper do
|
|
38
38
|
<td>Pop</td>
|
39
39
|
<td>Star</td>
|
40
40
|
</tr>
|
41
|
-
</table>
|
41
|
+
</table>
|
42
|
+
HTML
|
42
43
|
end
|
43
44
|
|
44
45
|
it "should support cycle option" do
|
45
|
-
subject.datagrid_rows(grid, [entry], :cycle => ["odd", "even"]).should equal_to_dom(
|
46
|
-
|
46
|
+
subject.datagrid_rows(grid, [entry], :cycle => ["odd", "even"]).should equal_to_dom(<<-HTML)
|
47
|
+
<tr class="odd">
|
47
48
|
<td>Pop</td>
|
48
49
|
<td>Star</td>
|
49
|
-
</tr>
|
50
|
-
|
50
|
+
</tr>
|
51
|
+
HTML
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
data/spec/datagrid_spec.rb
CHANGED
@@ -40,13 +40,8 @@ describe SimpleReport do
|
|
40
40
|
|
41
41
|
|
42
42
|
context "when not defined on class level" do
|
43
|
-
|
44
|
-
|
45
|
-
SimpleReport.instance_variable_set("@scope", nil)
|
46
|
-
end
|
47
|
-
|
48
|
-
after(:each) do
|
49
|
-
SimpleReport.instance_variable_set("@scope", @scope)
|
43
|
+
subject do
|
44
|
+
test_report {}
|
50
45
|
end
|
51
46
|
|
52
47
|
it "should raise ConfigurationError" do
|
data/spec/support/schema.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datagrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 6
|
10
|
+
version: 0.3.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bogdan Gusiev
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-22 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -251,6 +251,7 @@ files:
|
|
251
251
|
- lib/datagrid/utils.rb
|
252
252
|
- spec/datagrid/active_model_spec.rb
|
253
253
|
- spec/datagrid/columns_spec.rb
|
254
|
+
- spec/datagrid/filters/composite_filters_spec.rb
|
254
255
|
- spec/datagrid/filters/enum_filter_spec.rb
|
255
256
|
- spec/datagrid/filters_spec.rb
|
256
257
|
- spec/datagrid/form_builder_spec.rb
|