dining-table 1.0.0 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e2bb002b4a0ab18643810cb14fb3790d285b384
4
- data.tar.gz: 0578437ede4fe83f41814a2c4d99ee898b52a953
3
+ metadata.gz: 5624a9625e338420410c971d0d7d14105cddd1a9
4
+ data.tar.gz: 55197b3b204db1726e9678761b490e4c26266f67
5
5
  SHA512:
6
- metadata.gz: 882749ff1912bd3c9467c334f9a5abfa4eaf48e0b3a43fccb2595a74c1a50e77318720952e2a1ded192e4b75e63ccf51a7c6a307c78084bfb7cd6c791a973a6e
7
- data.tar.gz: abffd0f5edd5d89312482265a01b3fd2cafe6a73c20bb9f405a5bf37e35a2b6b1960c087f7fee9676f643c20bcea2ea09a0de7a7f0ef38b299b4a281ef88db5a
6
+ metadata.gz: cb6e4942a3224b25c866977ae72a1759e6793d49564848d6ee7a417351a9b92bdf4655757f8589c16ae9388b79bf3c7560cb09f9b268b1d4e75b50807ddf3011
7
+ data.tar.gz: 1a3d5ee3346a3d7ee25f30fb28e45a003f3f656f607af4e4ce19c0af713a01fc7fcf70dbd4f4282b6fe3da507840fe706c92cf19e439cc2284115f0b9d7f8b9d
data/README.md CHANGED
@@ -95,7 +95,7 @@ class CarTable < DiningTable::Table
95
95
  end
96
96
  ```
97
97
 
98
- Please note how the collection passed in when creating the table obect (`@cars` in `CarTable.new(@cars, self)`) is available as `collection`.
98
+ Please note how the collection passed in when creating the table object (`@cars` in `CarTable.new(@cars, self)`) is available as `collection`.
99
99
 
100
100
  Similarly to `skip_header`, if for some reason you don't want a footer (even though at least one column defines one), call `skip_footer`:
101
101
 
@@ -107,6 +107,15 @@ class CarTable < DiningTable::Table
107
107
  end
108
108
  end
109
109
  ```
110
+ #### Empty collection
111
+
112
+ Note that when the collection to be presented in the table is empty, `dining-table` can't determine table headers
113
+ that aren't explicitly specified as there are no objects to use with `human_attribute_name`. In order to avoid this
114
+ edge case, you can pass in the class of the objects normally present in the collection when creating the table:
115
+
116
+ ```ruby
117
+ <%= CarTable.new(@cars, self, class: Car).render %>
118
+ ```
110
119
 
111
120
  ### Links and view helpers
112
121
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: dining-table 1.0.0 ruby lib
5
+ # stub: dining-table 1.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "dining-table".freeze
9
- s.version = "1.0.0"
9
+ s.version = "1.1.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Micha\u{eb}l Van Damme".freeze]
14
- s.date = "2018-06-17"
14
+ s.date = "2018-11-28"
15
15
  s.description = "Easily output tabular data, be it in HTML, CSV or XLSX. Create clean table classes instead of messing with views to create nice tables.".freeze
16
16
  s.email = "michael.vandamme@vub.ac.be".freeze
17
17
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ module DiningTable
26
26
  label = determine_label(:header)
27
27
  return label if label
28
28
  object_class = table.collection.first.class if table.collection.first
29
+ object_class ||= table.object_class if !object_class
29
30
  object_class.human_attribute_name( name ) if object_class && object_class.respond_to?( :human_attribute_name )
30
31
  end
31
32
  end
@@ -48,6 +48,10 @@ module DiningTable
48
48
  self.no_footer = true
49
49
  end
50
50
 
51
+ def object_class
52
+ options[:class]
53
+ end
54
+
51
55
  private
52
56
 
53
57
  # auxiliary function
@@ -36,7 +36,19 @@ describe 'HTMLTableSpec' do
36
36
  end
37
37
  end
38
38
  end
39
-
39
+
40
+ it "correctly renders a table's header when the table body is empty and a class is provided" do
41
+ html = CarTable.new([], nil, :class => CarWithHumanAttributeName).render
42
+ doc = document( html )
43
+ [ 'Brand', 'Number of doors', 'Stock' ].each_with_index do |header, col_index|
44
+ xpath = "/table/thead/tr[1]/th[#{ col_index + 1 }]"
45
+ check_not_empty(doc.elements, xpath)
46
+ doc.elements.each(xpath) do |element|
47
+ element.text.must_equal header
48
+ end
49
+ end
50
+ end
51
+
40
52
  it "correctly renders a table's header when explicit headers are defined" do
41
53
  @cars = CarWithHumanAttributeName.collection
42
54
  html = CarTableWithHeader.new(@cars, @view_context).render
@@ -55,6 +67,23 @@ describe 'HTMLTableSpec' do
55
67
  end
56
68
  end
57
69
 
70
+ it "correctly renders a table's header when explicit headers are defined and the table body is empty" do
71
+ html = CarTableWithHeader.new([], @view_context).render
72
+ doc = document( html )
73
+ [ 'The brand', 'The number of doors' ].each_with_index do |header, col_index|
74
+ xpath = "/table/thead/tr[1]/th[#{ col_index + 1 }]"
75
+ check_not_empty(doc.elements, xpath)
76
+ doc.elements.each(xpath) do |element|
77
+ element.text.must_equal header
78
+ end
79
+ end
80
+ # last header has link
81
+ doc.elements.each("/table/thead/tr[1]/th[3]/a") do |element|
82
+ element.text.must_equal 'Stock'
83
+ element.attributes.get_attribute('href').value.must_equal "http://www.google.com"
84
+ end
85
+ end
86
+
58
87
  it "correctly renders a table's footer when footers are defined" do
59
88
  @cars = CarWithHumanAttributeName.collection
60
89
  html = CarTableWithFooter.new(@cars, @view_context).render
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dining-table
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michaël Van Damme
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-17 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler