cellar 0.1.4 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cellar.rb +47 -3
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b58422d5246d4a2b03c7aa4af26fe7ba44651310e3309fbd7951f591e0471fdd
4
- data.tar.gz: 4a2ffd2ddff0233d6952ad56e009c8a71fdb434a8dd72afc38ccf0ded3b46925
3
+ metadata.gz: ac9fdc01c855bbb6e9bfb1039562518f2296004f705dd93eb57c3cc8a659c2b7
4
+ data.tar.gz: 46b151aee44708d5845ed6e2cf37813666352d2bf55cbb1ac8f73918758a0f94
5
5
  SHA512:
6
- metadata.gz: af77ee166027269439035e19218f253a24a9d7f5c5c0c3686049e8c5f1cd3df06918f4482823a603c017211f773a319deec18a46f6bfd237241af3725e8045d7
7
- data.tar.gz: acec6a238c3c94c8a52b74e80d9e0500340538e687a3db345cc94afcfe9e6d59f1b2dcae1cbae846cadf3ddb4f80cc638a369ee5169352236178e011415380f9
6
+ metadata.gz: 974c75e352a63d10709d228cb1aab85b26756702d2df643ed95b7767134b6c9c39c3f67e5ee40ccd09d98745d6eee71330a0e1ed3cf3fa71235b46223eb26dba
7
+ data.tar.gz: 68a1494d0fc10db818c3a78e7e570901fe0b96b0a5e0b8264fae26afcf2308523a6570473d48903cf3c25bdef0c260c330f42819e7741d1c74086f4b6ff9f438
data/lib/cellar.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # cellar - Ruby gem to deal with cells of data in rows and columns
3
3
  #
4
4
  # Author: Steve Shreeve (steve.shreeve@gmail.com)
5
- # Date: October 8, 2024
5
+ # Date: October 14, 2024
6
6
  #
7
7
  # TODO:
8
8
  # • Should we failover to empty strings like this: (value || "")
@@ -24,7 +24,7 @@ class Object
24
24
  end
25
25
 
26
26
  class Cellar
27
- VERSION="0.1.4"
27
+ VERSION="0.1.6"
28
28
 
29
29
  attr_reader :fields
30
30
  attr_reader :values
@@ -62,6 +62,19 @@ class Cellar
62
62
  index
63
63
  end
64
64
 
65
+ def rename_field(field, other)
66
+ field = field.to_s
67
+ index = index(field) or raise "unable to rename the #{field.inspect} field"
68
+ @finder.delete(field.downcase.gsub(/\W/,'_'))
69
+ @finder.delete(field)
70
+ other = other.to_s
71
+ fields[index] = other
72
+ @finder[other.downcase.gsub(/\W/,'_')] ||= index
73
+ @finder[other] ||= index
74
+ @widest = fields.map(&:size).max
75
+ index
76
+ end
77
+
65
78
  def index(field)
66
79
  case field
67
80
  when String, Symbol
@@ -198,7 +211,7 @@ class Cellar
198
211
  @rows << @values = []
199
212
  self[*data.fields] = data.values
200
213
  elsif data.is_a?(Array) && !data.first.is_a?(Array)
201
- @rows << data
214
+ @rows << (@values = data)
202
215
  else
203
216
  raise "unable to << your object"
204
217
  end
@@ -269,4 +282,35 @@ class Cellar
269
282
  h
270
283
  end
271
284
  end
285
+
286
+ # ==[ Show table ]==
287
+
288
+ def show?
289
+ self
290
+ end
291
+
292
+ def show!(list=nil, output: :stdout)
293
+ tabs = output == :tabs
294
+ meth = list.is_a?(Array) ? list.method(:push) : method(:puts)
295
+ join = tabs ? "\t" : " │ "
296
+ size = @fields.size
297
+ full = cells
298
+ full.each_with_index do |vals, i| # only when asymmetric
299
+ miss = size - vals.size
300
+ full[i] += [nil] * miss if miss > 0
301
+ full[i] = vals[0...size] if miss < 0
302
+ end
303
+ lens = full.map {|r| r.map {|c| c.to_s.size}}.transpose.map(&:max)
304
+ pict = lens.map {|len| "%-#{len}.#{len}s" }.join(join)
305
+ pict = [join, pict, join].join.strip
306
+ line = (pict % ([""] * size)).tr("│ ", "•─")
307
+ seen = -1
308
+ meth["", line] unless tabs
309
+ full.each do |vals|
310
+ meth[pict % vals]
311
+ meth[line] if !tabs && ((seen += 1) == 0)
312
+ end
313
+ meth[line, "#{seen} rows displayed", ""] unless tabs
314
+ self
315
+ end
272
316
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cellar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Shreeve
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-10 00:00:00.000000000 Z
11
+ date: 2024-10-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby gem to deal with cells of data in rows and columns
14
14
  email: steve.shreeve@gmail.com