tablemaker 0.0.1 → 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: 2020838ec57d806d09cdf6f7cdca6e510445af70
4
+ data.tar.gz: 6fbd9ee26378d4a235523e09cace326bab7bd8e9
5
+ !binary "U0hBNTEy":
6
+ metadata.gz: 1147d0331ddfe3b0a755396da495ed0041a92c4a92b64fefba6f018958b547d547578a9b2be922bac06c39a1a6ba3805116d4c27dfc7ce7d92129a29616c7339
7
+ data.tar.gz: b8acde1b9d40dd5fd0433d35a3ae0946ffd1b10655e80fa56cb72403206fdf2fac0d5deb2d3b207e2e23e509dd37e452327823ba1c6390dfce00d5fe1d761cc4
data/README.md CHANGED
@@ -3,7 +3,61 @@
3
3
  HTML table generator that allows arbitrary nested cell subdivisions
4
4
  and applies colspan/rowspan as needed.
5
5
 
6
- ## Examples
6
+ Including the gem in your Rails project will give you a new view helper `make_table`
7
+
8
+ ## Usage
9
+
10
+ = make_table(class: 'foo') do |t|
11
+ - t.row do
12
+ - t.th("A")
13
+ - t.th("B")
14
+ - t.th("C")
15
+ - t.row do
16
+ - t.column do
17
+ - t.td("E")
18
+ - t.td("F)
19
+ - t.td(style: 'background: green') do
20
+ %p cell content
21
+
22
+ this will generate this output:
23
+
24
+ <table class='foo'>
25
+ <tr>
26
+ <td>A</td>
27
+ <td>B</td>
28
+ <td>C</td>
29
+ </tr>
30
+ <tr>
31
+ <td>E</td>
32
+ <td style='background: green' rowspan='2' colspan='2'><p>cell centent</p></td>
33
+ </tr>
34
+ <tr>
35
+ <td>F</td>
36
+ </tr>
37
+ </table>
38
+
39
+
40
+ source:
41
+
42
+ <table class='foo'>
43
+ <tr>
44
+ <td>A</td>
45
+ <td>B</td>
46
+ <td>C</td>
47
+ </tr>
48
+ <tr>
49
+ <td>E</td>
50
+ <td style='background: green' rowspan='2' colspan='2'>
51
+ <p>cell centent</p>
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td>F</td>
56
+ </tr>
57
+ </table>
58
+
59
+
60
+ ## Examples outside Rails
7
61
 
8
62
  A very basic table:
9
63
 
@@ -72,23 +126,23 @@ A more advanced example:
72
126
 
73
127
  this will generate the following output:
74
128
 
75
- <table>
76
- <tr>
77
- <td rowspan=4>A</td>
78
- <td rowspan=2>B</td>
79
- <td>D</td>
80
- </tr>
81
- <tr>
82
- <td>E</td>
83
- </tr>
84
- <tr>
85
- <td rowspan=2>C</td>
86
- <td>F</td>
87
- </tr>
88
- <tr>
89
- <td>G</td>
90
- </tr>
91
- </table>
129
+ <table>
130
+ <tr>
131
+ <td rowspan=4>A</td>
132
+ <td rowspan=2>B</td>
133
+ <td>D</td>
134
+ </tr>
135
+ <tr>
136
+ <td>E</td>
137
+ </tr>
138
+ <tr>
139
+ <td rowspan=2>C</td>
140
+ <td>F</td>
141
+ </tr>
142
+ <tr>
143
+ <td>G</td>
144
+ </tr>
145
+ </table>
92
146
 
93
147
 
94
148
  Tablemaker keeps track of all the rowspan/colspan attributes required to generate a valid HTML table
@@ -9,7 +9,6 @@ module Tablemaker
9
9
  def self.row(&blk)
10
10
  Row.new(&blk)
11
11
  end
12
-
13
12
  end
14
13
 
15
14
  require 'tablemaker/railtie' if defined?(Rails)
@@ -0,0 +1,88 @@
1
+ module Tablemaker
2
+ class TableHelper
3
+ def initialize(context, &block)
4
+ @context = context
5
+ @stack = []
6
+
7
+ @root = Tablemaker.column do |r|
8
+ stack(r) do
9
+ yield self
10
+ end
11
+ end
12
+ end
13
+
14
+ def row(&block)
15
+ current.row do |r|
16
+ stack(r) do
17
+ yield
18
+ end
19
+ end
20
+ end
21
+
22
+ def column(&block)
23
+ current.column do |c|
24
+ stack(c, &block)
25
+ end
26
+ end
27
+
28
+ def line(&block)
29
+ current.respond_to?(:row) ? row(&block) : column(&block)
30
+ end
31
+
32
+ def td(*args, &blk)
33
+ cell("td", *args, &blk)
34
+ end
35
+
36
+ def th(*args, &blk)
37
+ cell("th", *args, &blk)
38
+ end
39
+
40
+ def to_html(attrs = {})
41
+ context.content_tag("table", attrs) do
42
+ @root.each_row do |r|
43
+ s = context.content_tag("tr") do
44
+ r.each do |c|
45
+ attrs = {}
46
+ attrs[:rowspan] = c.real_rows if c.real_rows > 1
47
+ attrs[:colspan] = c.real_cols if c.real_cols > 1
48
+ s2 = context.content_tag(c.data[:name], c.data[:opts].merge(attrs)) do
49
+ c.data[:text]
50
+ end
51
+
52
+ context.concat(s2)
53
+ end
54
+ end
55
+ context.concat(s)
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+ private
62
+
63
+ def cell(name, *args, &block)
64
+ opts = args.extract_options!
65
+ text = if block_given?
66
+ @context.capture(&block)
67
+ else
68
+ args.shift
69
+ end
70
+ current.cell(text: text, name: name, opts: opts)
71
+ end
72
+
73
+ def stack(frame)
74
+ @stack.push(frame)
75
+ yield
76
+ @stack.pop
77
+ end
78
+
79
+ def context
80
+ @context
81
+ end
82
+
83
+ def current
84
+ @stack.last
85
+ end
86
+
87
+ end
88
+ end
@@ -1,3 +1,3 @@
1
1
  module Tablemaker
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,97 +1,9 @@
1
1
  require 'action_view'
2
+ require 'tablemaker/table_helper'
2
3
 
3
4
  module Tablemaker
4
5
  module ViewHelpers
5
6
  module ActionView
6
- class TableHelper
7
- def initialize(context, &block)
8
- @context = context
9
- @stack = []
10
- @root = Tablemaker.column do |r|
11
- stack(r) do
12
- yield self
13
- end
14
- end
15
- end
16
-
17
- def row
18
- current.row do |r|
19
- stack(r) do
20
- yield
21
- end
22
- end
23
- end
24
-
25
- def column(&blk)
26
- if @stack.size == 1
27
- row do
28
- column(&blk)
29
- end
30
- else
31
- current.column do |c|
32
- stack(c, &blk)
33
- end
34
- end
35
- end
36
-
37
- def td(*args, &blk)
38
- cell("td", *args, &blk)
39
- end
40
-
41
- def th(*args, &blk)
42
- cell("th", *args, &blk)
43
- end
44
-
45
- def to_html(attrs = {})
46
- context.content_tag("table", attrs) do
47
- @root.each_row do |r|
48
- s = context.content_tag("tr") do
49
- r.each do |c|
50
- attrs = {}
51
- attrs[:rowspan] = c.real_rows if c.real_rows > 1
52
- attrs[:colspan] = c.real_cols if c.real_cols > 1
53
- s2 = context.content_tag(c.data[:name], c.data[:opts].merge(attrs)) do
54
- c.data[:text]
55
- end
56
-
57
- context.concat(s2)
58
- end
59
- end
60
- context.concat(s)
61
- end
62
- end
63
- end
64
-
65
-
66
- private
67
-
68
- def cell(name, *args, &block)
69
- opts = args.extract_options!
70
- text = if block_given?
71
- @context.capture(&block)
72
- else
73
- args.shift
74
- end
75
- current.cell(text: text, name: name, opts: opts)
76
- end
77
-
78
- def stack(frame)
79
- @stack.push(frame)
80
- yield
81
- @stack.pop
82
- end
83
-
84
- def context
85
- @context
86
- end
87
-
88
- def current
89
- @stack.last
90
- end
91
-
92
- end
93
-
94
-
95
7
  def make_table(opts = {}, &block)
96
8
  table = TableHelper.new(self, &block).to_html(opts)
97
9
  end
@@ -23,18 +23,6 @@ class TestTableMaker < ActionView::TestCase
23
23
  assert_dom_equal expected, table
24
24
  end
25
25
 
26
- test "should output simple table starting with columns correctly" do
27
- table = make_table do |t|
28
- t.column do
29
- t.td("A")
30
- t.td("B")
31
- end
32
- end
33
-
34
- expected = "<table><tr><td>A</td></tr><tr><td>B</td></tr></table>"
35
- assert_dom_equal expected, table
36
- end
37
-
38
26
  test "should output complex table correctly" do
39
27
  table = make_table do |t|
40
28
  t.row do
@@ -59,4 +47,33 @@ class TestTableMaker < ActionView::TestCase
59
47
 
60
48
  assert_dom_equal expected, table
61
49
  end
50
+
51
+ test "should have generic 'line' method that alternates between rows and columns" do
52
+ table = make_table do |t|
53
+ t.line do
54
+ t.line do
55
+ t.line do
56
+ t.td("A")
57
+ t.td("B")
58
+ end
59
+ end
60
+ t.line do
61
+ t.td("C")
62
+ t.td("D")
63
+ end
64
+ end
65
+ t.line do
66
+ t.td("E")
67
+ t.td("F")
68
+ end
69
+ end
70
+
71
+ expected = "<table>" +
72
+ "<tr><td rowspan=2>A</td><td rowspan=2>B</td><td>C</td></tr>" +
73
+ "<tr><td>D</td></tr>" +
74
+ "<tr><td>E</td><td colspan=2>F</td></tr>" +
75
+ "</table>"
76
+
77
+ assert_dom_equal expected, table
78
+ end
62
79
  end
@@ -225,7 +225,5 @@ describe "starting with rows or columns does not matter" do
225
225
  assert_table_structure [[@a1, @b1], [@c1, @d1]], @table1
226
226
  assert_table_structure [[@a2, @b2], [@c2, @d2]], @table2
227
227
  end
228
-
229
-
230
228
  end
231
229
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tablemaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Levin Alexander
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-07-17 00:00:00.000000000 Z
11
+ date: 2013-11-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: psych
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: minitest
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rails
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ! '>='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ! '>='
76
67
  - !ruby/object:Gem::Version
@@ -92,6 +83,7 @@ files:
92
83
  - lib/tablemaker.rb
93
84
  - lib/tablemaker/frame.rb
94
85
  - lib/tablemaker/railtie.rb
86
+ - lib/tablemaker/table_helper.rb
95
87
  - lib/tablemaker/version.rb
96
88
  - lib/tablemaker/view_helpers.rb
97
89
  - tablemaker.gemspec
@@ -100,33 +92,26 @@ files:
100
92
  - test/test_tablemaker.rb
101
93
  homepage: https://github.com/levinalex/tablemaker
102
94
  licenses: []
95
+ metadata: {}
103
96
  post_install_message:
104
97
  rdoc_options: []
105
98
  require_paths:
106
99
  - lib
107
100
  required_ruby_version: !ruby/object:Gem::Requirement
108
- none: false
109
101
  requirements:
110
102
  - - ! '>='
111
103
  - !ruby/object:Gem::Version
112
104
  version: '0'
113
- segments:
114
- - 0
115
- hash: 3601937828848287223
116
105
  required_rubygems_version: !ruby/object:Gem::Requirement
117
- none: false
118
106
  requirements:
119
107
  - - ! '>='
120
108
  - !ruby/object:Gem::Version
121
109
  version: '0'
122
- segments:
123
- - 0
124
- hash: 3601937828848287223
125
110
  requirements: []
126
111
  rubyforge_project:
127
- rubygems_version: 1.8.24
112
+ rubygems_version: 2.0.3
128
113
  signing_key:
129
- specification_version: 3
114
+ specification_version: 4
130
115
  summary: ''
131
116
  test_files:
132
117
  - test/helper.rb