tyler_efm_client 1.0.0.pre.alpha.1 → 1.0.0.pre.alpha.2

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: 88d92317b5acb03095243792d00d37678bc9c661806f3a6855440df15c82edca
4
- data.tar.gz: 25f07c97e2454d9277c61022951c59d45801f8831eae32493d497bf10bc2e2ef
3
+ metadata.gz: 940661dea706efa9a8dd63f546d602431afe69536117c8b7ed1796aa72b9e429
4
+ data.tar.gz: a71cae0f5d4444a9cb6fc59d2a92f62e4813996040dc4b94f502980113f227f5
5
5
  SHA512:
6
- metadata.gz: e1b14745936b70901fbec4e485b820818a60d6e7abce4fda9fad13d41896744a814df67b7865cf40e260bcb2468e29b31d9772269f45808f18f52bc75614d4a6
7
- data.tar.gz: e78fde612b7b9a5a83f9bc3a54779e6904bda9a792d85de51df54705e56467ac11ca4aa77889dc6f41e2b14b1fc71c823730d8d657604217c979601a539635ce
6
+ metadata.gz: d459b94478d7626451b233b86cc3ea50c7a1f8554bde038b97e2adce8dae228c152487858752c3ff681e01687d90cea1718ac42a5406cc8a59df9e563fc49a72
7
+ data.tar.gz: 6779fbec068348f282e7c7866b49e45e0733d8dcdd78e6775ea50763f5e2385a2c721824eaed4a4936925a5468b60c37cc5d349f55a64dbef74619f2ef10522f
data/README.md CHANGED
@@ -268,12 +268,35 @@ To install this gem onto your local machine, run:
268
268
  bundle exec rake install
269
269
  ```
270
270
 
271
- To release a new version:
271
+ ## šŸš€ Releases & Versioning
272
272
 
273
- 1. Update the version number in `lib/tyler_efm_client/version.rb`
274
- 2. Run `bundle exec rake release`
273
+ This gem uses **automated version management** through GitHub Actions. The system automatically handles version conflicts and increments alpha releases.
275
274
 
276
- This will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
275
+ ### Quick Release Guide
276
+
277
+ **Alpha/Development Releases** (Most Common):
278
+ - Go to GitHub Actions → "Publish Ruby Gem" → "Run workflow"
279
+ - Leave version input blank - system will auto-increment to next available version
280
+ - Perfect for continuous integration and testing
281
+
282
+ **Production Releases**:
283
+ ```bash
284
+ # Create a version tag and GitHub release
285
+ git tag v1.0.0
286
+ git push origin v1.0.0
287
+ # Then create GitHub Release using the tag
288
+ ```
289
+
290
+ **Manual Version Override**:
291
+ - Use GitHub Actions workflow with specific version input
292
+ - Example: `1.0.0.pre.alpha.10` or `1.1.0.pre.beta.1`
293
+
294
+ šŸ“– **See [VERSIONING.md](./VERSIONING.md) for complete versioning guide**
295
+
296
+ ### Current Version Strategy
297
+ - **Auto-increment**: System automatically finds next available alpha version
298
+ - **Conflict Resolution**: Handles "version already exists" errors automatically
299
+ - **No Manual File Editing**: Version files updated during CI/CD process
277
300
 
278
301
  ## šŸ¤ Contributing
279
302
 
data/VERSIONING.md ADDED
@@ -0,0 +1,224 @@
1
+ # Tyler EFM Client Ruby - Versioning Guide
2
+
3
+ This document explains how to manage versions and releases for the Tyler EFM Client Ruby gem.
4
+
5
+ ## šŸŽÆ Versioning Strategy
6
+
7
+ We use **Semantic Versioning (SemVer)** with intelligent automation for development releases:
8
+
9
+ - **Production Releases**: `1.0.0`, `1.1.0`, `2.0.0`
10
+ - **Alpha/Beta Releases**: `1.0.0.pre.alpha.1`, `1.0.0.pre.beta.1`
11
+ - **Release Candidates**: `1.0.0.rc.1`
12
+
13
+ ## šŸ¤– Automated Version Management
14
+
15
+ The GitHub Actions workflow automatically handles versioning to prevent conflicts and streamline releases.
16
+
17
+ ### Current System Behavior
18
+
19
+ 1. **Auto-increment Alpha Versions**: When publishing alpha releases, the system automatically finds the next available version number
20
+ 2. **Conflict Resolution**: If a version already exists on RubyGems, it auto-increments to the next available number
21
+ 3. **Dynamic Version Updates**: The `lib/tyler_efm_client/version.rb` file is updated during the build process
22
+
23
+ ## šŸ“‹ Release Types & Workflows
24
+
25
+ ### 1. Alpha/Development Releases (Most Common)
26
+
27
+ **Use Case**: Regular development releases, testing, continuous integration
28
+
29
+ **How to Trigger**:
30
+ ```bash
31
+ # Option A: Manual workflow dispatch (no version specified)
32
+ # Go to GitHub Actions → "Publish Ruby Gem" → "Run workflow"
33
+ # Leave version input blank - system will auto-increment
34
+
35
+ # Option B: Manual workflow dispatch (specific version)
36
+ # Go to GitHub Actions → "Publish Ruby Gem" → "Run workflow"
37
+ # Enter version like: 1.0.0.pre.alpha.5
38
+ ```
39
+
40
+ **What Happens**:
41
+ - System reads current version from `version.rb` (e.g., `1.0.0.pre.alpha.2`)
42
+ - Checks if that version exists on RubyGems
43
+ - If exists, auto-increments to next available (e.g., `1.0.0.pre.alpha.3`)
44
+ - Updates `version.rb` dynamically
45
+ - Builds and publishes gem
46
+
47
+ **File Updates**: No manual file changes needed - fully automated!
48
+
49
+ ### 2. Production Releases
50
+
51
+ **Use Case**: Official releases for end users
52
+
53
+ **How to Trigger**:
54
+ ```bash
55
+ # Create a GitHub release with a version tag
56
+ git tag v1.0.0
57
+ git push origin v1.0.0
58
+
59
+ # Then create a GitHub Release using the tag
60
+ # Go to GitHub → Releases → "Create a new release"
61
+ # Use tag: v1.0.0, Title: "Version 1.0.0"
62
+ ```
63
+
64
+ **What Happens**:
65
+ - System uses the release tag as the version (removes 'v' prefix)
66
+ - Updates `version.rb` to the production version
67
+ - Builds and publishes to RubyGems as a production release
68
+
69
+ ### 3. Manual Version Override
70
+
71
+ **Use Case**: Specific version requirements, fixing version conflicts
72
+
73
+ **How to Trigger**:
74
+ - Go to GitHub Actions → "Publish Ruby Gem" → "Run workflow"
75
+ - Enter specific version in the input field
76
+ - Examples: `1.0.0.pre.alpha.10`, `1.1.0.pre.beta.1`, `2.0.0.rc.1`
77
+
78
+ ## šŸ”§ Version File Management
79
+
80
+ ### Current Version Location
81
+ ```ruby
82
+ # lib/tyler_efm_client/version.rb
83
+ module TylerEfmClient
84
+ VERSION = '1.0.0.pre.alpha.1'
85
+ end
86
+ ```
87
+
88
+ ### āš ļø Important Notes for Developers
89
+
90
+ 1. **Don't Manually Edit Version File**: The CI/CD system handles this automatically
91
+ 2. **Version File is Updated During Build**: Changes are made during the GitHub Actions workflow
92
+ 3. **Local Development**: Your local `version.rb` may differ from published versions
93
+ 4. **Commit After Release**: Version changes are made in CI, consider updating locally after successful releases
94
+
95
+ ## šŸ“Š Version Examples & Progression
96
+
97
+ ### Alpha Release Progression
98
+ ```
99
+ Start: 1.0.0.pre.alpha.1
100
+ Auto-increment: 1.0.0.pre.alpha.2
101
+ Auto-increment: 1.0.0.pre.alpha.3
102
+ ...
103
+ Manual bump: 1.0.0.pre.alpha.10
104
+ ```
105
+
106
+ ### Production Release Examples
107
+ ```
108
+ Alpha series: 1.0.0.pre.alpha.x
109
+ Release tag: v1.0.0
110
+ Published as: 1.0.0
111
+
112
+ Next series: 1.1.0.pre.alpha.1
113
+ Release tag: v1.1.0
114
+ Published as: 1.1.0
115
+ ```
116
+
117
+ ## 🚨 Troubleshooting Version Conflicts
118
+
119
+ ### "Version Already Exists" Error
120
+
121
+ **For Alpha Versions (Automatic)**:
122
+ - System detects conflict
123
+ - Auto-increments to next available version
124
+ - No manual intervention needed
125
+
126
+ **For Production Versions (Manual)**:
127
+ If you get a conflict with a production version:
128
+
129
+ 1. **Check RubyGems**: Visit https://rubygems.org/gems/tyler_efm_client/versions
130
+ 2. **Choose New Version**: Pick a version that doesn't exist
131
+ 3. **Manual Override**: Use workflow dispatch with specific version
132
+ 4. **Or Yank Existing**: If you own the version, yank it first:
133
+ ```bash
134
+ gem yank tyler_efm_client -v 1.0.0
135
+ ```
136
+
137
+ ### Version Rollback
138
+
139
+ If you need to rollback a version:
140
+ ```bash
141
+ # Yank the problematic version
142
+ gem yank tyler_efm_client -v 1.0.0.pre.alpha.5
143
+
144
+ # Republish with corrected code using manual version override
145
+ ```
146
+
147
+ ## šŸŽÆ Best Practices for Engineers
148
+
149
+ ### Daily Development
150
+ 1. **Use Auto-increment**: Don't specify versions for regular alpha releases
151
+ 2. **Let CI Handle It**: The system will find the next available version
152
+ 3. **Test Locally First**: Ensure your changes work before triggering releases
153
+
154
+ ### Preparing for Production
155
+ 1. **Plan Version Number**: Decide on major.minor.patch based on changes
156
+ 2. **Update Documentation**: Ensure README, CHANGELOG reflect new features
157
+ 3. **Create Git Tag**: Use clean tags like `v1.0.0`, `v1.1.0`
158
+ 4. **GitHub Release**: Create formal release with notes
159
+
160
+ ### Semantic Versioning Guidelines
161
+ - **MAJOR** (1.0.0 → 2.0.0): Breaking changes, API changes
162
+ - **MINOR** (1.0.0 → 1.1.0): New features, backwards compatible
163
+ - **PATCH** (1.0.0 → 1.0.1): Bug fixes, backwards compatible
164
+
165
+ ## šŸ” Monitoring Releases
166
+
167
+ ### Check Published Versions
168
+ ```bash
169
+ # List all published versions
170
+ gem list tyler_efm_client --remote --all
171
+
172
+ # Check specific version details
173
+ gem specification tyler_efm_client -v 1.0.0.pre.alpha.3
174
+ ```
175
+
176
+ ### GitHub Actions Monitoring
177
+ - Go to GitHub → Actions → "Publish Ruby Gem"
178
+ - Monitor workflow runs for success/failure
179
+ - Check logs for version conflicts or publishing issues
180
+
181
+ ## šŸ“ Version History Tracking
182
+
183
+ The system maintains version history through:
184
+ - **Git Tags**: Production releases
185
+ - **GitHub Releases**: Release notes and changelogs
186
+ - **RubyGems History**: All published versions
187
+ - **GitHub Actions Logs**: Build and publish details
188
+
189
+ ## šŸ†˜ Getting Help
190
+
191
+ ### Common Issues
192
+ 1. **Build Failures**: Check GitHub Actions logs
193
+ 2. **Version Conflicts**: System should auto-resolve for alphas
194
+ 3. **Publishing Errors**: Check RubyGems API key and permissions
195
+
196
+ ### Support Contacts
197
+ - **Tyler ECF Team**: For Tyler EFM service issues
198
+ - **Ruby Gem Issues**: Check GitHub Issues in this repository
199
+ - **CI/CD Problems**: Review GitHub Actions workflow logs
200
+
201
+ ---
202
+
203
+ ## Quick Reference Commands
204
+
205
+ ```bash
206
+ # Check current published versions
207
+ gem list tyler_efm_client --remote
208
+
209
+ # Manual publish (alpha - auto-increment)
210
+ # GitHub Actions → "Publish Ruby Gem" → Run (leave version blank)
211
+
212
+ # Manual publish (specific version)
213
+ # GitHub Actions → "Publish Ruby Gem" → Run → Enter version
214
+
215
+ # Production release
216
+ git tag v1.0.0
217
+ git push origin v1.0.0
218
+ # Then create GitHub Release
219
+
220
+ # Emergency yank
221
+ gem yank tyler_efm_client -v VERSION_NUMBER
222
+ ```
223
+
224
+ This automated versioning system eliminates most manual version management while providing flexibility for special cases.
@@ -259,16 +259,16 @@ end
259
259
  Now that you have the basics working:
260
260
 
261
261
  1. **Explore Examples**: Check the `examples/` directory for complete working examples
262
- 2. **Review Samples**: Look at `samples/` for real-world integration patterns
263
- 3. **Read API Reference**: See `docs/api_reference.md` for detailed method documentation
264
- 4. **Check Troubleshooting**: Review `docs/troubleshooting.md` for common issues
262
+ 2. **Review Samples**: Look at `samples/` for real-world integration patterns
263
+ 3. **Read Documentation**: See the main README.md for detailed method documentation
264
+ 4. **Release Management**: Review versioning guide for package updates
265
265
 
266
266
  ## šŸ”— Quick Links
267
267
 
268
- - [Authentication Guide](authentication_guide.md) - Detailed authentication setup
269
- - [API Reference](api_reference.md) - Complete method documentation
270
- - [Tyler ECF Requirements](tyler_ecf_requirements.md) - Understanding Tyler's system
271
- - [Troubleshooting](troubleshooting.md) - Common issues and solutions
268
+ - [Main Documentation](../README.md) - Complete API reference and usage examples
269
+ - [Versioning Guide](../VERSIONING.md) - Release and version management
270
+ - [Examples Directory](../examples/) - Working code examples
271
+ - [Court Filing Samples](../samples/court_filing_workflow/) - Real-world integration patterns
272
272
 
273
273
  ## šŸ’Ž Ruby Conventions
274
274
 
@@ -0,0 +1,134 @@
1
+ # Tyler EFM Client Ruby Gem - Alpha Testing Setup
2
+
3
+ 🧪 **Quick setup guide** to test the published alpha gem with your existing configuration.
4
+
5
+ ## šŸš€ Fast Track Testing
6
+
7
+ ### Option 1: Test with Your Existing Config (Recommended)
8
+
9
+ ```bash
10
+ # Navigate to the sample application directory
11
+ cd examples/sample_application
12
+
13
+ # Install the published alpha gem
14
+ gem install tyler_efm_client --pre
15
+
16
+ # Run the test using your existing working config
17
+ ruby test_with_working_config.rb
18
+ ```
19
+
20
+ This will:
21
+ 1. Load your existing `python_auth/config.json`
22
+ 2. Use your working certificate and credentials
23
+ 3. Test both authentication and GetCaseList operations
24
+ 4. Show you exactly what the alpha gem produces
25
+
26
+ ### Option 2: Full Sample Application
27
+
28
+ ```bash
29
+ # Install dependencies
30
+ bundle install
31
+
32
+ # Copy and configure
33
+ cp config.example.json config.json
34
+ # Edit config.json with your credentials
35
+
36
+ # Run the full sample app
37
+ ruby sample_app.rb
38
+ ```
39
+
40
+ ## šŸ“‹ Expected Test Results
41
+
42
+ ### āœ… Successful Test Output:
43
+ ```
44
+ 🧪 Testing Tyler EFM Client Ruby Gem Alpha Version
45
+ šŸ“¦ Gem Version: 1.0.0.pre.alpha.1
46
+ šŸ“ Using config: ../../../python_auth/config.json
47
+ ============================================================
48
+
49
+ šŸ” Test 1: Authentication
50
+ šŸ”‘ Authenticating with Tyler EFM User Service...
51
+ āœ… Authentication test passed!
52
+
53
+ šŸ“‹ Test 2: GetCaseList Operation
54
+ šŸ“Š Calling GetCaseList with password hash...
55
+ āœ… GetCaseList test passed!
56
+
57
+ šŸŽ‰ All alpha gem tests successful!
58
+ ```
59
+
60
+ ### šŸŽÆ What This Proves:
61
+ - āœ… **Alpha gem works** with your real Tyler environment
62
+ - āœ… **Authentication successful** - same password hash as your working scripts
63
+ - āœ… **GetCaseList functional** - retrieves actual case data
64
+ - āœ… **Certificate handling** - properly processes your PFX file
65
+ - āœ… **WS-Security working** - creates valid RSA-SHA1/SHA1 signatures
66
+
67
+ ## šŸ”§ Troubleshooting
68
+
69
+ ### Common Issues:
70
+
71
+ **"Gem not found"**
72
+ ```bash
73
+ # Make sure you install the prerelease version
74
+ gem install tyler_efm_client --pre
75
+ ```
76
+
77
+ **"Config file not found"**
78
+ ```bash
79
+ # Verify your config.json exists
80
+ ls -la ../../../python_auth/config.json
81
+ ```
82
+
83
+ **"Certificate file not found"**
84
+ ```bash
85
+ # Check certificate path in config.json
86
+ # Path should be relative to python_auth directory
87
+ ```
88
+
89
+ **Ruby version issues**
90
+ ```bash
91
+ # The gem requires Ruby 3.0+
92
+ ruby --version
93
+ ```
94
+
95
+ ## šŸ“Š Comparison with Working Scripts
96
+
97
+ Run this to compare alpha gem results with your working Ruby script:
98
+
99
+ ```bash
100
+ # Test your original working Ruby script
101
+ cd ../../../python_auth
102
+ ruby auth_test.rb
103
+
104
+ # Test the alpha gem
105
+ cd ../github_repositories/cj-esol-efm-client-ruby/examples/sample_application
106
+ ruby test_with_working_config.rb
107
+ ```
108
+
109
+ **Both should produce the same password hash:** `5c31af92-391e-4ca2-a530-3ee61af1fa37`
110
+
111
+ ## šŸŽÆ Success Criteria
112
+
113
+ Your alpha gem test is successful when:
114
+ - āœ… **Authentication returns password hash** matching your working scripts
115
+ - āœ… **GetCaseList returns case data** (including "AARONS vs. JAREKA LEWIS")
116
+ - āœ… **No certificate errors** or WS-Security failures
117
+ - āœ… **Same results** as your proven working implementations
118
+
119
+ ## šŸš€ Next Steps After Successful Test
120
+
121
+ 1. **šŸ› Report any issues** found during alpha testing
122
+ 2. **šŸ’” Suggest improvements** for the stable v1.0.0 release
123
+ 3. **šŸ“š Share feedback** on the developer experience
124
+ 4. **šŸŽ‰ Celebrate** - you're using the first Tyler EFM Client Ruby gem!
125
+
126
+ ## šŸ”— Support Resources
127
+
128
+ - **Issues**: [GitHub Issues](https://github.com/tyler-technologies/cj-esol-efm-client-ruby/issues)
129
+ - **Documentation**: [Developer Portal](https://tyler-technologies.github.io/cj-esol-efm-client-developer-portal/)
130
+ - **Tyler Support**: ecf-support@tylertech.com
131
+
132
+ ---
133
+
134
+ **🧪 Ready to test the future of Tyler ECF integration!**
@@ -0,0 +1,31 @@
1
+ # Configuration files with sensitive data
2
+ config.json
3
+
4
+ # Certificate files
5
+ *.pfx
6
+ *.pem
7
+ *.key
8
+ *.p12
9
+ *.crt
10
+ *.cer
11
+
12
+ # Bundler
13
+ .bundle/
14
+ vendor/
15
+
16
+ # Ruby
17
+ *.gem
18
+ .rbenv-version
19
+ .ruby-version
20
+
21
+ # Logs
22
+ *.log
23
+
24
+ # OS generated files
25
+ .DS_Store
26
+ .DS_Store?
27
+ ._*
28
+ .Spotlight-V100
29
+ .Trashes
30
+ ehthumbs.db
31
+ Thumbs.db
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Use the alpha version of Tyler EFM Client
6
+ gem 'tyler_efm_client', '~> 1.0.0.pre.alpha.1'
7
+
8
+ # Additional gems for the sample application
9
+ gem 'json', '~> 2.6'
10
+ gem 'optparse', '~> 0.2'
11
+
12
+ group :development do
13
+ gem 'rubocop', '~> 1.0', require: false
14
+ end
@@ -0,0 +1,160 @@
1
+ # Tyler EFM Client Ruby Gem - Sample Application
2
+
3
+ 🧪 **Alpha Testing Application** for the Tyler EFM Client Ruby gem.
4
+
5
+ This sample application demonstrates how to use the `tyler_efm_client` gem to authenticate with Tyler EFM services and retrieve case lists.
6
+
7
+ ## šŸš€ Quick Start
8
+
9
+ ### 1. Install Dependencies
10
+
11
+ ```bash
12
+ # Install the alpha gem and dependencies
13
+ bundle install
14
+ ```
15
+
16
+ ### 2. Configure Credentials
17
+
18
+ ```bash
19
+ # Copy the example configuration
20
+ cp config.example.json config.json
21
+
22
+ # Edit config.json with your actual credentials
23
+ nano config.json
24
+ ```
25
+
26
+ **Required Configuration:**
27
+ - **Certificate file**: Path to your Tyler PFX certificate
28
+ - **Certificate password**: Password for the PFX file
29
+ - **User credentials**: Your Tyler EFM email and password
30
+ - **Service URLs**: Tyler staging or production endpoints
31
+
32
+ ### 3. Run the Sample Application
33
+
34
+ ```bash
35
+ # Run with default config.json
36
+ ruby sample_app.rb
37
+
38
+ # Or specify a different config file
39
+ ruby sample_app.rb --config my_config.json
40
+ ```
41
+
42
+ ## šŸ“‹ What It Does
43
+
44
+ The sample application performs these steps:
45
+
46
+ 1. **šŸ” Authentication**
47
+ - Loads your PFX certificate
48
+ - Creates WS-Security digital signatures (RSA-SHA1/SHA1)
49
+ - Authenticates with Tyler EFM User Service
50
+ - Retrieves password hash for subsequent calls
51
+
52
+ 2. **šŸ“Š Case List Retrieval**
53
+ - Uses the password hash from authentication
54
+ - Calls Tyler Court Record Service GetCaseList operation
55
+ - Displays case information in a readable format
56
+
57
+ ## šŸ’» Example Output
58
+
59
+ ```
60
+ šŸŽÆ Tyler EFM Client Ruby Gem - Sample Application
61
+ šŸ“¦ Using alpha version: 1.0.0.pre.alpha.1
62
+ ============================================================
63
+
64
+ šŸ” Step 1: Authenticating with Tyler EFM...
65
+ āœ… Authentication successful!
66
+ šŸ‘¤ User: John Doe
67
+ šŸ“§ Email: john.doe@example.com
68
+ šŸ”‘ Password Hash: 5c31af92-391e-4ca2-a530-3ee61af1fa37
69
+
70
+ šŸ“‹ Step 2: Retrieving case list...
71
+ āœ… Case list retrieved successfully!
72
+
73
+ šŸ“Š Found 3 cases:
74
+
75
+ 1. Case: 23MPF011258
76
+ Title: AARONS vs. JAREKA LEWIS
77
+ Status: Active
78
+ Court: Georgia Magistrate Court
79
+
80
+ 2. Case: 23CV001234
81
+ Title: SMITH vs. JONES
82
+ Status: Pending
83
+ Court: Georgia Superior Court
84
+
85
+ 3. Case: 23TR005678
86
+ Title: STATE vs. JOHNSON
87
+ Status: Closed
88
+ Court: Georgia Municipal Court
89
+ ```
90
+
91
+ ## šŸ”§ Configuration Options
92
+
93
+ ### config.json Structure
94
+
95
+ ```json
96
+ {
97
+ "service": {
98
+ "user_service_url": "https://georgia-stage.tylertech.cloud/EFM/EFMUserService.svc",
99
+ "court_service_url": "https://georgia-stage.tylertech.cloud/efm/v5/CourtRecordService.svc"
100
+ },
101
+ "certificate": {
102
+ "pfx_file": "path/to/your/certificate.pfx",
103
+ "pfx_password": "your_pfx_password"
104
+ },
105
+ "credentials": {
106
+ "email": "your-email@domain.com",
107
+ "password": "your-password"
108
+ },
109
+ "court": {
110
+ "court_id": "georgia:statewide"
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### Environment Options
116
+
117
+ - **Production URLs**: Use Tyler production service endpoints
118
+ - **Different Courts**: Change `court_id` for specific jurisdictions
119
+ - **Debug Mode**: Set `DEBUG=1` environment variable for detailed error traces
120
+
121
+ ## 🧪 Alpha Testing Notes
122
+
123
+ This application uses the **alpha version** of the Tyler EFM Client gem:
124
+
125
+ ### āœ… What Works
126
+ - **Authentication**: Complete WS-Security implementation
127
+ - **GetCaseList**: Retrieves case data successfully
128
+ - **Certificate handling**: Automatic PFX processing
129
+ - **Error handling**: Comprehensive error reporting
130
+
131
+ ### āš ļø Alpha Limitations
132
+ - **Limited testing**: May have edge cases not yet discovered
133
+ - **API stability**: Methods may change before v1.0.0 stable
134
+ - **Documentation**: Some features may not be fully documented
135
+
136
+ ### šŸ› Feedback Welcome
137
+
138
+ Please report any issues or suggestions:
139
+ - [GitHub Issues](https://github.com/tyler-technologies/cj-esol-efm-client-ruby/issues)
140
+ - Tyler Support: ecf-support@tylertech.com
141
+
142
+ ## šŸ“š Additional Examples
143
+
144
+ The `examples/` directory contains more specialized examples:
145
+
146
+ - `simple_auth.rb` - Basic authentication only
147
+ - `advanced_soap.rb` - Custom SOAP operations
148
+ - `error_handling.rb` - Comprehensive error handling patterns
149
+ - `batch_operations.rb` - Multiple service calls
150
+
151
+ ## šŸ”— Resources
152
+
153
+ - [Tyler EFM Client Ruby Gem](https://rubygems.org/gems/tyler_efm_client)
154
+ - [Developer Portal](https://tyler-technologies.github.io/cj-esol-efm-client-developer-portal/)
155
+ - [Python SDK](https://github.com/tyler-technologies/cj-esol-efm-client-python)
156
+ - [Tyler ECF Documentation](https://github.com/tyler-technologies/cj-esol-efm-client-management)
157
+
158
+ ---
159
+
160
+ **šŸš€ Built for Tyler ECF integration partners using the alpha Tyler EFM Client Ruby gem.**
@@ -0,0 +1,17 @@
1
+ {
2
+ "service": {
3
+ "user_service_url": "https://georgia-stage.tylertech.cloud/EFM/EFMUserService.svc",
4
+ "court_service_url": "https://georgia-stage.tylertech.cloud/efm/v5/CourtRecordService.svc"
5
+ },
6
+ "certificate": {
7
+ "pfx_file": "path/to/your/certificate.pfx",
8
+ "pfx_password": "your_pfx_password"
9
+ },
10
+ "credentials": {
11
+ "email": "your-email@domain.com",
12
+ "password": "your-password"
13
+ },
14
+ "court": {
15
+ "court_id": "georgia:statewide"
16
+ }
17
+ }
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'tyler_efm_client'
5
+ require 'json'
6
+ require 'optparse'
7
+
8
+ # Sample Tyler EFM Client Application
9
+ # Demonstrates authentication and GetCaseList using the alpha gem
10
+
11
+ class TylerEFMSampleApp
12
+ def initialize(config_file = 'config.json')
13
+ @config_file = config_file
14
+ @config = load_config
15
+ @client = TylerEfmClient::Client.new
16
+ end
17
+
18
+ def run
19
+ puts "šŸŽÆ Tyler EFM Client Ruby Gem - Sample Application"
20
+ puts "šŸ“¦ Using alpha version: #{TylerEfmClient::VERSION}"
21
+ puts "=" * 60
22
+
23
+ # Step 1: Authenticate
24
+ puts "\nšŸ” Step 1: Authenticating with Tyler EFM..."
25
+ auth_result = authenticate
26
+
27
+ if auth_result[:success]
28
+ puts "āœ… Authentication successful!"
29
+ puts "šŸ‘¤ User: #{auth_result[:first_name]} #{auth_result[:last_name]}"
30
+ puts "šŸ“§ Email: #{auth_result[:email]}"
31
+ puts "šŸ”‘ Password Hash: #{auth_result[:password_hash]}"
32
+
33
+ # Step 2: Get Case List
34
+ puts "\nšŸ“‹ Step 2: Retrieving case list..."
35
+ case_result = get_case_list(auth_result[:password_hash])
36
+
37
+ if case_result[:success]
38
+ puts "āœ… Case list retrieved successfully!"
39
+ display_cases(case_result[:data])
40
+ else
41
+ puts "āŒ Failed to retrieve case list: #{case_result[:error_message]}"
42
+ end
43
+ else
44
+ puts "āŒ Authentication failed: #{auth_result[:error_message]}"
45
+ exit 1
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def load_config
52
+ unless File.exist?(@config_file)
53
+ puts "āŒ Configuration file not found: #{@config_file}"
54
+ puts "šŸ“ Please copy config.example.json to #{@config_file} and update with your credentials."
55
+ exit 1
56
+ end
57
+
58
+ JSON.parse(File.read(@config_file), symbolize_names: true)
59
+ rescue JSON::ParserError => e
60
+ puts "āŒ Invalid JSON in configuration file: #{e.message}"
61
+ exit 1
62
+ end
63
+
64
+ def authenticate
65
+ @client.authenticate(
66
+ base_url: @config[:service][:user_service_url],
67
+ pfx_file: @config[:certificate][:pfx_file],
68
+ pfx_password: @config[:certificate][:pfx_password],
69
+ user_email: @config[:credentials][:email],
70
+ user_password: @config[:credentials][:password]
71
+ )
72
+ rescue StandardError => e
73
+ {
74
+ success: false,
75
+ error_message: "Authentication error: #{e.message}"
76
+ }
77
+ end
78
+
79
+ def get_case_list(password_hash)
80
+ # Create SOAP body for GetCaseList operation
81
+ soap_body = build_get_case_list_soap_body
82
+
83
+ @client.call_service(
84
+ base_url: @config[:service][:court_service_url],
85
+ password_hash: password_hash,
86
+ operation: 'GetCaseList',
87
+ soap_body: soap_body,
88
+ user_email: @config[:credentials][:email],
89
+ pfx_file: @config[:certificate][:pfx_file],
90
+ pfx_password: @config[:certificate][:pfx_password],
91
+ return_json: true
92
+ )
93
+ rescue StandardError => e
94
+ {
95
+ success: false,
96
+ error_message: "GetCaseList error: #{e.message}"
97
+ }
98
+ end
99
+
100
+ def build_get_case_list_soap_body
101
+ court_id = @config[:court][:court_id]
102
+
103
+ <<~SOAP
104
+ <wrappers:GetCaseListRequest xmlns:wrappers="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/wrappers">
105
+ <wrappers:CourtLocationId>
106
+ <nc:IdentificationID>#{court_id}</nc:IdentificationID>
107
+ </wrappers:CourtLocationId>
108
+ <wrappers:CaseListQueryMessage>
109
+ <ecf:ElectronicCourtFilingQueryMessage xmlns:ecf="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/ecf">
110
+ <nc:DocumentIdentification xmlns:nc="http://niem.gov/niem/niem-core/2.0">
111
+ <nc:IdentificationID>GetCaseList-#{Time.now.to_i}</nc:IdentificationID>
112
+ </nc:DocumentIdentification>
113
+ <nc:DocumentSubmitter xmlns:nc="http://niem.gov/niem/niem-core/2.0">
114
+ <nc:EntityRepresentation>
115
+ <nc:EntityPerson>
116
+ <nc:PersonName>
117
+ <nc:PersonFullName>Sample Application User</nc:PersonFullName>
118
+ </nc:PersonName>
119
+ </nc:EntityPerson>
120
+ </nc:EntityRepresentation>
121
+ </nc:DocumentSubmitter>
122
+ <ecf:CaseListQueryCriteria>
123
+ <ecf:CaseParticipantRoleCode>Party</ecf:CaseParticipantRoleCode>
124
+ </ecf:CaseListQueryCriteria>
125
+ </ecf:ElectronicCourtFilingQueryMessage>
126
+ </wrappers:CaseListQueryMessage>
127
+ </wrappers:GetCaseListRequest>
128
+ SOAP
129
+ end
130
+
131
+ def display_cases(case_data)
132
+ if case_data.is_a?(Hash) && case_data['cases']
133
+ cases = case_data['cases']
134
+ puts "\nšŸ“Š Found #{cases.length} cases:"
135
+
136
+ cases.each_with_index do |case_info, index|
137
+ puts "\n#{index + 1}. Case: #{case_info['case_number'] || 'Unknown'}"
138
+ puts " Title: #{case_info['case_title'] || 'No title'}"
139
+ puts " Status: #{case_info['status'] || 'Unknown'}"
140
+ puts " Court: #{case_info['court'] || 'Unknown'}"
141
+ end
142
+ elsif case_data.is_a?(String)
143
+ # Raw XML response
144
+ puts "\nšŸ“„ Raw XML Response (first 500 characters):"
145
+ puts case_data[0..500]
146
+ puts "..." if case_data.length > 500
147
+ else
148
+ puts "\nšŸ“„ Response data:"
149
+ puts case_data.inspect
150
+ end
151
+ end
152
+ end
153
+
154
+ # Command line interface
155
+ def main
156
+ options = {}
157
+
158
+ OptionParser.new do |opts|
159
+ opts.banner = "Usage: ruby sample_app.rb [options]"
160
+
161
+ opts.on('-c', '--config FILE', 'Configuration file (default: config.json)') do |file|
162
+ options[:config] = file
163
+ end
164
+
165
+ opts.on('-h', '--help', 'Show this help message') do
166
+ puts opts
167
+ exit
168
+ end
169
+ end.parse!
170
+
171
+ config_file = options[:config] || 'config.json'
172
+
173
+ begin
174
+ app = TylerEFMSampleApp.new(config_file)
175
+ app.run
176
+ rescue Interrupt
177
+ puts "\n\nšŸ‘‹ Application interrupted by user"
178
+ exit 0
179
+ rescue StandardError => e
180
+ puts "\nāŒ Application error: #{e.message}"
181
+ puts "šŸ” #{e.backtrace.first}" if ENV['DEBUG']
182
+ exit 1
183
+ end
184
+ end
185
+
186
+ # Run the application if this file is executed directly
187
+ main if __FILE__ == $PROGRAM_NAME
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'tyler_efm_client'
5
+ require 'json'
6
+
7
+ # Test the alpha gem with working configuration
8
+ # This uses the same config as your working Python/Ruby implementations
9
+
10
+ class AlphaGemTester
11
+ def initialize
12
+ # Load configuration from the working setup
13
+ @config_path = '../../../python_auth/config.json'
14
+ @config = load_config
15
+ @client = TylerEfmClient::Client.new
16
+
17
+ puts "🧪 Testing Tyler EFM Client Ruby Gem Alpha Version"
18
+ puts "šŸ“¦ Gem Version: #{TylerEfmClient::VERSION}"
19
+ puts "šŸ“ Using config: #{@config_path}"
20
+ puts "=" * 60
21
+ end
22
+
23
+ def run_test
24
+ # Test 1: Authentication
25
+ puts "\nšŸ” Test 1: Authentication"
26
+ auth_result = test_authentication
27
+
28
+ if auth_result[:success]
29
+ puts "āœ… Authentication test passed!"
30
+
31
+ # Test 2: GetCaseList
32
+ puts "\nšŸ“‹ Test 2: GetCaseList Operation"
33
+ case_result = test_get_case_list(auth_result[:password_hash])
34
+
35
+ if case_result[:success]
36
+ puts "āœ… GetCaseList test passed!"
37
+ puts "\nšŸŽ‰ All alpha gem tests successful!"
38
+ else
39
+ puts "āŒ GetCaseList test failed: #{case_result[:error_message]}"
40
+ end
41
+ else
42
+ puts "āŒ Authentication test failed: #{auth_result[:error_message]}"
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def load_config
49
+ full_path = File.expand_path(@config_path, __FILE__)
50
+
51
+ unless File.exist?(full_path)
52
+ puts "āŒ Config file not found: #{full_path}"
53
+ puts "šŸ“ Make sure you have config.json in your python_auth directory"
54
+ exit 1
55
+ end
56
+
57
+ JSON.parse(File.read(full_path), symbolize_names: true)
58
+ rescue JSON::ParserError => e
59
+ puts "āŒ Invalid JSON in config file: #{e.message}"
60
+ exit 1
61
+ end
62
+
63
+ def test_authentication
64
+ puts " šŸ”‘ Authenticating with Tyler EFM User Service..."
65
+
66
+ @client.authenticate(
67
+ base_url: @config[:service][:endpoint],
68
+ pfx_file: File.expand_path(@config[:certificate][:pfx_file], File.dirname(@config_path)),
69
+ pfx_password: @config[:certificate][:pfx_password],
70
+ user_email: @config[:credentials][:email],
71
+ user_password: @config[:credentials][:password]
72
+ )
73
+ rescue StandardError => e
74
+ {
75
+ success: false,
76
+ error_message: "Authentication error: #{e.message}"
77
+ }
78
+ end
79
+
80
+ def test_get_case_list(password_hash)
81
+ puts " šŸ“Š Calling GetCaseList with password hash..."
82
+
83
+ # Use the same SOAP body structure as your working implementation
84
+ soap_body = build_get_case_list_soap
85
+
86
+ court_service_url = @config[:service][:court_service_url] ||
87
+ "https://georgia-stage.tylertech.cloud/efm/v5/CourtRecordService.svc"
88
+
89
+ @client.call_service(
90
+ base_url: court_service_url,
91
+ password_hash: password_hash,
92
+ operation: 'GetCaseList',
93
+ soap_body: soap_body,
94
+ user_email: @config[:credentials][:email],
95
+ pfx_file: File.expand_path(@config[:certificate][:pfx_file], File.dirname(@config_path)),
96
+ pfx_password: @config[:certificate][:pfx_password],
97
+ return_json: false # Get raw XML first for debugging
98
+ )
99
+ rescue StandardError => e
100
+ {
101
+ success: false,
102
+ error_message: "GetCaseList error: #{e.message}"
103
+ }
104
+ end
105
+
106
+ def build_get_case_list_soap
107
+ # Simple GetCaseList request - matches your working implementation pattern
108
+ <<~SOAP
109
+ <wrappers:GetCaseListRequest xmlns:wrappers="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/wrappers">
110
+ <wrappers:CourtLocationId>
111
+ <nc:IdentificationID xmlns:nc="http://niem.gov/niem/niem-core/2.0">georgia:statewide</nc:IdentificationID>
112
+ </wrappers:CourtLocationId>
113
+ <wrappers:CaseListQueryMessage>
114
+ <ecf:ElectronicCourtFilingQueryMessage xmlns:ecf="https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0/ecf">
115
+ <nc:DocumentIdentification xmlns:nc="http://niem.gov/niem/niem-core/2.0">
116
+ <nc:IdentificationID>GetCaseList-Test-#{Time.now.to_i}</nc:IdentificationID>
117
+ </nc:DocumentIdentification>
118
+ <nc:DocumentSubmitter xmlns:nc="http://niem.gov/niem/niem-core/2.0">
119
+ <nc:EntityRepresentation>
120
+ <nc:EntityPerson>
121
+ <nc:PersonName>
122
+ <nc:PersonFullName>Alpha Gem Tester</nc:PersonFullName>
123
+ </nc:PersonName>
124
+ </nc:EntityPerson>
125
+ </nc:EntityRepresentation>
126
+ </nc:DocumentSubmitter>
127
+ <ecf:CaseListQueryCriteria>
128
+ <ecf:CaseParticipantRoleCode>Party</ecf:CaseParticipantRoleCode>
129
+ </ecf:CaseListQueryCriteria>
130
+ </ecf:ElectronicCourtFilingQueryMessage>
131
+ </wrappers:CaseListQueryMessage>
132
+ </wrappers:GetCaseListRequest>
133
+ SOAP
134
+ end
135
+ end
136
+
137
+ # Run the test
138
+ begin
139
+ tester = AlphaGemTester.new
140
+ tester.run_test
141
+ rescue Interrupt
142
+ puts "\n\nšŸ‘‹ Test interrupted by user"
143
+ rescue StandardError => e
144
+ puts "\nšŸ’„ Test failed with exception: #{e.message}"
145
+ puts "šŸ” #{e.backtrace.first}" if ENV['DEBUG']
146
+ exit 1
147
+ end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'tyler_efm_client'
5
+
6
+ # Simple authentication example using Tyler EFM Client Ruby gem
7
+ # This is the most basic usage - just authenticate and get the password hash
8
+
9
+ puts "šŸ” Tyler EFM Client - Basic Authentication Example"
10
+ puts "=" * 50
11
+
12
+ # Initialize the client
13
+ client = TylerEfmClient::Client.new
14
+
15
+ # Authenticate with Tyler EFM
16
+ begin
17
+ result = client.authenticate(
18
+ base_url: 'https://georgia-stage.tylertech.cloud/EFM/EFMUserService.svc',
19
+ pfx_file: 'path/to/your/certificate.pfx',
20
+ pfx_password: 'your_pfx_password',
21
+ user_email: 'your-email@domain.com',
22
+ user_password: 'your_password'
23
+ )
24
+
25
+ if result[:success]
26
+ puts "āœ… Authentication successful!"
27
+ puts "šŸ‘¤ User: #{result[:first_name]} #{result[:last_name]}"
28
+ puts "šŸ“§ Email: #{result[:email]}"
29
+ puts "šŸ”‘ Password Hash: #{result[:password_hash]}"
30
+ puts "ā° Expires: #{result[:expiration_date]}"
31
+ else
32
+ puts "āŒ Authentication failed!"
33
+ puts "🚨 Error: #{result[:error_message]}"
34
+ puts "šŸ“‹ Code: #{result[:error_code]}" if result[:error_code]
35
+ end
36
+
37
+ rescue StandardError => e
38
+ puts "šŸ’„ Exception occurred: #{e.message}"
39
+ puts "šŸ” Details: #{e.backtrace.first}" if ENV['DEBUG']
40
+ end
41
+
42
+ puts "\n✨ That's it! You've successfully used the Tyler EFM Client Ruby gem."
@@ -2,5 +2,5 @@
2
2
 
3
3
  module TylerEfmClient
4
4
  # Current version of the Tyler EFM Client gem
5
- VERSION = '1.0.0.pre.alpha.1'
5
+ VERSION = '1.0.0.pre.alpha.2'
6
6
  end
@@ -315,9 +315,9 @@ puts "Certificate subject: #{cert.certificate.subject}"
315
315
  ## šŸ”— Related Documentation
316
316
 
317
317
  - [Getting Started Guide](../../docs/getting_started.md)
318
- - [Authentication Guide](../../docs/authentication_guide.md)
319
- - [API Reference](../../docs/api_reference.md)
320
- - [Case Management Samples](../case_management/)
318
+ - [Main README](../../README.md)
319
+ - [Versioning Guide](../../VERSIONING.md)
320
+ - [Ruby Gem Documentation](https://rubygems.org/gems/tyler_efm_client)
321
321
 
322
322
  ## šŸ“ž Support
323
323
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tyler_efm_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.alpha.1
4
+ version: 1.0.0.pre.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Technologies ECF Integration Team
@@ -118,12 +118,21 @@ files:
118
118
  - PUBLICATION_GUIDE.md
119
119
  - README.md
120
120
  - Rakefile
121
+ - VERSIONING.md
121
122
  - build_gem.rb
122
123
  - config.example.json
123
124
  - docs/getting_started.md
125
+ - examples/SETUP_AND_TEST.md
124
126
  - examples/authentication_example.rb
125
127
  - examples/complete_workflow_example.rb
126
128
  - examples/getcaselist_example.rb
129
+ - examples/sample_application/.gitignore
130
+ - examples/sample_application/Gemfile
131
+ - examples/sample_application/README.md
132
+ - examples/sample_application/config.example.json
133
+ - examples/sample_application/sample_app.rb
134
+ - examples/sample_application/test_with_working_config.rb
135
+ - examples/simple_examples/basic_auth.rb
127
136
  - lib/tyler_efm_client.rb
128
137
  - lib/tyler_efm_client/client.rb
129
138
  - lib/tyler_efm_client/errors.rb