taql 0.2.2 → 0.2.3

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: 106f6fd29eb626394dfcae398aaf2b79696574c3828b313ca528c60686fb7891
4
+ data.tar.gz: b578ac768cd8c7c8aa1e588619868d96c77eab2a67387fb254947b076243bd34
5
5
  SHA512:
6
- metadata.gz: e37c9fc4698480c30a44662f514e811a615b2b4875e2e1f87168f34e61aae82a8854eac81b54f675fbee443aee10da324f09b0807e5ca46e666ec75cc850ef9a
7
- data.tar.gz: 3ecf307be8ce238992e2cfa598052dc66c3ba18680980fa2953404b18fc12248f448aae6e16a7c15f1bec285ac63e63f4e5199c8a749f9ddb4c810357608812a
6
+ metadata.gz: 13b105a6407b067a0de7200f5fe2f650a877c6a98ef413962c5278fa84154867aec5960e14a56ab90d5c8a3cd4ca9448202a77eb9568282efca1a7192519acd8
7
+ data.tar.gz: 95a82e535d052293134f90d4b1827da6d1eb88bf999aae439b64bfcab40c08e7db5f9959792c02e8862a9bbf60eda8886f2ce0e3fc240f4a72d90da928dbb76a
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.2.3] - 2025-04-17
6
+
7
+ - Refactor table code
8
+
5
9
  ## [0.2.2] - 2025-04-08
6
10
 
7
11
  - Fixed a bug displaying empty tables
data/lib/taql/table.rb CHANGED
@@ -1,82 +1,72 @@
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 { it.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 { it.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 do |segment|
44
+ cell_index = segments.index(segment)
45
+ max_length = column_widths[cell_index]
46
+ [SPACE, segment.ljust(max_length), SPACE].join
47
+ end.then do |segments|
48
+ [VERTICAL_BAR, segments.join(VERTICAL_BAR), VERTICAL_BAR].join
64
49
  end
65
50
  end
66
51
 
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}+"
52
+ def output
53
+ <<~OUTPUT
54
+ #{separator}
55
+ #{formatted(headers.map(&:upcase))}
56
+ #{separator}
57
+ #{body.map(&method(:formatted)).join("\n")}
58
+ #{separator}
59
+ OUTPUT
74
60
  end
75
61
 
76
- private
77
-
78
- def first
79
- entries.first
62
+ def separator
63
+ columns.map do |column|
64
+ column_index = columns.index(column)
65
+ max_length = column_widths[column_index]
66
+ Array.new(max_length + 2, DASH).join
67
+ end.then do |columns|
68
+ [PLUS, columns.join(PLUS), PLUS].join
69
+ end
80
70
  end
81
71
  end
82
72
  end
data/lib/taql/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Taql
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
data/taql.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.description = "Taql allows you to pretty print SQL table queries in Rails."
11
11
  spec.homepage = "https://github.com/arzezak/taql"
12
12
  spec.license = "MIT"
13
- spec.required_ruby_version = ">= 3.0.0"
13
+ spec.required_ruby_version = ">= 3.4"
14
14
 
15
15
  spec.metadata["homepage_uri"] = spec.homepage
16
16
  spec.metadata["source_code_uri"] = spec.homepage
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.3
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:
@@ -44,7 +44,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.0
47
+ version: '3.4'
48
48
  required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - ">="