pdfh 3.3.1 → 4.0.0

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +0 -15
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +5 -1
  5. data/.rubocop_todo.yml +5 -18
  6. data/.simplecov +32 -0
  7. data/AGENTS.md +174 -0
  8. data/CHANGELOG.md +74 -9
  9. data/Gemfile +0 -4
  10. data/Gemfile.lock +26 -37
  11. data/README.md +72 -37
  12. data/Rakefile +24 -6
  13. data/bin/console +3 -10
  14. data/bin/run +0 -1
  15. data/exe/pdfh +1 -1
  16. data/justfile +65 -0
  17. data/lib/pdfh/main.rb +25 -120
  18. data/lib/pdfh/models/document.rb +43 -128
  19. data/lib/pdfh/models/document_type.rb +35 -69
  20. data/lib/pdfh/models/run_options.rb +20 -0
  21. data/lib/pdfh/models/settings.rb +23 -83
  22. data/lib/pdfh/services/directory_scanner.rb +27 -0
  23. data/lib/pdfh/services/document_manager.rb +125 -0
  24. data/lib/pdfh/services/document_matcher.rb +57 -0
  25. data/lib/pdfh/services/opt_parser.rb +76 -0
  26. data/lib/pdfh/services/pdf_text_extractor.rb +45 -0
  27. data/lib/pdfh/services/settings_builder.rb +113 -0
  28. data/lib/pdfh/services/settings_validator.rb +150 -0
  29. data/lib/pdfh/utils/console.rb +5 -5
  30. data/lib/pdfh/utils/date_info.rb +55 -0
  31. data/lib/pdfh/utils/file_info.rb +47 -0
  32. data/lib/pdfh/utils/rename_validator.rb +4 -3
  33. data/lib/pdfh/version.rb +1 -1
  34. data/lib/pdfh.rb +25 -20
  35. data/mise.toml +20 -3
  36. data/pdfh.gemspec +3 -3
  37. metadata +18 -15
  38. data/lib/ext/string.rb +0 -9
  39. data/lib/pdfh/concerns/password_decodable.rb +0 -31
  40. data/lib/pdfh/models/document_period.rb +0 -37
  41. data/lib/pdfh/models/document_sub_type.rb +0 -6
  42. data/lib/pdfh/models/zip_types.rb +0 -17
  43. data/lib/pdfh/settings_template.rb +0 -21
  44. data/lib/pdfh/utils/opt_parser.rb +0 -78
  45. data/lib/pdfh/utils/options.rb +0 -38
  46. data/lib/pdfh/utils/pdf_file_handler.rb +0 -122
  47. data/lib/pdfh/utils/settings_builder.rb +0 -62
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e6f4e14950562b2b4f308dabe361ac5fb73191dd456523aeb6469e7c97cdf00
4
- data.tar.gz: ce3523404e6a5bf37613b281afb8957d35f3b843dc301996377057a79a65da1b
3
+ metadata.gz: 3bfbea6779583e5ac915303ce31e9e7460003ba7703a7e90977abf12feb98fa5
4
+ data.tar.gz: a74428a0ba54acb17ee6195c2d6e84fd728a1e509009ed940099c34d56bbdabb
5
5
  SHA512:
6
- metadata.gz: 8e44d1c076c9825555e6c4c9ac3c5ec8efa0e03612aca314d4c7fc5f17980590b0b38fb1c3fd77573912edeeb5d7ae11bb06749eeffe7e3c031536125c1f99e3
7
- data.tar.gz: 68643552fd0d663acb8fb9a107ba6c52938a0e42adc77e19ef877b603656cf81633abe1bb36d1dcf2d4df73b68a401b86ae55c050eea35640afc132c3240365a
6
+ metadata.gz: aa97de92e612928c87c6d23df517be4168b8805adea2cd9006953ec00dc738cd6f62d83919e845868244322bd2c0e187df8b0a6402ac078a5d037e8f4851b664
7
+ data.tar.gz: de145b9b13f5f78d3203519e811ad43d124a50a23408583215656a65f06679db2a700ddf2948e0521198c5a387ad464d8cce9caf01a771e5d90d169ab0162826
data/.editorconfig CHANGED
@@ -12,20 +12,5 @@ max_line_length = 120
12
12
  [*.py]
13
13
  indent_size = 4
14
14
 
15
- [*.rb]
16
- indent_size = 2
17
-
18
15
  [*.md]
19
16
  trim_trailing_whitespace = false
20
-
21
- [*.yml]
22
- indent_size = 2
23
-
24
- [*.yaml]
25
- indent_size = 2
26
-
27
- [*.json]
28
- indent_size = 2
29
-
30
- [*.{js,jsx,ts,tsx}]
31
- indent_size = 2
data/.gitignore CHANGED
@@ -8,6 +8,9 @@ spec/reports/
8
8
  spec/coverage/
9
9
  tmp/
10
10
 
11
+ # IDE
12
+ .idea/
13
+
11
14
  # rspec failure tracking
12
15
  .rspec_status
13
16
 
data/.rubocop.yml CHANGED
@@ -7,7 +7,7 @@ plugins:
7
7
 
8
8
  AllCops:
9
9
  NewCops: enable
10
- TargetRubyVersion: 3.0
10
+ TargetRubyVersion: 3.2
11
11
  Exclude:
12
12
  - doc/**/*
13
13
  - pkg/**/*
@@ -30,3 +30,7 @@ Style/StringLiteralsInInterpolation:
30
30
 
31
31
  Layout/HashAlignment:
32
32
  EnforcedHashRocketStyle: table
33
+
34
+ Metrics/BlockLength:
35
+ Exclude:
36
+ - spec/**/*
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2025-04-19 20:15:39 UTC using RuboCop version 1.75.2.
3
+ # on 2026-03-21 12:40:43 UTC using RuboCop version 1.85.1.
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
@@ -9,28 +9,15 @@
9
9
  # Offense count: 10
10
10
  # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
11
11
  Metrics/AbcSize:
12
- Max: 38
12
+ Max: 57
13
13
 
14
- # Offense count: 16
14
+ # Offense count: 1
15
15
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
16
16
  # AllowedMethods: refine
17
17
  Metrics/BlockLength:
18
- Max: 131
18
+ Max: 26
19
19
 
20
20
  # Offense count: 6
21
21
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
22
22
  Metrics/MethodLength:
23
- Max: 33
24
-
25
- # Offense count: 1
26
- # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
27
- # AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to
28
- Naming/MethodParameterName:
29
- Exclude:
30
- - 'lib/pdfh/utils/console.rb'
31
-
32
- # Offense count: 3
33
- # This cop supports safe autocorrection (--autocorrect).
34
- Style/RedundantStringEscape:
35
- Exclude:
36
- - 'lib/pdfh/settings_template.rb'
23
+ Max: 26
data/.simplecov ADDED
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "English"
4
+
5
+ SimpleCov.start do
6
+ # Basic configuration
7
+ enable_coverage :branch
8
+ minimum_coverage line: 75, branch: 40
9
+
10
+ # Filters to exclude files that don't need coverage
11
+ add_filter "/spec/"
12
+ add_filter "/bin/"
13
+ add_filter "/exe/"
14
+ add_filter "/vendor/"
15
+
16
+ # HTML formatter only - no console noise
17
+ formatter SimpleCov::Formatter::HTMLFormatter
18
+
19
+ # Groups to organize the report
20
+ add_group "Models", "lib/pdfh/models"
21
+ add_group "Services", "lib/pdfh/services"
22
+ add_group "Utils", "lib/pdfh/utils"
23
+
24
+ # Track files
25
+ track_files "lib/**/*.rb"
26
+
27
+ # Show clearer messages on failure
28
+ at_exit do
29
+ # Only run if there is no other error
30
+ SimpleCov.result.format! if $ERROR_INFO.nil? || ($ERROR_INFO.is_a?(SystemExit) && $ERROR_INFO.success?)
31
+ end
32
+ end
data/AGENTS.md ADDED
@@ -0,0 +1,174 @@
1
+ # AGENTS.md
2
+
3
+ Guide for agentic coding assistants working in this repository.
4
+
5
+ ## Quick Facts
6
+
7
+ - Project: `pdfh` (Ruby gem + CLI)
8
+ - Runtime Ruby: 4.0 via `mise` (`mise.toml`); gemspec minimum `>= 3.2.0`
9
+ - Linting: RuboCop (TargetRubyVersion 3.2); plugins: `rubocop-performance`, `rubocop-factory_bot`, `rubocop-rake`
10
+ - Tests: RSpec with `expect` syntax and no monkey patching
11
+ - Key runtime deps: `colorize ~> 1.1` (logging colors)
12
+
13
+ ## Build, Lint, Test
14
+
15
+ Run from repo root. Prefer `mise` tasks when available.
16
+
17
+ ```bash
18
+ # Tests
19
+ bundle exec rspec
20
+ mise run test
21
+
22
+ # Single test file or example
23
+ bundle exec rspec spec/pdfh/models/document_spec.rb
24
+ bundle exec rspec spec/pdfh/models/document_spec.rb:42
25
+
26
+ # Lint
27
+ bundle exec rubocop
28
+ mise run lint
29
+
30
+ # Auto-fix linting issues
31
+ bundle exec rubocop -a
32
+
33
+ # Build gem
34
+ rake build
35
+
36
+ # Interactive console
37
+ bin/console
38
+ ```
39
+
40
+ Useful `mise` tasks (`mise.toml`):
41
+
42
+ - `mise run lint`
43
+ - `mise run test` (runs `bundle exec rspec --order random --format documentation`)
44
+ - `mise run check` (runs lint + test)
45
+ - `mise run bump[major|minor|tiny]`
46
+ - `mise run pre` (runs `pre-commit run --all-files`)
47
+ - `mise run update` (runs `bundle update`)
48
+ - `mise run release` (builds gem + pushes to RubyGems)
49
+
50
+ ## Repository Layout
51
+
52
+ - `exe/pdfh` CLI entrypoint
53
+ - `lib/pdfh` gem code
54
+ - `lib/pdfh/services` service objects
55
+ - `lib/pdfh/models` domain models
56
+ - `lib/pdfh/utils` shared utilities
57
+ - `spec/` RSpec tests, mirrors `lib/` structure
58
+
59
+ ## Processing Flow (High Level)
60
+
61
+ ```text
62
+ exe/pdfh → Main.start → OptParser → SettingsBuilder → SettingsValidator
63
+
64
+ DirectoryScanner.scan (finds *.pdf)
65
+
66
+ PdfTextExtractor.call
67
+
68
+ DocumentMatcher.match
69
+
70
+ DocumentManager.call
71
+ ```
72
+
73
+ Key service objects in `lib/pdfh/services/`:
74
+
75
+ - `DirectoryScanner` — globs `*.pdf` from configured `lookup_dirs`
76
+ - `PdfTextExtractor` — shells out `pdftotext -enc UTF-8 -layout`
77
+ - `DocumentMatcher` — iterates `DocumentType`s; matches `re_id` then `re_date`
78
+ - `DocumentManager` — creates dest dir, copies/renames PDF, copies companion files
79
+ - `SettingsBuilder` — locates and parses `pdfh.yml`
80
+ - `SettingsValidator` — validates settings; raises `ArgumentError` on fatal errors, warns and skips on soft errors (e.g. missing lookup dirs)
81
+ - `OptParser` — parses `ARGV` into `RunOptions`
82
+
83
+ ## Code Style and Conventions
84
+
85
+ General:
86
+
87
+ - Always include `# frozen_string_literal: true` at the top of Ruby files.
88
+ - Use double-quoted strings (RuboCop enforces this).
89
+ - Max line length is 120 characters (see `.rubocop.yml`).
90
+ - Prefer small, focused classes and service objects for side effects.
91
+ - Avoid global state except for `Pdfh.logger` (centralized logger).
92
+
93
+ Imports / requires:
94
+
95
+ - Use `require` for gem dependencies and `require_relative` for local files in tests.
96
+ - In specs, `spec/spec_helper.rb` loads SimpleCov and shared config; do not load it twice.
97
+
98
+ Formatting:
99
+
100
+ - RuboCop is authoritative; follow alignment and formatting it enforces.
101
+ - Hash alignment uses table style for hash rockets.
102
+
103
+ Types and documentation:
104
+
105
+ - All methods must have YARD documentation.
106
+ - `@return` is mandatory and must describe the return value.
107
+ - Add `@param` tags with types and names for each parameter.
108
+ - For complex methods, add a short explanatory comment block and an `@example`.
109
+
110
+ Naming:
111
+
112
+ - Use descriptive names; classes and modules are `CamelCase`, methods and variables are `snake_case`.
113
+ - Prefer explicit domain names (e.g., `DocumentManager`, `SettingsBuilder`).
114
+ - Keep abbreviations consistent with existing code (e.g., `pdf`, `dir`).
115
+
116
+ Error handling:
117
+
118
+ - Use `Pdfh.logger` for user-facing errors and verbose debug output.
119
+ - `Main.start` rescues `SettingsIOError` and `StandardError` and exits with status 1.
120
+ - Custom exceptions defined in `lib/pdfh.rb`: `SettingsIOError` (config not found), `ReDateError` (date regex no match).
121
+ - `SettingsValidator` raises `ArgumentError` for fatal config errors; warns and skips for recoverable ones (e.g. a lookup dir that doesn't exist).
122
+ - Favor raising domain-specific errors in services and handle them in entrypoints.
123
+ - Avoid rescuing broadly in inner layers unless re-raising with context.
124
+
125
+ Side effects and IO:
126
+
127
+ - File system changes are centralized in `DocumentManager`.
128
+ - Respect `dry_run` / `--dry` to avoid writing files.
129
+ - When copying/moving files, preserve metadata if possible (`FileUtils` with `preserve: true`).
130
+
131
+ Testing:
132
+
133
+ - RSpec uses `expect` syntax and disables monkey patching.
134
+ - Specs mirror the `lib/` structure; keep tests close to the corresponding module.
135
+ - Use FactoryBot factories in `spec/factories/` when needed.
136
+
137
+ ## Configuration and Templates
138
+
139
+ - Configuration is loaded from `$PDFH_CONFIG_FILE`, then CWD, `~/.config/`, then `~/`.
140
+ - Document templates use `{placeholder}` tokens defined in `Document#rename_data`.
141
+ - Date regex supports named captures `(?<m>...)` / `(?<y>...)` / `(?<d>...)` or positional captures.
142
+
143
+ ## Dependency Checks
144
+
145
+ - External tools: `pdftotext` (required) and `qpdf` (declared but not actively called in v4) must be available; checked via `DependencyValidator`.
146
+
147
+ ## Pitfalls
148
+
149
+ - **v4 breaking change**: Config format changed in v4.0.0 — old configs are incompatible. `re_id` matches PDF *text content* (not filename). New placeholders: `{day}`, `{quarter}`, `{bimester}`, `{name}`.
150
+ - **Multi-match behavior**: PDFs matching more than one `DocumentType` are silently skipped (see `Main.start`).
151
+ - **`_unlocked` suffix**: `DocumentManager` strips `_unlocked` when locating companion files — legacy pattern from `qpdf` unlocking.
152
+ - **Config search path**: `$PDFH_CONFIG_FILE` → CWD → `~/.config/` → `~/`. Error message does not list paths checked.
153
+ - **Colorize in tests**: Logging output is colored via `colorize`; specs mock `Console` with shared context `"with silent console"` to suppress output.
154
+
155
+ ## Suggested Workflow for Agents
156
+
157
+ - Read existing classes/services before adding new ones to match patterns.
158
+ - Prefer minimal changes; update specs alongside behavior changes.
159
+ - Run `mise run lint` and `mise run test` before finalizing changes.
160
+ - Keep changes localized; avoid touching unrelated files.
161
+
162
+ ## Examples
163
+
164
+ Run a single spec:
165
+
166
+ ```bash
167
+ bundle exec rspec spec/pdfh/models/document_spec.rb:42
168
+ ```
169
+
170
+ Run lint + test:
171
+
172
+ ```bash
173
+ mise run check
174
+ ```
data/CHANGELOG.md CHANGED
@@ -1,40 +1,105 @@
1
- ## v3.0.2
1
+ # Changelog
2
+
3
+ ## v4.0.0 - 2026-03-21
4
+
5
+ ### Breaking
6
+
7
+ - Old settings file is not compatible with this version; update to the new format described in README.
8
+ - Drop password/Base64 handling; require only `pdftotext` command.
9
+ - Remove subtypes and ZIP processing support.
10
+
11
+ ### Added
12
+
13
+ - New name template placeholders: `{day}`, `{quarter}`, `{bimester}`, `{name}`.
14
+
15
+ ### Changed
16
+
17
+ - Remove `{extra}` and `{type}` placeholders from name template.
18
+ - Refactor processing flow into services (scanner, extractor, matcher, manager).
19
+ - Drop document identification by file name; identify documents by content with `re_id`.
20
+ - Improve logging and error handling with a global logger.
21
+ - Update README usage and configuration docs.
22
+
23
+ ## v3.3.1 - 2026-03-06
24
+
25
+ - Add document type required fields validation
26
+ - Upgrade to Ruby 4
27
+ - Upgrade gems and mise tasks
28
+
29
+ ## v3.3.0 - 2025-05-06
30
+
31
+ - Add zip file pre-processing and zip_type model
32
+ - Decouple main and opt_parser from ARGV
33
+ - Add PasswordDecodable module and move dependency check to utils
34
+ - Add pre-commit config and update RuboCop config
35
+ - Update Ruby version and dependencies; improve coverage and docs
36
+
37
+ ## v3.2.0 - 2025-04-01
38
+
39
+ - Change document_type to a class and add re_date support for sub types
40
+ - Add more config file locations
41
+ - Remove undocumented print_cmd field
42
+ - Add backtrace console output
43
+ - Migrate to mise and upgrade Ruby/dependencies
44
+
45
+ ## v3.1.0 - 2024-05-03
46
+
47
+ - Handle store_path placeholders as name_template
48
+
49
+ ## v3.0.3 - 2024-03-15
50
+
51
+ - Move document rename to its own object
52
+ - Add debug gem
53
+ - Fix minor documentation issues
54
+
55
+ ## v3.0.2 - 2024-01-10
56
+
2
57
  - Fix `undefined method` when an invalid option is provided
3
58
  - Fix and add tests to get above 90% coverage
4
59
 
5
- ## v3.0.1
60
+ ## v3.0.1 - 2024-01-09
61
+
6
62
  - Refactor classes for better readability
7
63
  - Upgrade to Ruby v3.3.0 and require at least Ruby 3.0.0
8
64
  - Upgrade gem dependencies
9
65
 
10
- ## v3.0.0
66
+ ## v3.0.0 - 2022-08-01
67
+
11
68
  - Migrate to `asdf` from `rvm`
12
69
  - Upgrade old gems
13
70
  - Bump to v3 (as this is project's third iteration)
14
71
 
15
- ## v0.2.0
72
+ ## v0.2.0 - 2021-05-14
73
+
16
74
  - Major gem refactoring
17
75
  - Change setting `base_path` to `destination_base_path`
18
76
  - Add DocumentType listing option on executable file
19
77
  - Add process individual documents providing type and files
78
+
20
79
  ```bash
21
80
  pdfh -t document_type_id path/to_files.pdf
22
81
  ```
82
+
23
83
  - Add `settings.yml` template in order to create a sample file
24
84
 
25
- ## v0.1.9
85
+ ## v0.1.9 - 2021-03-02
86
+
26
87
  - Add dependencies validation at run
27
88
 
28
- ## v0.1.5
89
+ ## v0.1.5 - 2019-04-01
90
+
29
91
  - Add `print_cmd` field in config file for information purposes
30
92
  - Settings now validates an unexisting directory
31
93
  - Refactor for easier maintenance
32
94
 
33
- ## v0.1.4
95
+ ## v0.1.4 - 2019-01-28
96
+
34
97
  - Add titleize format when writing new file
35
98
 
36
- ## v0.1.3
99
+ ## v0.1.3 - 2019-01-18
100
+
37
101
  - Fixed copy companion files, which was not copying the files.
38
102
 
39
- ## v0.1.2
103
+ ## v0.1.2 - 2019-01-10
104
+
40
105
  - Initial Release
data/Gemfile CHANGED
@@ -9,15 +9,11 @@ gem "bundler", "~> 4.0"
9
9
  gem "code-scanning-rubocop", "~> 0.5"
10
10
  gem "debug", "~> 1.8"
11
11
  gem "factory_bot", "~> 6.2"
12
- gem "pry", "~> 0.14"
13
12
  gem "rake", "~> 13.0"
14
13
  gem "rspec", "~> 3.12"
15
- gem "rspec_junit_formatter", "~> 0.4"
16
14
  gem "rubocop", "~> 1.81"
17
15
  gem "rubocop-factory_bot", "~> 2.27"
18
16
  gem "rubocop-performance", "~> 1.18"
19
17
  gem "rubocop-rake", "~> 0.5"
20
18
  gem "rubocop-rspec", "~> 3.7"
21
19
  gem "simplecov", "~> 0.22"
22
- gem "simplecov-console", "~> 0.9"
23
- gem "versionomy", "~> 0.5"
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pdfh (3.3.1)
4
+ pdfh (4.0.0)
5
5
  colorize (~> 1.1.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (8.1.1)
10
+ activesupport (8.1.2)
11
11
  base64
12
12
  bigdecimal
13
13
  concurrent-ruby (~> 1.0, >= 1.3.1)
@@ -20,14 +20,13 @@ GEM
20
20
  securerandom (>= 0.3)
21
21
  tzinfo (~> 2.0, >= 2.0.5)
22
22
  uri (>= 0.13.1)
23
- ansi (1.5.0)
23
+ addressable (2.8.9)
24
+ public_suffix (>= 2.0.2, < 8.0)
24
25
  ast (2.4.3)
25
26
  base64 (0.3.0)
26
27
  bigdecimal (4.0.1)
27
- blockenspiel (0.5.0)
28
28
  code-scanning-rubocop (0.6.1)
29
29
  rubocop (~> 1.0)
30
- coderay (1.1.3)
31
30
  colorize (1.1.0)
32
31
  concurrent-ruby (1.3.6)
33
32
  connection_pool (3.0.2)
@@ -38,42 +37,45 @@ GEM
38
37
  diff-lcs (1.6.2)
39
38
  docile (1.4.1)
40
39
  drb (2.2.3)
41
- erb (6.0.1)
40
+ erb (6.0.2)
42
41
  factory_bot (6.5.6)
43
42
  activesupport (>= 6.1.0)
44
43
  i18n (1.14.8)
45
44
  concurrent-ruby (~> 1.0)
46
45
  io-console (0.8.2)
47
- irb (1.16.0)
46
+ irb (1.17.0)
48
47
  pp (>= 0.6.0)
48
+ prism (>= 1.3.0)
49
49
  rdoc (>= 4.0.0)
50
50
  reline (>= 0.4.2)
51
- json (2.18.0)
51
+ json (2.19.2)
52
+ json-schema (6.2.0)
53
+ addressable (~> 2.8)
54
+ bigdecimal (>= 3.1, < 5)
52
55
  language_server-protocol (3.17.0.5)
53
56
  lint_roller (1.1.0)
54
57
  logger (1.7.0)
55
- method_source (1.1.0)
56
- minitest (6.0.1)
58
+ mcp (0.9.0)
59
+ json-schema (>= 4.1)
60
+ minitest (6.0.2)
61
+ drb (~> 2.0)
57
62
  prism (~> 1.5)
58
63
  parallel (1.27.0)
59
- parser (3.3.10.0)
64
+ parser (3.3.10.2)
60
65
  ast (~> 2.4.1)
61
66
  racc
62
67
  pp (0.6.3)
63
68
  prettyprint
64
69
  prettyprint (0.2.0)
65
- prism (1.7.0)
66
- pry (0.16.0)
67
- coderay (~> 1.1)
68
- method_source (~> 1.0)
69
- reline (>= 0.6.0)
70
+ prism (1.9.0)
70
71
  psych (5.3.1)
71
72
  date
72
73
  stringio
74
+ public_suffix (7.0.5)
73
75
  racc (1.8.1)
74
76
  rainbow (3.1.1)
75
77
  rake (13.3.1)
76
- rdoc (7.0.3)
78
+ rdoc (7.2.0)
77
79
  erb
78
80
  psych (>= 4.0.0)
79
81
  tsort
@@ -89,24 +91,23 @@ GEM
89
91
  rspec-expectations (3.13.5)
90
92
  diff-lcs (>= 1.2.0, < 2.0)
91
93
  rspec-support (~> 3.13.0)
92
- rspec-mocks (3.13.7)
94
+ rspec-mocks (3.13.8)
93
95
  diff-lcs (>= 1.2.0, < 2.0)
94
96
  rspec-support (~> 3.13.0)
95
- rspec-support (3.13.6)
96
- rspec_junit_formatter (0.6.0)
97
- rspec-core (>= 2, < 4, != 2.12.0)
98
- rubocop (1.82.1)
97
+ rspec-support (3.13.7)
98
+ rubocop (1.85.1)
99
99
  json (~> 2.3)
100
100
  language_server-protocol (~> 3.17.0.2)
101
101
  lint_roller (~> 1.1.0)
102
+ mcp (~> 0.6)
102
103
  parallel (~> 1.10)
103
104
  parser (>= 3.3.0.2)
104
105
  rainbow (>= 2.2.2, < 4.0)
105
106
  regexp_parser (>= 2.9.3, < 3.0)
106
- rubocop-ast (>= 1.48.0, < 2.0)
107
+ rubocop-ast (>= 1.49.0, < 2.0)
107
108
  ruby-progressbar (~> 1.7)
108
109
  unicode-display_width (>= 2.4.0, < 4.0)
109
- rubocop-ast (1.49.0)
110
+ rubocop-ast (1.49.1)
110
111
  parser (>= 3.3.7.2)
111
112
  prism (~> 1.7)
112
113
  rubocop-factory_bot (2.28.0)
@@ -128,15 +129,9 @@ GEM
128
129
  docile (~> 1.1)
129
130
  simplecov-html (~> 0.11)
130
131
  simplecov_json_formatter (~> 0.1)
131
- simplecov-console (0.9.4)
132
- ansi
133
- simplecov
134
- terminal-table
135
132
  simplecov-html (0.13.2)
136
133
  simplecov_json_formatter (0.1.4)
137
134
  stringio (3.2.0)
138
- terminal-table (4.0.0)
139
- unicode-display_width (>= 1.1.1, < 4)
140
135
  tsort (0.2.0)
141
136
  tzinfo (2.0.6)
142
137
  concurrent-ruby (~> 1.0)
@@ -144,8 +139,6 @@ GEM
144
139
  unicode-emoji (~> 4.1)
145
140
  unicode-emoji (4.2.0)
146
141
  uri (1.1.1)
147
- versionomy (0.5.0)
148
- blockenspiel (~> 0.5)
149
142
 
150
143
  PLATFORMS
151
144
  ruby
@@ -156,18 +149,14 @@ DEPENDENCIES
156
149
  debug (~> 1.8)
157
150
  factory_bot (~> 6.2)
158
151
  pdfh!
159
- pry (~> 0.14)
160
152
  rake (~> 13.0)
161
153
  rspec (~> 3.12)
162
- rspec_junit_formatter (~> 0.4)
163
154
  rubocop (~> 1.81)
164
155
  rubocop-factory_bot (~> 2.27)
165
156
  rubocop-performance (~> 1.18)
166
157
  rubocop-rake (~> 0.5)
167
158
  rubocop-rspec (~> 3.7)
168
159
  simplecov (~> 0.22)
169
- simplecov-console (~> 0.9)
170
- versionomy (~> 0.5)
171
160
 
172
161
  BUNDLED WITH
173
- 4.0.3
162
+ 4.0.8