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,125 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Synthra
|
|
4
|
+
module Types
|
|
5
|
+
module AddressLocation
|
|
6
|
+
# Address type
|
|
7
|
+
class Address < Base
|
|
8
|
+
def generate_random(rng, context, args)
|
|
9
|
+
include_country = args[:include_country] || false
|
|
10
|
+
|
|
11
|
+
adapter = faker_adapter(context)
|
|
12
|
+
if adapter
|
|
13
|
+
if include_country
|
|
14
|
+
adapter.full_address
|
|
15
|
+
|
|
16
|
+
else
|
|
17
|
+
"#{adapter.street_address}, #{adapter.city}, #{adapter.state_abbr} #{adapter.zip_code}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
else
|
|
21
|
+
if include_country
|
|
22
|
+
Faker::Address.full_address
|
|
23
|
+
else
|
|
24
|
+
"#{Faker::Address.street_address}, #{Faker::Address.city}, #{Faker::Address.state_abbr} #{Faker::Address.zip_code}"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
rescue StandardError
|
|
30
|
+
rng.sample([
|
|
31
|
+
"123 Main St, New York, NY 10001",
|
|
32
|
+
"456 Oak Avenue, Los Angeles, CA 90001",
|
|
33
|
+
"789 Elm Street, Chicago, IL 60601"
|
|
34
|
+
])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def generate_edge(rng, context, args)
|
|
39
|
+
["", "123 Main St", "PO Box 123", "Apt 4B, 123 Main St"].sample(random: rng.instance_variable_get(:@random))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_invalid(rng, context, args)
|
|
43
|
+
[nil, 123, [], {}, true].sample(random: rng.instance_variable_get(:@random))
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# AddressLine2 type
|
|
48
|
+
class AddressLine2 < Base
|
|
49
|
+
ADDRESS_LINE2_PREFIXES = ["Apt", "Suite", "Unit", "Floor", "Room", "Building", "Tower"].freeze
|
|
50
|
+
ADDRESS_LINE2_SUFFIXES = ["A", "B", "C", "1", "2", "3", "101", "202", "303"].freeze
|
|
51
|
+
|
|
52
|
+
def generate_random(rng, context, args)
|
|
53
|
+
prefix = rng.sample(ADDRESS_LINE2_PREFIXES)
|
|
54
|
+
suffix = rng.sample(ADDRESS_LINE2_SUFFIXES)
|
|
55
|
+
"#{prefix} #{suffix}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def generate_edge(rng, context, args)
|
|
59
|
+
["", "Apt 0", "Suite 9999", "Unit A"].sample(random: rng.instance_variable_get(:@random))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def generate_invalid(rng, context, args)
|
|
63
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# StreetName type
|
|
68
|
+
class StreetName < Base
|
|
69
|
+
def generate_random(rng, context, args)
|
|
70
|
+
adapter = faker_adapter(context)
|
|
71
|
+
if adapter
|
|
72
|
+
adapter.street_name
|
|
73
|
+
|
|
74
|
+
else
|
|
75
|
+
Faker::Address.street_name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
rescue StandardError
|
|
79
|
+
rng.sample(["Main St", "Oak Ave", "Park Blvd", "First St", "Second Ave"])
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def generate_edge(rng, context, args)
|
|
84
|
+
["", "A", "Very Long Street Name That Exceeds Normal Limits"].sample(random: rng.instance_variable_get(:@random))
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def generate_invalid(rng, context, args)
|
|
88
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# StreetNumber type
|
|
93
|
+
class StreetNumber < Base
|
|
94
|
+
def generate_random(rng, context, args)
|
|
95
|
+
rng.int(1, 9999).to_s
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def generate_edge(rng, context, args)
|
|
99
|
+
["0", "1", "9999", "10000"].sample(random: rng.instance_variable_get(:@random))
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def generate_invalid(rng, context, args)
|
|
103
|
+
[nil, "not a number", [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# StreetSuffix type
|
|
108
|
+
class StreetSuffix < Base
|
|
109
|
+
SUFFIXES = ["St", "Ave", "Blvd", "Rd", "Dr", "Ln", "Ct", "Pl", "Way", "Pkwy"].freeze
|
|
110
|
+
|
|
111
|
+
def generate_random(rng, context, args)
|
|
112
|
+
rng.sample(SUFFIXES)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def generate_edge(rng, context, args)
|
|
116
|
+
["", "St", "Ave"].sample(random: rng.instance_variable_get(:@random))
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def generate_invalid(rng, context, args)
|
|
120
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Synthra
|
|
4
|
+
module Types
|
|
5
|
+
module AddressLocation
|
|
6
|
+
# AirportName type
|
|
7
|
+
class AirportName < Base
|
|
8
|
+
def generate_random(rng, context, args)
|
|
9
|
+
adapter = faker_adapter(context)
|
|
10
|
+
if adapter && adapter.respond_to?(:airport_name)
|
|
11
|
+
adapter.airport_name
|
|
12
|
+
|
|
13
|
+
else
|
|
14
|
+
# Fallback to common airport names
|
|
15
|
+
rng.sample([
|
|
16
|
+
"John F. Kennedy International Airport",
|
|
17
|
+
"Los Angeles International Airport",
|
|
18
|
+
"Heathrow Airport",
|
|
19
|
+
"Charles de Gaulle Airport",
|
|
20
|
+
"Dubai International Airport"
|
|
21
|
+
])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
rescue StandardError
|
|
25
|
+
rng.sample([
|
|
26
|
+
"John F. Kennedy International Airport",
|
|
27
|
+
"Los Angeles International Airport",
|
|
28
|
+
"Heathrow Airport"
|
|
29
|
+
])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def generate_edge(rng, context, args)
|
|
34
|
+
["", "A", "Very Long Airport Name"].sample(random: rng.instance_variable_get(:@random))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def generate_invalid(rng, context, args)
|
|
38
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# AirportContinent type
|
|
43
|
+
class AirportContinent < Base
|
|
44
|
+
CONTINENTS = ["North America", "South America", "Europe", "Asia", "Africa", "Australia", "Antarctica"].freeze
|
|
45
|
+
|
|
46
|
+
def generate_random(rng, context, args)
|
|
47
|
+
rng.sample(CONTINENTS)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def generate_edge(rng, context, args)
|
|
51
|
+
["", "Antarctica"].sample(random: rng.instance_variable_get(:@random))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def generate_invalid(rng, context, args)
|
|
55
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# AirportCountryCode type
|
|
60
|
+
class AirportCountryCode < Base
|
|
61
|
+
def generate_random(rng, context, args)
|
|
62
|
+
adapter = faker_adapter(context)
|
|
63
|
+
if adapter
|
|
64
|
+
adapter.country_code
|
|
65
|
+
|
|
66
|
+
else
|
|
67
|
+
Faker::Address.country_code
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
rescue StandardError
|
|
71
|
+
rng.sample(["US", "GB", "CA", "AU", "DE"])
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def generate_edge(rng, context, args)
|
|
76
|
+
["", "US", "XX"].sample(random: rng.instance_variable_get(:@random))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def generate_invalid(rng, context, args)
|
|
80
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# AirportElevation type
|
|
85
|
+
class AirportElevation < Base
|
|
86
|
+
def generate_random(rng, context, args)
|
|
87
|
+
rng.int(-100, 15000) # Elevation in feet (some airports below sea level)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def generate_edge(rng, context, args)
|
|
91
|
+
[-100, 0, 15000].sample(random: rng.instance_variable_get(:@random))
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def generate_invalid(rng, context, args)
|
|
95
|
+
[nil, "not a number", [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# AirportGpsCode type
|
|
100
|
+
class AirportGpsCode < Base
|
|
101
|
+
def generate_random(rng, context, args)
|
|
102
|
+
# GPS codes are typically 4-6 alphanumeric characters
|
|
103
|
+
chars = ('A'..'Z').to_a + ('0'..'9').to_a
|
|
104
|
+
length = rng.int(4, 6)
|
|
105
|
+
length.times.map { rng.sample(chars) }.join
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def generate_edge(rng, context, args)
|
|
109
|
+
["", "A", "ABCDEF"].sample(random: rng.instance_variable_get(:@random))
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def generate_invalid(rng, context, args)
|
|
113
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# AirportLatitude type
|
|
118
|
+
class AirportLatitude < Base
|
|
119
|
+
def generate_random(rng, context, args)
|
|
120
|
+
# Airport latitudes range from -90 to 90
|
|
121
|
+
(rng.rand * 180 - 90).round(6)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def generate_edge(rng, context, args)
|
|
125
|
+
[-90.0, 0.0, 90.0].sample(random: rng.instance_variable_get(:@random))
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def generate_invalid(rng, context, args)
|
|
129
|
+
[nil, "not a number", [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# AirportLongitude type
|
|
134
|
+
class AirportLongitude < Base
|
|
135
|
+
def generate_random(rng, context, args)
|
|
136
|
+
# Airport longitudes range from -180 to 180
|
|
137
|
+
(rng.rand * 360 - 180).round(6)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def generate_edge(rng, context, args)
|
|
141
|
+
[-180.0, 0.0, 180.0].sample(random: rng.instance_variable_get(:@random))
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def generate_invalid(rng, context, args)
|
|
145
|
+
[nil, "not a number", [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# AirportMunicipality type
|
|
150
|
+
class AirportMunicipality < Base
|
|
151
|
+
def generate_random(rng, context, args)
|
|
152
|
+
adapter = faker_adapter(context)
|
|
153
|
+
if adapter
|
|
154
|
+
adapter.city
|
|
155
|
+
|
|
156
|
+
else
|
|
157
|
+
Faker::Address.city
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
rescue StandardError
|
|
161
|
+
rng.sample(["New York", "Los Angeles", "Chicago"])
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def generate_edge(rng, context, args)
|
|
166
|
+
["", "A"].sample(random: rng.instance_variable_get(:@random))
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def generate_invalid(rng, context, args)
|
|
170
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# AirportRegionCode type
|
|
175
|
+
class AirportRegionCode < Base
|
|
176
|
+
def generate_random(rng, context, args)
|
|
177
|
+
adapter = faker_adapter(context)
|
|
178
|
+
if adapter && adapter.respond_to?(:state)
|
|
179
|
+
adapter.state
|
|
180
|
+
|
|
181
|
+
else
|
|
182
|
+
rng.sample(["CA", "NY", "TX", "FL", "IL"])
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
rescue StandardError
|
|
186
|
+
rng.sample(["CA", "NY", "TX", "FL", "IL"])
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def generate_edge(rng, context, args)
|
|
191
|
+
["", "CA", "XX"].sample(random: rng.instance_variable_get(:@random))
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def generate_invalid(rng, context, args)
|
|
195
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Synthra
|
|
4
|
+
module Types
|
|
5
|
+
module AddressLocation
|
|
6
|
+
# BankCity type
|
|
7
|
+
class BankCity < Base
|
|
8
|
+
def generate_random(rng, context, args)
|
|
9
|
+
adapter = faker_adapter(context)
|
|
10
|
+
if adapter
|
|
11
|
+
adapter.city
|
|
12
|
+
|
|
13
|
+
else
|
|
14
|
+
Faker::Address.city
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
rescue StandardError
|
|
18
|
+
rng.sample(["New York", "Los Angeles", "Chicago"])
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def generate_edge(rng, context, args)
|
|
23
|
+
["", "A"].sample(random: rng.instance_variable_get(:@random))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def generate_invalid(rng, context, args)
|
|
27
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# BankCountryCode type
|
|
32
|
+
class BankCountryCode < Base
|
|
33
|
+
def generate_random(rng, context, args)
|
|
34
|
+
adapter = faker_adapter(context)
|
|
35
|
+
if adapter
|
|
36
|
+
adapter.country_code
|
|
37
|
+
|
|
38
|
+
else
|
|
39
|
+
Faker::Address.country_code
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
rescue StandardError
|
|
43
|
+
rng.sample(["US", "GB", "CA", "AU", "DE"])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def generate_edge(rng, context, args)
|
|
48
|
+
["", "US", "XX"].sample(random: rng.instance_variable_get(:@random))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def generate_invalid(rng, context, args)
|
|
52
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# BankStreetAddress type
|
|
57
|
+
class BankStreetAddress < Base
|
|
58
|
+
def generate_random(rng, context, args)
|
|
59
|
+
adapter = faker_adapter(context)
|
|
60
|
+
if adapter && adapter.respond_to?(:street_address)
|
|
61
|
+
adapter.street_address
|
|
62
|
+
|
|
63
|
+
else
|
|
64
|
+
Faker::Address.street_address
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
rescue StandardError
|
|
68
|
+
rng.sample(["123 Main St", "456 Oak Ave", "789 Elm St"])
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def generate_edge(rng, context, args)
|
|
73
|
+
["", "123 Main St"].sample(random: rng.instance_variable_get(:@random))
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def generate_invalid(rng, context, args)
|
|
77
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# BankState type
|
|
82
|
+
class BankState < Base
|
|
83
|
+
def generate_random(rng, context, args)
|
|
84
|
+
adapter = faker_adapter(context)
|
|
85
|
+
if adapter && adapter.respond_to?(:state)
|
|
86
|
+
adapter.state
|
|
87
|
+
|
|
88
|
+
else
|
|
89
|
+
Faker::Address.state
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
rescue StandardError
|
|
93
|
+
rng.sample(["California", "New York", "Texas"])
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def generate_edge(rng, context, args)
|
|
98
|
+
["", "CA"].sample(random: rng.instance_variable_get(:@random))
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def generate_invalid(rng, context, args)
|
|
102
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# HospitalCity type
|
|
107
|
+
class HospitalCity < Base
|
|
108
|
+
def generate_random(rng, context, args)
|
|
109
|
+
adapter = faker_adapter(context)
|
|
110
|
+
if adapter
|
|
111
|
+
adapter.city
|
|
112
|
+
|
|
113
|
+
else
|
|
114
|
+
Faker::Address.city
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
rescue StandardError
|
|
118
|
+
rng.sample(["New York", "Los Angeles", "Chicago"])
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def generate_edge(rng, context, args)
|
|
123
|
+
["", "A"].sample(random: rng.instance_variable_get(:@random))
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def generate_invalid(rng, context, args)
|
|
127
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# HospitalPostalCode type
|
|
132
|
+
class HospitalPostalCode < Base
|
|
133
|
+
def generate_random(rng, context, args)
|
|
134
|
+
adapter = faker_adapter(context)
|
|
135
|
+
if adapter
|
|
136
|
+
adapter.zip_code
|
|
137
|
+
|
|
138
|
+
else
|
|
139
|
+
Faker::Address.zip_code
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
rescue StandardError
|
|
143
|
+
rng.sample(["12345", "90210", "60601"])
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def generate_edge(rng, context, args)
|
|
148
|
+
["", "00000", "99999"].sample(random: rng.instance_variable_get(:@random))
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def generate_invalid(rng, context, args)
|
|
152
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# HospitalState type
|
|
157
|
+
class HospitalState < Base
|
|
158
|
+
def generate_random(rng, context, args)
|
|
159
|
+
adapter = faker_adapter(context)
|
|
160
|
+
if adapter && adapter.respond_to?(:state)
|
|
161
|
+
adapter.state
|
|
162
|
+
|
|
163
|
+
else
|
|
164
|
+
Faker::Address.state
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
rescue StandardError
|
|
168
|
+
rng.sample(["California", "New York", "Texas"])
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def generate_edge(rng, context, args)
|
|
173
|
+
["", "CA"].sample(random: rng.instance_variable_get(:@random))
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def generate_invalid(rng, context, args)
|
|
177
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# HospitalStreetAddress type
|
|
182
|
+
class HospitalStreetAddress < Base
|
|
183
|
+
def generate_random(rng, context, args)
|
|
184
|
+
adapter = faker_adapter(context)
|
|
185
|
+
if adapter && adapter.respond_to?(:street_address)
|
|
186
|
+
adapter.street_address
|
|
187
|
+
|
|
188
|
+
else
|
|
189
|
+
Faker::Address.street_address
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
rescue StandardError
|
|
193
|
+
rng.sample(["123 Main St", "456 Oak Ave", "789 Elm St"])
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def generate_edge(rng, context, args)
|
|
198
|
+
["", "123 Main St"].sample(random: rng.instance_variable_get(:@random))
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def generate_invalid(rng, context, args)
|
|
202
|
+
[nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|