Class: DeepUnrest::ApplicationController
- Inherits:
-
ActionController::API
- Object
- ActionController::API
- DeepUnrest::ApplicationController
- Defined in:
- app/controllers/deep_unrest/application_controller.rb
Constant Summary collapse
- @@temp_ids =
{}
- @@destroyed_entities =
[]
- @@changed_entities =
[]
Instance Method Summary collapse
- #allow_nested_arrays ⇒ Object
- #allowed_write_params ⇒ Object
- #context ⇒ Object
- #current_user ⇒ Object
- #read ⇒ Object
-
#repair_nested_params(obj) ⇒ Object
rails can’t deal with array indices in params (converts them to hashes) see gist.github.com/bloudermilk/2884947.
- #update ⇒ Object
- #write ⇒ Object
Instance Method Details
#allow_nested_arrays ⇒ Object
114 115 116 117 118 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 114 def allow_nested_arrays ::ActionController::Parameters::PERMITTED_SCALAR_TYPES << Array yield ::ActionController::Parameters::PERMITTED_SCALAR_TYPES - [Array] end |
#allowed_write_params ⇒ Object
106 107 108 109 110 111 112 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 106 def allowed_write_params params.permit(data: [:redirect, data: [:destroy, :path, :errorPath, { attributes: {} }]]) end |
#context ⇒ Object
13 14 15 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 13 def context { current_user: current_user } end |
#current_user ⇒ Object
102 103 104 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 102 def current_user instance_eval &DeepUnrest.get_user end |
#read ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 34 def read repaired_params = params[:data] data = repaired_params[:data] context = repaired_params[:context] || {} context[:uuid] = request.uuid context[:current_user] = current_user instance_eval &DeepUnrest.before_read if DeepUnrest.before_read results = DeepUnrest.perform_read(context, data, current_user) render json: results, status: :ok rescue DeepUnrest::Unauthorized => err render json: err., status: :forbidden rescue DeepUnrest::UnpermittedParams => err render json: err., status: :method_not_allowed end |
#repair_nested_params(obj) ⇒ Object
rails can’t deal with array indices in params (converts them to hashes) see gist.github.com/bloudermilk/2884947
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 19 def repair_nested_params(obj) return unless obj.respond_to?(:each) obj.each do |key, value| if value.is_a?(ActionController::Parameters) || value.is_a?(Hash) # If any non-integer keys if value.keys.find { |k, _| k =~ /\D/ } repair_nested_params(value) else obj[key] = value.values value.values.each { |h| repair_nested_params(h) } end end end end |
#update ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 75 def update redirect = allowed_write_params[:data][:redirect] context = allowed_write_params[:data][:context] || {} context[:uuid] = request.uuid context[:current_user] = current_user data = repair_nested_params(params)[:data][:data] instance_eval &DeepUnrest.before_update if DeepUnrest.before_update results = DeepUnrest.perform_update(context, data, current_user) resp = { destroyed: results[:destroyed], changed: results[:changed], tempIds: results[:temp_ids] } resp[:redirect] = results[:redirect_regex].call(redirect) if redirect render json: resp, status: :ok rescue DeepUnrest::Unauthorized => err render json: err., status: :forbidden rescue DeepUnrest::UnpermittedParams => err render json: err., status: :method_not_allowed rescue DeepUnrest::Conflict => err render json: err., status: :conflict ensure @@temp_ids.delete(request.uuid) @@destroyed_entities.clear @@changed_entities.clear end |
#write ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/controllers/deep_unrest/application_controller.rb', line 51 def write repaired_params = repair_nested_params(params[:data]) data = repaired_params[:data] data = ActionController::Parameters.new({}) if data&.blank? context = repaired_params[:context] || {} context[:uuid] = request.uuid context[:current_user] = current_user instance_eval &DeepUnrest.before_update if DeepUnrest.before_update results = DeepUnrest.perform_write(context, data, current_user) render json: results, status: :ok rescue DeepUnrest::Unauthorized => err render json: err., status: :forbidden rescue DeepUnrest::UnpermittedParams => err render json: err., status: :method_not_allowed rescue DeepUnrest::Conflict => err render json: err., status: :conflict ensure @@temp_ids.delete(request.uuid) @@destroyed_entities.clear @@changed_entities.clear end |