Spreadsheet-HTML 0.0.8 → 0.0.9

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: 536fbb8dbff6d3a46e7c42fa8be4345067abfd6d
4
- data.tar.gz: 3c1e0820a66d5147d27b872a59fb78de7e2e6a1c
3
+ metadata.gz: 74459c74abf314da4530023e49d8fe8215d4749b
4
+ data.tar.gz: 831d56fd9fa50caa9fde4549e299b0f12a8f0fe7
5
5
  SHA512:
6
- metadata.gz: 7fd20c220637862ce21c526c43ec3ef196679ced8120188de92b974d5401a4da2966a62676ea178d99d2fe18cac0420259a99608e1ab7ceb4f8d9afb8fd9da40
7
- data.tar.gz: 8c81843c873153648487b1880fbcd55ef3240dc9364be9fea7fc307f8bd0c5cd010b03b3c393f78cf4631e0784caac0ee0f3d71e37a276fece9897c3e0ba3ae5
6
+ metadata.gz: 1ea3934540e350a44509d2f3cc7e8dc2c302b8d1c578464467a5cc781a502f750678d0a7d2f543b2c46ba936e8b8b8c97c8d66dc420cdbe77c976b5fae2455b8
7
+ data.tar.gz: 4b71690518be878ec820a4cc0349a29d2c5601d4fbd2ad9b814a3c518eb7ce80d3d737a9f954a1f8a896686e140cbfe4d230ae077c97129655224638bf5b967b
data/Changes CHANGED
@@ -1,5 +1,9 @@
1
1
  Revision history for html-autotag-ruby
2
2
 
3
+ 0.0.9
4
+ - implemented Dynamic Tags by headings
5
+ - handle invalid fill params more gracefully
6
+
3
7
  0.0.8
4
8
  - implemented fill param
5
9
  - "defactored" HTML Encoding into this module
data/README CHANGED
@@ -109,8 +109,23 @@ fill
109
109
  fill => '8x12' # 8 rows, 12 columns
110
110
 
111
111
  == Dynamic Parameters
112
- There currently are no Dynamic Parameters, but they will be implemented soon enough.
113
- They will allow the client to modify headings by name and row/columns by their indices.
112
+ Dynamic parameters provide a means to control the micro elements of the table,
113
+ such as modifying headings by their name and rows and columns by their indices.
114
+ They contain leading underscores to seperate them from literal and tag parameters.
115
+
116
+ _rX
117
+ Hash. Apply these attributes to row X (zero index based).
118
+
119
+ _cX
120
+ Hash. Apply these attributes to colum X (zero index based). You can also alias any
121
+ column by the value of the heading name in that column prepended with underscore (_)
122
+
123
+ _occupation => { 'class' => 'foo' }
124
+
125
+ _salary => { 'class' => 'foo' }
126
+
127
+ _rXcY
128
+ Hash. Apply these attributes to colum Y in row X (zero index based).
114
129
 
115
130
  == Tag Parameters
116
131
  Tag Parameters provide a means to control the attributes of the table's tags, and in
@@ -127,39 +127,56 @@ module Spreadsheet
127
127
  def _process( args )
128
128
  params = _args( args )
129
129
 
130
- # headings is an alias for -r0
131
- params['-r0'] = params['headings']
130
+ # headings is an alias for _r0
131
+ params['_r0'] = params['headings']
132
132
 
133
133
  index = {}
134
134
  if params['data'][0].size()
135
- # implement index mapping
135
+ for i in 0 .. params['data'][0].size() - 1
136
+ key = params['data'][0][i] || ''
137
+ index["_#{key}"] = i
138
+ end
139
+
140
+ params.keys.grep( /^_/ ) do |key|
141
+ k = index[key]
142
+ params["_c#{k}"] = params[key] if index.has_key?( key )
143
+ end
136
144
  end
137
145
 
138
- data = params['data']
139
- empty = params.has_key?('empty') ? params['empty'] : ' '
146
+ empty = params['empty'] || ' '
140
147
  tag = ( params['matrix'] or params['headless'] ) ? 'td' : 'th'
141
148
 
142
149
  encoder = Enco::Der.new
143
- for i in 0 .. params['_max_rows'] - 1
150
+ for r in 0 .. params['_max_rows'] - 1
144
151
 
145
- data[i] ||= []
146
152
  unless params['_layout']
147
- (params['_max_cols'] - data[i].size).times { data[i].push( nil ) } # pad
148
- (data[i].size - params['_max_cols']).times { data[i].pop } # truncate
153
+ params['data'][r] ||= []
154
+ (params['_max_cols'] - params['data'][r].size).times { params['data'][r].push( nil ) } # pad
155
+ (params['data'][r].size - params['_max_cols']).times { params['data'][r].pop } # truncate
149
156
  end
150
157
 
151
- r = []
152
- data[i].each do |col|
153
- col = col.to_s
154
- col = encoder.encode( col, params['encodes'] ) if params['encode'] or !params['encodes'].to_s.empty?
155
- col = col.gsub( /^\s*$/, empty )
156
- r.push( { 'tag' => tag, 'attr' => params[tag], 'cdata' => col } )
158
+ row = []
159
+ for c in 0 .. params['_max_cols'] - 1
160
+
161
+ attr = params[tag] || {}
162
+ cdata = params['data'][r][c].to_s
163
+
164
+ [ tag, "_c#{c}", "_r#{r}", "_r#{r}c#{c}" ].each do |dyna_param|
165
+ if params.has_key?( dyna_param )
166
+ ( cdata, attr ) = _extrapolate( cdata, attr, params[dyna_param] );
167
+ end
168
+ end
169
+
170
+ cdata = encoder.encode( cdata, params['encodes'] ) if params['encode'] or !params['encodes'].to_s.empty?
171
+ cdata = cdata.gsub( /^\s*$/, empty.to_s )
172
+ row.push( { 'tag' => tag, 'attr' => attr, 'cdata' => cdata } )
173
+
157
174
  end
158
- data[i] = r
175
+
176
+ params['data'][r] = row
159
177
  tag = 'td'
160
178
  end
161
179
 
162
- params['data'] = data
163
180
  params['data'].shift if params['headless']
164
181
 
165
182
  return params
@@ -216,13 +233,33 @@ module Spreadsheet
216
233
 
217
234
  if params['fill']
218
235
  (row,col) = params['fill'].split(/\D/)
219
- params['_max_rows'] = row.to_i if row.to_i > params['_max_rows']
220
- params['_max_cols'] = col.to_i if col.to_i > params['_max_cols']
236
+ if row.to_i > 0 && col.to_i > 0
237
+ params['_max_rows'] = row.to_i if row.to_i > params['_max_rows']
238
+ params['_max_cols'] = col.to_i if col.to_i > params['_max_cols']
239
+ end
221
240
  end
222
241
 
223
242
  return params
224
243
  end
225
244
 
245
+ def _extrapolate( cdata, orig_attr, thingy )
246
+ new_attr = {}
247
+ thingy = [ thingy ] unless thingy.kind_of?(Array)
248
+ thingy.each do |t|
249
+ if t.kind_of?(Hash)
250
+ new_attr = t
251
+ #elsif t.kind_of?(Code)
252
+ # puts "What now?"
253
+ end
254
+ end
255
+
256
+ attr = {}
257
+ orig_attr.each { |key,val| attr[key] = val }
258
+ new_attr.each { |key,val| attr[key] = val }
259
+
260
+ return [ cdata, attr ]
261
+ end
262
+
226
263
  end
227
264
 
228
265
  end
@@ -1,5 +1,5 @@
1
1
  module Spreadsheet
2
2
  class HTML
3
- VERSION = "0.0.8"
3
+ VERSION = "0.0.9"
4
4
  end
5
5
  end
data/t/04-headless.rb CHANGED
@@ -40,6 +40,12 @@ class Test_Headless < Test::Unit::TestCase
40
40
  "one named arg"
41
41
  )
42
42
 
43
+ assert_equal(
44
+ '<table><tr><th>1</th><th>a</th></tr><tr><td>2</td><td>b</td></tr><tr><td>3</td><td>c</td></tr></table>',
45
+ gen.generate( 'data' => data ),
46
+ "headless does not change orig data"
47
+ )
48
+
43
49
  end
44
50
 
45
51
  def test_class
data/t/07-attrs.rb CHANGED
@@ -181,4 +181,117 @@ class Test_Attributes < Test::Unit::TestCase
181
181
  )
182
182
 
183
183
  end
184
+
185
+ def test_headings
186
+
187
+ data = Array[
188
+ %w(header1 header2 header3 header4),
189
+ %w(foo1 bar1 baz1 qux1),
190
+ %w(foo2 bar2 baz2 qux2),
191
+ %w(foo3 bar3 baz3 qux3),
192
+ %w(foo4 bar4 baz4 qux4)
193
+ ]
194
+
195
+ html = '<table><tr><th style="color: red;">header1</th><th style="color: green;">header2</th><th style="color: blue;">header3</th><th style="color: red;">header4</th></tr><tr><td>foo1</td><td>bar1</td><td>baz1</td><td>qux1</td></tr><tr><td>foo2</td><td>bar2</td><td>baz2</td><td>qux2</td></tr><tr><td>foo3</td><td>bar3</td><td>baz3</td><td>qux3</td></tr><tr><td>foo4</td><td>bar4</td><td>baz4</td><td>qux4</td></tr></table>'
196
+
197
+ assert_equal(
198
+ html,
199
+ Spreadsheet::HTML.new( 'data' => data, 'headings' => { 'style' => { 'color' => %w{ red green blue } } } ).generate(),
200
+ "via constructor only"
201
+ )
202
+ assert_equal(
203
+ html,
204
+ Spreadsheet::HTML.new().generate( 'data' => data, 'headings' => { 'style' => { 'color' => %w{ red green blue } } } ),
205
+ "via method only"
206
+ )
207
+ assert_equal(
208
+ html,
209
+ Spreadsheet::HTML.new( 'data' => data ).generate( 'headings' => { 'style' => { 'color' => %w{ red green blue } } } ),
210
+ "via constructor and method"
211
+ )
212
+
213
+ html = '<table><tr><th>header1</th><th style="color: red;">header2</th><th>header3</th><th>header4</th></tr><tr><td>foo1</td><td style="color: green;">bar1</td><td>baz1</td><td>qux1</td></tr><tr><td>foo2</td><td style="color: blue;">bar2</td><td>baz2</td><td>qux2</td></tr><tr><td>foo3</td><td style="color: red;">bar3</td><td>baz3</td><td>qux3</td></tr><tr><td>foo4</td><td style="color: green;">bar4</td><td>baz4</td><td>qux4</td></tr></table>'
214
+
215
+ assert_equal(
216
+ html,
217
+ Spreadsheet::HTML.new( 'data' => data, '_header2' => { 'style' => { 'color' => %w{ red green blue } } } ).generate(),
218
+ "via constructor only"
219
+ )
220
+ assert_equal(
221
+ html,
222
+ Spreadsheet::HTML.new().generate( 'data' => data, '_header2' => { 'style' => { 'color' => %w{ red green blue } } } ),
223
+ "via method only"
224
+ )
225
+ assert_equal(
226
+ html,
227
+ Spreadsheet::HTML.new( 'data' => data ).generate( '_header2' => { 'style' => { 'color' => %w{ red green blue } } } ),
228
+ "via constructor and method"
229
+ )
230
+
231
+ end
232
+
233
+ def test_dynamic_params
234
+
235
+ data = Array[
236
+ %w(header1 header2 header3),
237
+ %w(foo1 bar1 baz1),
238
+ %w(foo2 bar2 baz2),
239
+ ]
240
+
241
+ html = '<table><tr><th>header1</th><th style="color: red;">header2</th><th>header3</th></tr><tr><td>foo1</td><td style="color: green;">bar1</td><td>baz1</td></tr><tr><td>foo2</td><td style="color: blue;">bar2</td><td>baz2</td></tr></table>';
242
+
243
+ assert_equal(
244
+ html,
245
+ Spreadsheet::HTML.new( 'data' => data, '_c1' => { 'style' => { 'color' => %w{ red green blue } } } ).generate(),
246
+ "_c1 via constructor only"
247
+ )
248
+ assert_equal(
249
+ html,
250
+ Spreadsheet::HTML.new().generate( 'data' => data, '_c1' => { 'style' => { 'color' => %w{ red green blue } } } ),
251
+ "_c1 via method only"
252
+ )
253
+ assert_equal(
254
+ html,
255
+ Spreadsheet::HTML.new( 'data' => data ).generate( '_c1' => { 'style' => { 'color' => %w{ red green blue } } } ),
256
+ "_c1 via constructor and method"
257
+ )
258
+
259
+ html = '<table><tr><th>header1</th><th>header2</th><th>header3</th></tr><tr><td style="color: red;">foo1</td><td style="color: green;">bar1</td><td style="color: blue;">baz1</td></tr><tr><td>foo2</td><td>bar2</td><td>baz2</td></tr></table>';
260
+
261
+ assert_equal(
262
+ html,
263
+ Spreadsheet::HTML.new( 'data' => data, '_r1' => { 'style' => { 'color' => %w{ red green blue } } } ).generate(),
264
+ "_r1 via constructor only"
265
+ )
266
+ assert_equal(
267
+ html,
268
+ Spreadsheet::HTML.new().generate( 'data' => data, '_r1' => { 'style' => { 'color' => %w{ red green blue } } } ),
269
+ "_r1 via method only"
270
+ )
271
+ assert_equal(
272
+ html,
273
+ Spreadsheet::HTML.new( 'data' => data ).generate( '_r1' => { 'style' => { 'color' => %w{ red green blue } } } ),
274
+ "_r1 via constructor and method"
275
+ )
276
+
277
+ html = '<table><tr><th>header1</th><th>header2</th><th>header3</th></tr><tr><td>foo1</td><td>bar1</td><td style="color: red;">baz1</td></tr><tr><td>foo2</td><td>bar2</td><td>baz2</td></tr></table>';
278
+
279
+ assert_equal(
280
+ html,
281
+ Spreadsheet::HTML.new( 'data' => data, '_r1c2' => { 'style' => { 'color' => %w{ red green blue } } } ).generate(),
282
+ "_r1c2 via constructor only"
283
+ )
284
+ assert_equal(
285
+ html,
286
+ Spreadsheet::HTML.new().generate( 'data' => data, '_r1c2' => { 'style' => { 'color' => %w{ red green blue } } } ),
287
+ "_r1c2 via method only"
288
+ )
289
+ assert_equal(
290
+ html,
291
+ Spreadsheet::HTML.new( 'data' => data ).generate( '_r1c2' => { 'style' => { 'color' => %w{ red green blue } } } ),
292
+ "_r1c2 via constructor and method"
293
+ )
294
+
295
+ end
296
+
184
297
  end
data/t/09-padding.rb CHANGED
@@ -49,12 +49,42 @@ class Test_Padding < Test::Unit::TestCase
49
49
  "fill works with no data"
50
50
  )
51
51
 
52
+ assert_equal(
53
+ '<table><tr><th>header1</th><th>header2</th></tr><tr><td>foo1</td><td>bar1</td></tr><tr><td>foo2</td><td>bar2</td></tr></table>',
54
+ gen.generate( 'fill' => '1x2', 'data' => data ),
55
+ "fill does not truncate larger data"
56
+ )
57
+
58
+ assert_equal(
59
+ '<table><tr><th>&nbsp;</th></tr></table>',
60
+ gen.generate( 'fill' => nil ),
61
+ "fill defaults to 1x1 with with invalid data (nil)"
62
+ )
63
+
64
+ assert_equal(
65
+ '<table><tr><th>&nbsp;</th></tr></table>',
66
+ gen.generate( 'fill' => '' ),
67
+ "fill defaults to 1x1 with with invalid data (empty)"
68
+ )
69
+
52
70
  assert_equal(
53
71
  '<table><tr><th>&nbsp;</th></tr></table>',
54
72
  gen.generate( 'fill' => '0x0' ),
55
73
  "fill defaults to 1x1 with with invalid data (zero)"
56
74
  )
57
75
 
76
+ assert_equal(
77
+ '<table><tr><th>&nbsp;</th></tr></table>',
78
+ gen.generate( 'fill' => '-2x4' ),
79
+ "fill defaults to 1x1 with with invalid data (first negative)"
80
+ )
81
+
82
+ assert_equal(
83
+ '<table><tr><th>&nbsp;</th></tr></table>',
84
+ gen.generate( 'fill' => '1x-3' ),
85
+ "fill defaults to 1x1 with with invalid data (second negative)"
86
+ )
87
+
58
88
  assert_equal(
59
89
  '<table><tr><th>&nbsp;</th></tr></table>',
60
90
  gen.generate( 'fill' => 'axb' ),
data/t/11-empty.rb CHANGED
@@ -21,7 +21,13 @@ class Test_Empty < Test::Unit::TestCase
21
21
  assert_equal(
22
22
  '<table><tr><th>header1</th><th>header2</th><th>header3</th></tr><tr><td>foo1</td><td> </td><td>baz1</td></tr><tr><td> </td><td>bar2</td><td> </td></tr></table>',
23
23
  gen.generate( 'empty' => ' ' ),
24
- "empty values are overriden"
24
+ "empty values can be overriden (space)"
25
+ )
26
+
27
+ assert_equal(
28
+ '<table><tr><th>header1</th><th>header2</th><th>header3</th></tr><tr><td>foo1</td><td>0</td><td>baz1</td></tr><tr><td>0</td><td>bar2</td><td>0</td></tr></table>',
29
+ gen.generate( 'empty' => 0 ),
30
+ "empty values can be overriden (zero)"
25
31
  )
26
32
 
27
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Spreadsheet-HTML
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - jeffa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-18 00:00:00.000000000 Z
11
+ date: 2015-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler