Handle JSON string item attributes in foodcourt menu
This commit is contained in:
@@ -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.id menu.id
|
||||||
json.name menu.name
|
json.name menu.name
|
||||||
json.is_ordering menu.is_ordering
|
json.is_ordering menu.is_ordering
|
||||||
@@ -40,16 +56,18 @@ if (menu.menu_categories)
|
|||||||
# Format for attributes json
|
# Format for attributes json
|
||||||
attr_format = []
|
attr_format = []
|
||||||
# Format for attributes json
|
# Format for attributes json
|
||||||
if item.item_attributes.count > 0
|
item_attributes = normalize_ids.call(item.item_attributes)
|
||||||
item_attributes = item.item_attributes.map(&:to_s)
|
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 } } }
|
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
|
end
|
||||||
|
|
||||||
# Format for option json
|
# Format for option json
|
||||||
opt_format = []
|
opt_format = []
|
||||||
# Format for attributes json
|
# Format for attributes json
|
||||||
if item.item_options.count > 0
|
item_options = normalize_ids.call(item.item_options)
|
||||||
item_options = item.item_options.map(&:to_s)
|
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 } } }
|
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
|
end
|
||||||
|
|
||||||
@@ -84,7 +102,7 @@ if (menu.menu_categories)
|
|||||||
json.instances item.menu_item_instances do |is|
|
json.instances item.menu_item_instances do |is|
|
||||||
if is.is_available
|
if is.is_available
|
||||||
# Convert id to name for attributes
|
# 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)
|
instance_attr = @item_attributes.select{ |x| item_attributes.include?(x.id.to_s) }.pluck(:name)
|
||||||
|
|
||||||
json.id is.id
|
json.id is.id
|
||||||
|
|||||||
Reference in New Issue
Block a user