Handle JSON string item attributes in foodcourt menu

This commit is contained in:
Zin Bo Thit
2026-09-03 16:31:22 +06:30
parent 75d32e4dad
commit be9f360896

View File

@@ -1,3 +1,19 @@
normalize_ids = lambda do |value|
case value
when Array
value
when String
begin
parsed = JSON.parse(value)
parsed.is_a?(Array) ? parsed : []
rescue JSON::ParserError
[]
end
else
[]
end
end
json.id menu.id
json.name menu.name
json.is_ordering menu.is_ordering
@@ -40,16 +56,18 @@ if (menu.menu_categories)
# Format for attributes json
attr_format = []
# Format for attributes json
if item.item_attributes.count > 0
item_attributes = item.item_attributes.map(&:to_s)
item_attributes = normalize_ids.call(item.item_attributes)
if item_attributes.count > 0
item_attributes = item_attributes.map(&:to_s)
attr_format = @item_attributes.select { |x| item_attributes.include?(x.id.to_s) }.group_by {|att| att.attribute_type.strip }.map { |type, values| {type: type, values: values.map { |x| x.name.strip } } }
end
# Format for option json
opt_format = []
# Format for attributes json
if item.item_options.count > 0
item_options = item.item_options.map(&:to_s)
item_options = normalize_ids.call(item.item_options)
if item_options.count > 0
item_options = item_options.map(&:to_s)
opt_format = @item_options.select { |x| item_options.include?(x.id.to_s) }.group_by {|opt| opt.option_type.strip }.map { |type, values| {type: type, values: values.map { |x| x.name.strip } } }
end
@@ -84,7 +102,7 @@ if (menu.menu_categories)
json.instances item.menu_item_instances do |is|
if is.is_available
# Convert id to name for attributes
item_attributes = is.item_attributes.map(&:to_s)
item_attributes = normalize_ids.call(is.item_attributes).map(&:to_s)
instance_attr = @item_attributes.select{ |x| item_attributes.include?(x.id.to_s) }.pluck(:name)
json.id is.id