taql 0.2.2 → 0.2.4

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
  SHA256:
3
- metadata.gz: bb1e8ae5f3c7d362624184f2f456a7922e9190da278309e3c5e09e93ebf074e2
4
- data.tar.gz: f27ad9873ea02dee880ec14e7a595729f96399cac8569d88d4b083bdacd12fed
3
+ metadata.gz: f24bc719d96fb2e39e7c563bff21d9faa0b571570fcc1c76014636f4e7ebd05a
4
+ data.tar.gz: 62abbf13a4fef7e0ab96324833e4a8f505c0e27103e95ddabcdcc3f23f3c2ee8
5
5
  SHA512:
6
- metadata.gz: e37c9fc4698480c30a44662f514e811a615b2b4875e2e1f87168f34e61aae82a8854eac81b54f675fbee443aee10da324f09b0807e5ca46e666ec75cc850ef9a
7
- data.tar.gz: 3ecf307be8ce238992e2cfa598052dc66c3ba18680980fa2953404b18fc12248f448aae6e16a7c15f1bec285ac63e63f4e5199c8a749f9ddb4c810357608812a
6
+ metadata.gz: b36295a5bcb1d37eb1c2c129447d13776ae6119b02bdefe22619da59176835e7dcfae8381abda207bffbf239da871c5790662b32085fb7135f5b913458d80ada
7
+ data.tar.gz: dd9a2b409e6f9bd4fbf8fa974dee215da841828f6c3fe4dccfe6ec9df04232e9efe3344b670b4c6fb3732d63929d614eba67d34cef8235833d1943f45f7087f5
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.2.4] - 2025-04-17
6
+
7
+ - Add back missing alias
8
+ - Add back support for older rubies
9
+ - Map with index
10
+
11
+ ## [0.2.3] - 2025-04-17
12
+
13
+ - Refactor table code
14
+
5
15
  ## [0.2.2] - 2025-04-08
6
16
 
7
17
  - Fixed a bug displaying empty tables
data/lib/taql/table.rb CHANGED
@@ -1,82 +1,70 @@
1
1
  module Taql
2
2
  class Table
3
- attr_reader :entries
3
+ DASH = "-".freeze
4
+ PLUS = "+".freeze
5
+ SPACE = " ".freeze
6
+ VERTICAL_BAR = "|".freeze
4
7
 
5
8
  def initialize(entries)
6
- @entries = entries
7
- end
8
-
9
- def print
10
- <<~OUTPUT
11
- #{separator}
12
- #{formatted_headers}
13
- #{separator}
14
- #{formatted_entries.join("\n")}
15
- #{separator}
16
- OUTPUT
9
+ @entries = entries.map { |entry| entry.transform_values(&:to_s) }
17
10
  end
18
11
 
19
- def to_s
20
- print
12
+ def body
13
+ entries.map(&:values)
21
14
  end
22
15
 
23
- def formatted_entries
24
- entries.each_with_object([]) do |entry, result|
25
- individual_entry = entry
26
- .map { |key, value| value.to_s.ljust(rows_max_length[key]) }
27
- .join(" | ")
28
-
29
- result << "| #{individual_entry} |"
16
+ def columns
17
+ headers.map do |header|
18
+ [header, *entries.map { |entry| entry[header] }]
30
19
  end
31
20
  end
32
21
 
33
- def formatted_headers
34
- output = headers.map do |header|
35
- header.upcase.ljust(rows_max_length[header])
36
- end.join(" | ")
37
-
38
- "| #{output} |"
22
+ def headers
23
+ entries.map(&:keys).uniq.flatten
39
24
  end
40
25
 
41
- def headers
42
- first.keys
26
+ def print
27
+ output if entries.any?
43
28
  end
44
29
 
45
30
  def rows
46
- entries.each_with_object(
47
- Hash.new { |hash, key| hash[key] = [] }
48
- ) do |entry, result|
49
- entry.each do |header, value|
50
- result[header] << value
51
- end
52
- end
31
+ [headers, *body]
53
32
  end
54
33
 
55
- def rows_max_length
56
- rows_with_headers.each_with_object({}) do |(key, values), result|
57
- result[key] = values.map { _1.to_s.length }.max
58
- end
34
+ private
35
+
36
+ attr_reader :entries
37
+
38
+ def column_widths
39
+ columns.map { |column| column.map(&:length).max }
59
40
  end
60
41
 
61
- def rows_with_headers
62
- headers.each_with_object({}) do |column, result|
63
- result[column] = rows[column].unshift(column)
42
+ def formatted(segments)
43
+ segments.map.with_index do |segment, index|
44
+ [SPACE, segment.ljust(column_widths[index]), SPACE].join
45
+ end.then do |segments|
46
+ [VERTICAL_BAR, segments.join(VERTICAL_BAR), VERTICAL_BAR].join
64
47
  end
65
48
  end
66
49
 
67
- def separator
68
- line = rows_with_headers.values.map do |values|
69
- length = values.map { _1.to_s.length }.max + 2
70
- Array.new(length, "-").join
71
- end.join("+")
72
-
73
- "+#{line}+"
50
+ def output
51
+ <<~OUTPUT
52
+ #{separator}
53
+ #{formatted(headers.map(&:upcase))}
54
+ #{separator}
55
+ #{body.map(&method(:formatted)).join("\n")}
56
+ #{separator}
57
+ OUTPUT
74
58
  end
75
59
 
76
- private
77
-
78
- def first
79
- entries.first
60
+ def separator
61
+ columns.map.with_index do |column, index|
62
+ Array.new(column_widths[index] + 2, DASH).join
63
+ end.then do |columns|
64
+ [PLUS, columns.join(PLUS), PLUS].join
65
+ end
80
66
  end
67
+
68
+ alias_method :to_s, :print
81
69
  end
82
70
  end
data/lib/taql/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Taql
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.4"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ariel Rzezak
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-04-08 00:00:00.000000000 Z
10
+ date: 2025-04-17 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: Taql allows you to pretty print SQL table queries in Rails.
13
13
  email: