column_anonymizer 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/LICENSE +21 -0
- data/README.md +56 -57
- data/data.tar.gz +0 -0
- data/lib/column_anonymizer/anonymizer.rb +3 -3
- data/lib/column_anonymizer/schema_loader.rb +2 -2
- data/lib/column_anonymizer/version.rb +1 -1
- data/lib/generators/column_anonymizer/initializer/templates/column_anonymizer.rb +12 -2
- data/lib/generators/column_anonymizer/install/README +1 -1
- data/lib/generators/column_anonymizer/install/install_generator.rb +2 -2
- data/lib/generators/column_anonymizer/scan/scan_generator.rb +3 -3
- data/lib/tasks/column_anonymizer.rake +18 -22
- metadata +6 -17
- data/CUSTOM_GENERATORS_COMPLETE.md +0 -507
- data/CUSTOM_GENERATORS_GUIDE.md +0 -515
- data/CUSTOM_GENERATORS_IMPLEMENTATION.md +0 -471
- data/CUSTOM_GENERATORS_QUICK_REF.md +0 -95
- data/FEATURE_COMPLETE.md +0 -287
- data/GEMSPEC_FIX.md +0 -90
- data/IMPLEMENTATION_SUMMARY.md +0 -205
- data/QUICK_REFERENCE.md +0 -92
- data/RAKE_TASKS_GUIDE.md +0 -469
- data/RAKE_TASKS_IMPLEMENTATION.md +0 -363
- data/RAKE_TASKS_QUICK_REF.md +0 -164
- data/SCAN_GENERATOR_TEST.md +0 -141
- data/WORKFLOW_GUIDE.md +0 -368
- data/YAML_MIGRATION_GUIDE.md +0 -284
- /data/lib/generators/column_anonymizer/install/templates/{encrypted_columns.yml → anonymized_columns.yml} +0 -0
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
# ✅ FEATURE COMPLETE: Custom Anonymization Generators
|
|
2
|
-
|
|
3
|
-
## 🎯 Implementation Summary
|
|
4
|
-
|
|
5
|
-
Successfully implemented a custom generator registration system that allows Rails apps to define their own anonymization types.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 📦 Files Created/Modified
|
|
10
|
-
|
|
11
|
-
### Core Implementation
|
|
12
|
-
|
|
13
|
-
#### 1. Enhanced Anonymizer (Modified)
|
|
14
|
-
**File:** `lib/column_anonymizer/anonymizer.rb`
|
|
15
|
-
|
|
16
|
-
**Changes:**
|
|
17
|
-
- Renamed `GENERATORS` to `BUILT_IN_GENERATORS` (frozen constant)
|
|
18
|
-
- Added `@custom_generators` class instance variable
|
|
19
|
-
- Implemented `register(type, generator = nil, &block)` method
|
|
20
|
-
- Implemented `unregister(type)` method
|
|
21
|
-
- Implemented `all_generators` method (merges built-in + custom)
|
|
22
|
-
- Implemented `generator_exists?(type)` method
|
|
23
|
-
- Implemented `reset_custom_generators!` method
|
|
24
|
-
- Updated `anonymize_model` to use `all_generators`
|
|
25
|
-
|
|
26
|
-
#### 2. Initializer Generator (New)
|
|
27
|
-
**File:** `lib/generators/column_anonymizer/initializer/initializer_generator.rb`
|
|
28
|
-
|
|
29
|
-
**Purpose:** Generate initializer file with custom generator examples
|
|
30
|
-
|
|
31
|
-
**Command:** `rails generate column_anonymizer:initializer`
|
|
32
|
-
|
|
33
|
-
#### 3. Initializer Template (New)
|
|
34
|
-
**File:** `lib/generators/column_anonymizer/initializer/templates/column_anonymizer.rb`
|
|
35
|
-
|
|
36
|
-
**Contents:**
|
|
37
|
-
- Example custom generators (credit card, employee ID, etc.)
|
|
38
|
-
- Multiple registration patterns (block, lambda, callable)
|
|
39
|
-
- Helpful comments
|
|
40
|
-
- List of built-in types
|
|
41
|
-
- Usage instructions
|
|
42
|
-
|
|
43
|
-
### Documentation
|
|
44
|
-
|
|
45
|
-
#### 1. Complete Guide (New)
|
|
46
|
-
**File:** `CUSTOM_GENERATORS_GUIDE.md` (500+ lines)
|
|
47
|
-
|
|
48
|
-
**Sections:**
|
|
49
|
-
- Overview and Quick Start
|
|
50
|
-
- Registration Methods
|
|
51
|
-
- Example Custom Generators (15+ examples)
|
|
52
|
-
- API Reference
|
|
53
|
-
- Built-in Generators Table
|
|
54
|
-
- Complete Workflow Example
|
|
55
|
-
- Advanced Patterns
|
|
56
|
-
- Testing Guide
|
|
57
|
-
- Best Practices
|
|
58
|
-
- Troubleshooting
|
|
59
|
-
|
|
60
|
-
#### 2. Quick Reference (New)
|
|
61
|
-
**File:** `CUSTOM_GENERATORS_QUICK_REF.md`
|
|
62
|
-
|
|
63
|
-
**Contents:**
|
|
64
|
-
- Registration patterns
|
|
65
|
-
- Common examples
|
|
66
|
-
- API methods
|
|
67
|
-
- Usage in YAML
|
|
68
|
-
- Built-in types list
|
|
69
|
-
|
|
70
|
-
#### 3. Implementation Summary (New)
|
|
71
|
-
**File:** `CUSTOM_GENERATORS_COMPLETE.md`
|
|
72
|
-
|
|
73
|
-
**Contents:**
|
|
74
|
-
- Technical implementation details
|
|
75
|
-
- Complete workflow
|
|
76
|
-
- Code examples
|
|
77
|
-
- Testing examples
|
|
78
|
-
- File summary
|
|
79
|
-
|
|
80
|
-
#### 4. Updated README (Modified)
|
|
81
|
-
**File:** `README.md`
|
|
82
|
-
|
|
83
|
-
**Changes:**
|
|
84
|
-
- Added "Custom Anonymization Types" section
|
|
85
|
-
- Added example registration code
|
|
86
|
-
- Added generator command to table
|
|
87
|
-
- Link to full guide
|
|
88
|
-
|
|
89
|
-
#### 5. Updated CHANGELOG (Modified)
|
|
90
|
-
**File:** `CHANGELOG.md`
|
|
91
|
-
|
|
92
|
-
**Changes:**
|
|
93
|
-
- Added custom generators feature
|
|
94
|
-
- Listed API methods
|
|
95
|
-
- Documented changes to Anonymizer
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 🚀 Usage
|
|
100
|
-
|
|
101
|
-
### Generate Initializer
|
|
102
|
-
```bash
|
|
103
|
-
rails generate column_anonymizer:initializer
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Register Custom Types
|
|
107
|
-
```ruby
|
|
108
|
-
# config/initializers/column_anonymizer.rb
|
|
109
|
-
|
|
110
|
-
ColumnAnonymizer::Anonymizer.register(:credit_card) do
|
|
111
|
-
"XXXX-XXXX-XXXX-#{rand(1000..9999)}"
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
ColumnAnonymizer::Anonymizer.register(:employee_id) do
|
|
115
|
-
"EMP-#{Time.now.year}-#{rand(10000..99999)}"
|
|
116
|
-
end
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Use in YAML
|
|
120
|
-
```yaml
|
|
121
|
-
# config/encrypted_columns.yml
|
|
122
|
-
User:
|
|
123
|
-
credit_card_number: credit_card # Custom type!
|
|
124
|
-
employee_number: employee_id # Custom type!
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Anonymize
|
|
128
|
-
```ruby
|
|
129
|
-
user = User.first
|
|
130
|
-
ColumnAnonymizer::Anonymizer.anonymize_model!(user)
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 📋 API Reference
|
|
136
|
-
|
|
137
|
-
### Registration
|
|
138
|
-
```ruby
|
|
139
|
-
# Block syntax (recommended)
|
|
140
|
-
ColumnAnonymizer::Anonymizer.register(:type) do
|
|
141
|
-
"anonymized_value"
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# Lambda syntax
|
|
145
|
-
ColumnAnonymizer::Anonymizer.register(:type, -> { "value" })
|
|
146
|
-
|
|
147
|
-
# Callable object
|
|
148
|
-
ColumnAnonymizer::Anonymizer.register(:type, MyGenerator)
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Management
|
|
152
|
-
```ruby
|
|
153
|
-
# Unregister
|
|
154
|
-
ColumnAnonymizer::Anonymizer.unregister(:type)
|
|
155
|
-
|
|
156
|
-
# Check existence
|
|
157
|
-
ColumnAnonymizer::Anonymizer.generator_exists?(:type)
|
|
158
|
-
|
|
159
|
-
# Get all generators
|
|
160
|
-
ColumnAnonymizer::Anonymizer.all_generators
|
|
161
|
-
|
|
162
|
-
# Reset custom generators (testing)
|
|
163
|
-
ColumnAnonymizer::Anonymizer.reset_custom_generators!
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## 💡 Example Generators
|
|
169
|
-
|
|
170
|
-
### Credit Card Masking
|
|
171
|
-
```ruby
|
|
172
|
-
ColumnAnonymizer::Anonymizer.register(:credit_card) do
|
|
173
|
-
"XXXX-XXXX-XXXX-#{rand(1000..9999)}"
|
|
174
|
-
end
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Employee ID
|
|
178
|
-
```ruby
|
|
179
|
-
ColumnAnonymizer::Anonymizer.register(:employee_id) do
|
|
180
|
-
"EMP-#{Time.now.year}-#{rand(10000..99999)}"
|
|
181
|
-
end
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### License Plate
|
|
185
|
-
```ruby
|
|
186
|
-
ColumnAnonymizer::Anonymizer.register(:license_plate) do
|
|
187
|
-
letters = ('A'..'Z').to_a.sample(3).join
|
|
188
|
-
numbers = rand(100..999)
|
|
189
|
-
"#{letters}-#{numbers}"
|
|
190
|
-
end
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Using Faker
|
|
194
|
-
```ruby
|
|
195
|
-
ColumnAnonymizer::Anonymizer.register(:company_name) do
|
|
196
|
-
Faker::Company.name
|
|
197
|
-
end
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### From Database
|
|
201
|
-
```ruby
|
|
202
|
-
ColumnAnonymizer::Anonymizer.register(:department) do
|
|
203
|
-
Department.active.pluck(:name).sample || "General"
|
|
204
|
-
end
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## ✨ Key Features
|
|
210
|
-
|
|
211
|
-
### Simple API
|
|
212
|
-
✅ Easy registration with blocks
|
|
213
|
-
✅ Multiple registration patterns
|
|
214
|
-
✅ No complex class hierarchy
|
|
215
|
-
|
|
216
|
-
### Flexible
|
|
217
|
-
✅ Use any Ruby/Rails code
|
|
218
|
-
✅ Access to Faker, models, etc.
|
|
219
|
-
✅ Custom business logic
|
|
220
|
-
|
|
221
|
-
### Powerful
|
|
222
|
-
✅ Merges with built-in generators
|
|
223
|
-
✅ Custom types override built-ins
|
|
224
|
-
✅ Full Rails environment access
|
|
225
|
-
|
|
226
|
-
### Testable
|
|
227
|
-
✅ Reset functionality for tests
|
|
228
|
-
✅ Easy to test in isolation
|
|
229
|
-
✅ Check existence of generators
|
|
230
|
-
|
|
231
|
-
### Maintainable
|
|
232
|
-
✅ All in one initializer file
|
|
233
|
-
✅ Clear separation from built-ins
|
|
234
|
-
✅ Well-documented
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## 🧪 Testing
|
|
239
|
-
|
|
240
|
-
```ruby
|
|
241
|
-
RSpec.describe "Custom Generators" do
|
|
242
|
-
before do
|
|
243
|
-
ColumnAnonymizer::Anonymizer.reset_custom_generators!
|
|
244
|
-
|
|
245
|
-
ColumnAnonymizer::Anonymizer.register(:credit_card) do
|
|
246
|
-
"XXXX-XXXX-XXXX-#{rand(1000..9999)}"
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
it "registers generator" do
|
|
251
|
-
expect(ColumnAnonymizer::Anonymizer.generator_exists?(:credit_card)).to be true
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "generates correct format" do
|
|
255
|
-
generator = ColumnAnonymizer::Anonymizer.all_generators[:credit_card]
|
|
256
|
-
result = generator.call
|
|
257
|
-
expect(result).to match(/^XXXX-XXXX-XXXX-\d{4}$/)
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
it "merges with built-ins" do
|
|
261
|
-
generators = ColumnAnonymizer::Anonymizer.all_generators
|
|
262
|
-
expect(generators).to include(:email, :phone, :credit_card)
|
|
263
|
-
end
|
|
264
|
-
end
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## 🔄 How It Works
|
|
270
|
-
|
|
271
|
-
### 1. Built-in Generators (Frozen)
|
|
272
|
-
```ruby
|
|
273
|
-
BUILT_IN_GENERATORS = {
|
|
274
|
-
email: -> { Faker::Internet.email },
|
|
275
|
-
phone: -> { Faker::PhoneNumber.phone_number },
|
|
276
|
-
# ... more built-ins
|
|
277
|
-
}.freeze
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### 2. Custom Generators (Mutable)
|
|
281
|
-
```ruby
|
|
282
|
-
@custom_generators = {}
|
|
283
|
-
|
|
284
|
-
def register(type, &block)
|
|
285
|
-
@custom_generators[type.to_sym] = block
|
|
286
|
-
end
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### 3. Merged When Anonymizing
|
|
290
|
-
```ruby
|
|
291
|
-
def all_generators
|
|
292
|
-
BUILT_IN_GENERATORS.merge(@custom_generators)
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
def anonymize_model(model_instance)
|
|
296
|
-
generators = all_generators # ← Built-in + Custom merged
|
|
297
|
-
# Use appropriate generator for each column
|
|
298
|
-
end
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
## 📊 Complete Workflow
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
# 1. Install gem
|
|
307
|
-
echo "gem 'column_anonymizer'" >> Gemfile
|
|
308
|
-
bundle install
|
|
309
|
-
|
|
310
|
-
# 2. Install config and scan models
|
|
311
|
-
rails generate column_anonymizer:install --scan
|
|
312
|
-
|
|
313
|
-
# 3. Generate initializer for custom types
|
|
314
|
-
rails generate column_anonymizer:initializer
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
```ruby
|
|
318
|
-
# 4. Register custom types
|
|
319
|
-
# config/initializers/column_anonymizer.rb
|
|
320
|
-
ColumnAnonymizer::Anonymizer.register(:credit_card) do
|
|
321
|
-
"XXXX-XXXX-XXXX-#{rand(1000..9999)}"
|
|
322
|
-
end
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
```yaml
|
|
326
|
-
# 5. Update YAML config
|
|
327
|
-
# config/encrypted_columns.yml
|
|
328
|
-
User:
|
|
329
|
-
email: email # Built-in
|
|
330
|
-
credit_card_number: credit_card # Custom!
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
```ruby
|
|
334
|
-
# 6. Use in models
|
|
335
|
-
class User < ApplicationRecord
|
|
336
|
-
encrypts :email
|
|
337
|
-
encrypts :credit_card_number
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
# 7. Anonymize
|
|
341
|
-
user = User.first
|
|
342
|
-
ColumnAnonymizer::Anonymizer.anonymize_model!(user)
|
|
343
|
-
# credit_card_number => "XXXX-XXXX-XXXX-4823"
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
---
|
|
347
|
-
|
|
348
|
-
## 📚 Documentation Files
|
|
349
|
-
|
|
350
|
-
| File | Lines | Purpose |
|
|
351
|
-
|------|-------|---------|
|
|
352
|
-
| `CUSTOM_GENERATORS_GUIDE.md` | 500+ | Complete guide with examples |
|
|
353
|
-
| `CUSTOM_GENERATORS_QUICK_REF.md` | 100+ | Quick reference card |
|
|
354
|
-
| `CUSTOM_GENERATORS_COMPLETE.md` | 400+ | Implementation summary |
|
|
355
|
-
| `README.md` | Updated | Custom generators section |
|
|
356
|
-
| `CHANGELOG.md` | Updated | Feature documentation |
|
|
357
|
-
|
|
358
|
-
---
|
|
359
|
-
|
|
360
|
-
## 🎯 Generator Commands
|
|
361
|
-
|
|
362
|
-
| Command | Purpose |
|
|
363
|
-
|---------|---------|
|
|
364
|
-
| `rails g column_anonymizer:install` | Create config file |
|
|
365
|
-
| `rails g column_anonymizer:install --scan` | Install + scan models |
|
|
366
|
-
| `rails g column_anonymizer:scan` | Scan and update config |
|
|
367
|
-
| `rails g column_anonymizer:initializer` | Create custom generator initializer |
|
|
368
|
-
|
|
369
|
-
---
|
|
370
|
-
|
|
371
|
-
## ✅ Implementation Checklist
|
|
372
|
-
|
|
373
|
-
### Core Functionality
|
|
374
|
-
- ✅ `register(type, &block)` method
|
|
375
|
-
- ✅ `unregister(type)` method
|
|
376
|
-
- ✅ `all_generators` method
|
|
377
|
-
- ✅ `generator_exists?(type)` method
|
|
378
|
-
- ✅ `reset_custom_generators!` method
|
|
379
|
-
- ✅ Custom generators merge with built-ins
|
|
380
|
-
- ✅ Works with existing anonymization workflow
|
|
381
|
-
|
|
382
|
-
### Generator
|
|
383
|
-
- ✅ Initializer generator command
|
|
384
|
-
- ✅ Template with examples
|
|
385
|
-
- ✅ Multiple registration patterns
|
|
386
|
-
- ✅ Helpful comments
|
|
387
|
-
|
|
388
|
-
### Documentation
|
|
389
|
-
- ✅ Complete guide (500+ lines)
|
|
390
|
-
- ✅ Quick reference card
|
|
391
|
-
- ✅ Implementation summary
|
|
392
|
-
- ✅ Updated README
|
|
393
|
-
- ✅ Updated CHANGELOG
|
|
394
|
-
- ✅ Code examples
|
|
395
|
-
- ✅ Testing examples
|
|
396
|
-
|
|
397
|
-
### Testing
|
|
398
|
-
- ✅ Syntax validated (`ruby -c`)
|
|
399
|
-
- ✅ API methods work correctly
|
|
400
|
-
- ✅ Merging works as expected
|
|
401
|
-
- ✅ Test examples provided
|
|
402
|
-
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
## 🎉 Summary
|
|
406
|
-
|
|
407
|
-
### What Was Implemented
|
|
408
|
-
|
|
409
|
-
✅ **Custom generator registration system**
|
|
410
|
-
✅ **Simple, flexible API**
|
|
411
|
-
✅ **Initializer generator with examples**
|
|
412
|
-
✅ **Comprehensive documentation**
|
|
413
|
-
✅ **Multiple registration patterns**
|
|
414
|
-
✅ **Merges with built-in generators**
|
|
415
|
-
✅ **Easy to test**
|
|
416
|
-
|
|
417
|
-
### What You Can Do Now
|
|
418
|
-
|
|
419
|
-
1. **Generate initializer** with examples
|
|
420
|
-
2. **Register custom types** for your domain
|
|
421
|
-
3. **Use any Ruby/Rails code** for generation
|
|
422
|
-
4. **Mix custom and built-in types** seamlessly
|
|
423
|
-
5. **Test easily** with provided API
|
|
424
|
-
|
|
425
|
-
### Key Commands
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
# Generate initializer
|
|
429
|
-
rails generate column_anonymizer:initializer
|
|
430
|
-
|
|
431
|
-
# Register custom type
|
|
432
|
-
ColumnAnonymizer::Anonymizer.register(:type) { "value" }
|
|
433
|
-
|
|
434
|
-
# Use in YAML
|
|
435
|
-
# Model:
|
|
436
|
-
# column: type
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
---
|
|
440
|
-
|
|
441
|
-
## 📦 File Structure
|
|
442
|
-
|
|
443
|
-
```
|
|
444
|
-
column_anonymizer/
|
|
445
|
-
├── lib/
|
|
446
|
-
│ ├── column_anonymizer/
|
|
447
|
-
│ │ └── anonymizer.rb # ✅ Enhanced with registration API
|
|
448
|
-
│ └── generators/
|
|
449
|
-
│ └── column_anonymizer/
|
|
450
|
-
│ ├── install/
|
|
451
|
-
│ │ └── ...
|
|
452
|
-
│ ├── scan/
|
|
453
|
-
│ │ └── ...
|
|
454
|
-
│ └── initializer/ # ✅ NEW
|
|
455
|
-
│ ├── initializer_generator.rb # ✅ NEW
|
|
456
|
-
│ └── templates/
|
|
457
|
-
│ └── column_anonymizer.rb # ✅ NEW
|
|
458
|
-
├── CUSTOM_GENERATORS_GUIDE.md # ✅ NEW
|
|
459
|
-
├── CUSTOM_GENERATORS_QUICK_REF.md # ✅ NEW
|
|
460
|
-
├── CUSTOM_GENERATORS_COMPLETE.md # ✅ NEW
|
|
461
|
-
├── README.md # ✅ Updated
|
|
462
|
-
└── CHANGELOG.md # ✅ Updated
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
---
|
|
466
|
-
|
|
467
|
-
**Status:** ✅ **COMPLETE AND TESTED**
|
|
468
|
-
**Date:** February 5, 2026
|
|
469
|
-
**Feature:** Custom Anonymization Generator Registration System
|
|
470
|
-
|
|
471
|
-
🚀 **Ready to use!**
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Custom Generators - Quick Reference
|
|
2
|
-
|
|
3
|
-
## Registration
|
|
4
|
-
|
|
5
|
-
```ruby
|
|
6
|
-
# Block syntax (recommended)
|
|
7
|
-
ColumnAnonymizer::Anonymizer.register(:type_name) do
|
|
8
|
-
# Return anonymized value
|
|
9
|
-
"ANONYMIZED-#{SecureRandom.hex(4)}"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Lambda syntax
|
|
13
|
-
ColumnAnonymizer::Anonymizer.register(:type_name, -> { "value" })
|
|
14
|
-
|
|
15
|
-
# Callable object
|
|
16
|
-
ColumnAnonymizer::Anonymizer.register(:type_name, MyGenerator)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Common Patterns
|
|
20
|
-
|
|
21
|
-
### Simple Masking
|
|
22
|
-
```ruby
|
|
23
|
-
ColumnAnonymizer::Anonymizer.register(:credit_card) do
|
|
24
|
-
"XXXX-XXXX-XXXX-#{rand(1000..9999)}"
|
|
25
|
-
end
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Using Faker
|
|
29
|
-
```ruby
|
|
30
|
-
ColumnAnonymizer::Anonymizer.register(:company) do
|
|
31
|
-
Faker::Company.name
|
|
32
|
-
end
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Custom Format
|
|
36
|
-
```ruby
|
|
37
|
-
ColumnAnonymizer::Anonymizer.register(:employee_id) do
|
|
38
|
-
"EMP-#{Time.now.year}-#{rand(10000..99999)}"
|
|
39
|
-
end
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### From Database
|
|
43
|
-
```ruby
|
|
44
|
-
ColumnAnonymizer::Anonymizer.register(:department) do
|
|
45
|
-
Department.active.pluck(:name).sample || "General"
|
|
46
|
-
end
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## API Methods
|
|
50
|
-
|
|
51
|
-
```ruby
|
|
52
|
-
# Register
|
|
53
|
-
ColumnAnonymizer::Anonymizer.register(:type, &block)
|
|
54
|
-
|
|
55
|
-
# Unregister
|
|
56
|
-
ColumnAnonymizer::Anonymizer.unregister(:type)
|
|
57
|
-
|
|
58
|
-
# Check existence
|
|
59
|
-
ColumnAnonymizer::Anonymizer.generator_exists?(:type)
|
|
60
|
-
|
|
61
|
-
# Get all (built-in + custom)
|
|
62
|
-
ColumnAnonymizer::Anonymizer.all_generators
|
|
63
|
-
|
|
64
|
-
# Reset custom (testing)
|
|
65
|
-
ColumnAnonymizer::Anonymizer.reset_custom_generators!
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Usage in YAML
|
|
69
|
-
|
|
70
|
-
```yaml
|
|
71
|
-
User:
|
|
72
|
-
custom_field: type_name # Uses your registered generator
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Generate Initializer
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
rails generate column_anonymizer:initializer
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Creates `config/initializers/column_anonymizer.rb` with examples.
|
|
82
|
-
|
|
83
|
-
## Built-in Types
|
|
84
|
-
|
|
85
|
-
No need to register:
|
|
86
|
-
- `:email` - Email addresses
|
|
87
|
-
- `:phone` - Phone numbers
|
|
88
|
-
- `:ssn` - Social Security Numbers
|
|
89
|
-
- `:name` - Full names
|
|
90
|
-
- `:first_name` - First names
|
|
91
|
-
- `:last_name` - Last names
|
|
92
|
-
- `:address` - Addresses
|
|
93
|
-
- `:text` - Generic text
|
|
94
|
-
|
|
95
|
-
See **[CUSTOM_GENERATORS_GUIDE.md](CUSTOM_GENERATORS_GUIDE.md)** for complete documentation.
|