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,447 @@
1
+ # Terraform/IaC Export
2
+
3
+ FakeDataDSL can export your schemas to **Terraform HCL configurations**, generating infrastructure definitions for AWS DynamoDB, RDS PostgreSQL, S3, and more.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Export single schema
9
+ fake_data_dsl export schemas/user.dsl -f terraform -o main.tf
10
+
11
+ # Export all schemas
12
+ fake_data_dsl export schemas/ --all -f terraform -o infrastructure/
13
+ ```
14
+
15
+ ```ruby
16
+ # Ruby API
17
+ schema = FakeDataDSL.load("schemas/user.dsl")
18
+ terraform = FakeDataDSL::Export::Terraform.new(schema).export
19
+ puts terraform
20
+ ```
21
+
22
+ ## Basic Usage
23
+
24
+ ### Single Schema Export
25
+
26
+ ```ruby
27
+ # Input schema (user.dsl)
28
+ # User:
29
+ # id: uuid @key
30
+ # email: email @unique @indexed
31
+ # name: name
32
+ # role: enum(user, admin)
33
+ # created_at: timestamp
34
+
35
+ schema = FakeDataDSL.load("schemas/user.dsl")
36
+ exporter = FakeDataDSL::Export::Terraform.new(schema)
37
+ puts exporter.export
38
+ ```
39
+
40
+ Output:
41
+
42
+ ```hcl
43
+ # Generated by FakeDataDSL
44
+ # Schema: User
45
+
46
+ resource "aws_dynamodb_table" "users" {
47
+ name = "users"
48
+ billing_mode = "PAY_PER_REQUEST"
49
+ hash_key = "id"
50
+
51
+ attribute {
52
+ name = "id"
53
+ type = "S"
54
+ }
55
+
56
+ attribute {
57
+ name = "email"
58
+ type = "S"
59
+ }
60
+
61
+ global_secondary_index {
62
+ name = "email-index"
63
+ hash_key = "email"
64
+ projection_type = "ALL"
65
+ }
66
+
67
+ tags = {
68
+ ManagedBy = "FakeDataDSL"
69
+ Schema = "User"
70
+ }
71
+ }
72
+ ```
73
+
74
+ ## Supported Providers
75
+
76
+ ### AWS DynamoDB
77
+
78
+ ```ruby
79
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
80
+ provider: :aws_dynamodb
81
+ )
82
+ ```
83
+
84
+ Features:
85
+ - Hash and range keys
86
+ - Global Secondary Indexes
87
+ - Local Secondary Indexes
88
+ - TTL configuration
89
+ - Stream configuration
90
+
91
+ ### AWS RDS PostgreSQL
92
+
93
+ ```ruby
94
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
95
+ provider: :aws_rds_postgresql
96
+ )
97
+ ```
98
+
99
+ Output:
100
+
101
+ ```hcl
102
+ resource "aws_db_instance" "main" {
103
+ identifier = "fake-data-db"
104
+ engine = "postgres"
105
+ engine_version = "15.4"
106
+ instance_class = "db.t3.micro"
107
+ allocated_storage = 20
108
+
109
+ db_name = "fake_data"
110
+ username = var.db_username
111
+ password = var.db_password
112
+ }
113
+
114
+ resource "postgresql_schema" "users" {
115
+ name = "public"
116
+ database = aws_db_instance.main.db_name
117
+ }
118
+
119
+ resource "postgresql_table" "users" {
120
+ name = "users"
121
+ schema = postgresql_schema.users.name
122
+
123
+ column {
124
+ name = "id"
125
+ type = "uuid"
126
+ default = "gen_random_uuid()"
127
+ nullable = false
128
+ }
129
+
130
+ column {
131
+ name = "email"
132
+ type = "varchar(255)"
133
+ nullable = false
134
+ }
135
+
136
+ column {
137
+ name = "name"
138
+ type = "varchar(255)"
139
+ nullable = false
140
+ }
141
+
142
+ primary_key {
143
+ columns = ["id"]
144
+ }
145
+
146
+ unique {
147
+ columns = ["email"]
148
+ }
149
+ }
150
+ ```
151
+
152
+ ### AWS S3 (for data storage)
153
+
154
+ ```ruby
155
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
156
+ provider: :aws_s3
157
+ )
158
+ ```
159
+
160
+ Output:
161
+
162
+ ```hcl
163
+ resource "aws_s3_bucket" "users_data" {
164
+ bucket = "users-data-${var.environment}"
165
+
166
+ tags = {
167
+ Schema = "User"
168
+ }
169
+ }
170
+
171
+ resource "aws_s3_bucket_versioning" "users_data" {
172
+ bucket = aws_s3_bucket.users_data.id
173
+ versioning_configuration {
174
+ status = "Enabled"
175
+ }
176
+ }
177
+ ```
178
+
179
+ ### Google Cloud (Firestore)
180
+
181
+ ```ruby
182
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
183
+ provider: :gcp_firestore
184
+ )
185
+ ```
186
+
187
+ ### Azure (Cosmos DB)
188
+
189
+ ```ruby
190
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
191
+ provider: :azure_cosmosdb
192
+ )
193
+ ```
194
+
195
+ ## Configuration Options
196
+
197
+ ### Basic Options
198
+
199
+ ```ruby
200
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
201
+ provider: :aws_dynamodb,
202
+ region: "us-east-1",
203
+ environment: "production",
204
+ prefix: "myapp",
205
+ tags: {
206
+ Project: "MyProject",
207
+ Team: "Backend"
208
+ }
209
+ )
210
+ ```
211
+
212
+ ### DynamoDB-Specific
213
+
214
+ ```ruby
215
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
216
+ provider: :aws_dynamodb,
217
+ billing_mode: "PROVISIONED", # or "PAY_PER_REQUEST"
218
+ read_capacity: 5,
219
+ write_capacity: 5,
220
+ enable_ttl: true,
221
+ ttl_attribute: "expires_at",
222
+ enable_streams: true,
223
+ stream_view_type: "NEW_AND_OLD_IMAGES"
224
+ )
225
+ ```
226
+
227
+ ### RDS-Specific
228
+
229
+ ```ruby
230
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
231
+ provider: :aws_rds_postgresql,
232
+ instance_class: "db.t3.medium",
233
+ allocated_storage: 100,
234
+ max_allocated_storage: 500,
235
+ multi_az: true,
236
+ backup_retention_period: 7
237
+ )
238
+ ```
239
+
240
+ ## Type Mapping
241
+
242
+ ### DSL to DynamoDB
243
+
244
+ | DSL Type | DynamoDB Type |
245
+ |----------|---------------|
246
+ | `uuid`, `text`, `email` | `S` (String) |
247
+ | `number`, `integer` | `N` (Number) |
248
+ | `boolean` | `BOOL` |
249
+ | `array(...)` | `L` (List) |
250
+ | `json`, `object` | `M` (Map) |
251
+ | `binary` | `B` (Binary) |
252
+
253
+ ### DSL to PostgreSQL
254
+
255
+ | DSL Type | PostgreSQL Type |
256
+ |----------|-----------------|
257
+ | `uuid` | `uuid` |
258
+ | `text`, `name` | `varchar(255)` |
259
+ | `paragraph` | `text` |
260
+ | `number` | `integer` |
261
+ | `float` | `double precision` |
262
+ | `money` | `numeric(10,2)` |
263
+ | `boolean` | `boolean` |
264
+ | `date` | `date` |
265
+ | `timestamp` | `timestamp with time zone` |
266
+ | `json` | `jsonb` |
267
+ | `array(text)` | `text[]` |
268
+
269
+ ## CLI Commands
270
+
271
+ ```bash
272
+ # Basic export
273
+ fake_data_dsl export schemas/ -f terraform -o main.tf
274
+
275
+ # With provider
276
+ fake_data_dsl export schemas/ -f terraform \
277
+ --provider aws_dynamodb \
278
+ -o dynamodb.tf
279
+
280
+ # With options
281
+ fake_data_dsl export schemas/ -f terraform \
282
+ --provider aws_rds_postgresql \
283
+ --region us-west-2 \
284
+ --environment staging \
285
+ -o rds.tf
286
+
287
+ # Multiple providers
288
+ fake_data_dsl export schemas/ -f terraform \
289
+ --provider aws_dynamodb,aws_s3 \
290
+ -o infrastructure/
291
+ ```
292
+
293
+ ## Multi-Schema Infrastructure
294
+
295
+ ### Export All Schemas
296
+
297
+ ```ruby
298
+ schemas = FakeDataDSL.load_all("schemas/")
299
+ exporter = FakeDataDSL::Export::Terraform.new(*schemas,
300
+ provider: :aws_dynamodb
301
+ )
302
+
303
+ File.write("main.tf", exporter.export)
304
+ ```
305
+
306
+ ### Separate Files
307
+
308
+ ```ruby
309
+ schemas = FakeDataDSL.load_all("schemas/")
310
+
311
+ schemas.each do |schema|
312
+ exporter = FakeDataDSL::Export::Terraform.new(schema)
313
+ File.write("terraform/#{schema.name.underscore}.tf", exporter.export)
314
+ end
315
+ ```
316
+
317
+ ### Modular Structure
318
+
319
+ ```ruby
320
+ exporter = FakeDataDSL::Export::Terraform.new(*schemas,
321
+ structure: :modular # Creates module structure
322
+ )
323
+
324
+ exporter.export_to_directory("terraform/")
325
+ # Creates:
326
+ # terraform/
327
+ # main.tf
328
+ # variables.tf
329
+ # outputs.tf
330
+ # modules/
331
+ # users/
332
+ # main.tf
333
+ # variables.tf
334
+ # orders/
335
+ # main.tf
336
+ # variables.tf
337
+ ```
338
+
339
+ ## Variables and Outputs
340
+
341
+ ### Generated Variables
342
+
343
+ ```hcl
344
+ # variables.tf
345
+ variable "environment" {
346
+ description = "Deployment environment"
347
+ type = string
348
+ default = "development"
349
+ }
350
+
351
+ variable "region" {
352
+ description = "AWS region"
353
+ type = string
354
+ default = "us-east-1"
355
+ }
356
+
357
+ variable "tags" {
358
+ description = "Common tags for all resources"
359
+ type = map(string)
360
+ default = {}
361
+ }
362
+ ```
363
+
364
+ ### Generated Outputs
365
+
366
+ ```hcl
367
+ # outputs.tf
368
+ output "users_table_arn" {
369
+ description = "ARN of the users DynamoDB table"
370
+ value = aws_dynamodb_table.users.arn
371
+ }
372
+
373
+ output "users_table_name" {
374
+ description = "Name of the users DynamoDB table"
375
+ value = aws_dynamodb_table.users.name
376
+ }
377
+ ```
378
+
379
+ ## API Reference
380
+
381
+ ### Terraform.new
382
+
383
+ ```ruby
384
+ FakeDataDSL::Export::Terraform.new(*schemas, options = {})
385
+ ```
386
+
387
+ **Parameters:**
388
+ - `schemas` - One or more Schema objects
389
+ - `options[:provider]` - Cloud provider
390
+ - `options[:region]` - Cloud region
391
+ - `options[:environment]` - Environment name
392
+ - `options[:prefix]` - Resource name prefix
393
+ - `options[:tags]` - Default tags
394
+ - `options[:structure]` - :flat or :modular
395
+
396
+ ### Terraform#export
397
+
398
+ ```ruby
399
+ exporter.export
400
+ # => String containing HCL configuration
401
+ ```
402
+
403
+ ### Terraform#export_to_directory
404
+
405
+ ```ruby
406
+ exporter.export_to_directory(path)
407
+ # Creates directory structure with .tf files
408
+ ```
409
+
410
+ ## Best Practices
411
+
412
+ ### 1. Use Modules for Reusability
413
+
414
+ ```ruby
415
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
416
+ structure: :modular,
417
+ module_source: "git::https://github.com/org/terraform-modules.git"
418
+ )
419
+ ```
420
+
421
+ ### 2. Environment Separation
422
+
423
+ ```ruby
424
+ %w[development staging production].each do |env|
425
+ exporter = FakeDataDSL::Export::Terraform.new(schema,
426
+ environment: env
427
+ )
428
+ File.write("environments/#{env}/main.tf", exporter.export)
429
+ end
430
+ ```
431
+
432
+ ### 3. Version Control Generated Files
433
+
434
+ Keep generated Terraform in version control but mark as generated:
435
+
436
+ ```hcl
437
+ # GENERATED FILE - DO NOT EDIT
438
+ # Generated by FakeDataDSL from schemas/user.dsl
439
+ # Regenerate with: fake_data_dsl export schemas/user.dsl -f terraform
440
+ ```
441
+
442
+ ## See Also
443
+
444
+ - [OpenAPI Export](OPENAPI_EXPORT.md)
445
+ - [Protobuf Export](PROTOBUF_EXPORT.md)
446
+ - [Migration Generator](MIGRATION_GENERATOR.md)
447
+ - [DSL Reference](dsl_reference.md)