aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorteddywing2017-08-02 14:48:01 +0200
committerGitHub2017-08-02 14:48:01 +0200
commitbdb416b2b974bf5e9c36eabf19af9ee3cc5feed7 (patch)
tree0f83fb65d26b615ca4d19e45966fcf420352bcaf /app
parentf4a879becb6ac5f3229f77e8a14122f085e02be5 (diff)
parentbfc4aa67c0ff06aaafbade489fa210970aaf2763 (diff)
downloadchouette-core-bdb416b2b974bf5e9c36eabf19af9ee3cc5feed7.tar.bz2
Merge pull request #51 from af83/4176_1726_neteximp_autocreate_ref
4176 1726 neteximp autocreate ref
Diffstat (limited to 'app')
-rw-r--r--app/controllers/api/v1/netex_imports_controller.rb43
-rw-r--r--app/controllers/application_controller.rb1
-rw-r--r--app/controllers/concerns/control_flow.rb14
-rw-r--r--app/views/api/v1/netex_imports/create.json.rabl4
4 files changed, 53 insertions, 9 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/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