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,256 @@
|
|
|
1
|
+
# Quick Start Guide
|
|
2
|
+
|
|
3
|
+
Get up and running with FakeDataDSL in 5 minutes.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Step 1: Create Your First Schema](#step-1-create-your-first-schema)
|
|
8
|
+
- [Step 2: Generate Data in Ruby](#step-2-generate-data-in-ruby)
|
|
9
|
+
- [Step 3: Use the CLI](#step-3-use-the-cli)
|
|
10
|
+
- [Step 4: Advanced Features](#step-4-advanced-features)
|
|
11
|
+
- [Next Steps](#next-steps)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Step 1: Create Your First Schema
|
|
16
|
+
|
|
17
|
+
Create a file `schemas/user.dsl`:
|
|
18
|
+
|
|
19
|
+
```dsl
|
|
20
|
+
# User schema - my first FakeDataDSL schema
|
|
21
|
+
User:
|
|
22
|
+
id: uuid
|
|
23
|
+
name: name
|
|
24
|
+
email: email
|
|
25
|
+
age: number(18..65)
|
|
26
|
+
active: boolean
|
|
27
|
+
role: enum(user, admin, moderator)
|
|
28
|
+
created_at: past_date(1y)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Understanding the Schema
|
|
32
|
+
|
|
33
|
+
| Field | Type | Description |
|
|
34
|
+
|-------|------|-------------|
|
|
35
|
+
| `id` | `uuid` | Generates a unique UUID v4 |
|
|
36
|
+
| `name` | `name` | Generates a realistic full name |
|
|
37
|
+
| `email` | `email` | Generates a realistic email address |
|
|
38
|
+
| `age` | `number(18..65)` | Generates an integer between 18 and 65 |
|
|
39
|
+
| `active` | `boolean` | Generates true or false |
|
|
40
|
+
| `role` | `enum(...)` | Randomly selects one of the values |
|
|
41
|
+
| `created_at` | `past_date(1y)` | Generates a date within the past year |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Step 2: Generate Data in Ruby
|
|
46
|
+
|
|
47
|
+
### Load and Generate
|
|
48
|
+
|
|
49
|
+
```ruby
|
|
50
|
+
require 'fake_data_dsl'
|
|
51
|
+
|
|
52
|
+
# Load the schema
|
|
53
|
+
schema = FakeDataDSL.load('schemas/user.dsl')
|
|
54
|
+
|
|
55
|
+
# Generate a single user
|
|
56
|
+
user = schema.generate
|
|
57
|
+
puts user
|
|
58
|
+
# Output:
|
|
59
|
+
# {
|
|
60
|
+
# "id" => "550e8400-e29b-41d4-a716-446655440000",
|
|
61
|
+
# "name" => "John Smith",
|
|
62
|
+
# "email" => "john.smith@example.com",
|
|
63
|
+
# "age" => 34,
|
|
64
|
+
# "active" => true,
|
|
65
|
+
# "role" => "user",
|
|
66
|
+
# "created_at" => "2024-06-15"
|
|
67
|
+
# }
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Generate Multiple Records
|
|
71
|
+
|
|
72
|
+
```ruby
|
|
73
|
+
# Generate 10 users
|
|
74
|
+
users = schema.generate_many(10)
|
|
75
|
+
users.each do |user|
|
|
76
|
+
puts "#{user['name']} - #{user['email']}"
|
|
77
|
+
end
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Generate with Seed (Reproducible)
|
|
81
|
+
|
|
82
|
+
```ruby
|
|
83
|
+
# Same seed = same output
|
|
84
|
+
user1 = schema.generate(seed: 12345)
|
|
85
|
+
user2 = schema.generate(seed: 12345)
|
|
86
|
+
|
|
87
|
+
user1 == user2 # => true
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Generate JSON Output
|
|
91
|
+
|
|
92
|
+
```ruby
|
|
93
|
+
# Get JSON string
|
|
94
|
+
json = schema.generate_json
|
|
95
|
+
puts json
|
|
96
|
+
# => {"id":"550e8400...","name":"John Smith",...}
|
|
97
|
+
|
|
98
|
+
# Pretty printed JSON
|
|
99
|
+
pretty_json = schema.generate_json(pretty: true)
|
|
100
|
+
puts pretty_json
|
|
101
|
+
# {
|
|
102
|
+
# "id": "550e8400-e29b-41d4-a716-446655440000",
|
|
103
|
+
# "name": "John Smith",
|
|
104
|
+
# ...
|
|
105
|
+
# }
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Step 3: Use the CLI
|
|
111
|
+
|
|
112
|
+
### Validate Your Schema
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
fake_data_dsl validate schemas/user.dsl
|
|
116
|
+
# ✓ schemas/user.dsl is valid
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Generate Data
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Generate one user
|
|
123
|
+
fake_data_dsl generate User --dir schemas
|
|
124
|
+
|
|
125
|
+
# Generate 10 users
|
|
126
|
+
fake_data_dsl generate User --dir schemas --count 10
|
|
127
|
+
|
|
128
|
+
# Pretty print output
|
|
129
|
+
fake_data_dsl generate User --dir schemas --pretty
|
|
130
|
+
|
|
131
|
+
# Save to file
|
|
132
|
+
fake_data_dsl generate User --dir schemas --count 100 > users.json
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Different Output Formats
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# JSON array (default)
|
|
139
|
+
fake_data_dsl generate User --dir schemas --count 3
|
|
140
|
+
# [{"id":"...","name":"John"},{"id":"...","name":"Jane"},...]
|
|
141
|
+
|
|
142
|
+
# NDJSON (newline-delimited JSON)
|
|
143
|
+
fake_data_dsl generate User --dir schemas --count 3 --ndjson
|
|
144
|
+
# {"id":"...","name":"John"}
|
|
145
|
+
# {"id":"...","name":"Jane"}
|
|
146
|
+
# {"id":"...","name":"Bob"}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Step 4: Advanced Features
|
|
152
|
+
|
|
153
|
+
### Add Related Schemas
|
|
154
|
+
|
|
155
|
+
Create `schemas/order.dsl`:
|
|
156
|
+
|
|
157
|
+
```dsl
|
|
158
|
+
Order:
|
|
159
|
+
id: uuid
|
|
160
|
+
user_id: Ref(User.id)
|
|
161
|
+
total: money(range: 10..500)
|
|
162
|
+
status: enum(pending, shipped, delivered)
|
|
163
|
+
created_at: past_date(30d)
|
|
164
|
+
|
|
165
|
+
LineItem:
|
|
166
|
+
product_name: text(10..50)
|
|
167
|
+
quantity: number(1..5)
|
|
168
|
+
price: number(9.99..99.99)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Use a Registry for Multiple Schemas
|
|
172
|
+
|
|
173
|
+
```ruby
|
|
174
|
+
require 'fake_data_dsl'
|
|
175
|
+
|
|
176
|
+
# Create registry and load all schemas
|
|
177
|
+
registry = FakeDataDSL::Registry.new
|
|
178
|
+
registry.load_dir('schemas/')
|
|
179
|
+
|
|
180
|
+
# Generate with cross-schema references
|
|
181
|
+
order = registry.schema('Order').generate(registry: registry)
|
|
182
|
+
# order["user_id"] will be a valid UUID
|
|
183
|
+
|
|
184
|
+
# Generate user and their orders
|
|
185
|
+
user = registry.schema('User').generate
|
|
186
|
+
orders = 3.times.map do
|
|
187
|
+
registry.schema('Order').generate(
|
|
188
|
+
registry: registry,
|
|
189
|
+
overrides: { 'user_id' => user['id'] }
|
|
190
|
+
)
|
|
191
|
+
end
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Different Generation Modes
|
|
195
|
+
|
|
196
|
+
```ruby
|
|
197
|
+
# Normal/random data (default)
|
|
198
|
+
user = schema.generate(mode: :random)
|
|
199
|
+
# => {"name"=>"John Smith", "age"=>34, ...}
|
|
200
|
+
|
|
201
|
+
# Edge case data (boundary values)
|
|
202
|
+
user = schema.generate(mode: :edge)
|
|
203
|
+
# => {"name"=>"", "age"=>0, ...}
|
|
204
|
+
|
|
205
|
+
# Invalid data (for validation testing)
|
|
206
|
+
user = schema.generate(mode: :invalid)
|
|
207
|
+
# => {"name"=>nil, "age"=>"not_a_number", ...}
|
|
208
|
+
|
|
209
|
+
# Mixed (80% random, 15% edge, 5% invalid)
|
|
210
|
+
user = schema.generate(mode: :mixed)
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Add Behaviors
|
|
214
|
+
|
|
215
|
+
```dsl
|
|
216
|
+
# Schema with behaviors
|
|
217
|
+
SlowAPI:
|
|
218
|
+
@latency 100..500ms
|
|
219
|
+
@failure 5%
|
|
220
|
+
|
|
221
|
+
id: uuid
|
|
222
|
+
data: text(50..200)
|
|
223
|
+
timestamp: now
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
```ruby
|
|
227
|
+
schema = FakeDataDSL.load('schemas/slow_api.dsl')
|
|
228
|
+
|
|
229
|
+
begin
|
|
230
|
+
data = schema.generate
|
|
231
|
+
rescue FakeDataDSL::Errors::SimulatedFailure
|
|
232
|
+
puts "Simulated failure occurred!"
|
|
233
|
+
end
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Next Steps
|
|
239
|
+
|
|
240
|
+
Now that you have the basics:
|
|
241
|
+
|
|
242
|
+
1. **Learn the DSL**: Read [Schema Definition](dsl/schema_definition.md) for complete syntax
|
|
243
|
+
2. **Explore Types**: Check [Core Types](dsl/core_types.md) for all available types
|
|
244
|
+
3. **Master the API**: See [API Overview](api/overview.md) for complete Ruby API
|
|
245
|
+
4. **See Examples**: Browse [Examples](../tech_example/README.md) for real-world usage
|
|
246
|
+
|
|
247
|
+
### Common Use Cases
|
|
248
|
+
|
|
249
|
+
| Use Case | Documentation |
|
|
250
|
+
|----------|---------------|
|
|
251
|
+
| Testing API responses | [Behaviors](behaviors/overview.md) |
|
|
252
|
+
| Database seeding | [Examples: Database](../tech_example/database_seeding.md) |
|
|
253
|
+
| Generating test fixtures | [RSpec Integration](integration/rspec.md) |
|
|
254
|
+
| Load testing | [Streaming Generation](advanced/streaming.md) |
|
|
255
|
+
| Property-based testing | [Generation Modes](modes/overview.md) |
|
|
256
|
+
|