rs-activeadmin-searchable_select 4.0.5
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 +7 -0
- data/.actrc +20 -0
- data/.claude/commands/fix-tests.md +203 -0
- data/.github/workflows/ci.yml +170 -0
- data/.github/workflows/npm-publish.yml +47 -0
- data/.gitignore +27 -0
- data/.npmignore +58 -0
- data/.rspec +2 -0
- data/.rubocop.yml +67 -0
- data/.yardopts +2 -0
- data/AGENTS.md +39 -0
- data/Appraisals +15 -0
- data/CHANGELOG.md +24 -0
- data/CLAUDE.md +104 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +366 -0
- data/LICENSE.txt +25 -0
- data/README.md +439 -0
- data/Rakefile +4 -0
- data/bin/rspec +17 -0
- data/config/database.yml +16 -0
- data/config.ru +28 -0
- data/docs/activeadmin-4-detailed-reference.md +932 -0
- data/docs/activeadmin-4-gem-migration-guide.md +313 -0
- data/docs/combustion.md +213 -0
- data/docs/for-next-session.md +199 -0
- data/docs/guide-update-your-app.md +213 -0
- data/docs/propshaft-readme.md +121 -0
- data/docs/propshaft-upgrade.md +267 -0
- data/docs/rails-7-asset-pipeline.md +279 -0
- data/docs/setup-activeadmin-app.md +552 -0
- data/docs/setup-activeadmin-gem.md +535 -0
- data/docs/upload-system.md +225 -0
- data/gemfiles/rails_7.x_active_admin_4.x.gemfile +11 -0
- data/gemfiles/rails_7.x_active_admin_4.x.gemfile.lock +371 -0
- data/gemfiles/rails_8.x_active_admin_4.x.gemfile +11 -0
- data/gemfiles/rails_8.x_active_admin_4.x.gemfile.lock +366 -0
- data/lefthook.yml +17 -0
- data/lib/activeadmin/inputs/filters/searchable_select_input.rb +13 -0
- data/lib/activeadmin/inputs/searchable_select_input.rb +11 -0
- data/lib/activeadmin/searchable_select/engine.rb +17 -0
- data/lib/activeadmin/searchable_select/option_collection.rb +119 -0
- data/lib/activeadmin/searchable_select/resource_dsl_extension.rb +56 -0
- data/lib/activeadmin/searchable_select/resource_extension.rb +10 -0
- data/lib/activeadmin/searchable_select/select_input_extension.rb +159 -0
- data/lib/activeadmin/searchable_select/version.rb +5 -0
- data/lib/activeadmin/searchable_select.rb +20 -0
- data/lib/activeadmin-searchable_select.rb +4 -0
- data/lib/generators/active_admin/searchable_select/install/install_generator.rb +217 -0
- data/package-lock.json +18 -0
- data/package.json +45 -0
- data/rs-activeadmin-searchable_select.gemspec +38 -0
- data/sonar-project.properties +25 -0
- data/spec/features/ajax_params_spec.rb +31 -0
- data/spec/features/end_to_end_spec.rb +227 -0
- data/spec/features/filter_input_spec.rb +137 -0
- data/spec/features/form_input_spec.rb +122 -0
- data/spec/features/inline_ajax_setting_spec.rb +26 -0
- data/spec/features/input_errors_spec.rb +76 -0
- data/spec/features/input_html_options_spec.rb +30 -0
- data/spec/features/options_dsl_spec.rb +220 -0
- data/spec/features/production_build_spec.rb +108 -0
- data/spec/internal/app/admin/categories.rb +26 -0
- data/spec/internal/app/admin/dashboard.rb +29 -0
- data/spec/internal/app/admin/option_types.rb +19 -0
- data/spec/internal/app/admin/option_values.rb +30 -0
- data/spec/internal/app/admin/posts.rb +27 -0
- data/spec/internal/app/admin/products.rb +22 -0
- data/spec/internal/app/admin/rgb_colors.rb +25 -0
- data/spec/internal/app/admin/tag_names.rb +21 -0
- data/spec/internal/app/admin/test_ajax_params_category.rb +10 -0
- data/spec/internal/app/admin/test_ajax_params_post.rb +20 -0
- data/spec/internal/app/admin/test_form_post_class.rb +7 -0
- data/spec/internal/app/admin/test_form_post_custom.rb +11 -0
- data/spec/internal/app/admin/test_form_post_resource.rb +11 -0
- data/spec/internal/app/admin/test_form_post_resource_custom.rb +12 -0
- data/spec/internal/app/admin/test_inline_ajax_post.rb +9 -0
- data/spec/internal/app/admin/test_input_html_post.rb +11 -0
- data/spec/internal/app/admin/test_posts_display_text.rb +9 -0
- data/spec/internal/app/admin/test_posts_filter.rb +9 -0
- data/spec/internal/app/admin/test_posts_named.rb +9 -0
- data/spec/internal/app/admin/test_posts_pagination.rb +9 -0
- data/spec/internal/app/admin/test_posts_payload_lambda.rb +11 -0
- data/spec/internal/app/admin/test_posts_payload_proc.rb +9 -0
- data/spec/internal/app/admin/test_posts_scope_lambda.rb +8 -0
- data/spec/internal/app/admin/test_posts_scope_params.rb +8 -0
- data/spec/internal/app/admin/test_posts_scope_user.rb +8 -0
- data/spec/internal/app/admin/test_posts_text_attr.rb +5 -0
- data/spec/internal/app/admin/users.rb +23 -0
- data/spec/internal/app/admin/variants.rb +31 -0
- data/spec/internal/app/assets/config/manifest.js +1 -0
- data/spec/internal/app/assets/javascripts/active_admin.js +2 -0
- data/spec/internal/app/assets/javascripts/searchable_select_test.js +2 -0
- data/spec/internal/app/controllers/application_controller.rb +5 -0
- data/spec/internal/app/css/active_admin_source.css +81 -0
- data/spec/internal/app/js/active_admin.js +17 -0
- data/spec/internal/app/models/article.rb +12 -0
- data/spec/internal/app/models/category.rb +12 -0
- data/spec/internal/app/models/internal/tag_name.rb +14 -0
- data/spec/internal/app/models/internal_tag_name.rb +11 -0
- data/spec/internal/app/models/option_type.rb +12 -0
- data/spec/internal/app/models/option_value.rb +4 -0
- data/spec/internal/app/models/post.rb +15 -0
- data/spec/internal/app/models/product.rb +12 -0
- data/spec/internal/app/models/rgb_color.rb +16 -0
- data/spec/internal/app/models/user.rb +12 -0
- data/spec/internal/app/models/variant.rb +12 -0
- data/spec/internal/build_activeadmin_css.js +115 -0
- data/spec/internal/config/database.yml +7 -0
- data/spec/internal/config/environment.rb +48 -0
- data/spec/internal/config/initializers/active_admin.rb +53 -0
- data/spec/internal/config/initializers/assets.rb +9 -0
- data/spec/internal/config/initializers/searchable_select.rb +6 -0
- data/spec/internal/config/routes.rb +4 -0
- data/spec/internal/config.ru +4 -0
- data/spec/internal/db/schema.rb +63 -0
- data/spec/internal/db/seeds.rb +88 -0
- data/spec/internal/esbuild.config.js +30 -0
- data/spec/internal/inject-jquery.js +4 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/package/LICENSE.txt +25 -0
- data/spec/internal/package/README.md +439 -0
- data/spec/internal/package/package.json +45 -0
- data/spec/internal/package/src/index.js +1 -0
- data/spec/internal/package/src/searchable_select/init.js +1 -0
- data/spec/internal/package/src/searchable_select.css +1 -0
- data/spec/internal/package/src/searchable_select.scss +1 -0
- data/spec/internal/package-lock.json +1385 -0
- data/spec/internal/package.json +26 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/internal/spec/internal/app/css/active_admin_source.css +38 -0
- data/spec/internal/spec/internal/log/test.log +0 -0
- data/spec/internal/tailwind-active_admin.config.js +53 -0
- data/spec/rails_helper.rb +86 -0
- data/spec/spec_helper.rb +137 -0
- data/spec/support/active_admin_helpers.rb +17 -0
- data/spec/support/capybara.rb +8 -0
- data/spec/support/models.rb +88 -0
- data/spec/support/pluck_polyfill.rb +12 -0
- data/spec/support/reset_settings.rb +5 -0
- data/src/index.js +77 -0
- data/src/searchable_select/init.js +58 -0
- data/src/searchable_select.css +5 -0
- data/src/searchable_select.css.map +1 -0
- metadata +405 -0
@@ -0,0 +1,225 @@
|
|
1
|
+
# CKEditor5-Rails Upload System Documentation
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
The CKEditor5-Rails gem implements a flexible image upload system that allows users to upload images directly from the editor to a server endpoint instead of embedding them as Base64. The system is designed to be backend-agnostic and can integrate with various storage solutions including ActiveStorage and Shrine.
|
6
|
+
|
7
|
+
## Architecture
|
8
|
+
|
9
|
+
### Core Components
|
10
|
+
|
11
|
+
#### 1. SimpleUploadAdapter Plugin (`lib/ckeditor5/rails/plugins/simple_upload_adapter.rb`)
|
12
|
+
|
13
|
+
The heart of the upload system is an inline JavaScript plugin that:
|
14
|
+
- Extends CKEditor5's Plugin class
|
15
|
+
- Requires the FileRepository plugin as a dependency
|
16
|
+
- Implements the upload adapter factory pattern
|
17
|
+
- Handles file uploads via XMLHttpRequest with progress tracking
|
18
|
+
|
19
|
+
**Location**: `lib/ckeditor5/rails/plugins/simple_upload_adapter.rb`
|
20
|
+
|
21
|
+
**Key Features**:
|
22
|
+
- Async/await based upload handling
|
23
|
+
- Progress tracking through XMLHttpRequest events
|
24
|
+
- CSRF token integration for Rails security
|
25
|
+
- Abort capability for cancelled uploads
|
26
|
+
- JSON response parsing for uploaded file URLs
|
27
|
+
|
28
|
+
#### 2. PropsInlinePlugin Base Class (`lib/ckeditor5/rails/editor/props_inline_plugin.rb`)
|
29
|
+
|
30
|
+
The upload adapter extends this base class which:
|
31
|
+
- Wraps JavaScript code in an async IIFE (Immediately Invoked Function Expression)
|
32
|
+
- Supports optional code compression via Terser
|
33
|
+
- Provides window-based plugin registration mechanism
|
34
|
+
- Handles plugin initialization errors gracefully
|
35
|
+
|
36
|
+
**Location**: `lib/ckeditor5/rails/editor/props_inline_plugin.rb`
|
37
|
+
|
38
|
+
#### 3. Plugin Registration System (`lib/ckeditor5/rails/plugins.rb`)
|
39
|
+
|
40
|
+
Central registry that:
|
41
|
+
- Loads all core plugins including SimpleUploadAdapter
|
42
|
+
- Manages plugin dependencies
|
43
|
+
- Handles plugin patches and fixes
|
44
|
+
|
45
|
+
**Location**: `lib/ckeditor5/rails/plugins.rb`
|
46
|
+
|
47
|
+
## Configuration System
|
48
|
+
|
49
|
+
### Preset Builder Integration (`lib/ckeditor5/rails/presets/preset_builder.rb`)
|
50
|
+
|
51
|
+
The upload adapter is configured through the preset system:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
def simple_upload_adapter(upload_url = '/uploads', compress: !@disallow_inline_plugin_compression)
|
55
|
+
plugins do
|
56
|
+
remove(:Base64UploadAdapter) # Remove default Base64 adapter
|
57
|
+
end
|
58
|
+
|
59
|
+
plugin(Plugins::SimpleUploadAdapter.new(compress: compress))
|
60
|
+
configure(:simpleUpload, { uploadUrl: upload_url })
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
**Location**: `lib/ckeditor5/rails/presets/preset_builder.rb:394-401`
|
65
|
+
|
66
|
+
**Configuration Steps**:
|
67
|
+
1. Removes the default Base64UploadAdapter plugin
|
68
|
+
2. Adds the SimpleUploadAdapter plugin
|
69
|
+
3. Configures the upload URL endpoint
|
70
|
+
4. Optionally enables/disables JavaScript compression
|
71
|
+
|
72
|
+
### Usage in Presets
|
73
|
+
|
74
|
+
Upload functionality is enabled in presets via:
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
# In preset definition
|
78
|
+
simple_upload_adapter # Uses default '/uploads' endpoint
|
79
|
+
simple_upload_adapter '/custom' # Custom endpoint
|
80
|
+
```
|
81
|
+
|
82
|
+
**Example Location**: `sandbox/config/initializers/ckeditor5.rb:82`
|
83
|
+
|
84
|
+
## Frontend Implementation
|
85
|
+
|
86
|
+
### Upload Flow
|
87
|
+
|
88
|
+
1. **User Action**: User selects/pastes an image in the editor
|
89
|
+
2. **Plugin Activation**: FileRepository triggers createUploadAdapter
|
90
|
+
3. **Adapter Creation**: SimpleUploadAdapter creates an upload instance
|
91
|
+
4. **FormData Preparation**: File wrapped in FormData with 'upload' field name
|
92
|
+
5. **Security Headers**:
|
93
|
+
- X-Requested-With: XMLHttpRequest
|
94
|
+
- X-CSRF-Token: Extracted from meta tag
|
95
|
+
6. **Upload Process**:
|
96
|
+
- Progress events update loader.uploaded/uploadTotal
|
97
|
+
- Success (200-299): Parse JSON response for URL
|
98
|
+
- Error handling for failed/aborted uploads
|
99
|
+
7. **Editor Update**: Returned URL replaces placeholder image
|
100
|
+
|
101
|
+
### Response Format
|
102
|
+
|
103
|
+
Server must return JSON with structure:
|
104
|
+
```json
|
105
|
+
{
|
106
|
+
"url": "https://example.com/uploads/image.jpg"
|
107
|
+
}
|
108
|
+
```
|
109
|
+
|
110
|
+
## Integration Points
|
111
|
+
|
112
|
+
### 1. Rails Controller
|
113
|
+
|
114
|
+
The upload endpoint (not included in gem) should:
|
115
|
+
- Accept POST requests to configured URL
|
116
|
+
- Process multipart/form-data with 'upload' field
|
117
|
+
- Store file using preferred backend (ActiveStorage, Shrine, etc.)
|
118
|
+
- Return JSON with uploaded file URL
|
119
|
+
- Handle CSRF token validation
|
120
|
+
|
121
|
+
### 2. Helper Methods
|
122
|
+
|
123
|
+
Upload configuration accessible via:
|
124
|
+
- `ckeditor5_editor` helper in views
|
125
|
+
- Preset configuration in initializers
|
126
|
+
- Runtime configuration overrides
|
127
|
+
|
128
|
+
**Location**: `lib/ckeditor5/rails/editor/helpers/editor_helpers.rb`
|
129
|
+
|
130
|
+
### 3. Engine Registration
|
131
|
+
|
132
|
+
Upload adapter available through:
|
133
|
+
- Engine preset system
|
134
|
+
- Direct plugin inclusion
|
135
|
+
- Configuration DSL methods
|
136
|
+
|
137
|
+
**Location**: `lib/ckeditor5/rails/engine.rb:83`
|
138
|
+
|
139
|
+
## File Structure
|
140
|
+
|
141
|
+
```
|
142
|
+
lib/ckeditor5/rails/
|
143
|
+
├── plugins/
|
144
|
+
│ ├── simple_upload_adapter.rb # Main upload adapter implementation
|
145
|
+
│ └── ...
|
146
|
+
├── editor/
|
147
|
+
│ ├── props_inline_plugin.rb # Base class for inline plugins
|
148
|
+
│ └── helpers/
|
149
|
+
│ └── editor_helpers.rb # View helpers for editor
|
150
|
+
├── presets/
|
151
|
+
│ └── preset_builder.rb # Configuration DSL with upload method
|
152
|
+
└── engine.rb # Rails engine with upload registration
|
153
|
+
```
|
154
|
+
|
155
|
+
## Configuration Examples
|
156
|
+
|
157
|
+
### Basic Setup
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
CKEditor5::Rails.configure do
|
161
|
+
# Enable with default /uploads endpoint
|
162
|
+
simple_upload_adapter
|
163
|
+
end
|
164
|
+
```
|
165
|
+
|
166
|
+
### Custom Endpoint
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
CKEditor5::Rails.configure do
|
170
|
+
# Custom upload endpoint
|
171
|
+
simple_upload_adapter '/api/images/upload'
|
172
|
+
end
|
173
|
+
```
|
174
|
+
|
175
|
+
### With Compression Disabled
|
176
|
+
|
177
|
+
```ruby
|
178
|
+
CKEditor5::Rails.configure do
|
179
|
+
# Disable JavaScript compression for debugging
|
180
|
+
simple_upload_adapter '/uploads', compress: false
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
184
|
+
## Key Implementation Details
|
185
|
+
|
186
|
+
### JavaScript Plugin Structure
|
187
|
+
|
188
|
+
The plugin is written as an ES6 module that:
|
189
|
+
1. Imports required CKEditor5 modules dynamically
|
190
|
+
2. Returns a class extending Plugin
|
191
|
+
3. Implements standard CKEditor5 plugin lifecycle
|
192
|
+
4. Integrates with FileRepository for upload management
|
193
|
+
|
194
|
+
### Security Considerations
|
195
|
+
|
196
|
+
- CSRF token automatically extracted from Rails meta tag
|
197
|
+
- XMLHttpRequest marked with X-Requested-With header
|
198
|
+
- Server-side validation responsibility lies with implementer
|
199
|
+
|
200
|
+
### Error Handling
|
201
|
+
|
202
|
+
- Network errors caught and rejected with descriptive messages
|
203
|
+
- HTTP status codes outside 200-299 range treated as errors
|
204
|
+
- Upload abort capability for user cancellation
|
205
|
+
|
206
|
+
## Backend Requirements
|
207
|
+
|
208
|
+
To implement the upload endpoint:
|
209
|
+
|
210
|
+
1. **Route Definition**: Add POST route to configured URL
|
211
|
+
2. **File Processing**: Handle multipart upload with 'upload' parameter
|
212
|
+
3. **Storage Backend**: Integrate with ActiveStorage, Shrine, or custom solution
|
213
|
+
4. **Response Format**: Return JSON with 'url' key
|
214
|
+
5. **Security**: Validate CSRF tokens and user permissions
|
215
|
+
|
216
|
+
## Extension Points
|
217
|
+
|
218
|
+
The system supports:
|
219
|
+
- Multiple upload adapters via plugin system
|
220
|
+
- Custom configuration through preset builder
|
221
|
+
- Backend flexibility through endpoint abstraction
|
222
|
+
- Compression toggle for development/production
|
223
|
+
- Integration with various storage backends
|
224
|
+
|
225
|
+
This architecture provides a clean separation between the editor frontend and storage backend, allowing developers to implement uploads using their preferred Rails patterns and storage solutions.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activeadmin", "4.0.0.beta16"
|
6
|
+
gem "rspec_junit_formatter", require: false
|
7
|
+
gem "simplecov", require: false
|
8
|
+
gem "simplecov-cobertura", require: false
|
9
|
+
gem "rails", "~> 7.1"
|
10
|
+
|
11
|
+
gemspec path: "../"
|
@@ -0,0 +1,371 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
rs-activeadmin-searchable_select (4.0.5)
|
5
|
+
activeadmin (~> 4.0.0.beta)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actioncable (7.1.5.2)
|
11
|
+
actionpack (= 7.1.5.2)
|
12
|
+
activesupport (= 7.1.5.2)
|
13
|
+
nio4r (~> 2.0)
|
14
|
+
websocket-driver (>= 0.6.1)
|
15
|
+
zeitwerk (~> 2.6)
|
16
|
+
actionmailbox (7.1.5.2)
|
17
|
+
actionpack (= 7.1.5.2)
|
18
|
+
activejob (= 7.1.5.2)
|
19
|
+
activerecord (= 7.1.5.2)
|
20
|
+
activestorage (= 7.1.5.2)
|
21
|
+
activesupport (= 7.1.5.2)
|
22
|
+
mail (>= 2.7.1)
|
23
|
+
net-imap
|
24
|
+
net-pop
|
25
|
+
net-smtp
|
26
|
+
actionmailer (7.1.5.2)
|
27
|
+
actionpack (= 7.1.5.2)
|
28
|
+
actionview (= 7.1.5.2)
|
29
|
+
activejob (= 7.1.5.2)
|
30
|
+
activesupport (= 7.1.5.2)
|
31
|
+
mail (~> 2.5, >= 2.5.4)
|
32
|
+
net-imap
|
33
|
+
net-pop
|
34
|
+
net-smtp
|
35
|
+
rails-dom-testing (~> 2.2)
|
36
|
+
actionpack (7.1.5.2)
|
37
|
+
actionview (= 7.1.5.2)
|
38
|
+
activesupport (= 7.1.5.2)
|
39
|
+
nokogiri (>= 1.8.5)
|
40
|
+
racc
|
41
|
+
rack (>= 2.2.4)
|
42
|
+
rack-session (>= 1.0.1)
|
43
|
+
rack-test (>= 0.6.3)
|
44
|
+
rails-dom-testing (~> 2.2)
|
45
|
+
rails-html-sanitizer (~> 1.6)
|
46
|
+
actiontext (7.1.5.2)
|
47
|
+
actionpack (= 7.1.5.2)
|
48
|
+
activerecord (= 7.1.5.2)
|
49
|
+
activestorage (= 7.1.5.2)
|
50
|
+
activesupport (= 7.1.5.2)
|
51
|
+
globalid (>= 0.6.0)
|
52
|
+
nokogiri (>= 1.8.5)
|
53
|
+
actionview (7.1.5.2)
|
54
|
+
activesupport (= 7.1.5.2)
|
55
|
+
builder (~> 3.1)
|
56
|
+
erubi (~> 1.11)
|
57
|
+
rails-dom-testing (~> 2.2)
|
58
|
+
rails-html-sanitizer (~> 1.6)
|
59
|
+
activeadmin (4.0.0.beta16)
|
60
|
+
arbre (~> 2.0)
|
61
|
+
csv
|
62
|
+
formtastic (>= 5.0)
|
63
|
+
formtastic_i18n (>= 0.7)
|
64
|
+
inherited_resources (~> 2.0)
|
65
|
+
kaminari (>= 1.2.1)
|
66
|
+
railties (>= 7.0)
|
67
|
+
ransack (>= 4.0)
|
68
|
+
activejob (7.1.5.2)
|
69
|
+
activesupport (= 7.1.5.2)
|
70
|
+
globalid (>= 0.3.6)
|
71
|
+
activemodel (7.1.5.2)
|
72
|
+
activesupport (= 7.1.5.2)
|
73
|
+
activerecord (7.1.5.2)
|
74
|
+
activemodel (= 7.1.5.2)
|
75
|
+
activesupport (= 7.1.5.2)
|
76
|
+
timeout (>= 0.4.0)
|
77
|
+
activestorage (7.1.5.2)
|
78
|
+
actionpack (= 7.1.5.2)
|
79
|
+
activejob (= 7.1.5.2)
|
80
|
+
activerecord (= 7.1.5.2)
|
81
|
+
activesupport (= 7.1.5.2)
|
82
|
+
marcel (~> 1.0)
|
83
|
+
activesupport (7.1.5.2)
|
84
|
+
base64
|
85
|
+
benchmark (>= 0.3)
|
86
|
+
bigdecimal
|
87
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
88
|
+
connection_pool (>= 2.2.5)
|
89
|
+
drb
|
90
|
+
i18n (>= 1.6, < 2)
|
91
|
+
logger (>= 1.4.2)
|
92
|
+
minitest (>= 5.1)
|
93
|
+
mutex_m
|
94
|
+
securerandom (>= 0.3)
|
95
|
+
tzinfo (~> 2.0)
|
96
|
+
addressable (2.8.7)
|
97
|
+
public_suffix (>= 2.0.2, < 7.0)
|
98
|
+
appraisal (2.5.0)
|
99
|
+
bundler
|
100
|
+
rake
|
101
|
+
thor (>= 0.14.0)
|
102
|
+
arbre (2.2.0)
|
103
|
+
activesupport (>= 7.0)
|
104
|
+
ast (2.4.3)
|
105
|
+
base64 (0.3.0)
|
106
|
+
benchmark (0.4.1)
|
107
|
+
bigdecimal (3.2.3)
|
108
|
+
builder (3.3.0)
|
109
|
+
capybara (3.40.0)
|
110
|
+
addressable
|
111
|
+
matrix
|
112
|
+
mini_mime (>= 0.1.3)
|
113
|
+
nokogiri (~> 1.11)
|
114
|
+
rack (>= 1.6.0)
|
115
|
+
rack-test (>= 0.6.3)
|
116
|
+
regexp_parser (>= 1.5, < 3.0)
|
117
|
+
xpath (~> 3.2)
|
118
|
+
capybara-playwright-driver (0.5.7)
|
119
|
+
addressable
|
120
|
+
capybara
|
121
|
+
playwright-ruby-client (>= 1.16.0)
|
122
|
+
combustion (1.5.0)
|
123
|
+
activesupport (>= 3.0.0)
|
124
|
+
railties (>= 3.0.0)
|
125
|
+
thor (>= 0.14.6)
|
126
|
+
concurrent-ruby (1.3.5)
|
127
|
+
connection_pool (2.5.4)
|
128
|
+
crass (1.0.6)
|
129
|
+
csv (3.3.5)
|
130
|
+
database_cleaner-active_record (2.2.2)
|
131
|
+
activerecord (>= 5.a)
|
132
|
+
database_cleaner-core (~> 2.0)
|
133
|
+
database_cleaner-core (2.0.1)
|
134
|
+
date (3.4.1)
|
135
|
+
diff-lcs (1.6.2)
|
136
|
+
docile (1.4.1)
|
137
|
+
drb (2.2.3)
|
138
|
+
erb (5.0.2)
|
139
|
+
erubi (1.13.1)
|
140
|
+
formtastic (5.0.0)
|
141
|
+
actionpack (>= 6.0.0)
|
142
|
+
formtastic_i18n (0.7.0)
|
143
|
+
git (1.19.1)
|
144
|
+
addressable (~> 2.8)
|
145
|
+
rchardet (~> 1.8)
|
146
|
+
globalid (1.2.1)
|
147
|
+
activesupport (>= 6.1)
|
148
|
+
has_scope (0.8.2)
|
149
|
+
actionpack (>= 5.2)
|
150
|
+
activesupport (>= 5.2)
|
151
|
+
i18n (1.14.7)
|
152
|
+
concurrent-ruby (~> 1.0)
|
153
|
+
inherited_resources (2.1.0)
|
154
|
+
actionpack (>= 7.0)
|
155
|
+
has_scope (>= 0.6)
|
156
|
+
railties (>= 7.0)
|
157
|
+
responders (>= 2)
|
158
|
+
io-console (0.8.1)
|
159
|
+
irb (1.15.2)
|
160
|
+
pp (>= 0.6.0)
|
161
|
+
rdoc (>= 4.0.0)
|
162
|
+
reline (>= 0.4.2)
|
163
|
+
json (2.13.2)
|
164
|
+
kaminari (1.2.2)
|
165
|
+
activesupport (>= 4.1.0)
|
166
|
+
kaminari-actionview (= 1.2.2)
|
167
|
+
kaminari-activerecord (= 1.2.2)
|
168
|
+
kaminari-core (= 1.2.2)
|
169
|
+
kaminari-actionview (1.2.2)
|
170
|
+
actionview
|
171
|
+
kaminari-core (= 1.2.2)
|
172
|
+
kaminari-activerecord (1.2.2)
|
173
|
+
activerecord
|
174
|
+
kaminari-core (= 1.2.2)
|
175
|
+
kaminari-core (1.2.2)
|
176
|
+
logger (1.7.0)
|
177
|
+
loofah (2.24.1)
|
178
|
+
crass (~> 1.0.2)
|
179
|
+
nokogiri (>= 1.12.0)
|
180
|
+
mail (2.8.1)
|
181
|
+
mini_mime (>= 0.1.1)
|
182
|
+
net-imap
|
183
|
+
net-pop
|
184
|
+
net-smtp
|
185
|
+
marcel (1.0.4)
|
186
|
+
matrix (0.4.3)
|
187
|
+
mime-types (3.7.0)
|
188
|
+
logger
|
189
|
+
mime-types-data (~> 3.2025, >= 3.2025.0507)
|
190
|
+
mime-types-data (3.2025.0902)
|
191
|
+
mini_mime (1.1.5)
|
192
|
+
minitest (5.25.5)
|
193
|
+
mutex_m (0.3.0)
|
194
|
+
net-imap (0.5.10)
|
195
|
+
date
|
196
|
+
net-protocol
|
197
|
+
net-pop (0.1.2)
|
198
|
+
net-protocol
|
199
|
+
net-protocol (0.2.2)
|
200
|
+
timeout
|
201
|
+
net-smtp (0.5.1)
|
202
|
+
net-protocol
|
203
|
+
nio4r (2.7.4)
|
204
|
+
nokogiri (1.18.9-x86_64-linux-gnu)
|
205
|
+
racc (~> 1.4)
|
206
|
+
parallel (1.27.0)
|
207
|
+
parser (3.3.9.0)
|
208
|
+
ast (~> 2.4.1)
|
209
|
+
racc
|
210
|
+
playwright-ruby-client (1.55.0)
|
211
|
+
concurrent-ruby (>= 1.1.6)
|
212
|
+
mime-types (>= 3.0)
|
213
|
+
pp (0.6.2)
|
214
|
+
prettyprint
|
215
|
+
prettyprint (0.2.0)
|
216
|
+
prism (1.4.0)
|
217
|
+
propshaft (1.2.1)
|
218
|
+
actionpack (>= 7.0.0)
|
219
|
+
activesupport (>= 7.0.0)
|
220
|
+
rack
|
221
|
+
psych (5.2.6)
|
222
|
+
date
|
223
|
+
stringio
|
224
|
+
public_suffix (6.0.2)
|
225
|
+
puma (6.6.1)
|
226
|
+
nio4r (~> 2.0)
|
227
|
+
racc (1.8.1)
|
228
|
+
rack (3.2.1)
|
229
|
+
rack-session (2.1.1)
|
230
|
+
base64 (>= 0.1.0)
|
231
|
+
rack (>= 3.0.0)
|
232
|
+
rack-test (2.2.0)
|
233
|
+
rack (>= 1.3)
|
234
|
+
rackup (2.2.1)
|
235
|
+
rack (>= 3)
|
236
|
+
rails (7.1.5.2)
|
237
|
+
actioncable (= 7.1.5.2)
|
238
|
+
actionmailbox (= 7.1.5.2)
|
239
|
+
actionmailer (= 7.1.5.2)
|
240
|
+
actionpack (= 7.1.5.2)
|
241
|
+
actiontext (= 7.1.5.2)
|
242
|
+
actionview (= 7.1.5.2)
|
243
|
+
activejob (= 7.1.5.2)
|
244
|
+
activemodel (= 7.1.5.2)
|
245
|
+
activerecord (= 7.1.5.2)
|
246
|
+
activestorage (= 7.1.5.2)
|
247
|
+
activesupport (= 7.1.5.2)
|
248
|
+
bundler (>= 1.15.0)
|
249
|
+
railties (= 7.1.5.2)
|
250
|
+
rails-dom-testing (2.3.0)
|
251
|
+
activesupport (>= 5.0.0)
|
252
|
+
minitest
|
253
|
+
nokogiri (>= 1.6)
|
254
|
+
rails-html-sanitizer (1.6.2)
|
255
|
+
loofah (~> 2.21)
|
256
|
+
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
257
|
+
railties (7.1.5.2)
|
258
|
+
actionpack (= 7.1.5.2)
|
259
|
+
activesupport (= 7.1.5.2)
|
260
|
+
irb
|
261
|
+
rackup (>= 1.0.0)
|
262
|
+
rake (>= 12.2)
|
263
|
+
thor (~> 1.0, >= 1.2.2)
|
264
|
+
zeitwerk (~> 2.6)
|
265
|
+
rainbow (2.2.2)
|
266
|
+
rake
|
267
|
+
rake (13.3.0)
|
268
|
+
ransack (4.3.0)
|
269
|
+
activerecord (>= 6.1.5)
|
270
|
+
activesupport (>= 6.1.5)
|
271
|
+
i18n
|
272
|
+
rchardet (1.9.0)
|
273
|
+
rdoc (6.14.2)
|
274
|
+
erb
|
275
|
+
psych (>= 4.0.0)
|
276
|
+
regexp_parser (2.11.2)
|
277
|
+
reline (0.6.2)
|
278
|
+
io-console (~> 0.5)
|
279
|
+
responders (3.1.1)
|
280
|
+
actionpack (>= 5.2)
|
281
|
+
railties (>= 5.2)
|
282
|
+
rexml (3.4.2)
|
283
|
+
rspec-core (3.13.5)
|
284
|
+
rspec-support (~> 3.13.0)
|
285
|
+
rspec-expectations (3.13.5)
|
286
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
287
|
+
rspec-support (~> 3.13.0)
|
288
|
+
rspec-mocks (3.13.5)
|
289
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
290
|
+
rspec-support (~> 3.13.0)
|
291
|
+
rspec-rails (6.1.5)
|
292
|
+
actionpack (>= 6.1)
|
293
|
+
activesupport (>= 6.1)
|
294
|
+
railties (>= 6.1)
|
295
|
+
rspec-core (~> 3.13)
|
296
|
+
rspec-expectations (~> 3.13)
|
297
|
+
rspec-mocks (~> 3.13)
|
298
|
+
rspec-support (~> 3.13)
|
299
|
+
rspec-support (3.13.5)
|
300
|
+
rspec_junit_formatter (0.6.0)
|
301
|
+
rspec-core (>= 2, < 4, != 2.12.0)
|
302
|
+
rubocop (1.50.2)
|
303
|
+
json (~> 2.3)
|
304
|
+
parallel (~> 1.10)
|
305
|
+
parser (>= 3.2.0.0)
|
306
|
+
rainbow (>= 2.2.2, < 4.0)
|
307
|
+
regexp_parser (>= 1.8, < 3.0)
|
308
|
+
rexml (>= 3.2.5, < 4.0)
|
309
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
310
|
+
ruby-progressbar (~> 1.7)
|
311
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
312
|
+
rubocop-ast (1.46.0)
|
313
|
+
parser (>= 3.3.7.2)
|
314
|
+
prism (~> 1.4)
|
315
|
+
ruby-progressbar (1.13.0)
|
316
|
+
securerandom (0.4.1)
|
317
|
+
semmy (1.2.0)
|
318
|
+
git (~> 1.3)
|
319
|
+
rainbow (~> 2.1)
|
320
|
+
unindent (~> 1.0)
|
321
|
+
simplecov (0.22.0)
|
322
|
+
docile (~> 1.1)
|
323
|
+
simplecov-html (~> 0.11)
|
324
|
+
simplecov_json_formatter (~> 0.1)
|
325
|
+
simplecov-cobertura (3.1.0)
|
326
|
+
rexml
|
327
|
+
simplecov (~> 0.19)
|
328
|
+
simplecov-html (0.13.2)
|
329
|
+
simplecov_json_formatter (0.1.4)
|
330
|
+
sqlite3 (2.7.3-x86_64-linux-gnu)
|
331
|
+
stringio (3.1.7)
|
332
|
+
thor (1.4.0)
|
333
|
+
timeout (0.4.3)
|
334
|
+
tzinfo (2.0.6)
|
335
|
+
concurrent-ruby (~> 1.0)
|
336
|
+
unicode-display_width (2.6.0)
|
337
|
+
unindent (1.0)
|
338
|
+
websocket-driver (0.8.0)
|
339
|
+
base64
|
340
|
+
websocket-extensions (>= 0.1.0)
|
341
|
+
websocket-extensions (0.1.5)
|
342
|
+
xpath (3.2.0)
|
343
|
+
nokogiri (~> 1.8)
|
344
|
+
zeitwerk (2.7.3)
|
345
|
+
|
346
|
+
PLATFORMS
|
347
|
+
x86_64-linux
|
348
|
+
|
349
|
+
DEPENDENCIES
|
350
|
+
activeadmin (= 4.0.0.beta16)
|
351
|
+
appraisal (~> 2.2)
|
352
|
+
bundler (>= 1.5, < 3)
|
353
|
+
capybara (~> 3.39)
|
354
|
+
capybara-playwright-driver (~> 0.5)
|
355
|
+
combustion (~> 1.5)
|
356
|
+
database_cleaner-active_record (~> 2.1)
|
357
|
+
propshaft
|
358
|
+
puma (~> 6.0)
|
359
|
+
rails (~> 7.1)
|
360
|
+
rake
|
361
|
+
rs-activeadmin-searchable_select!
|
362
|
+
rspec-rails (~> 6.0)
|
363
|
+
rspec_junit_formatter
|
364
|
+
rubocop (~> 1.50.0)
|
365
|
+
semmy (~> 1.0)
|
366
|
+
simplecov
|
367
|
+
simplecov-cobertura
|
368
|
+
sqlite3 (~> 2.1)
|
369
|
+
|
370
|
+
BUNDLED WITH
|
371
|
+
2.4.10
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activeadmin", "4.0.0.beta16"
|
6
|
+
gem "rspec_junit_formatter", require: false
|
7
|
+
gem "simplecov", require: false
|
8
|
+
gem "simplecov-cobertura", require: false
|
9
|
+
gem "rails", "~> 8.0"
|
10
|
+
|
11
|
+
gemspec path: "../"
|