X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3c87946740b83f612561f998f7d83586593be830..618643017913c78a4d584ba4a5d9ca0db333a4f3:/services/api/app/controllers/application_controller.rb diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb index e1cb1ba8ef..b077879696 100644 --- a/services/api/app/controllers/application_controller.rb +++ b/services/api/app/controllers/application_controller.rb @@ -81,8 +81,8 @@ class ApplicationController < ActionController::Base def default_url_options options = {} - if Rails.configuration.Services.Controller.ExternalURL != "" - exturl = URI.parse(Rails.configuration.Services.Controller.ExternalURL) + if Rails.configuration.Services.Controller.ExternalURL != URI("") + exturl = Rails.configuration.Services.Controller.ExternalURL options[:host] = exturl.host options[:port] = exturl.port options[:protocol] = exturl.scheme @@ -237,7 +237,7 @@ class ApplicationController < ActionController::Base conditions[0] << " and #{ar_table_name}.#{attr} in (?)" conditions << value end - elsif value.is_a? String or value.is_a? Fixnum or value == true or value == false + elsif value.is_a? String or value.is_a? Integer or value == true or value == false conditions[0] << " and #{ar_table_name}.#{attr}=?" conditions << value elsif value.is_a? Hash @@ -468,11 +468,21 @@ class ApplicationController < ActionController::Base end def load_json_value(hash, key, must_be_class=nil) - if hash[key].is_a? String - hash[key] = SafeJSON.load(hash[key]) - if must_be_class and !hash[key].is_a? must_be_class - raise TypeError.new("parameter #{key.to_s} must be a #{must_be_class.to_s}") - end + return if hash[key].nil? + + val = hash[key] + if val.is_a? ActionController::Parameters + val = val.to_unsafe_hash + elsif val.is_a? String + val = SafeJSON.load(val) + hash[key] = val + end + # When assigning a Hash to an ActionController::Parameters and then + # retrieve it, we get another ActionController::Parameters instead of + # a Hash. This doesn't happen with other types. This is why 'val' is + # being used to do type checking below. + if must_be_class and !val.is_a? must_be_class + raise TypeError.new("parameter #{key.to_s} must be a #{must_be_class.to_s}") end end @@ -482,7 +492,7 @@ class ApplicationController < ActionController::Base accept_attribute_as_json :properties, Hash accept_attribute_as_json :info, Hash def accept_attribute_as_json(attr, must_be_class) - if params[resource_name] and resource_attrs.is_a? Hash + if params[resource_name] and [Hash, ActionController::Parameters].include?(resource_attrs.class) if resource_attrs[attr].is_a? Hash # Convert symbol keys to strings (in hashes provided by # resource_attrs)