Skip to content

Commit

Permalink
ActionController::Parameters is no longer a Hash
Browse files Browse the repository at this point in the history
  • Loading branch information
mshibuya committed May 20, 2016
1 parent 90f7da9 commit 8dc8a88
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 37 deletions.
2 changes: 1 addition & 1 deletion app/helpers/rails_admin/main_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def filterable_fields
def ordered_filters
return @ordered_filters if @ordered_filters.present?
@index = 0
@ordered_filters = (params[:f] || @model_config.list.filters).inject({}) do |memo, filter|
@ordered_filters = (params[:f].try(:permit!).try(:to_h) || @model_config.list.filters).inject({}) do |memo, filter|
field_name = filter.is_a?(Array) ? filter.first : filter
(filter.is_a?(Array) ? filter.last : {(@index += 1) => {'v' => ''}}).each do |index, filter_hash|
if filter_hash['disabled'].blank?
Expand Down
2 changes: 1 addition & 1 deletion lib/rails_admin/config/actions/export.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Export < RailsAdmin::Config::Actions::Base
proc do
if format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
request.format = format
@schema = HashHelper.symbolize(params[:schema]) if params[:schema] # to_json and to_xml expect symbols for keys AND values.
@schema = HashHelper.symbolize(params[:schema].slice(:except, :include, :methods, :only).permit!.to_h) if params[:schema] # to_json and to_xml expect symbols for keys AND values.
@objects = list_entries(@model_config, :export)
index
else
Expand Down
2 changes: 1 addition & 1 deletion lib/rails_admin/config/actions/index.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class Index < RailsAdmin::Config::Actions::Base
end

format.csv do
header, encoding, output = CSVConverter.new(@objects, @schema).to_csv(params[:csv_options])
header, encoding, output = CSVConverter.new(@objects, @schema).to_csv(params[:csv_options].permit!.to_h)
if params[:send_data]
send_data output,
type: "text/csv; charset=#{encoding}; #{'header=present' if header}",
Expand Down
3 changes: 2 additions & 1 deletion lib/rails_admin/config/actions/new.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ class New < RailsAdmin::Config::Actions::Base
@object.send("#{name}=", value)
end
if object_params = params[@abstract_model.to_param]
@object.set_attributes(@object.attributes.merge(object_params))
sanitize_params_for!(request.xhr? ? :modal : :create)
@object.set_attributes(@object.attributes.merge(object_params.to_h))
end
respond_to do |format|
format.html { render @action.template_name }
Expand Down
76 changes: 43 additions & 33 deletions spec/controllers/rails_admin/main_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
require 'spec_helper'

describe RailsAdmin::MainController, type: :controller do
def get(action, params)
if Rails.version >= '5.0'
super action, params: params
else
super action, params
end
end

describe '#dashboard' do
before do
allow(controller).to receive(:render).and_return(true) # no rendering
Expand Down Expand Up @@ -47,10 +55,16 @@
end

describe '#check_for_cancel' do
it 'redirects to back if params[:bulk_ids] is nil when params[:bulk_action] is present' do
before do
allow(controller).to receive(:back_or_index) { fail(StandardError.new('redirected back')) }
expect { get :bulk_delete, params: {model_name: 'player', bulk_action: 'bulk_delete'} }.to raise_error('redirected back')
expect { get :bulk_delete, params: {model_name: 'player', bulk_action: 'bulk_delete', bulk_ids: []} }.not_to raise_error
end

it 'redirects to back if params[:bulk_ids] is nil when params[:bulk_action] is present' do
expect { get :bulk_delete, model_name: 'player', bulk_action: 'bulk_delete' }.to raise_error('redirected back')
end

it 'does not redirect to back if params[:bulk_ids] and params[:bulk_action] is present' do
expect { get :bulk_delete, model_name: 'player', bulk_action: 'bulk_delete', bulk_ids: [1] }.not_to raise_error
end
end

Expand Down Expand Up @@ -233,14 +247,14 @@ class TeamWithNumberedPlayers < Team
end
FactoryGirl.create :team
TeamWithNumberedPlayers.first.numbered_players = [FactoryGirl.create(:player, number: 123)]
get :index, params: {model_name: 'player', source_object_id: Team.first.id, source_abstract_model: 'team_with_numbered_players', associated_collection: 'numbered_players', current_action: :create, compact: true, format: :json}
get :index, model_name: 'player', source_object_id: Team.first.id, source_abstract_model: 'team_with_numbered_players', associated_collection: 'numbered_players', current_action: :create, compact: true, format: :json
expect(response.body).to match(/\"id\":\"123\"/)
end

context 'as JSON' do
it 'returns strings' do
FactoryGirl.create :player, team: (FactoryGirl.create :team)
get :index, params: {model_name: 'player', source_object_id: Team.first.id, source_abstract_model: 'team', associated_collection: 'players', current_action: :create, compact: true, format: :json}
get :index, model_name: 'player', source_object_id: Team.first.id, source_abstract_model: 'team', associated_collection: 'players', current_action: :create, compact: true, format: :json
expect(JSON.parse(response.body).first['id']).to be_a_kind_of String
end
end
Expand Down Expand Up @@ -300,20 +314,18 @@ class TeamWithNumberedPlayers < Team
end

it 'sanitize params recursively in nested forms' do
expect(controller.params).to eq(
'field_test' => {
'datetime_field' => ::Time.zone.parse('Sun, 01 Aug 2010 00:00:00 UTC +00:00'),
'nested_field_tests_attributes' => {
'new_1330520162002' => {
'comment_attributes' => {
'created_at' => ::Time.zone.parse('Mon, 02 Aug 2010 00:00:00 UTC +00:00'),
},
'created_at' => ::Time.zone.parse('Tue, 03 Aug 2010 00:00:00 UTC +00:00'),
expect(controller.params[:field_test].to_h).to eq(
'datetime_field' => ::Time.zone.parse('Sun, 01 Aug 2010 00:00:00 UTC +00:00'),
'nested_field_tests_attributes' => {
'new_1330520162002' => {
'comment_attributes' => {
'created_at' => ::Time.zone.parse('Mon, 02 Aug 2010 00:00:00 UTC +00:00'),
},
'created_at' => ::Time.zone.parse('Tue, 03 Aug 2010 00:00:00 UTC +00:00'),
},
'comment_attributes' => {
'created_at' => ::Time.zone.parse('Wed, 04 Aug 2010 00:00:00 UTC +00:00'),
},
},
'comment_attributes' => {
'created_at' => ::Time.zone.parse('Wed, 04 Aug 2010 00:00:00 UTC +00:00'),
},
)
end
Expand Down Expand Up @@ -349,17 +361,16 @@ class TeamWithNumberedPlayers < Team
)

controller.send(:sanitize_params_for!, :create, RailsAdmin.config(FieldTest), controller.params['field_test'])
expect(controller.params).to eq(
'field_test' => {
'carrierwave_asset' => 'test',
'remove_carrierwave_asset' => 'test',
'carrierwave_asset_cache' => 'test',
'dragonfly_asset' => 'test',
'remove_dragonfly_asset' => 'test',
'retained_dragonfly_asset' => 'test',
'paperclip_asset' => 'test',
'delete_paperclip_asset' => 'test',
}.merge(defined?(Refile) ? {'refile_asset' => 'test', 'remove_refile_asset' => 'test'} : {}))
expect(controller.params[:field_test].to_h).to eq({
'carrierwave_asset' => 'test',
'remove_carrierwave_asset' => 'test',
'carrierwave_asset_cache' => 'test',
'dragonfly_asset' => 'test',
'remove_dragonfly_asset' => 'test',
'retained_dragonfly_asset' => 'test',
'paperclip_asset' => 'test',
'delete_paperclip_asset' => 'test',
}.merge(defined?(Refile) ? {'refile_asset' => 'test', 'remove_refile_asset' => 'test'} : {}))
end

it 'allows for polymorphic associations parameters' do
Expand All @@ -374,11 +385,10 @@ class TeamWithNumberedPlayers < Team
},
)
controller.send(:sanitize_params_for!, :create, RailsAdmin.config(Comment), controller.params['comment'])
expect(controller.params).to eq(
'comment' => {
'commentable_id' => 'test',
'commentable_type' => 'test',
})
expect(controller.params[:comment].to_h).to eq(
'commentable_id' => 'test',
'commentable_type' => 'test',
)
end
end
end

0 comments on commit 8dc8a88

Please sign in to comment.