diff --git a/rhai_engine/src/terra_integration/scripts/data_objects.rhai b/rhai_engine/src/terra_integration/scripts/data_objects.rhai new file mode 100644 index 0000000..cd10860 --- /dev/null +++ b/rhai_engine/src/terra_integration/scripts/data_objects.rhai @@ -0,0 +1,146 @@ +// Data objects for Terra template integration +// This script defines complex objects that can be accessed from Terra templates + +// Create a products catalog object +fn create_products() { + let products = [ + #{ + id: 1, + name: "Laptop", + price: 1299.99, + features: [ + "16GB RAM", + "512GB SSD", + "Intel i7 processor" + ], + available: true + }, + #{ + id: 2, + name: "Smartphone", + price: 899.99, + features: [ + "6.7 inch display", + "128GB storage", + "12MP camera" + ], + available: true + }, + #{ + id: 3, + name: "Tablet", + price: 499.99, + features: [ + "10.9 inch display", + "64GB storage", + "A14 chip" + ], + available: false + }, + #{ + id: 4, + name: "Headphones", + price: 249.99, + features: [ + "Noise cancellation", + "Wireless", + "20h battery life" + ], + available: true + } + ]; + + products +} + +// Get all products +fn get_products() { + create_products() +} + +// Get available products only +fn get_available_products() { + let all_products = create_products(); + let available = []; + + for product in all_products { + if product.available { + available.push(product); + } + } + + available +} + +// Get a specific product by ID +fn get_product_by_id(id) { + let products = create_products(); + + // Convert ID to integer to ensure type compatibility + let search_id = id.to_int(); + + for product in products { + if product.id == search_id { + return product; + } + } + + #{} // Return empty object if not found +} + +// Calculate total price of all products +fn calculate_total_price() { + let products = create_products(); + let total = 0.0; + + for product in products { + total += product.price; + } + + total +} + +// Format price with currency symbol +fn format_price(price) { + "$" + price.to_string() +} + +// Get all product features as a flattened array +fn get_all_features() { + let products = create_products(); + let all_features = []; + + for product in products { + for feature in product.features { + all_features.push(feature); + } + } + + all_features +} + +// Get a user object +fn get_user() { + #{ + name: "John Doe", + email: "john@example.com", + role: "admin", + settings: #{ + theme: "dark", + notifications: true, + language: "en" + }, + orders: [ + #{ + id: "ORD-001", + date: "2025-03-25", + total: 1299.99 + }, + #{ + id: "ORD-002", + date: "2025-04-01", + total: 249.99 + } + ] + } +} \ No newline at end of file diff --git a/rhai_engine/src/terra_integration/templates/product_catalog.terra b/rhai_engine/src/terra_integration/templates/product_catalog.terra new file mode 100644 index 0000000..13cfe91 --- /dev/null +++ b/rhai_engine/src/terra_integration/templates/product_catalog.terra @@ -0,0 +1,114 @@ + +
+