datagrid 0.7.1 → 0.8.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/Gemfile CHANGED
@@ -3,14 +3,15 @@ source "http://rubygems.org"
3
3
  gem "rails", ">= 3.0"
4
4
 
5
5
 
6
-
7
6
  group :development do
8
7
 
9
8
  gem "rake"
10
9
  gem "bundler"
11
10
  gem "jeweler"
12
11
 
12
+
13
13
  gem "debugger", :platform => "ruby_19"
14
+ gem "ruby-debug", :platform => "ruby_18"
14
15
 
15
16
  gem "rspec"
16
17
  gem "nokogiri" # used to test html output
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.8.0
@@ -0,0 +1,10 @@
1
+ <div class="order">
2
+ <%= link_to(
3
+ I18n.t("datagrid.table.order.asc", :default => "&uarr;".html_safe).html_safe,
4
+ url_for(grid.param_name => grid.attributes.merge(:order => column.name, :descending => false)),
5
+ :class => "order asc") %>
6
+ <%= link_to(
7
+ I18n.t("datagrid.table.order.desc", :default => "&darr;".html_safe).html_safe,
8
+ url_for(grid.param_name => grid.attributes.merge(:order => column.name, :descending => true )),
9
+ :class => "order desc") %>
10
+ </div>
data/datagrid.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "datagrid"
8
- s.version = "0.7.1"
8
+ s.version = "0.8.0"
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 = "2013-01-15"
12
+ s.date = "2013-04-07"
13
13
  s.description = "This allows you to easily build datagrid aka data tables with sortable columns and filters"
14
14
  s.email = "agresso@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "Readme.markdown",
25
25
  "VERSION",
26
26
  "app/views/datagrid/_head.html.erb",
27
+ "app/views/datagrid/_order_for.html.erb",
27
28
  "app/views/datagrid/_row.html.erb",
28
29
  "app/views/datagrid/_table.html.erb",
29
30
  "datagrid.gemspec",
@@ -55,6 +56,7 @@ Gem::Specification.new do |s|
55
56
  "lib/datagrid/ordering.rb",
56
57
  "lib/datagrid/renderer.rb",
57
58
  "lib/datagrid/rspec.rb",
59
+ "lib/datagrid/scaffold.rb",
58
60
  "lib/datagrid/utils.rb",
59
61
  "lib/tasks/datagrid_tasks.rake",
60
62
  "spec/datagrid/active_model_spec.rb",
@@ -81,7 +83,12 @@ Gem::Specification.new do |s|
81
83
  "spec/support/mongo_mapper.rb",
82
84
  "spec/support/mongoid.rb",
83
85
  "spec/support/simple_report.rb",
84
- "spec/support/test_partials/_actions.html.erb"
86
+ "spec/support/test_partials/_actions.html.erb",
87
+ "template/controller.rb.erb",
88
+ "template/grid.rb.erb",
89
+ "templates/controller.rb.erb",
90
+ "templates/grid.rb.erb",
91
+ "templates/index.html.erb"
85
92
  ]
86
93
  s.homepage = "http://github.com/bogdan/datagrid"
87
94
  s.licenses = ["MIT"]
@@ -98,6 +105,7 @@ Gem::Specification.new do |s|
98
105
  s.add_development_dependency(%q<bundler>, [">= 0"])
99
106
  s.add_development_dependency(%q<jeweler>, [">= 0"])
100
107
  s.add_development_dependency(%q<debugger>, [">= 0"])
108
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
101
109
  s.add_development_dependency(%q<rspec>, [">= 0"])
102
110
  s.add_development_dependency(%q<nokogiri>, [">= 0"])
103
111
  s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
@@ -112,6 +120,7 @@ Gem::Specification.new do |s|
112
120
  s.add_dependency(%q<bundler>, [">= 0"])
113
121
  s.add_dependency(%q<jeweler>, [">= 0"])
114
122
  s.add_dependency(%q<debugger>, [">= 0"])
123
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
115
124
  s.add_dependency(%q<rspec>, [">= 0"])
116
125
  s.add_dependency(%q<nokogiri>, [">= 0"])
117
126
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
@@ -127,6 +136,7 @@ Gem::Specification.new do |s|
127
136
  s.add_dependency(%q<bundler>, [">= 0"])
128
137
  s.add_dependency(%q<jeweler>, [">= 0"])
129
138
  s.add_dependency(%q<debugger>, [">= 0"])
139
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
130
140
  s.add_dependency(%q<rspec>, [">= 0"])
131
141
  s.add_dependency(%q<nokogiri>, [">= 0"])
132
142
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
data/lib/datagrid.rb CHANGED
@@ -31,23 +31,16 @@ module Datagrid
31
31
  include ::Datagrid::Ordering
32
32
 
33
33
  end
34
- base.send :include, InstanceMethods
35
34
  end # self.included
36
35
 
37
36
  module ClassMethods
38
-
39
-
40
37
  end # ClassMethods
41
38
 
42
- module InstanceMethods
43
-
44
- end # InstanceMethods
45
-
46
39
  class ConfigurationError < StandardError; end
47
40
  class ArgumentError < ::ArgumentError; end
48
41
 
49
-
50
42
  end
51
43
 
44
+ require "datagrid/scaffold"
52
45
 
53
46
 
@@ -21,11 +21,13 @@ module Datagrid
21
21
  module ClassMethods
22
22
 
23
23
  # Returns a list of columns defined.
24
+ # All column definistion are returned by default
24
25
  # You can limit the output with only columns you need like:
25
26
  #
26
27
  # grid.columns(:id, :name)
27
28
  #
28
29
  # Supported options:
30
+ #
29
31
  # * :data - if true returns only non-html columns. Default: false.
30
32
  def columns(*args)
31
33
  options = args.extract_options!
@@ -94,15 +96,27 @@ module Datagrid
94
96
  self.rows.unshift(self.header)
95
97
  end
96
98
 
97
- # Return Array of Hashes where keys are column names and values are column values for each row in datagrid <tt>#assets</tt>
99
+ # Return Array of Hashes where keys are column names and values are column values
100
+ # for each row in datagrid <tt>#assets</tt>
98
101
  def data_hash
99
102
  self.assets.map do |asset|
100
103
  hash_for(asset)
101
104
  end
102
105
  end
103
106
 
107
+ # Returns a CSV representation of the data in the table
108
+ # You are able to specify which columns you want to see in CSV.
109
+ # All data columns are included by default
110
+ # Also you can specify options hash as last argument that is proxied to
111
+ # Ruby CSV library.
112
+ #
113
+ # Example:
114
+ #
115
+ # grid.to_csv
116
+ # grid.to_csv(:id, :name)
117
+ # grid.to_csv(:col_sep => ';')
104
118
  def to_csv(*column_names)
105
- options = columns.extract_options!
119
+ options = column_names.extract_options!
106
120
  klass = if RUBY_VERSION >= "1.9"
107
121
  require 'csv'
108
122
  CSV
@@ -84,7 +84,8 @@ module Datagrid
84
84
  def assets
85
85
  result = super
86
86
  self.class.filters.each do |filter|
87
- result = filter.apply(self, result, filter_value(filter))
87
+ result_filter = filter.apply(self, result, filter_value(filter))
88
+ result = result_filter if result_filter
88
89
  end
89
90
  result
90
91
  end
@@ -72,17 +72,7 @@ module Datagrid
72
72
  end
73
73
 
74
74
  def order_for(grid, column)
75
- @template.content_tag(:div, :class => "order") do
76
- @template.link_to(
77
- I18n.t("datagrid.table.order.asc", :default => "&uarr;".html_safe),
78
- @template.url_for(grid.param_name => grid.attributes.merge(:order => column.name, :descending => false)),
79
- :class => "order asc"
80
- ) + " " + @template.link_to(
81
- I18n.t("datagrid.table.order.desc", :default => "&darr;".html_safe),
82
- @template.url_for(grid.param_name => grid.attributes.merge(:order => column.name, :descending => true )),
83
- :class => "order desc"
84
- )
85
- end
75
+ @template.render :partial => "datagrid/order_for", :locals => { :grid => grid, :column => column }
86
76
  end
87
77
 
88
78
 
@@ -0,0 +1,58 @@
1
+ require "rails/generators"
2
+
3
+ class Datagrid::Scaffold < Rails::Generators::NamedBase
4
+ source_root File.expand_path(__FILE__ + "/../../../templates")
5
+
6
+ def create_scaffold
7
+ template "grid.rb.erb", "app/grids/#{grid_class_name.underscore}.rb"
8
+ template "controller.rb.erb", "app/controllers/#{grid_controller_name.underscore}.rb"
9
+ template "index.html.erb", "app/views/#{grid_controller_short_name}/index.html.erb"
10
+ route("resources :#{grid_controller_short_name}")
11
+ end
12
+
13
+ def grid_class_name
14
+ file_name.camelize.pluralize + "Grid"
15
+ end
16
+
17
+ def grid_controller_name
18
+ grid_controller_short_name.camelize + "Controller"
19
+ end
20
+
21
+ def grid_controller_short_name
22
+ file_name.underscore.pluralize
23
+ end
24
+
25
+ def grid_model_name
26
+ file_name.camelize.singularize
27
+ end
28
+
29
+ def grid_ivar_name
30
+ grid_class_name.underscore
31
+ end
32
+
33
+ def paginate_code
34
+ if defined?(Kaminari)
35
+ "page(params[:page])"
36
+ elsif defned?(WillPaginate)
37
+ "paginate(:page => params[:page])"
38
+ else
39
+ "paginate_somehow"
40
+ end
41
+ end
42
+
43
+ def pagination_helper_code
44
+ if defined?(Kaminari)
45
+ "paginate(@assets)"
46
+ elsif defned?(WillPaginate)
47
+ "will_paginate(@assets)"
48
+ else
49
+ "some_pagination_helper(@assets)"
50
+ end
51
+
52
+ end
53
+
54
+ def grid_route_name
55
+ grid_controller_short_name + "_path"
56
+ end
57
+
58
+ end
@@ -13,6 +13,7 @@ namespace :datagrid do
13
13
  end
14
14
  copy_template "views/datagrid/_table.html.erb"
15
15
  copy_template "views/datagrid/_head.html.erb"
16
+ copy_template "views/datagrid/_order_for.html.erb"
16
17
  copy_template "views/datagrid/_row.html.erb"
17
18
  end
18
19
 
@@ -53,6 +53,10 @@ describe Datagrid::Columns do
53
53
  it "should support csv export of particular columns" do
54
54
  subject.to_csv(:name).should == "Name\nStar\n"
55
55
  end
56
+
57
+ it "should support csv export options" do
58
+ subject.to_csv(:col_sep => ";").should == "Group;Name;Access level;Pet\nPop;Star;admin;ROTTWEILER\n"
59
+ end
56
60
  end
57
61
 
58
62
  it "should support columns with model and report arguments" do
@@ -114,4 +114,19 @@ describe Datagrid::Filters do
114
114
  end
115
115
 
116
116
  end
117
+ describe "default filter as scope" do
118
+ it "should create default filter if scope respond to filter name method" do
119
+ Entry.create!
120
+ grid = test_report(:custom => 'skip') do
121
+ scope {Entry}
122
+ filter(:custom) do |value|
123
+ if value != 'skip'
124
+ where(:custom => value)
125
+ end
126
+ end
127
+ end
128
+ grid.assets.should_not be_empty
129
+ end
130
+
131
+ end
117
132
  end
@@ -272,7 +272,8 @@ describe Datagrid::Helper do
272
272
  grid = OrderedGrid.new(:descending => true, :order => :category)
273
273
  subject.datagrid_order_for(grid, grid.column_by_name(:category)).should equal_to_dom(<<-HTML)
274
274
  <div class="order">
275
- <a href="ordered_grid%5Bdescending%5D=false&amp;ordered_grid%5Border%5D=category" class="order asc">&uarr;</a> <a href="ordered_grid%5Bdescending%5D=true&amp;ordered_grid%5Border%5D=category" class="order desc">&darr;</a>
275
+ <a href="ordered_grid%5Bdescending%5D=false&amp;ordered_grid%5Border%5D=category" class="order asc">&uarr;</a>
276
+ <a href="ordered_grid%5Bdescending%5D=true&amp;ordered_grid%5Border%5D=category" class="order desc">&darr;</a>
276
277
  </div>
277
278
  HTML
278
279
  end
@@ -34,17 +34,24 @@ end
34
34
  class EqualToDom
35
35
 
36
36
  def initialize(expectation)
37
- @expectation = Nokogiri::HTML::DocumentFragment.parse(expectation.strip).to_s
37
+ @expectation = Nokogiri::HTML::DocumentFragment.parse(force_encoding(expectation).strip).to_s
38
38
  end
39
39
 
40
40
  def matches?(text)
41
- @matcher = Nokogiri::HTML::DocumentFragment.parse(text.strip).to_s
41
+
42
+ @matcher = Nokogiri::HTML::DocumentFragment.parse(force_encoding(text).strip).to_s
42
43
  @matcher == @expectation
43
44
  end
44
45
 
45
46
  def failure_message
46
47
  "Expected dom #{@matcher} to match #{@expectation}, but it wasn't"
47
48
  end
49
+
50
+ private
51
+
52
+ def force_encoding(text)
53
+ "1.9.3".respond_to?(:force_encoding) ? text.clone.force_encoding("UTF-8") : text
54
+ end
48
55
  end
49
56
 
50
57
 
@@ -0,0 +1,9 @@
1
+ class <%= class_name %>Controller < ApplicationController
2
+
3
+ def index
4
+ @grid = <%= class_name %>Grid.new(params[:<%= (class_name + "Grid").underscore %>])
5
+ @assets = @grid.assets.page(params[:page])
6
+ end
7
+
8
+ end
9
+
@@ -0,0 +1,10 @@
1
+ class <%= class_name %>Grid
2
+
3
+ include Datagrid
4
+
5
+ scope do
6
+ <%= class_name.singularize %>
7
+ end
8
+
9
+ column(:id)
10
+ end
@@ -0,0 +1,9 @@
1
+ class <%= grid_controller_name %> < ApplicationController
2
+
3
+ def index
4
+ @grid = <%= grid_class_name %>.new(params[:<%= grid_ivar_name %>])
5
+ @assets = @grid.assets.<%= paginate_code %>
6
+ end
7
+
8
+ end
9
+
@@ -0,0 +1,17 @@
1
+ class <%= grid_class_name %>
2
+
3
+ include Datagrid
4
+
5
+ scope do
6
+ <%= grid_model_name %>
7
+ end
8
+
9
+ filter(:id, :integer)
10
+ filter(:created_at, :date, :range => true)
11
+
12
+ column(:id)
13
+ column(:name)
14
+ column(:created_at) do |model|
15
+ model.created_at.to_date
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ <%%= form_for @grid, :method => :get, :url => <%= grid_route_name %> do |f| %>
2
+ <%% @grid.filters.each do |filter| %>
3
+ <div class="field">
4
+ <%%= f.datagrid_label filter %>
5
+ <%%= f.datagrid_filter filter %>
6
+ </div>
7
+ <%% end %>
8
+ <%%= f.submit %>
9
+ <%% end %>
10
+
11
+ <%%= <%=pagination_helper_code%> %>
12
+ <%%= datagrid_table @grid, @assets %>
13
+ <%%= <%=pagination_helper_code%> %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datagrid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-15 00:00:00.000000000 Z
12
+ date: 2013-04-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: ruby-debug
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: rspec
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -235,6 +251,7 @@ files:
235
251
  - Readme.markdown
236
252
  - VERSION
237
253
  - app/views/datagrid/_head.html.erb
254
+ - app/views/datagrid/_order_for.html.erb
238
255
  - app/views/datagrid/_row.html.erb
239
256
  - app/views/datagrid/_table.html.erb
240
257
  - datagrid.gemspec
@@ -266,6 +283,7 @@ files:
266
283
  - lib/datagrid/ordering.rb
267
284
  - lib/datagrid/renderer.rb
268
285
  - lib/datagrid/rspec.rb
286
+ - lib/datagrid/scaffold.rb
269
287
  - lib/datagrid/utils.rb
270
288
  - lib/tasks/datagrid_tasks.rake
271
289
  - spec/datagrid/active_model_spec.rb
@@ -293,6 +311,11 @@ files:
293
311
  - spec/support/mongoid.rb
294
312
  - spec/support/simple_report.rb
295
313
  - spec/support/test_partials/_actions.html.erb
314
+ - template/controller.rb.erb
315
+ - template/grid.rb.erb
316
+ - templates/controller.rb.erb
317
+ - templates/grid.rb.erb
318
+ - templates/index.html.erb
296
319
  homepage: http://github.com/bogdan/datagrid
297
320
  licenses:
298
321
  - MIT
@@ -308,7 +331,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
308
331
  version: '0'
309
332
  segments:
310
333
  - 0
311
- hash: -1867326624462415975
334
+ hash: 1083654781262067166
312
335
  required_rubygems_version: !ruby/object:Gem::Requirement
313
336
  none: false
314
337
  requirements: