mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-14 13:16:28 +08:00
93 lines
No EOL
2.2 KiB
Ruby
93 lines
No EOL
2.2 KiB
Ruby
module ProtocolsExporter
|
|
def export_protocols(protocols)
|
|
protocols_json = []
|
|
protocols.each do |protocol|
|
|
protocols_json << export_protocol(protocol)
|
|
end
|
|
|
|
return protocols_json
|
|
end
|
|
|
|
private
|
|
|
|
def export_protocol(protocol)
|
|
protocol_json = protocol.as_json(only: [
|
|
:id,
|
|
:name,
|
|
:description,
|
|
:authors,
|
|
:created_at,
|
|
:updated_at
|
|
])
|
|
|
|
# "Inject" module's name
|
|
if protocol.in_module? && protocol.name.blank?
|
|
protocol_json["name"] = protocol.my_module.name
|
|
end
|
|
|
|
protocol_json["steps"] = []
|
|
protocol.steps.find_each do |step|
|
|
step_json = step.as_json(only: [
|
|
:id,
|
|
:name,
|
|
:description,
|
|
:position
|
|
])
|
|
|
|
step_json["tables"] = []
|
|
step.tables.find_each do |table|
|
|
table_json = table.as_json(only: [ :id ])
|
|
table_json["contents"] = table.contents.unpack("H*")[0]
|
|
|
|
step_json["tables"] << table_json
|
|
end
|
|
|
|
step_json["assets"] = []
|
|
step.assets.find_each do |asset|
|
|
asset_json = asset.as_json(only: [
|
|
:id,
|
|
:file_file_name,
|
|
:file_content_type
|
|
])
|
|
asset_json["fileName"] = asset_json.delete("file_file_name")
|
|
asset_json["fileType"] = asset_json.delete("file_content_type")
|
|
|
|
# Retrieve file contents
|
|
if asset.file.is_stored_on_s3?
|
|
file = open(asset.presigned_url, "rb")
|
|
else
|
|
file = File.open(asset.file.path, "rb")
|
|
end
|
|
asset_json["bytes"] = Base64.encode64(file.read)
|
|
file.close
|
|
|
|
step_json["assets"] << asset_json
|
|
end
|
|
|
|
step_json["checklists"] = []
|
|
step.checklists.find_each do |checklist|
|
|
checklist_json = checklist.as_json(only: [
|
|
:id,
|
|
:name
|
|
])
|
|
|
|
checklist_json["items"] = []
|
|
checklist.checklist_items.find_each do |item|
|
|
item_json = item.as_json(only: [
|
|
:id,
|
|
:text,
|
|
:position
|
|
])
|
|
|
|
checklist_json["items"] << item_json
|
|
end
|
|
|
|
step_json["checklists"] << checklist_json
|
|
end
|
|
|
|
protocol_json["steps"] << step_json
|
|
end
|
|
|
|
return protocol_json
|
|
end
|
|
end |