Skip to content

Commit a3266f4

Browse files
Record Fields (#22)
* Record Fields * 0.0.13
1 parent cd3ed33 commit a3266f4

File tree

4 files changed

+71
-10
lines changed

4 files changed

+71
-10
lines changed

lib/manifold/services/vector_service.rb

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,35 @@ def load_vector_config(vector_name)
3232
private
3333

3434
def transform_attributes_to_schema(attributes)
35-
attributes.map do |name, type_str|
36-
type, mode = parse_type_and_mode(type_str)
37-
{
38-
"name" => name,
39-
"type" => type.upcase,
40-
"mode" => mode
41-
}
35+
attributes.map { |name, type_def| transform_field(name, type_def) }
36+
end
37+
38+
def transform_field(name, type_def)
39+
if type_def.is_a?(Hash)
40+
transform_record_field(name, type_def)
41+
else
42+
transform_scalar_field(name, type_def)
4243
end
4344
end
4445

46+
def transform_record_field(name, type_def)
47+
{
48+
"name" => name,
49+
"type" => "RECORD",
50+
"mode" => "NULLABLE",
51+
"fields" => transform_attributes_to_schema(type_def)
52+
}
53+
end
54+
55+
def transform_scalar_field(name, type_def)
56+
type, mode = parse_type_and_mode(type_def)
57+
{
58+
"name" => name,
59+
"type" => type.upcase,
60+
"mode" => mode
61+
}
62+
end
63+
4564
def parse_type_and_mode(type_str)
4665
type, mode = type_str.split(":")
4766
mode = mode&.upcase || "NULLABLE"

lib/manifold/templates/vector_template.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ attributes:
66
# created_at: TIMESTAMP
77
# status: STRING
88
# names: STRING:REPEATED
9+
# key_values:
10+
# first_key: STRING
11+
# second_key: STRING:REQUIRED
912

1013
# Optionally, reference a view specifying how to select vector dimensions
1114
# merge:

lib/manifold/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module Manifold
4-
VERSION = "0.0.12"
4+
VERSION = "0.0.13"
55
end

spec/manifold/services/vector_service_spec.rb

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,19 @@
1515
"url" => "string",
1616
"created_at" => "timestamp",
1717
"tags" => "string:repeated",
18-
"email" => "string:required"
18+
"email" => "string:required",
19+
"metadata" => {
20+
"source" => "string",
21+
"last_modified" => "timestamp",
22+
"settings" => {
23+
"enabled" => "boolean",
24+
"flags" => "string:repeated"
25+
}
26+
},
27+
"key_values" => {
28+
"first_key" => "string",
29+
"second_key" => "string:required"
30+
}
1931
}
2032
}
2133
end
@@ -29,7 +41,34 @@
2941
{ "name" => "url", "type" => "STRING", "mode" => "NULLABLE" },
3042
{ "name" => "created_at", "type" => "TIMESTAMP", "mode" => "NULLABLE" },
3143
{ "name" => "tags", "type" => "STRING", "mode" => "REPEATED" },
32-
{ "name" => "email", "type" => "STRING", "mode" => "REQUIRED" }
44+
{ "name" => "email", "type" => "STRING", "mode" => "REQUIRED" },
45+
{
46+
"name" => "metadata",
47+
"type" => "RECORD",
48+
"mode" => "NULLABLE",
49+
"fields" => [
50+
{ "name" => "source", "type" => "STRING", "mode" => "NULLABLE" },
51+
{ "name" => "last_modified", "type" => "TIMESTAMP", "mode" => "NULLABLE" },
52+
{
53+
"name" => "settings",
54+
"type" => "RECORD",
55+
"mode" => "NULLABLE",
56+
"fields" => [
57+
{ "name" => "enabled", "type" => "BOOLEAN", "mode" => "NULLABLE" },
58+
{ "name" => "flags", "type" => "STRING", "mode" => "REPEATED" }
59+
]
60+
}
61+
]
62+
},
63+
{
64+
"name" => "key_values",
65+
"type" => "RECORD",
66+
"mode" => "NULLABLE",
67+
"fields" => [
68+
{ "name" => "first_key", "type" => "STRING", "mode" => "NULLABLE" },
69+
{ "name" => "second_key", "type" => "STRING", "mode" => "REQUIRED" }
70+
]
71+
}
3372
]
3473
}
3574
end

0 commit comments

Comments
 (0)