table_helper 0.2.0 → 0.2.1

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/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,10 @@
1
1
  == master
2
2
 
3
+ == 0.2.1 / 2009-04-25
4
+
5
+ * Automatically determine the colspan for the last footer to match the number of headers
6
+ * Fix default headers including all model columns when using :select in the collection query
7
+
3
8
  == 0.2.0 / 2009-04-25
4
9
 
5
10
  * Reorganize documentation
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/contrib/sshpublisher'
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = 'table_helper'
8
- s.version = '0.2.0'
8
+ s.version = '0.2.1'
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.summary = 'Adds a helper method for generating HTML tables from collections'
11
11
 
@@ -25,6 +25,11 @@ module TableHelper
25
25
  end
26
26
 
27
27
  def html #:nodoc:
28
+ # Force the last cell to span the remaining columns
29
+ cells = row.cells.values
30
+ colspan = table.header.columns.length - cells[0..-2].inject(0) {|count, (name, cell)| count += (cell[:colspan] || 1).to_i}
31
+ cells.last[:colspan] ||= colspan if colspan > 1
32
+
28
33
  html_options = @html_options.dup
29
34
  html_options[:style] = "display: none; #{html_options[:style]}".strip if table.empty? && hide_when_empty
30
35
 
@@ -33,7 +33,17 @@ module TableHelper
33
33
  # pre-fill the header with those columns so that the user doesn't
34
34
  # have to
35
35
  klass = table.klass
36
- column(*klass.column_names.map(&:to_sym)) if klass && klass.respond_to?(:column_names)
36
+ if klass && klass.respond_to?(:column_names)
37
+ if !table.empty? && klass < ActiveRecord::Base
38
+ # Make sure only the attributes that have been loaded are used
39
+ column_names = table.collection.first.attributes.keys
40
+ else
41
+ # Assume all attributes are loaded
42
+ column_names = klass.column_names
43
+ end
44
+
45
+ column(*column_names.map(&:to_sym))
46
+ end
37
47
 
38
48
  @customized = false
39
49
  end
@@ -0,0 +1,2 @@
1
+ class Person < ActiveRecord::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreatePeople < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :people do |t|
4
+ t.string :first_name, :last_name
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :people
10
+ end
11
+ end
data/test/test_helper.rb CHANGED
@@ -3,6 +3,9 @@ $:.unshift("#{File.dirname(__FILE__)}/../../plugin_test_helper/lib")
3
3
  require 'rubygems'
4
4
  require 'plugin_test_helper'
5
5
 
6
+ # Run the migrations
7
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
8
+
6
9
  Test::Unit::TestCase.class_eval do
7
10
  private
8
11
  def assert_html_equal(expected, actual)
@@ -44,8 +44,8 @@ end
44
44
 
45
45
  class FooterWithCellsTest < Test::Unit::TestCase
46
46
  def setup
47
- table = TableHelper::CollectionTable.new([Object.new])
48
- @footer = TableHelper::Footer.new(table)
47
+ @table = TableHelper::CollectionTable.new([Object.new])
48
+ @footer = TableHelper::Footer.new(@table)
49
49
  @cell = @footer.cell :total, 20
50
50
  end
51
51
 
@@ -63,6 +63,19 @@ class FooterWithCellsTest < Test::Unit::TestCase
63
63
  end_str
64
64
  assert_html_equal expected, @footer.html
65
65
  end
66
+
67
+ def test_should_include_colspan_if_more_headers_than_footers
68
+ @table.header :title, :name, :value
69
+
70
+ expected = <<-end_str
71
+ <tfoot>
72
+ <tr>
73
+ <td class="object-total" colspan="3">20</td>
74
+ </tr>
75
+ </tfoot>
76
+ end_str
77
+ assert_html_equal expected, @footer.html
78
+ end
66
79
  end
67
80
 
68
81
  class FooterWithEmptyCollectionTest < Test::Unit::TestCase
@@ -250,3 +250,21 @@ class HeaderWithCustomHtmlOptionsTest < Test::Unit::TestCase
250
250
  assert_html_equal expected, @header.html
251
251
  end
252
252
  end
253
+
254
+ class HeaderWithModelsTest < ActiveRecord::TestCase
255
+ def setup
256
+ Person.create(:first_name => 'John', :last_name => 'Smith')
257
+ end
258
+
259
+ def test_should_include_all_columns_if_not_selecting_columns
260
+ table = TableHelper::CollectionTable.new(Person.all)
261
+ @header = TableHelper::Header.new(table)
262
+ assert_equal %w(first_name id last_name), @header.column_names.sort
263
+ end
264
+
265
+ def test_should_only_include_selected_columns_if_specified_in_query
266
+ table = TableHelper::CollectionTable.new(Person.all(:select => 'first_name'))
267
+ @header = TableHelper::Header.new(table)
268
+ assert_equal %w(first_name), @header.column_names.sort
269
+ end
270
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Pfeifer
@@ -45,6 +45,13 @@ files:
45
45
  - test/unit/row_builder_test.rb
46
46
  - test/helpers
47
47
  - test/helpers/table_helper_test.rb
48
+ - test/app_root
49
+ - test/app_root/db
50
+ - test/app_root/db/migrate
51
+ - test/app_root/db/migrate/001_create_people.rb
52
+ - test/app_root/app
53
+ - test/app_root/app/models
54
+ - test/app_root/app/models/person.rb
48
55
  - CHANGELOG.rdoc
49
56
  - init.rb
50
57
  - LICENSE