expressir 2.1.25 → 2.1.26

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: f52eda5e0d80dd80576d784a17159f1f70151d1040d493e2f70408a86a269f9f
4
- data.tar.gz: a5bfdc154ad38933894545b193ead0f616e07e86aa316284d86fbf3f1556f673
3
+ metadata.gz: 94ad4b65c4f08a6ff1aafab5424989afee0419e94ac57fbd4715f2daca1da426
4
+ data.tar.gz: 21f24a38ca761ced3b7dec0070f08591190de7769e4e43150a4f87db59189ef4
5
5
  SHA512:
6
- metadata.gz: 9ada0d27c2df4a16595cde9973f48e224d4a46691bad332500af178b43898f4a721bc19876ba383dc41a694ee405796495996999eb3008220aca53e978c9d3e3
7
- data.tar.gz: ebdb14b2bd307482f39c8c682c68081324bfb012bf9b4cc68f511739b65f26b361e40f65fba2ae6fc50b782a04661836849c6ecd827e95f318e828221b951de3
6
+ metadata.gz: 1bc6510434694446b93e6df1e66682e0e737463ad130af77266fa207b0b7214a513817456ee7e42073a419d75ecdbb6adf9f7d34b0077f070269c5eff1d972d4
7
+ data.tar.gz: 4d44e23f91d30849da8d550b1cbadbc7628260f444eae1004500b2b5a9489ba3c62333ec7cb61c8d9a5860d1f5b1bef93464ad6c26910902ff0f44cb922150c7
data/.rubocop_todo.yml CHANGED
@@ -1,12 +1,12 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2025-07-04 10:39:56 UTC using RuboCop version 1.77.0.
3
+ # on 2025-07-12 00:59:01 UTC using RuboCop version 1.77.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 550
9
+ # Offense count: 549
10
10
  # This cop supports safe autocorrection (--autocorrect).
11
11
  # Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, IgnoreCopDirectives, AllowedPatterns, SplitStrings.
12
12
  # URISchemes: http, https
data/Gemfile CHANGED
@@ -5,6 +5,7 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in reeper.gemspec
6
6
  gemspec
7
7
 
8
+ gem "canon"
8
9
  gem "pry"
9
10
  gem "rake"
10
11
  gem "rspec"
data/expressir.gemspec CHANGED
@@ -38,6 +38,6 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency "lutaml-model"
39
39
  spec.add_dependency "parslet", "~> 2.0"
40
40
  spec.add_dependency "ruby-progressbar", "~> 1.11"
41
- spec.add_dependency "terminal-table", "~> 3.0"
41
+ spec.add_dependency "table_tennis"
42
42
  spec.add_dependency "thor", "~> 1.0"
43
43
  end
data/lib/expressir/cli.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require "thor"
2
2
  require "yaml"
3
- require "terminal-table"
4
3
 
5
4
  require_relative "commands/base"
6
5
  require_relative "commands/format"
@@ -1,4 +1,4 @@
1
- require "terminal-table"
1
+ require "table_tennis"
2
2
  require "json"
3
3
  require "yaml"
4
4
  require "ruby-progressbar"
@@ -173,55 +173,79 @@ module Expressir
173
173
  end
174
174
  end
175
175
 
176
- # Create table
177
- table = Terminal::Table.new(
178
- title: "Directory Coverage",
179
- headings: ["Directory", "Total", "Documented", "Coverage %"],
180
- style: {
181
- border_x: "-",
182
- border_y: "|",
183
- border_i: "+",
184
- },
185
- )
186
-
187
- # Add rows
176
+ table_data = []
188
177
  dirs.each do |dir, stats|
189
178
  coverage = stats["total"].positive? ? (stats["documented"].to_f / stats["total"] * 100).round(2) : 100.0
190
- table.add_row [dir, stats["total"], stats["documented"],
191
- "#{coverage}%"]
179
+ table_data << {
180
+ directory: dir,
181
+ total: stats["total"].to_s,
182
+ documented: stats["documented"].to_s,
183
+ coverage_percentage: "#{coverage}%",
184
+ }
192
185
  end
193
186
 
187
+ table = TableTennis.new(
188
+ table_data,
189
+ {
190
+ title: "Entity coverage per directory",
191
+ headers: {
192
+ file: "Directory",
193
+ total: "Total Entities",
194
+ documented: "Documented Entities",
195
+ coverage_percentage: "Coverage %",
196
+ },
197
+ titleize: true,
198
+ layout: true,
199
+ },
200
+ )
201
+
194
202
  say table
195
203
  end
196
204
 
197
205
  def display_file_coverage(reports)
198
- say "\nFile Coverage:"
199
-
200
- # Create table
201
- table = Terminal::Table.new(
202
- title: "File Coverage",
203
- headings: ["File", "Undocumented Entities", "Coverage %"],
204
- style: {
205
- border_x: "-",
206
- border_y: "|",
207
- border_i: "+",
208
- },
209
- )
210
-
206
+ # Prepare data for table_tennis
207
+ table_data = []
211
208
  reports.each do |report|
212
209
  report.file_reports.each do |file_report|
213
210
  file_path = file_report["file"]
214
211
 
215
212
  # Format undocumented entities as "TYPE name, TYPE name, ..."
216
- undocumented_formatted = file_report["undocumented"].map do |entity_info|
213
+ undocumented = file_report["undocumented"].map do |entity_info|
217
214
  "#{entity_info['type']} #{entity_info['name']}"
218
215
  end.join(", ")
219
216
 
220
217
  coverage = file_report["coverage"].round(2)
221
- table.add_row [file_path, undocumented_formatted, "#{coverage}%"]
218
+
219
+ table_data << {
220
+ filename: File.basename(file_path),
221
+ undocumented_entities: if undocumented.empty?
222
+ "None"
223
+ else
224
+ undocumented
225
+ end,
226
+ coverage_percentage: "#{coverage}%",
227
+ }
222
228
  end
223
229
  end
224
230
 
231
+ table = TableTennis.new(
232
+ table_data,
233
+ {
234
+ title: "Entity coverage in file",
235
+ headers: {
236
+ filename: "Filename",
237
+ undocumented_entities: "Undocumented Entities",
238
+ coverage_percentage: "Coverage %",
239
+ },
240
+ titleize: true,
241
+ layout: {
242
+ filename: 30,
243
+ undocumented_entities: 50,
244
+ coverage_percentage: 20,
245
+ },
246
+ },
247
+ )
248
+
225
249
  say table
226
250
  end
227
251
 
@@ -229,22 +253,35 @@ module Expressir
229
253
  # Get structured report for overall statistics
230
254
  overall = build_structured_report(reports)["overall"]
231
255
 
232
- table = Terminal::Table.new(
233
- title: "Overall Documentation Coverage",
234
- style: {
235
- border_x: "-",
236
- border_y: "|",
237
- border_i: "+",
256
+ coverage_percentage = overall["coverage_percentage"]
257
+ table_data = [
258
+ {
259
+ metric: "Coverage Percentage",
260
+ value: "#{coverage_percentage}%",
261
+ },
262
+ {
263
+ metric: "Total Entities",
264
+ value: overall["total_entities"].to_s,
265
+ },
266
+ {
267
+ metric: "Documented Entities",
268
+ value: overall["documented_entities"].to_s,
269
+ },
270
+ {
271
+ metric: "Undocumented Entities",
272
+ value: overall["undocumented_entities"].to_s,
273
+ },
274
+ ]
275
+
276
+ table = TableTennis.new(
277
+ table_data,
278
+ {
279
+ title: "Entity overall coverage",
280
+ titleize: true,
281
+ layout: true,
238
282
  },
239
283
  )
240
284
 
241
- table.add_row ["Coverage Percentage",
242
- "#{overall['coverage_percentage']}%"]
243
- table.add_row ["Total Entities", overall["total_entities"]]
244
- table.add_row ["Documented Entities", overall["documented_entities"]]
245
- table.add_row ["Undocumented Entities",
246
- overall["undocumented_entities"]]
247
-
248
285
  say table
249
286
  end
250
287
 
@@ -253,6 +290,15 @@ module Expressir
253
290
  ignored_files = reports.flat_map(&:ignored_file_reports)
254
291
  ignored_entities_count = ignored_files.sum { |f| f["total"] }
255
292
 
293
+ total = reports.sum { |r| r.total_entities.size }
294
+ documented = reports.sum { |r| r.documented_entities.size }
295
+
296
+ coverage_per = if total.positive?
297
+ (documented.to_f / total * 100).round(2)
298
+ else
299
+ 100.0
300
+ end
301
+
256
302
  overall_stats = {
257
303
  "total_entities" => reports.sum { |r| r.total_entities.size },
258
304
  "documented_entities" => reports.sum do |r|
@@ -261,17 +307,7 @@ module Expressir
261
307
  "undocumented_entities" => reports.sum do |r|
262
308
  r.undocumented_entities.size
263
309
  end,
264
- "coverage_percentage" => if reports.sum do |r|
265
- r.total_entities.size
266
- end.positive?
267
- (reports.sum do |r|
268
- r.documented_entities.size
269
- end.to_f / reports.sum do |r|
270
- r.total_entities.size
271
- end * 100).round(2)
272
- else
273
- 100.0
274
- end,
310
+ "coverage_percentage" => coverage_per,
275
311
  }
276
312
 
277
313
  # Add ignored file information if there are any
@@ -28,7 +28,8 @@ module Expressir
28
28
  x.set_initial_path(path)
29
29
  end
30
30
  rescue StandardError => e
31
- raise InvalidSchemaManifestError, "Invalid schema manifest format: #{e.message}"
31
+ raise InvalidSchemaManifestError,
32
+ "Invalid schema manifest format: #{e.message}"
32
33
  end
33
34
 
34
35
  def to_file(to_path = path)
@@ -1,3 +1,3 @@
1
1
  module Expressir
2
- VERSION = "2.1.25".freeze
2
+ VERSION = "2.1.26".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expressir
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.25
4
+ version: 2.1.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-08-15 00:00:00.000000000 Z
11
+ date: 2025-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -109,19 +109,19 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.11'
111
111
  - !ruby/object:Gem::Dependency
112
- name: terminal-table
112
+ name: table_tennis
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '3.0'
117
+ version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '3.0'
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: thor
127
127
  requirement: !ruby/object:Gem::Requirement