light-services 2.2.1 → 3.1.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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/.github/config/rubocop_linter_action.yml +4 -4
  3. data/.github/workflows/ci.yml +12 -12
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +83 -7
  6. data/CHANGELOG.md +38 -0
  7. data/CLAUDE.md +139 -0
  8. data/Gemfile +16 -11
  9. data/Gemfile.lock +53 -27
  10. data/README.md +84 -21
  11. data/docs/arguments.md +290 -0
  12. data/docs/best-practices.md +153 -0
  13. data/docs/callbacks.md +476 -0
  14. data/docs/concepts.md +80 -0
  15. data/docs/configuration.md +204 -0
  16. data/docs/context.md +128 -0
  17. data/docs/crud.md +525 -0
  18. data/docs/errors.md +280 -0
  19. data/docs/generators.md +250 -0
  20. data/docs/outputs.md +158 -0
  21. data/docs/pundit-authorization.md +320 -0
  22. data/docs/quickstart.md +134 -0
  23. data/docs/readme.md +101 -0
  24. data/docs/recipes.md +14 -0
  25. data/docs/rubocop.md +285 -0
  26. data/docs/ruby-lsp.md +133 -0
  27. data/docs/service-rendering.md +222 -0
  28. data/docs/steps.md +391 -0
  29. data/docs/summary.md +21 -0
  30. data/docs/testing.md +549 -0
  31. data/lib/generators/light_services/install/USAGE +15 -0
  32. data/lib/generators/light_services/install/install_generator.rb +41 -0
  33. data/lib/generators/light_services/install/templates/application_service.rb.tt +8 -0
  34. data/lib/generators/light_services/install/templates/application_service_spec.rb.tt +7 -0
  35. data/lib/generators/light_services/install/templates/initializer.rb.tt +30 -0
  36. data/lib/generators/light_services/service/USAGE +21 -0
  37. data/lib/generators/light_services/service/service_generator.rb +68 -0
  38. data/lib/generators/light_services/service/templates/service.rb.tt +48 -0
  39. data/lib/generators/light_services/service/templates/service_spec.rb.tt +40 -0
  40. data/lib/light/services/base.rb +134 -122
  41. data/lib/light/services/base_with_context.rb +23 -1
  42. data/lib/light/services/callbacks.rb +157 -0
  43. data/lib/light/services/collection.rb +145 -0
  44. data/lib/light/services/concerns/execution.rb +79 -0
  45. data/lib/light/services/concerns/parent_service.rb +34 -0
  46. data/lib/light/services/concerns/state_management.rb +30 -0
  47. data/lib/light/services/config.rb +82 -16
  48. data/lib/light/services/constants.rb +100 -0
  49. data/lib/light/services/dsl/arguments_dsl.rb +85 -0
  50. data/lib/light/services/dsl/outputs_dsl.rb +81 -0
  51. data/lib/light/services/dsl/steps_dsl.rb +205 -0
  52. data/lib/light/services/dsl/validation.rb +162 -0
  53. data/lib/light/services/exceptions.rb +25 -2
  54. data/lib/light/services/message.rb +28 -3
  55. data/lib/light/services/messages.rb +92 -32
  56. data/lib/light/services/rspec/matchers/define_argument.rb +174 -0
  57. data/lib/light/services/rspec/matchers/define_output.rb +147 -0
  58. data/lib/light/services/rspec/matchers/define_step.rb +225 -0
  59. data/lib/light/services/rspec/matchers/execute_step.rb +230 -0
  60. data/lib/light/services/rspec/matchers/have_error_on.rb +148 -0
  61. data/lib/light/services/rspec/matchers/have_warning_on.rb +148 -0
  62. data/lib/light/services/rspec/matchers/trigger_callback.rb +138 -0
  63. data/lib/light/services/rspec.rb +15 -0
  64. data/lib/light/services/rubocop/cop/light_services/argument_type_required.rb +52 -0
  65. data/lib/light/services/rubocop/cop/light_services/condition_method_exists.rb +173 -0
  66. data/lib/light/services/rubocop/cop/light_services/deprecated_methods.rb +113 -0
  67. data/lib/light/services/rubocop/cop/light_services/dsl_order.rb +176 -0
  68. data/lib/light/services/rubocop/cop/light_services/missing_private_keyword.rb +102 -0
  69. data/lib/light/services/rubocop/cop/light_services/no_direct_instantiation.rb +66 -0
  70. data/lib/light/services/rubocop/cop/light_services/output_type_required.rb +52 -0
  71. data/lib/light/services/rubocop/cop/light_services/step_method_exists.rb +109 -0
  72. data/lib/light/services/rubocop.rb +12 -0
  73. data/lib/light/services/settings/field.rb +114 -0
  74. data/lib/light/services/settings/step.rb +53 -20
  75. data/lib/light/services/utils.rb +38 -0
  76. data/lib/light/services/version.rb +1 -1
  77. data/lib/light/services.rb +2 -0
  78. data/lib/ruby_lsp/light_services/addon.rb +36 -0
  79. data/lib/ruby_lsp/light_services/definition.rb +132 -0
  80. data/lib/ruby_lsp/light_services/indexing_enhancement.rb +263 -0
  81. data/light-services.gemspec +6 -8
  82. metadata +68 -26
  83. data/lib/light/services/class_based_collection/base.rb +0 -86
  84. data/lib/light/services/class_based_collection/mount.rb +0 -33
  85. data/lib/light/services/collection/arguments.rb +0 -34
  86. data/lib/light/services/collection/base.rb +0 -59
  87. data/lib/light/services/collection/outputs.rb +0 -16
  88. data/lib/light/services/settings/argument.rb +0 -68
  89. data/lib/light/services/settings/output.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb172e14ae0c846d5e445299d63383fc3855d3f021f3642e64f3f0b25b2f96db
4
- data.tar.gz: da0ec0d32a82f2f6d245f58f9c4c4549b65af47f06d34241c684dd3ff038f107
3
+ metadata.gz: 14b80318915db3dc20bd40365dc9ad00160938bb6836c1cda14bfba5301c7d7a
4
+ data.tar.gz: 80515890786ed055972e5b52bbc6cdee8e79b85d4fa1227b217f4b746c9fb899
5
5
  SHA512:
6
- metadata.gz: 27dc9088b5726a0a35cb799c0e4dadaded2135ab8599dc630b2d84c483264a76ba478a86106300866c7c6d99e82a97e4fc6eebfbf88ebdf2215e6a0d0d08efe3
7
- data.tar.gz: d64ed30327e04f8b8895c59534db1e04e5649ae4f06bdb420abe40667917ad6a94321717ee5c8e76f24a00dd940b55234cf9f88ee6606e225d0a673d1e790b47
6
+ metadata.gz: 454b6f2cd8fdf8615bc29c6b69e16fe704a3b19abd8f7e48fbd1e848505038db013e41396399dd5caa721d7179ae1bc3a6a99989a3adfc0f6868e9fe49a63c85
7
+ data.tar.gz: 50dbf071f72a242c0c36daeb83db94db5826dca4e3e2bbe7a47f9c81006b4d2c2266731715e1948b6528df86633735839f6eee525abde302a76b7a046e484b72
@@ -1,5 +1,5 @@
1
1
  versions:
2
- - rubocop: "1.64"
3
- - rubocop-performance: "1.21"
4
- - rubocop-rake: "0.6"
5
- - rubocop-rspec: "2.31"
2
+ - rubocop: "1.81.7"
3
+ - rubocop-performance: "1.26.1"
4
+ - rubocop-rake: "0.7.1"
5
+ - rubocop-rspec: "3.8.0"
@@ -2,24 +2,24 @@ name: CI
2
2
  on: push
3
3
 
4
4
  jobs:
5
- # rubocop:
6
- # name: Rubocop
7
- # runs-on: ubuntu-latest
8
- # steps:
9
- # - name: Git Checkout
10
- # uses: actions/checkout@v2
11
- #
12
- # - name: Rubocop
13
- # uses: andrewmcodes/rubocop-linter-action@v3.2.0
14
- # env:
15
- # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5
+ rubocop:
6
+ name: Rubocop
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - name: Git Checkout
10
+ uses: actions/checkout@v2
11
+
12
+ - name: Rubocop
13
+ uses: andrewmcodes/rubocop-linter-action@v3.2.0
14
+ env:
15
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
16
16
 
17
17
  rspec:
18
18
  name: RSpec
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby: [3.0, 3.1, 3.2, 3.3, head, debug]
22
+ ruby: [3.2, 3.3, 3.4, head, debug]
23
23
  steps:
24
24
  - name: Git Checkout
25
25
  uses: actions/checkout@v2
data/.gitignore CHANGED
@@ -15,6 +15,7 @@
15
15
  # Ignore IDE files
16
16
  /.idea
17
17
  *.iml
18
+ .vscode/settings.json
18
19
 
19
20
  # Ignore gem files
20
21
  *.gem
data/.rubocop.yml CHANGED
@@ -1,34 +1,110 @@
1
- require:
1
+ plugins:
2
2
  - rubocop-rake
3
3
  - rubocop-rspec
4
4
  - rubocop-performance
5
5
 
6
6
  AllCops:
7
+ DisplayCopNames: true
8
+ DisplayStyleGuide: true
7
9
  NewCops: enable
10
+ TargetRubyVersion: 3
11
+
12
+ Layout/FirstArrayElementIndentation:
13
+ EnforcedStyle: consistent
14
+
15
+ Layout/FirstHashElementIndentation:
16
+ EnforcedStyle: consistent
8
17
 
9
18
  Layout/MultilineMethodCallIndentation:
10
19
  EnforcedStyle: indented
11
20
 
21
+ Layout/SpaceInsideArrayLiteralBrackets:
22
+ EnforcedStyle: no_space
23
+
24
+ Lint/EmptyFile:
25
+ Enabled: true
26
+
27
+ Metrics/AbcSize:
28
+ Exclude:
29
+ - lib/light/services/dsl/steps_dsl.rb
30
+ - lib/light/services/messages.rb
31
+ Max: 20
32
+
12
33
  Metrics/BlockLength:
13
34
  Exclude:
14
35
  - spec/**/*_spec.rb
15
36
 
37
+ Metrics/ClassLength:
38
+ Max: 150
39
+
40
+ Metrics/CyclomaticComplexity:
41
+ Max: 10
42
+
43
+ Metrics/MethodLength:
44
+ Max: 20
45
+
46
+ Metrics/PerceivedComplexity:
47
+ Max: 10
48
+
49
+ Naming/PredicatePrefix:
50
+ Enabled: false
51
+
52
+ RSpec/ExampleLength:
53
+ Max: 20
54
+
55
+ RSpec/MultipleDescribes:
56
+ Enabled: false
57
+
58
+ RSpec/MultipleExpectations:
59
+ Max: 10
60
+
61
+ RSpec/MultipleMemoizedHelpers:
62
+ Max: 10
63
+
64
+ RSpec/NestedGroups:
65
+ Max: 5
66
+
16
67
  Security/Eval:
17
68
  Exclude:
18
69
  - spec/light/services/error_spec.rb
19
70
 
20
- Style/Documentation:
21
- Enabled: false
71
+ Style/ClassAndModuleChildren:
72
+ Exclude:
73
+ - spec/data/services/**/*.rb
22
74
 
23
75
  Style/ClassVars:
24
76
  Enabled: false
25
77
 
26
- Style/StringLiterals:
27
- EnforcedStyle: double_quotes
78
+ Style/ConditionalAssignment:
79
+ Enabled: false
80
+
81
+ Style/Documentation:
82
+ Enabled: false
28
83
 
29
84
  Style/GuardClause:
30
85
  Enabled: false
31
86
 
32
- Style/ClassAndModuleChildren:
87
+ Style/OptionalBooleanParameter:
33
88
  Exclude:
34
- - spec/data/services/**/*.rb
89
+ - lib/light/services/rspec/matchers/**/*.rb
90
+
91
+ Style/StringLiterals:
92
+ EnforcedStyle: double_quotes
93
+
94
+ Style/SymbolArray:
95
+ EnforcedStyle: brackets
96
+
97
+ Style/TrailingCommaInArguments:
98
+ EnforcedStyleForMultiline: diff_comma
99
+
100
+ Style/TrailingCommaInArrayLiteral:
101
+ EnforcedStyleForMultiline: consistent_comma
102
+
103
+ Style/TrailingCommaInHashLiteral:
104
+ EnforcedStyleForMultiline: consistent_comma
105
+
106
+ Style/WordArray:
107
+ EnforcedStyle: brackets
108
+
109
+ Style/NumericPredicate:
110
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1 +1,39 @@
1
1
  # Changelog
2
+
3
+ ## 3.1.0 (2025-12-13)
4
+
5
+ ### Breaking changes
6
+
7
+ - Enforce arguments and output types by default. Add `config.require_type = false` to your config to disable this behavior.
8
+
9
+ ### Added
10
+
11
+ - `stop!` and `stopped?` methods for early exit (renamed from `done!` and `done?`)
12
+ - `stop_immediately!` method for immediate execution halt within the current step
13
+ - `done!` and `done?` are deprecated, but remain available as aliases for backward compatibility
14
+ - Ruby LSP support with step navigation and indexing
15
+ - Rubocop cops `StepMethodExists`, `ConditionMethodExists`, `DslOrder`, `MissingPrivateKeyword`, `NoDirectInstantiation`, `ArgumentTypeRequired`, `OutputTypeRequired`, `DeprecatedMethods`
16
+ - Comprehensive YARD documentation
17
+
18
+ ## 3.0.0 (2025-12-12)
19
+
20
+ ### Breaking changes
21
+
22
+ - Removed support for symbol types (e.g., `:array`, `:hash`, `:boolean`). Use Ruby classes (e.g., `Array`, `Hash`, `[TrueClass, FalseClass]`) or dry-types
23
+ - Removed `benchmark: true` option
24
+ - Removed `verbose: true` option
25
+ - Bumped minimum supported Ruby version to **3.0**.
26
+ - Removed `errors.copy_to`
27
+
28
+ ### Added
29
+
30
+ - Output type validation
31
+ - dry-types support for arguments and outputs (with coercion and constraints)
32
+ - Callback system (service + step callbacks)
33
+ - Built-in RSpec matchers for services
34
+ - Name validation for arguments, steps, and outputs
35
+ - `run` method fallback when no steps are defined
36
+
37
+ ### Documentation
38
+
39
+ - Documentation moved into this repository and refreshed to match v3 behavior
data/CLAUDE.md ADDED
@@ -0,0 +1,139 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## About Light Services
6
+
7
+ Light Services is a Ruby gem providing a service architecture pattern for organizing business logic. Services are defined as classes with `arguments`, `steps`, and `outputs`, featuring transactions, inheritance, error handling, and context sharing.
8
+
9
+ ## Development Commands
10
+
11
+ ### Testing
12
+ ```bash
13
+ # Run all tests
14
+ bundle exec rspec
15
+
16
+ # Run specific test file
17
+ bundle exec rspec spec/path/to/file_spec.rb
18
+
19
+ # Run with coverage (uses SimpleCov)
20
+ bundle exec rspec
21
+ ```
22
+
23
+ ### Linting
24
+ ```bash
25
+ # Run RuboCop linter
26
+ bundle exec rubocop
27
+
28
+ # Auto-fix RuboCop issues
29
+ bundle exec rubocop -a
30
+ ```
31
+
32
+ ### Build and Release
33
+ ```bash
34
+ # Build gem
35
+ bundle exec rake build
36
+
37
+ # Default task (runs tests)
38
+ bundle exec rake
39
+ ```
40
+
41
+ ## Architecture
42
+
43
+ ### Core Components
44
+
45
+ 1. **Base Service (`lib/light/services/base.rb:15`)**
46
+ - Main service class that all services inherit from
47
+ - Handles service lifecycle: initialization, execution, callbacks, error management
48
+ - Provides DSL for defining arguments, steps, and outputs
49
+ - Manages transactions and error propagation to parent services
50
+
51
+ 2. **Callbacks System (`lib/light/services/callbacks.rb:5`)**
52
+ - Supports service and step-level callbacks
53
+ - Events: `before_service_run`, `after_service_run`, `around_service_run`, `on_service_success`, `on_service_failure`
54
+ - Step events: `before_step_run`, `after_step_run`, `around_step_run`, `on_step_success`, `on_step_failure`
55
+
56
+ 3. **Settings**
57
+ - **Step (`lib/light/services/settings/step.rb:7`)**: Handles step execution with conditional logic (`if`, `unless`, `always`)
58
+ - **Field (`lib/light/services/settings/field.rb`)**: Manages argument and output validation and type checking
59
+
60
+ 4. **Messages System (`lib/light/services/messages.rb`)**
61
+ - Collects errors and warnings with options for breaking, raising, or rolling back
62
+ - Supports copying messages between parent and child services
63
+
64
+ 5. **Collection (`lib/light/services/collection.rb`)**
65
+ - Manages arguments and outputs as collections with validation and defaults
66
+ - Supports dry-types for advanced type validation and coercion
67
+
68
+ ### Service DSL
69
+
70
+ Services use a declarative DSL:
71
+ ```ruby
72
+ class ExampleService < Light::Services::Base
73
+ # Define input arguments
74
+ arg :name, type: String
75
+ arg :age, type: Integer, optional: true, default: 25
76
+
77
+ # Define execution steps
78
+ step :validate_input
79
+ step :process_data, if: :should_process?
80
+ step :cleanup, always: true
81
+
82
+ # Define outputs
83
+ output :result, type: Hash
84
+
85
+ private
86
+
87
+ def validate_input
88
+ errors.add(:name, "required") if name.nil? || name.strip.empty?
89
+ end
90
+
91
+ def process_data
92
+ self.result = { name: name, age: age }
93
+ end
94
+
95
+ def cleanup
96
+ # Runs regardless of errors/warnings, unless stop! was called
97
+ end
98
+
99
+ def should_process?
100
+ !(name.nil? || name.strip.empty?)
101
+ end
102
+ end
103
+ ```
104
+
105
+ ### Service Execution
106
+
107
+ - Services can be run with `.run(args)` or `.run!(args)` (raises on error)
108
+ - Use `.with(service_or_context)` to chain services with shared context
109
+ - Transactions automatically rollback on errors when `use_transactions: true`
110
+ - Steps run sequentially, stopping on errors unless `always: true`
111
+
112
+ ### Error Handling
113
+
114
+ - Errors collected in `@errors` message collection
115
+ - Supports `break_on_error`, `raise_on_error`, `rollback_on_error` configuration
116
+ - Warnings work similarly with `@warnings` collection
117
+ - Parent services can inherit child errors/warnings based on configuration
118
+
119
+ ### Testing Patterns
120
+
121
+ - Services are tested using RSpec with database transactions
122
+ - Use `DatabaseCleaner` for test isolation
123
+ - Mock database models and external dependencies
124
+ - Test both success and failure scenarios
125
+ - Validate arguments, outputs, and error conditions
126
+
127
+ ## Configuration
128
+
129
+ ### RuboCop Rules
130
+ - Target Ruby version: 2.7+
131
+ - Method length max: 20 lines
132
+ - Uses double quotes for strings
133
+ - Enables trailing commas for multiline structures
134
+ - Disables documentation requirements and guard clauses
135
+
136
+ ### Database Support
137
+ - Optional ActiveRecord integration for transactions
138
+ - Uses SQLite3 for testing
139
+ - Database cleaner ensures test isolation
data/Gemfile CHANGED
@@ -5,17 +5,22 @@ source "https://rubygems.org"
5
5
  gemspec
6
6
 
7
7
  group :test do
8
- gem "activerecord", "~> 8.1"
9
- gem "database_cleaner-active_record", "~> 2.2"
10
- gem "sqlite3", "~> 2.8"
8
+ # Optional type system support
9
+ gem "dry-types", "~> 1.0"
11
10
 
12
- gem "codecov", "~> 0.6.0"
13
- gem "rake", "~> 13.3"
14
- gem "rspec", "~> 3.13"
15
- gem "simplecov", "~> 0.21"
11
+ gem "activerecord", "< 8"
12
+ gem "connection_pool", "< 3"
13
+ gem "database_cleaner-active_record"
14
+ gem "sqlite3"
16
15
 
17
- gem "rubocop", "~> 1.81", require: false
18
- gem "rubocop-performance", "~> 1.26", require: false
19
- gem "rubocop-rake", "~> 0.7.0", require: false
20
- gem "rubocop-rspec", "~> 3.8", require: false
16
+ gem "codecov"
17
+ gem "rake"
18
+ gem "rspec"
19
+ gem "rspec-benchmark"
20
+ gem "simplecov"
21
+
22
+ gem "rubocop"
23
+ gem "rubocop-performance"
24
+ gem "rubocop-rake"
25
+ gem "rubocop-rspec"
21
26
  end
data/Gemfile.lock CHANGED
@@ -1,39 +1,40 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- light-services (2.2.1)
5
- benchmark (>= 0.5)
4
+ light-services (3.1.0)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
9
8
  specs:
10
- activemodel (8.1.1)
11
- activesupport (= 8.1.1)
12
- activerecord (8.1.1)
13
- activemodel (= 8.1.1)
14
- activesupport (= 8.1.1)
9
+ activemodel (7.2.3)
10
+ activesupport (= 7.2.3)
11
+ activerecord (7.2.3)
12
+ activemodel (= 7.2.3)
13
+ activesupport (= 7.2.3)
15
14
  timeout (>= 0.4.0)
16
- activesupport (8.1.1)
15
+ activesupport (7.2.3)
17
16
  base64
17
+ benchmark (>= 0.3)
18
18
  bigdecimal
19
19
  concurrent-ruby (~> 1.0, >= 1.3.1)
20
20
  connection_pool (>= 2.2.5)
21
21
  drb
22
22
  i18n (>= 1.6, < 2)
23
- json
24
23
  logger (>= 1.4.2)
25
24
  minitest (>= 5.1)
26
25
  securerandom (>= 0.3)
27
26
  tzinfo (~> 2.0, >= 2.0.5)
28
- uri (>= 0.13.1)
29
27
  ast (2.4.3)
30
28
  base64 (0.3.0)
31
29
  benchmark (0.5.0)
30
+ benchmark-malloc (0.2.0)
31
+ benchmark-perf (0.6.0)
32
+ benchmark-trend (0.4.0)
32
33
  bigdecimal (3.3.1)
33
34
  codecov (0.6.0)
34
35
  simplecov (>= 0.15, < 0.22)
35
36
  concurrent-ruby (1.3.5)
36
- connection_pool (2.5.4)
37
+ connection_pool (2.5.5)
37
38
  database_cleaner-active_record (2.2.2)
38
39
  activerecord (>= 5.a)
39
40
  database_cleaner-core (~> 2.0)
@@ -41,14 +42,31 @@ GEM
41
42
  diff-lcs (1.6.2)
42
43
  docile (1.4.1)
43
44
  drb (2.2.3)
45
+ dry-core (1.1.0)
46
+ concurrent-ruby (~> 1.0)
47
+ logger
48
+ zeitwerk (~> 2.6)
49
+ dry-inflector (1.2.0)
50
+ dry-logic (1.6.0)
51
+ bigdecimal
52
+ concurrent-ruby (~> 1.0)
53
+ dry-core (~> 1.1)
54
+ zeitwerk (~> 2.6)
55
+ dry-types (1.8.3)
56
+ bigdecimal (~> 3.0)
57
+ concurrent-ruby (~> 1.0)
58
+ dry-core (~> 1.0)
59
+ dry-inflector (~> 1.0)
60
+ dry-logic (~> 1.4)
61
+ zeitwerk (~> 2.6)
44
62
  i18n (1.14.7)
45
63
  concurrent-ruby (~> 1.0)
46
- json (2.16.0)
64
+ json (2.18.0)
47
65
  language_server-protocol (3.17.0.5)
48
66
  lint_roller (1.1.0)
49
67
  logger (1.7.0)
50
68
  mini_portile2 (2.8.9)
51
- minitest (5.26.1)
69
+ minitest (5.27.0)
52
70
  parallel (1.27.0)
53
71
  parser (3.3.10.0)
54
72
  ast (~> 2.4.1)
@@ -62,6 +80,11 @@ GEM
62
80
  rspec-core (~> 3.13.0)
63
81
  rspec-expectations (~> 3.13.0)
64
82
  rspec-mocks (~> 3.13.0)
83
+ rspec-benchmark (0.6.0)
84
+ benchmark-malloc (~> 0.2)
85
+ benchmark-perf (~> 0.6)
86
+ benchmark-trend (~> 0.4)
87
+ rspec (>= 3.0)
65
88
  rspec-core (3.13.6)
66
89
  rspec-support (~> 3.13.0)
67
90
  rspec-expectations (3.13.5)
@@ -103,32 +126,35 @@ GEM
103
126
  simplecov_json_formatter (~> 0.1)
104
127
  simplecov-html (0.13.2)
105
128
  simplecov_json_formatter (0.1.4)
106
- sqlite3 (2.8.0)
129
+ sqlite3 (2.8.1)
107
130
  mini_portile2 (~> 2.8.0)
108
- timeout (0.4.4)
131
+ timeout (0.5.0)
109
132
  tzinfo (2.0.6)
110
133
  concurrent-ruby (~> 1.0)
111
134
  unicode-display_width (3.2.0)
112
135
  unicode-emoji (~> 4.1)
113
136
  unicode-emoji (4.1.0)
114
- uri (1.1.1)
137
+ zeitwerk (2.7.3)
115
138
 
116
139
  PLATFORMS
117
140
  ruby
118
141
 
119
142
  DEPENDENCIES
120
- activerecord (~> 8.1)
121
- codecov (~> 0.6.0)
122
- database_cleaner-active_record (~> 2.2)
143
+ activerecord (< 8)
144
+ codecov
145
+ connection_pool (< 3)
146
+ database_cleaner-active_record
147
+ dry-types (~> 1.0)
123
148
  light-services!
124
- rake (~> 13.3)
125
- rspec (~> 3.13)
126
- rubocop (~> 1.81)
127
- rubocop-performance (~> 1.26)
128
- rubocop-rake (~> 0.7.0)
129
- rubocop-rspec (~> 3.8)
130
- simplecov (~> 0.21)
131
- sqlite3 (~> 2.8)
149
+ rake
150
+ rspec
151
+ rspec-benchmark
152
+ rubocop
153
+ rubocop-performance
154
+ rubocop-rake
155
+ rubocop-rspec
156
+ simplecov
157
+ sqlite3
132
158
 
133
159
  BUNDLED WITH
134
160
  2.5.10