propel_rails 0.3.2 โ 0.3.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 +4 -4
- data/CHANGELOG.md +47 -0
- data/README.md +46 -1
- data/lib/generators/propel/install_generator.rb +33 -39
- data/lib/propel_rails.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11592c55b9820565ba041c66ee52b0d09e048b3c5e0452df4dd8cbf2a0149501
|
4
|
+
data.tar.gz: 98eca640196111c6eeab5b5acac1761cb56f02a46034291060399e5286634bbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6675ebaad5fa1f7cc85aa2486b82b53e6c89600c9f2f950f54deb5c641c157474bd7a3f54b3b78c85e138c76d742ef79abe3948fdae5c3f7e9a72acf8cd8c1eb
|
7
|
+
data.tar.gz: 2d2a10db01ad4714f2bd51218f405026afa88e05396c01b12f50e0725f93ddc26013136232d04df330bfdde5a6ea47734431fed673498178ca0155448b2ba22b
|
data/CHANGELOG.md
CHANGED
@@ -12,6 +12,53 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
12
12
|
- Cross-component integration patterns
|
13
13
|
- Advanced orchestration features
|
14
14
|
|
15
|
+
## [0.3.3] - 2025-01-XX
|
16
|
+
|
17
|
+
### ๐ Major Features Added
|
18
|
+
- **Comprehensive Dynamic Filtering System**: Complete orchestration of PropelApi's new filtering capabilities across the entire Propel Rails ecosystem
|
19
|
+
- **Zero-Configuration Filtering**: Automatic filtering support for all generated API resources
|
20
|
+
- **Database-Agnostic Implementation**: Seamless filtering across SQLite, PostgreSQL, and MySQL
|
21
|
+
- **Multi-Component Integration**: PropelApi, PropelFacets, and PropelAuthentication work together for complete filtering solution
|
22
|
+
|
23
|
+
### ๐ Advanced Filtering Capabilities
|
24
|
+
- **Multi-Type Filtering Support**: Complete filtering support across all data types (string, numeric, boolean, datetime, date, time)
|
25
|
+
- **Intelligent Facet Integration**: PropelFacets automatically includes filterable fields in JSON responses
|
26
|
+
- **Security-First Filtering**: PropelAuthentication provides multi-tenancy scoping for all filtered queries
|
27
|
+
- **Performance-Optimized**: Efficient queries with proper indexing support and database-agnostic implementation
|
28
|
+
|
29
|
+
### ๐ ๏ธ Framework Orchestration Improvements
|
30
|
+
- **Enhanced Component Coordination**: Better coordination of filtering features across all Propel components
|
31
|
+
- PropelApi provides the core filtering infrastructure with dynamic scope generation
|
32
|
+
- PropelFacets ensures filterable fields are included in API responses
|
33
|
+
- PropelAuthentication maintains security and multi-tenancy across all filtered queries
|
34
|
+
- **Template System Integration**: Enhanced template coordination for filtering support
|
35
|
+
- Improved facet model templates with smart field inclusion
|
36
|
+
- Enhanced test templates for comprehensive filtering coverage
|
37
|
+
- Better integration test templates for filtering scenarios
|
38
|
+
|
39
|
+
### ๐ง Dependency Updates
|
40
|
+
- **PropelApi 0.3.3**: Comprehensive dynamic filtering system with multi-type support
|
41
|
+
- **PropelAuthentication 0.3.3**: Enhanced test integration and filtering compatibility
|
42
|
+
- **PropelFacets 0.3.3**: Enhanced facet system for filtering with smart field inclusion
|
43
|
+
|
44
|
+
### ๐งช Testing & Quality Assurance
|
45
|
+
- **Comprehensive Test Coverage**: Complete test suite with 992 tests covering all filtering scenarios
|
46
|
+
- **Multi-Component Testing**: Tests verify filtering works across all Propel components
|
47
|
+
- **Database Compatibility**: Tests pass across SQLite, PostgreSQL, and MySQL
|
48
|
+
- **Security Testing**: Multi-tenancy and authentication integration testing
|
49
|
+
|
50
|
+
### ๐ Documentation & Examples
|
51
|
+
- **Comprehensive API Documentation**: Complete filtering documentation with examples for all operators
|
52
|
+
- **Framework Integration Guide**: How filtering works across all Propel components
|
53
|
+
- **Performance Guidelines**: Optimization recommendations for large datasets
|
54
|
+
- **Security Best Practices**: Multi-tenancy and authentication considerations
|
55
|
+
|
56
|
+
### ๐ Security & Performance
|
57
|
+
- **Multi-Tenant Filtering**: All filtered queries automatically scoped to user's organization
|
58
|
+
- **Input Validation**: Comprehensive validation of filter parameters across all components
|
59
|
+
- **SQL Injection Protection**: All parameters properly escaped and parameterized
|
60
|
+
- **Performance Optimization**: Efficient queries with proper indexing support
|
61
|
+
|
15
62
|
## [0.3.2] - 2025-09-15
|
16
63
|
|
17
64
|
### ๐ Enhanced Generator Reliability
|
data/README.md
CHANGED
@@ -1,6 +1,51 @@
|
|
1
1
|
# Propel Rails
|
2
2
|
|
3
|
-
A modular Ruby framework meta gem that orchestrates the installation of Propel components for building modern web applications
|
3
|
+
A modular Ruby framework meta gem that orchestrates the installation of Propel components for building modern web applications with **comprehensive dynamic filtering capabilities**.
|
4
|
+
|
5
|
+
## ๐ NEW in v0.3.3: Dynamic Filtering System
|
6
|
+
|
7
|
+
Propel Rails now orchestrates a complete automatic URL query string filtering and scoping system across all components. This provides powerful, database-agnostic filtering with zero configuration required.
|
8
|
+
|
9
|
+
### Quick Filtering Examples
|
10
|
+
|
11
|
+
```bash
|
12
|
+
# String filtering
|
13
|
+
GET /api/v1/meetings?title_contains=Project&status_in=active,pending
|
14
|
+
|
15
|
+
# Numeric filtering
|
16
|
+
GET /api/v1/meetings?max_participants_gte=50&max_participants_lte=200
|
17
|
+
|
18
|
+
# Boolean filtering
|
19
|
+
GET /api/v1/meetings?recording_enabled_eq=true&ai_research_enabled_eq=false
|
20
|
+
|
21
|
+
# DateTime filtering
|
22
|
+
GET /api/v1/meetings?start_time_after=2024-01-01T00:00:00Z&start_time_before=2024-12-31T23:59:59Z
|
23
|
+
|
24
|
+
# Range filtering
|
25
|
+
GET /api/v1/meetings?max_participants_range=150,350
|
26
|
+
|
27
|
+
# Combined filtering with sorting and pagination
|
28
|
+
GET /api/v1/meetings?title_contains=Project&max_participants_gte=50&order_by=start_time&page=1&limit=20
|
29
|
+
```
|
30
|
+
|
31
|
+
### Supported Filter Operators
|
32
|
+
|
33
|
+
| Data Type | Operators | Examples |
|
34
|
+
|-----------|-----------|----------|
|
35
|
+
| **String** | `_eq`, `_contains`, `_starts_with`, `_ends_with`, `_in` | `name_eq=Acme`, `title_contains=Project` |
|
36
|
+
| **Numeric** | `_eq`, `_gt`, `_lt`, `_gte`, `_lte`, `_range`, `_in` | `max_participants_gte=50`, `price_range=100,500` |
|
37
|
+
| **Boolean** | `_eq` (supports `true`/`false`, `1`/`0`, `yes`/`no`, `on`/`off`) | `recording_enabled_eq=true` |
|
38
|
+
| **DateTime** | `_before`, `_after`, `_year`, `_month`, `_day`, `_date` | `start_time_after=2024-01-01`, `created_at_year=2024` |
|
39
|
+
| **Date** | Same as DateTime | `event_date_after=2024-01-01` |
|
40
|
+
| **Time** | Same as DateTime | `start_time_hour=14` |
|
41
|
+
|
42
|
+
### Automatic Features
|
43
|
+
|
44
|
+
- **Zero Configuration**: Filtering works automatically for all generated resources
|
45
|
+
- **Database Agnostic**: Works with SQLite, PostgreSQL, and MySQL
|
46
|
+
- **Security Built-in**: SQL injection protection and input validation
|
47
|
+
- **Multi-tenancy Ready**: Automatic organization scoping
|
48
|
+
- **Performance Optimized**: Efficient queries with proper indexing support
|
4
49
|
|
5
50
|
## Overview
|
6
51
|
|
@@ -80,7 +80,7 @@ module Propel
|
|
80
80
|
|
81
81
|
install_components(components)
|
82
82
|
run_migrations unless options[:skip_migrations]
|
83
|
-
|
83
|
+
# copy_api_explorer if components.include?(:api) # TODO: Re-enable for future release when API Explorer is ready
|
84
84
|
show_completion_message
|
85
85
|
end
|
86
86
|
|
@@ -204,44 +204,38 @@ module Propel
|
|
204
204
|
end
|
205
205
|
end
|
206
206
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
say " 2. yarn install", :white
|
240
|
-
say " 3. yarn start", :white
|
241
|
-
say " 4. Open http://localhost:8080", :white
|
242
|
-
|
243
|
-
say "\n๐ Secure & Obfuscated", :green
|
244
|
-
end
|
207
|
+
# TODO: Re-enable this method for future release when API Explorer is ready
|
208
|
+
# def copy_api_explorer
|
209
|
+
# say "\n๐ Installing API Explorer...", :blue
|
210
|
+
#
|
211
|
+
# # Find the api-explorer source directory (in the gem root, not propel_rails subdirectory)
|
212
|
+
# # __dir__ is: propel_rails/lib/generators/propel/
|
213
|
+
# # We need to go up 4 levels to reach the gem root
|
214
|
+
# gem_root = File.expand_path("../../../../", __dir__)
|
215
|
+
# api_explorer_source = File.join(gem_root, "api-explorer")
|
216
|
+
# api_explorer_dest = File.join(destination_root, "api-explorer")
|
217
|
+
#
|
218
|
+
# begin
|
219
|
+
# if Dir.exist?(api_explorer_source)
|
220
|
+
# # Use FileUtils to copy the entire directory
|
221
|
+
# FileUtils.cp_r(api_explorer_source, api_explorer_dest)
|
222
|
+
#
|
223
|
+
# say "โ
API Explorer installed at ./api-explorer/", :green
|
224
|
+
# say "\n๐ To use the API Explorer:", :cyan
|
225
|
+
# say " 1. cd api-explorer", :white
|
226
|
+
# say " 2. yarn install (or npm install)", :white
|
227
|
+
# say " 3. yarn start (or npm start)", :white
|
228
|
+
# say " 4. Open http://localhost:3000 in your browser", :white
|
229
|
+
# say " 5. Configure API endpoints in api-explorer/api-cache/", :white
|
230
|
+
# else
|
231
|
+
# say "โ ๏ธ API Explorer source not found at #{api_explorer_source}", :yellow
|
232
|
+
# say " Skipping API Explorer installation", :yellow
|
233
|
+
# end
|
234
|
+
# rescue => e
|
235
|
+
# say "โ ๏ธ Could not install API Explorer: #{e.message}", :yellow
|
236
|
+
# say " Please copy the api-explorer folder manually from the gem", :yellow
|
237
|
+
# end
|
238
|
+
# end
|
245
239
|
|
246
240
|
def show_completion_message
|
247
241
|
say "\n" + "="*70, :green
|
data/lib/propel_rails.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propel_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Propel Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-09-
|
11
|
+
date: 2025-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,10 +136,11 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '3.10'
|
139
|
-
description:
|
140
|
-
|
141
|
-
|
142
|
-
|
139
|
+
description: "Propel Rails is a modular framework built as a collection of independent
|
140
|
+
gems\nthat work together seamlessly. It provides authentication, API generation
|
141
|
+
with automatic\nURL query string filtering and scoping, access control, AI integration,
|
142
|
+
and more - all \ndesigned to work individually or as a cohesive framework with zero-configuration
|
143
|
+
filtering.\n"
|
143
144
|
email:
|
144
145
|
- admin@propel-hq.dev
|
145
146
|
executables: []
|
@@ -176,5 +177,5 @@ requirements: []
|
|
176
177
|
rubygems_version: 3.4.19
|
177
178
|
signing_key:
|
178
179
|
specification_version: 4
|
179
|
-
summary: A modular Ruby framework
|
180
|
+
summary: A modular Ruby framework with comprehensive dynamic filtering system
|
180
181
|
test_files: []
|