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 @@ + + + Product Catalog + + + +

Product Catalog

+ + + {% let products = data_objects:get_products() %} +

All Products

+ {% for product in products %} +
+

{{ product.name }}

+
{{ data_objects:format_price(product.price) }}
+
+ Features: + +
+
+ {% if product.available %} + In Stock + {% else %} + Out of Stock + {% endif %} +
+
+ {% endfor %} + + + {% let available_products = data_objects:get_available_products() %} +

Available Products ({{ available_products.len() }})

+ {% for product in available_products %} +
+

{{ product.name }}

+
{{ data_objects:format_price(product.price) }}
+
+ {% endfor %} + + +
+ Total Catalog Value: {{ data_objects:format_price(data_objects:calculate_total_price()) }} +
+ + + {% let user = data_objects:get_user() %} +
+

User Information

+

Name: {{ user.name }}

+

Email: {{ user.email }}

+

Role: {{ user.role }}

+

Theme: {{ user.settings.theme }}

+ +

Order History

+ +
+ + +

All Features

+ + + \ No newline at end of file