diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/api/v1/netex_imports_controller.rb | 43 | ||||
| -rw-r--r-- | app/controllers/application_controller.rb | 1 | ||||
| -rw-r--r-- | app/controllers/concerns/control_flow.rb | 14 | ||||
| -rw-r--r-- | app/services/file_service.rb | 24 | ||||
| -rw-r--r-- | app/views/api/v1/netex_imports/create.json.rabl | 4 |
5 files changed, 53 insertions, 33 deletions
diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb index d67d121c0..17eec2ef8 100644 --- a/app/controllers/api/v1/netex_imports_controller.rb +++ b/app/controllers/api/v1/netex_imports_controller.rb @@ -1,25 +1,54 @@ module Api module V1 class NetexImportsController < ChouetteController + include ControlFlow def create respond_to do | format | - format.json do - @import = NetexImport.create(netex_import_params) - unless @import.valid? - render json: {errors: @import.errors}, status: 406 - end - end + format.json(&method(:create_models)) end end private + def find_workbench + @workbench = Workbench.find(netex_import_params['workbench_id']) + rescue ActiveRecord::RecordNotFound + render json: {errors: {'workbench_id' => 'missing'}}, status: 406 + finish_action! + end + + def create_models + find_workbench + create_referential + create_netex_import + end + + def create_netex_import + @netex_import = NetexImport.new(netex_import_params.merge(referential_id: @new_referential.id)) + @netex_import.save! + rescue ActiveRecord::RecordInvalid + render json: {errors: @netex_import.errors}, status: 406 + finish_action! + end + + def create_referential + @new_referential = + Referential.new( + name: netex_import_params['name'], + organisation_id: @workbench.organisation_id, + workbench_id: @workbench.id) + @new_referential.save! + rescue ActiveRecord::RecordInvalid + render json: {errors: @new_referential.errors}, status: 406 + finish_action! + end + def netex_import_params params .require('netex_import') - .permit(:file, :name, :referential_id, :workbench_id) + .permit(:file, :name, :workbench_id) end end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8fcaa3b1b..d15aa336d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -37,6 +37,7 @@ class ApplicationController < ActionController::Base current_organisation end + # Overwriting the sign_out redirect path method def after_sign_out_path_for(resource_or_scope) new_user_session_path diff --git a/app/controllers/concerns/control_flow.rb b/app/controllers/concerns/control_flow.rb new file mode 100644 index 000000000..0f41a1cda --- /dev/null +++ b/app/controllers/concerns/control_flow.rb @@ -0,0 +1,14 @@ +module ControlFlow + FinishAction = Class.new RuntimeError + + def self.included into + into.rescue_from FinishAction, with: :catch_finish_action + end + + # Allow to exit locally inside an action after rendering (especially in error cases) + def catch_finish_action; end + + def finish_action! msg = 'finish action' + raise FinishAction, msg + end +end diff --git a/app/services/file_service.rb b/app/services/file_service.rb deleted file mode 100644 index 3b3ff3561..000000000 --- a/app/services/file_service.rb +++ /dev/null @@ -1,24 +0,0 @@ -# TODO: Delete me after stable implementation of #1726 -# module FileService extend self - -# def unique_filename( path, enum_with: with_ints ) -# file_names = enum_with.map( &file_name_maker(path) ) -# file_names -# .drop_while( &File.method(:exists?) ) -# .next -# end - -# def with_ints(format='%d') -# (0..Float::INFINITY) -# .lazy -# .map{ |n| format % n } -# end - - -# private - -# def file_name_maker path -# ->(n){ [path, n].join('_') } -# end - -# end diff --git a/app/views/api/v1/netex_imports/create.json.rabl b/app/views/api/v1/netex_imports/create.json.rabl index 1361cdb80..f37703349 100644 --- a/app/views/api/v1/netex_imports/create.json.rabl +++ b/app/views/api/v1/netex_imports/create.json.rabl @@ -1,3 +1,3 @@ -object @import -attributes :id, :type +object @netex_import +attributes :id, :workbench_id, :referential_id |
