Skip to content

Commit

Permalink
Merge 73e7c42 into 6b28b8d
Browse files Browse the repository at this point in the history
  • Loading branch information
relf committed Sep 23, 2020
2 parents 6b28b8d + 73e7c42 commit 0d5e9d2
Show file tree
Hide file tree
Showing 9 changed files with 91 additions and 5 deletions.
2 changes: 2 additions & 0 deletions app/controllers/api/v1/exports_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ def new
Rails.logger.warn "CMDOWS export warning: #{e}"
end
send_data content, filename: filename, type: "application/xml"
elsif format == "mdajson"
json_response mda, :ok, serializer: AnalysisAttrsSerializer
else
json_response({ message: "Export format #{format} not knwon" }, :bad_request)
end
Expand Down
19 changes: 19 additions & 0 deletions app/lib/whats_opt/mdajson_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# frozen_string_literal: true

require "json"

module WhatsOpt
class MdajsonGenerator

def initialize(mda)
@mda = mda
end

def generate
as_json = AnalysisAttrsSerializer.new(@mda).as_json

as_json.to_json
end

end
end
5 changes: 4 additions & 1 deletion app/models/analysis.rb
Original file line number Diff line number Diff line change
Expand Up @@ -659,9 +659,12 @@ def ensure_ancestry_for_sub_analyses
def self.create_nested_analyses(mda_attrs)
# Rails.logger.info "################ CREATE NESTED #{mda_attrs["name"]}"
subs = []
# create sub analyses
# manage metamodel and sub analyses
if mda_attrs["disciplines_attributes"]
mda_attrs["disciplines_attributes"].each.with_index do |disc, i|
# when creating an analysis from params, just disable metamodel
# and set a regular discipline instead
disc["type"] == Discipline.DISCIPLINE if disc["type"] == Discipline.METAMODEL
if disc["sub_analysis_attributes"]
subs << self.create_nested_analyses(disc["sub_analysis_attributes"])
disc.delete("sub_analysis_attributes")
Expand Down
7 changes: 7 additions & 0 deletions app/serializers/analysis_attrs_serializer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

class AnalysisAttrsSerializer < ActiveModel::Serializer
attributes :name

has_many :disciplines, key: :disciplines_attributes, serializer: DisciplineAttrsSerializer
end
7 changes: 7 additions & 0 deletions app/serializers/discipline_attrs_serializer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

class DisciplineAttrsSerializer < ActiveModel::Serializer
attributes :name, :type

has_many :variables, key: :variables_attributes
end
23 changes: 19 additions & 4 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@
t.index ["ancestry"], name: "index_analyses_on_ancestry"
end

create_table "analyses_design_projects", id: false, force: :cascade do |t|
t.integer "design_project_id", null: false
t.integer "analysis_id", null: false
t.index ["analysis_id", "design_project_id"], name: "index_analysis_id_design_project_id"
t.index ["design_project_id", "analysis_id"], name: "index_design_project_id_analysis_id"
end

create_table "analysis_disciplines", force: :cascade do |t|
t.integer "discipline_id"
t.integer "analysis_id"
Expand Down Expand Up @@ -80,6 +87,15 @@
t.text "values"
end

create_table "components", force: :cascade do |t|
t.integer "discipline_id"
t.boolean "has_derivatives", default: false
t.boolean "is_implicit", default: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["discipline_id"], name: "index_components_on_discipline_id"
end

create_table "connections", force: :cascade do |t|
t.integer "from_id"
t.integer "to_id"
Expand Down Expand Up @@ -208,9 +224,9 @@
end

create_table "parameters", force: :cascade do |t|
t.text "init"
t.text "lower"
t.text "upper"
t.string "init", default: ""
t.string "lower", default: ""
t.string "upper", default: ""
t.integer "variable_id"
end

Expand Down Expand Up @@ -295,7 +311,6 @@
t.index ["discipline_id"], name: "index_variables_on_discipline_id"
end

add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
add_foreign_key "analysis_disciplines", "analyses"
add_foreign_key "analysis_disciplines", "disciplines"
end
16 changes: 16 additions & 0 deletions test/controllers/api/v1/exports_controller_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

require "test_helper"

class Api::V1::ExportsControllerTest < ActionDispatch::IntegrationTest
setup do
@auth_headers = { "Authorization" => "Token " + TEST_API_KEY }
@mda = analyses(:cicav)
end

test "should dump analysis as json" do
get api_v1_mda_exports_new_url(@mda, format: :mdajson), as: :json, headers: @auth_headers
assert_response :success
resp = JSON.parse(response.body)
end
end
1 change: 1 addition & 0 deletions test/fixtures/cicav_mda.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"CICAV","disciplines_attributes":[{"name":"__DRIVER__","type":"null_driver","variables_attributes":[{"name":"obj","io_mode":"in","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"x1","io_mode":"out","shape":"1","type":"Float","active":true,"parameter_attributes":{"init":"3.14","lower":"1","upper":"10"},"distributions_attributes":[]},{"name":"y2","io_mode":"in","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"z","io_mode":"out","shape":"(2,)","type":"Float","active":true,"parameter_attributes":{"init":"3.14","lower":"1","upper":"10"},"distributions_attributes":[]}]},{"name":"Geometry","type":"analysis","variables_attributes":[{"name":"obj","io_mode":"out","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"x1","io_mode":"in","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"ya","io_mode":"in","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"yg","io_mode":"out","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"z","io_mode":"in","shape":"(2,)","type":"Float","active":true,"distributions_attributes":[]}]},{"name":"Aerodynamics","type":"analysis","variables_attributes":[{"name":"y2","io_mode":"out","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"ya","io_mode":"out","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"yg","io_mode":"in","shape":"1","type":"Float","active":true,"distributions_attributes":[]},{"name":"z","io_mode":"in","shape":"(2,)","type":"Float","active":true,"distributions_attributes":[]}]},{"name":"Propulsion","type":"analysis","variables_attributes":[]}]}
16 changes: 16 additions & 0 deletions test/lib/whats_opt/mdajson_generator_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

require "test_helper"

class MdajsonGeneratorTest < ActiveSupport::TestCase
def setup
@mda = analyses(:cicav)
@jsongen = WhatsOpt::MdajsonGenerator.new(@mda)
end

test "should generate mda json" do
content = @jsongen.generate
expected = sample_file("cicav_mda.json").read
assert_equal expected, content
end
end

0 comments on commit 0d5e9d2

Please sign in to comment.