diff --git a/app/controllers/apipie/apipies_controller.rb b/app/controllers/apipie/apipies_controller.rb index a37a42ee4..ac6008258 100644 --- a/app/controllers/apipie/apipies_controller.rb +++ b/app/controllers/apipie/apipies_controller.rb @@ -115,8 +115,13 @@ def authorized_doc def get_format [:resource, :method, :version].each do |par| if params[par] - params[:format] = :html unless params[par].sub!('.html', '').nil? - params[:format] = :json unless params[par].sub!('.json', '').nil? + if params[par].end_with?('.html') + params[par] = params[par].sub('.html', '') + params[:format] = :html + elsif params[par].end_with?('.json') + params[par] = params[par].sub('.json', '') + params[:format] = :json + end end end request.format = params[:format] if params[:format] @@ -125,7 +130,7 @@ def get_format def render_from_cache path = Apipie.configuration.doc_base_url.dup # some params can contain dot, but only one in row - if [:resource, :method, :format, :version].any? { |p| params[p].to_s.gsub(".", "") =~ /\W/ || params[p].to_s =~ /\.\./ } + if [:resource, :method, :format, :version].any? { |p| params[p].to_s =~ /\.\./ } head :bad_request and return end diff --git a/lib/apipie/application.rb b/lib/apipie/application.rb index 37ee91b25..22b41169d 100644 --- a/lib/apipie/application.rb +++ b/lib/apipie/application.rb @@ -348,7 +348,7 @@ def get_resource_name(klass) elsif Apipie.configuration.namespaced_resources? && klass.respond_to?(:controller_path) return nil if klass == ActionController::Base path = klass.controller_path - path.gsub(version_prefix(klass), "").gsub("/", "-") + path.sub(version_with_prefix(klass), "").gsub("/", "-") elsif klass.respond_to?(:controller_name) return nil if klass == ActionController::Base klass.controller_name @@ -389,11 +389,13 @@ def valid_search_args?(version, resource_name, method_name) return true end - def version_prefix(klass) + def version_with_prefix(klass) version = controller_versions(klass).first - base_url = get_base_url(version) - return "/" if base_url.nil? - base_url[1..-1] + "/" + base_url = get_base_url(version).to_s + base_url = base_url[1..-1] if base_url.start_with?('/') + base_url = base_url[1...-1] if base_url.end_with?('/') + return "#{version}/" if base_url.empty? + "#{base_url}/#{version}/" end def get_base_url(version)