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.
Files changed (302) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +4 -0
  3. data/.rubocop.yml +40 -0
  4. data/.yardopts +18 -0
  5. data/ACCESS_DOCS.md +116 -0
  6. data/ADVANCED_FEATURES_SUMMARY.md +245 -0
  7. data/CHANGELOG.md +498 -0
  8. data/CODE_OF_CONDUCT.md +122 -0
  9. data/CONTRIBUTING.md +307 -0
  10. data/DOCUMENTATION.md +204 -0
  11. data/DOCUMENTATION_GUIDE.md +194 -0
  12. data/LICENSE +22 -0
  13. data/README.md +1458 -0
  14. data/Rakefile +128 -0
  15. data/benchmark/README.md +591 -0
  16. data/benchmark/batch_generation.rb +63 -0
  17. data/benchmark/engine_comparison.rb +295 -0
  18. data/benchmark/single_record.rb +108 -0
  19. data/benchmark/streaming.rb +74 -0
  20. data/docs/ACTIVERECORD_INFERENCE.md +524 -0
  21. data/docs/API_SERVER.md +278 -0
  22. data/docs/CONFIG_FILE.md +315 -0
  23. data/docs/DATA_CONTRACTS.md +312 -0
  24. data/docs/ENHANCED_REPL.md +304 -0
  25. data/docs/FACTORY_BOT.md +271 -0
  26. data/docs/GITHUB_ACTION.md +420 -0
  27. data/docs/GRAPHQL_EXPORT.md +303 -0
  28. data/docs/GRAPHQL_FEDERATION.md +651 -0
  29. data/docs/HOW_TO_GENERATE_DOCS.md +252 -0
  30. data/docs/LSP.md +189 -0
  31. data/docs/MIGRATION_GENERATOR.md +547 -0
  32. data/docs/MOCK_SERVER.md +280 -0
  33. data/docs/NATIVE_ENGINE.md +298 -0
  34. data/docs/OPENAPI_EXPORT.md +252 -0
  35. data/docs/PERFORMANCE_MODE.md +228 -0
  36. data/docs/PERSONAS.md +547 -0
  37. data/docs/PROPERTY_TESTING.md +284 -0
  38. data/docs/PROTOBUF_EXPORT.md +276 -0
  39. data/docs/QUALITY_METRICS.md +555 -0
  40. data/docs/QUICK_REFERENCE.md +88 -0
  41. data/docs/RAILS_ENGINE.md +404 -0
  42. data/docs/RAILS_INTEGRATION.md +454 -0
  43. data/docs/README.md +175 -0
  44. data/docs/REPL_QUICK_REFERENCE.md +149 -0
  45. data/docs/RUST_INTEGRATION_GUIDE.md +1376 -0
  46. data/docs/SCENARIOS.md +576 -0
  47. data/docs/SECURITY_TESTING.md +318 -0
  48. data/docs/SNAPSHOT_TESTING.md +308 -0
  49. data/docs/STRING_TEXT_TYPES_REFERENCE.md +512 -0
  50. data/docs/TERRAFORM_EXPORT.md +447 -0
  51. data/docs/TIME_TRAVEL.md +507 -0
  52. data/docs/USAGE_GUIDE.md +980 -0
  53. data/docs/WEBHOOK_SIMULATOR.md +579 -0
  54. data/docs/advanced_features.md +183 -0
  55. data/docs/api_reference.md +153 -0
  56. data/docs/behaviors.md +138 -0
  57. data/docs/best_practices.md +191 -0
  58. data/docs/dsl_reference.md +172 -0
  59. data/docs/examples.md +162 -0
  60. data/docs/generation_modes.md +125 -0
  61. data/docs/getting_started.md +92 -0
  62. data/docs/index.html +177 -0
  63. data/docs/strategic/CLOUD_REGISTRY_ARCHITECTURE.md +268 -0
  64. data/docs/strategic/SIMD_OPTIMIZATION_STRATEGY.md +153 -0
  65. data/docs/troubleshooting.md +215 -0
  66. data/docs/type_reference.md +224 -0
  67. data/examples/hostile_mode_demo.rb +64 -0
  68. data/exe/synthra +6 -0
  69. data/ext/synthra_native/Cargo.lock +972 -0
  70. data/ext/synthra_native/Cargo.toml +46 -0
  71. data/ext/synthra_native/extconf.rb +41 -0
  72. data/ext/synthra_native/src/generator.rs +397 -0
  73. data/ext/synthra_native/src/lib.rs +229 -0
  74. data/ext/synthra_native/src/types.rs +1485 -0
  75. data/lib/generators/synthra/install_generator.rb +86 -0
  76. data/lib/generators/synthra/templates/api_response.dsl +15 -0
  77. data/lib/generators/synthra/templates/fake_data.rake +116 -0
  78. data/lib/generators/synthra/templates/synthra.yml +31 -0
  79. data/lib/generators/synthra/templates/synthra_support.rb +19 -0
  80. data/lib/generators/synthra/templates/user.dsl +11 -0
  81. data/lib/synthra/activerecord_inference.rb +394 -0
  82. data/lib/synthra/api.rb +381 -0
  83. data/lib/synthra/api_server.rb +718 -0
  84. data/lib/synthra/behaviors/applicator.rb +165 -0
  85. data/lib/synthra/behaviors/base.rb +155 -0
  86. data/lib/synthra/behaviors/close_connection.rb +60 -0
  87. data/lib/synthra/behaviors/deprecated.rb +100 -0
  88. data/lib/synthra/behaviors/failure.rb +69 -0
  89. data/lib/synthra/behaviors/latency.rb +103 -0
  90. data/lib/synthra/behaviors/partial_data.rb +83 -0
  91. data/lib/synthra/behaviors/randomize_order.rb +74 -0
  92. data/lib/synthra/behaviors/registry.rb +238 -0
  93. data/lib/synthra/behaviors/simulate_error.rb +79 -0
  94. data/lib/synthra/cli/commands/base.rb +105 -0
  95. data/lib/synthra/cli/commands/diff.rb +227 -0
  96. data/lib/synthra/cli/commands/docs.rb +67 -0
  97. data/lib/synthra/cli/commands/export.rb +150 -0
  98. data/lib/synthra/cli/commands/generate.rb +72 -0
  99. data/lib/synthra/cli/commands/import.rb +80 -0
  100. data/lib/synthra/cli/commands/lint.rb +53 -0
  101. data/lib/synthra/cli/commands/live.rb +57 -0
  102. data/lib/synthra/cli/commands/seed.rb +99 -0
  103. data/lib/synthra/cli/commands/validate.rb +28 -0
  104. data/lib/synthra/cli.rb +2471 -0
  105. data/lib/synthra/config_file.rb +129 -0
  106. data/lib/synthra/configuration.rb +281 -0
  107. data/lib/synthra/contracts_registry.rb +408 -0
  108. data/lib/synthra/database_seeder.rb +268 -0
  109. data/lib/synthra/deterministic_ids.rb +218 -0
  110. data/lib/synthra/documentation_generator.rb +414 -0
  111. data/lib/synthra/engine.rb +251 -0
  112. data/lib/synthra/errors.rb +1169 -0
  113. data/lib/synthra/export/base.rb +85 -0
  114. data/lib/synthra/export/csv.rb +101 -0
  115. data/lib/synthra/export/graphql.rb +266 -0
  116. data/lib/synthra/export/graphql_federation.rb +377 -0
  117. data/lib/synthra/export/graphviz.rb +258 -0
  118. data/lib/synthra/export/javascript.rb +327 -0
  119. data/lib/synthra/export/json_data.rb +61 -0
  120. data/lib/synthra/export/json_schema.rb +290 -0
  121. data/lib/synthra/export/openapi.rb +514 -0
  122. data/lib/synthra/export/protobuf.rb +483 -0
  123. data/lib/synthra/export/python.rb +560 -0
  124. data/lib/synthra/export/sql.rb +381 -0
  125. data/lib/synthra/export/sql_insert.rb +152 -0
  126. data/lib/synthra/export/terraform.rb +501 -0
  127. data/lib/synthra/export/type_mapping.rb +389 -0
  128. data/lib/synthra/export/typescript.rb +300 -0
  129. data/lib/synthra/export/xml_data.rb +104 -0
  130. data/lib/synthra/export/yaml_data.rb +56 -0
  131. data/lib/synthra/export.rb +404 -0
  132. data/lib/synthra/factory_bot_integration.rb +157 -0
  133. data/lib/synthra/field.rb +440 -0
  134. data/lib/synthra/functions/registry.rb +104 -0
  135. data/lib/synthra/generator/context.rb +372 -0
  136. data/lib/synthra/generator/engine.rb +336 -0
  137. data/lib/synthra/generator/faker_adapter.rb +425 -0
  138. data/lib/synthra/generator/modes.rb +444 -0
  139. data/lib/synthra/generator/resolver.rb +256 -0
  140. data/lib/synthra/generator/rng.rb +273 -0
  141. data/lib/synthra/generator/streamer.rb +63 -0
  142. data/lib/synthra/generator/uniqueness.rb +118 -0
  143. data/lib/synthra/initializer.rb +97 -0
  144. data/lib/synthra/limits.rb +279 -0
  145. data/lib/synthra/live_preview.rb +518 -0
  146. data/lib/synthra/loader_config.rb +78 -0
  147. data/lib/synthra/lsp/server.rb +689 -0
  148. data/lib/synthra/migration_generator.rb +301 -0
  149. data/lib/synthra/mixin.rb +174 -0
  150. data/lib/synthra/mock_server.rb +458 -0
  151. data/lib/synthra/native_engine.rb +304 -0
  152. data/lib/synthra/openapi_importer.rb +228 -0
  153. data/lib/synthra/output/json_formatter.rb +40 -0
  154. data/lib/synthra/output/ndjson_formatter.rb +55 -0
  155. data/lib/synthra/parser/ast.rb +1287 -0
  156. data/lib/synthra/parser/lexer.rb +1152 -0
  157. data/lib/synthra/parser/parser.rb +1664 -0
  158. data/lib/synthra/parser/tokens.rb +461 -0
  159. data/lib/synthra/performance_mode.rb +364 -0
  160. data/lib/synthra/personas.rb +397 -0
  161. data/lib/synthra/property_testing.rb +172 -0
  162. data/lib/synthra/quality_metrics.rb +405 -0
  163. data/lib/synthra/rails_test_helper.rb +248 -0
  164. data/lib/synthra/registry.rb +533 -0
  165. data/lib/synthra/relationships.rb +193 -0
  166. data/lib/synthra/repl/enhanced_repl.rb +607 -0
  167. data/lib/synthra/repl/formatter.rb +191 -0
  168. data/lib/synthra/scenarios.rb +423 -0
  169. data/lib/synthra/schema.rb +605 -0
  170. data/lib/synthra/schema_inheritance.rb +104 -0
  171. data/lib/synthra/schema_versioning.rb +212 -0
  172. data/lib/synthra/snapshot_testing.rb +199 -0
  173. data/lib/synthra/time_travel.rb +338 -0
  174. data/lib/synthra/type_definitions.rb +274 -0
  175. data/lib/synthra/types/address_location/addresses.rb +125 -0
  176. data/lib/synthra/types/address_location/airports.rb +200 -0
  177. data/lib/synthra/types/address_location/banks_hospitals.rb +207 -0
  178. data/lib/synthra/types/address_location/locations.rb +406 -0
  179. data/lib/synthra/types/base.rb +48 -0
  180. data/lib/synthra/types/commerce_products/commerce.rb +119 -0
  181. data/lib/synthra/types/commerce_products/companies.rb +71 -0
  182. data/lib/synthra/types/commerce_products/construction.rb +126 -0
  183. data/lib/synthra/types/commerce_products/products.rb +205 -0
  184. data/lib/synthra/types/core/collections.rb +513 -0
  185. data/lib/synthra/types/core/defaults.rb +76 -0
  186. data/lib/synthra/types/core/enums.rb +102 -0
  187. data/lib/synthra/types/core/identifiers.rb +445 -0
  188. data/lib/synthra/types/core/primitives.rb +586 -0
  189. data/lib/synthra/types/core/references.rb +466 -0
  190. data/lib/synthra/types/core/sequences.rb +304 -0
  191. data/lib/synthra/types/crypto/crypto.rb +162 -0
  192. data/lib/synthra/types/date_time/dates.rb +387 -0
  193. data/lib/synthra/types/finance_banking/banking.rb +424 -0
  194. data/lib/synthra/types/finance_banking/credit_cards.rb +24 -0
  195. data/lib/synthra/types/finance_banking/identifiers.rb +93 -0
  196. data/lib/synthra/types/formula.rb +184 -0
  197. data/lib/synthra/types/health_medical/medical.rb +150 -0
  198. data/lib/synthra/types/hostile_payloads.rb +122 -0
  199. data/lib/synthra/types/json_array.rb +51 -0
  200. data/lib/synthra/types/media_entertainment/media.rb +62 -0
  201. data/lib/synthra/types/naughty_string.rb +30 -0
  202. data/lib/synthra/types/personal_names/chinese.rb +41 -0
  203. data/lib/synthra/types/personal_names/identifiers.rb +187 -0
  204. data/lib/synthra/types/personal_names/names.rb +246 -0
  205. data/lib/synthra/types/personal_names/national_id.rb +89 -0
  206. data/lib/synthra/types/personal_names/titles_suffixes.rb +41 -0
  207. data/lib/synthra/types/regex.rb +248 -0
  208. data/lib/synthra/types/registry.rb +182 -0
  209. data/lib/synthra/types/repeating_element.rb +50 -0
  210. data/lib/synthra/types/scenario.rb +29 -0
  211. data/lib/synthra/types/technology_internet/apps.rb +67 -0
  212. data/lib/synthra/types/technology_internet/communication.rb +162 -0
  213. data/lib/synthra/types/technology_internet/devices.rb +80 -0
  214. data/lib/synthra/types/technology_internet/formats.rb +139 -0
  215. data/lib/synthra/types/technology_internet/networking.rb +143 -0
  216. data/lib/synthra/types/template.rb +92 -0
  217. data/lib/synthra/types/text_content/business.rb +128 -0
  218. data/lib/synthra/types/text_content/colors.rb +70 -0
  219. data/lib/synthra/types/text_content/misc.rb +237 -0
  220. data/lib/synthra/types/text_content/security.rb +130 -0
  221. data/lib/synthra/types/text_content/text_generation.rb +532 -0
  222. data/lib/synthra/types/travel/travel.rb +150 -0
  223. data/lib/synthra/utils/string_distance.rb +133 -0
  224. data/lib/synthra/validator/dsl_validator.rb +339 -0
  225. data/lib/synthra/validator/path_validator.rb +615 -0
  226. data/lib/synthra/version.rb +35 -0
  227. data/lib/synthra/webhook_simulator.rb +341 -0
  228. data/lib/synthra.rb +259 -0
  229. data/schemas/address.dsl +16 -0
  230. data/schemas/api_response.dsl +8 -0
  231. data/schemas/error_payload.dsl +9 -0
  232. data/schemas/order.dsl +10 -0
  233. data/schemas/order_item.dsl +8 -0
  234. data/schemas/payment.dsl +11 -0
  235. data/schemas/social_post.dsl +13 -0
  236. data/schemas/user.dsl +10 -0
  237. data/scripts/batch_fix_all.rb +96 -0
  238. data/scripts/delete_old_files.rb +32 -0
  239. data/scripts/fix_all_grouped_files.rb +137 -0
  240. data/scripts/fix_all_indentation.rb +48 -0
  241. data/scripts/fix_all_syntax.rb +124 -0
  242. data/scripts/fix_grouped_files.rb +184 -0
  243. data/scripts/fix_syntax_errors.rb +108 -0
  244. data/scripts/group_domain_types.rb +112 -0
  245. data/scripts/group_domain_types_fixed.rb +150 -0
  246. data/scripts/merge_domains_to_one_file.rb +68 -0
  247. data/scripts/move_existing_types.rb +130 -0
  248. data/scripts/split_grouped_types.rb +142 -0
  249. data/tech_docs/README.md +134 -0
  250. data/tech_docs/advanced/streaming.md +405 -0
  251. data/tech_docs/advanced/thread_safety.md +253 -0
  252. data/tech_docs/api/overview.md +485 -0
  253. data/tech_docs/appendices/type_chart.md +193 -0
  254. data/tech_docs/basic_concepts.md +383 -0
  255. data/tech_docs/behaviors/overview.md +346 -0
  256. data/tech_docs/dsl/complex_types.md +790 -0
  257. data/tech_docs/dsl/core_types.md +464 -0
  258. data/tech_docs/dsl/datetime_types.md +325 -0
  259. data/tech_docs/dsl/field_modifiers.md +414 -0
  260. data/tech_docs/dsl/grammar.md +431 -0
  261. data/tech_docs/dsl/schema_definition.md +399 -0
  262. data/tech_docs/export/README.md +276 -0
  263. data/tech_docs/installation.md +273 -0
  264. data/tech_docs/integration/ci_cd.md +707 -0
  265. data/tech_docs/integration/ci_cd_guide.md +579 -0
  266. data/tech_docs/integration/factory_bot.md +485 -0
  267. data/tech_docs/integration/rails.md +630 -0
  268. data/tech_docs/integration/rspec.md +449 -0
  269. data/tech_docs/modes/overview.md +350 -0
  270. data/tech_docs/performance/NATIVE_RUST_EXTENSION.md +1270 -0
  271. data/tech_docs/performance/OPTIMIZATION_GUIDE.md +901 -0
  272. data/tech_docs/quick_start.md +256 -0
  273. data/tech_docs/templates/README.md +805 -0
  274. data/tech_docs/tutorials/advanced.md +371 -0
  275. data/tech_docs/tutorials/getting_started.md +189 -0
  276. data/tech_docs/tutorials/intermediate.md +231 -0
  277. data/tech_docs/tutorials/template_gallery.md +569 -0
  278. data/tech_example/01_basic_usage.rb +238 -0
  279. data/tech_example/02_types_demo.rb +336 -0
  280. data/tech_example/04_cli_usage.md +429 -0
  281. data/tech_example/05_database_seeding.rb +283 -0
  282. data/tech_example/07_rspec_integration.rb +359 -0
  283. data/tech_example/10_custom_types.rb +387 -0
  284. data/tech_example/12_behaviors.rb +372 -0
  285. data/tech_example/13_twitter_dm_example.rb +120 -0
  286. data/tech_example/14_exact_json_structure.rb +253 -0
  287. data/tech_example/16_lsp_server.rb +56 -0
  288. data/tech_example/17_property_testing.rb +92 -0
  289. data/tech_example/18_enhanced_repl.rb +120 -0
  290. data/tech_example/19_security_fuzzing.rb +145 -0
  291. data/tech_example/NEW_FEATURES.md +169 -0
  292. data/tech_example/README.md +118 -0
  293. data/tech_example/schemas/api_response.dsl +123 -0
  294. data/tech_example/schemas/ecommerce.dsl +121 -0
  295. data/tech_example/schemas/twitter_dm.dsl +109 -0
  296. data/tech_example/schemas/user.dsl +36 -0
  297. data/vscode-extension/README.md +246 -0
  298. data/vscode-extension/language-configuration.json +31 -0
  299. data/vscode-extension/package.json +55 -0
  300. data/vscode-extension/snippets/fakedatadsl.json +198 -0
  301. data/vscode-extension/syntaxes/fakedatadsl.tmLanguage.json +128 -0
  302. metadata +478 -0
@@ -0,0 +1,346 @@
1
+ # Behaviors Overview
2
+
3
+ Simulate real-world conditions for testing with behaviors.
4
+
5
+ ## Table of Contents
6
+
7
+ - [What are Behaviors?](#what-are-behaviors)
8
+ - [Why Use Behaviors?](#why-use-behaviors)
9
+ - [Available Behaviors](#available-behaviors)
10
+ - [Schema-Level vs Field-Level](#schema-level-vs-field-level)
11
+ - [Combining Behaviors](#combining-behaviors)
12
+ - [Error Handling](#error-handling)
13
+
14
+ ---
15
+
16
+ ## What are Behaviors?
17
+
18
+ Behaviors are modifiers that simulate real-world conditions:
19
+
20
+ - Network latency
21
+ - Service failures
22
+ - Incomplete responses
23
+ - Connection drops
24
+ - HTTP errors
25
+
26
+ They help you test how your application handles imperfect conditions.
27
+
28
+ ---
29
+
30
+ ## Why Use Behaviors?
31
+
32
+ ### Testing Scenarios
33
+
34
+ | Scenario | Behavior |
35
+ |----------|----------|
36
+ | Slow API responses | `@latency` |
37
+ | Service outages | `@failure` |
38
+ | Incomplete data | `@partial_data` |
39
+ | Network issues | `@close_connection` |
40
+ | HTTP error codes | `@simulate_error` |
41
+
42
+ ### Benefits
43
+
44
+ 1. **Resilience Testing**: Find bugs before production
45
+ 2. **Timeout Handling**: Verify timeout logic works
46
+ 3. **Error Recovery**: Test error handling paths
47
+ 4. **UI/UX Testing**: See loading states and error messages
48
+
49
+ ---
50
+
51
+ ## Available Behaviors
52
+
53
+ ### @latency
54
+
55
+ Adds artificial delay to generation.
56
+
57
+ ```dsl
58
+ SlowAPI:
59
+ @latency 100ms # Fixed 100ms delay
60
+ @latency 100..500ms # Random 100-500ms delay
61
+
62
+ data: object
63
+ ```
64
+
65
+ **Arguments:**
66
+ - Fixed: `Nms` (e.g., `100ms`)
67
+ - Range: `N..Mms` (e.g., `100..500ms`)
68
+
69
+ ### @failure
70
+
71
+ Throws an error with specified probability.
72
+
73
+ ```dsl
74
+ FlakyService:
75
+ @failure 5% # 5% chance of failure
76
+
77
+ data: object
78
+ ```
79
+
80
+ **Throws:** `FakeDataDSL::Errors::SimulatedFailure`
81
+
82
+ ### @partial_data
83
+
84
+ Randomly omits fields from output.
85
+
86
+ ```dsl
87
+ IncompleteResponse:
88
+ @partial_data 20% # 20% chance each field is missing
89
+
90
+ id: uuid
91
+ name: name
92
+ email: email
93
+ ```
94
+
95
+ ### @close_connection
96
+
97
+ Simulates connection drop.
98
+
99
+ ```dsl
100
+ UnstableConnection:
101
+ @close_connection 2% # 2% chance of connection drop
102
+
103
+ data: object
104
+ ```
105
+
106
+ **Throws:** `FakeDataDSL::Errors::SimulatedConnectionDrop`
107
+
108
+ ### @simulate_error
109
+
110
+ Returns HTTP error status codes.
111
+
112
+ ```dsl
113
+ ErrorProne:
114
+ @simulate_error 500 5% # 5% chance of 500 error
115
+ @simulate_error 503 2% # 2% chance of 503 error
116
+
117
+ data: object
118
+ ```
119
+
120
+ **Throws:** `FakeDataDSL::Errors::SimulatedError` with status code
121
+
122
+ ### @randomize_order
123
+
124
+ Shuffles array fields randomly.
125
+
126
+ ```dsl
127
+ SearchResults:
128
+ @randomize_order
129
+
130
+ results: array(Result, 1..20)
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Schema-Level vs Field-Level
136
+
137
+ ### Schema-Level Behaviors
138
+
139
+ Apply to the entire schema generation:
140
+
141
+ ```dsl
142
+ APIResponse:
143
+ @latency 100..500ms # Delay entire response
144
+ @failure 5% # May fail entirely
145
+
146
+ id: uuid
147
+ data: object
148
+ meta: object
149
+ ```
150
+
151
+ ### Field-Level Behaviors
152
+
153
+ Apply to specific fields only:
154
+
155
+ ```dsl
156
+ User:
157
+ id: uuid
158
+ name: name
159
+
160
+ # This specific field may be missing
161
+ avatar: url @partial_data 30%
162
+
163
+ # This field has extra latency
164
+ external_data: object @latency 200ms
165
+ ```
166
+
167
+ ### Combining Both
168
+
169
+ ```dsl
170
+ UserAPI:
171
+ @latency 50..100ms # Base latency for all
172
+ @failure 2% # 2% total failure rate
173
+
174
+ id: uuid
175
+ name: name
176
+
177
+ # Additional field-specific behaviors
178
+ avatar: url @partial_data 40%
179
+ profile: object @latency 100..300ms
180
+ ```
181
+
182
+ ---
183
+
184
+ ## Combining Behaviors
185
+
186
+ ### Multiple Schema Behaviors
187
+
188
+ ```dsl
189
+ RealWorldAPI:
190
+ @latency 100..1000ms # Network latency
191
+ @failure 3% # Random failures
192
+ @simulate_error 500 1% # Server errors
193
+ @simulate_error 503 1% # Service unavailable
194
+ @partial_data 10% # Missing fields
195
+
196
+ data: object
197
+ ```
198
+
199
+ ### Behavior Order
200
+
201
+ Behaviors are applied in order:
202
+ 1. `@latency` - Delay happens first
203
+ 2. `@failure` - May throw before generating
204
+ 3. `@partial_data` - Applied after generation
205
+ 4. `@randomize_order` - Applied last
206
+
207
+ ---
208
+
209
+ ## Error Handling
210
+
211
+ ### Handling Behavior Errors
212
+
213
+ ```ruby
214
+ schema = FakeDataDSL.load('flaky_api.dsl')
215
+
216
+ begin
217
+ data = schema.generate
218
+ process(data)
219
+
220
+ rescue FakeDataDSL::Errors::SimulatedFailure
221
+ # Handle @failure behavior
222
+ puts "Service temporarily unavailable"
223
+
224
+ rescue FakeDataDSL::Errors::SimulatedConnectionDrop
225
+ # Handle @close_connection behavior
226
+ puts "Connection lost"
227
+
228
+ rescue FakeDataDSL::Errors::SimulatedError => e
229
+ # Handle @simulate_error behavior
230
+ puts "HTTP #{e.status_code}: #{e.message}"
231
+
232
+ rescue FakeDataDSL::Errors::LatencyLimitError => e
233
+ # Handle latency exceeding limits
234
+ puts "Request timed out"
235
+ end
236
+ ```
237
+
238
+ ### Error Types
239
+
240
+ | Behavior | Error Class |
241
+ |----------|-------------|
242
+ | `@failure` | `SimulatedFailure` |
243
+ | `@close_connection` | `SimulatedConnectionDrop` |
244
+ | `@simulate_error` | `SimulatedError` |
245
+ | `@latency` (over limit) | `LatencyLimitError` |
246
+
247
+ ### Testing with Errors
248
+
249
+ ```ruby
250
+ RSpec.describe "API Client" do
251
+ let(:schema) { FakeDataDSL.load('flaky_api.dsl') }
252
+
253
+ it "handles failures gracefully" do
254
+ # Force failure mode
255
+ allow_any_instance_of(FakeDataDSL::Behaviors::Failure)
256
+ .to receive(:should_apply?).and_return(true)
257
+
258
+ expect { schema.generate }
259
+ .to raise_error(FakeDataDSL::Errors::SimulatedFailure)
260
+ end
261
+
262
+ it "retries on connection drops" do
263
+ client = APIClient.new
264
+ allow(client).to receive(:fetch)
265
+ .and_raise(FakeDataDSL::Errors::SimulatedConnectionDrop)
266
+ .once
267
+ .and_call_original
268
+
269
+ result = client.fetch_with_retry
270
+ expect(result).to be_present
271
+ end
272
+ end
273
+ ```
274
+
275
+ ---
276
+
277
+ ## Behavior Configuration
278
+
279
+ ### Global Settings
280
+
281
+ ```ruby
282
+ FakeDataDSL.configure do |config|
283
+ # Maximum allowed latency
284
+ config.limits.max_latency_ms = 5000 # 5 seconds
285
+
286
+ # Disable all behaviors (for certain tests)
287
+ config.behaviors_enabled = false
288
+ end
289
+ ```
290
+
291
+ ### Disabling Behaviors
292
+
293
+ ```ruby
294
+ # Globally
295
+ FakeDataDSL.configure { |c| c.behaviors_enabled = false }
296
+
297
+ # Per generation
298
+ schema.generate(behaviors: false)
299
+ ```
300
+
301
+ ---
302
+
303
+ ## Use Cases
304
+
305
+ ### Load Testing
306
+
307
+ ```dsl
308
+ LoadTestAPI:
309
+ @latency 50..2000ms # Variable latency
310
+
311
+ data: array(Item, 10..100)
312
+ ```
313
+
314
+ ### Chaos Engineering
315
+
316
+ ```dsl
317
+ ChaosAPI:
318
+ @latency 100..5000ms
319
+ @failure 10%
320
+ @close_connection 5%
321
+ @simulate_error 500 3%
322
+ @simulate_error 503 2%
323
+ @partial_data 15%
324
+
325
+ data: object
326
+ ```
327
+
328
+ ### Integration Testing
329
+
330
+ ```dsl
331
+ ThirdPartyAPI:
332
+ @latency 200..1000ms # Realistic external API latency
333
+ @failure 1% # Occasional failures
334
+ @simulate_error 429 5% # Rate limiting
335
+
336
+ data: object
337
+ ```
338
+
339
+ ---
340
+
341
+ ## Next Steps
342
+
343
+ - [Latency Simulation](latency.md) - Detailed latency guide
344
+ - [Failure Simulation](failure.md) - Failure testing guide
345
+ - [Custom Behaviors](custom.md) - Creating your own behaviors
346
+