My routes.rb -
Rails.application.routes.draw do
root 'welcome#index'
namespace :api, defaults: { format: :json } do
namespace :v1 do
get "/users/:cv_id" => "engine#users_get"
post "/users" => "engine#users_add"
end
end
and my main controller is --
class Api::V1::MainController < ApplicationController
http_basic_authenticate_with name: ENV["API_USERNAME"], password: ENV["API_PASSWORD"]
API_CMDS_LIST = {
"Engine" => [:users_add, :users_update],
}
include Api::V1::ErrorMessage
skip_before_filter :verify_authenticity_token
protect_from_forgery with: :null_session
def resulting_json(resp)
if resp[:result] == "error" && !resp[:code]
resp[:code] = Api::V1::ErrorMessage::CODES[resp[:message]] || Api::V1::ErrorMessage::DEFAULT_CODE
end
render json: resp
end
def authenticate
#authenticate_or_request_with_http_basic do |user, password|
#File.write('test.txt', "USER: #{user}. PASS: #{password}")
#@user && password == @user.secret_token #&& @user.belongs_to_active_brand?
true
#end
end
def validate_request
action = params[:action]
klass = API_CMDS_LIST.select{ |klass, methods| methods.include?(action.to_sym) }.keys[0]
@req = "Api::V1::#{klass}".constantize.new(send("# {action}_params").merge( {user: @user} ), request)
if [email protected]?
err_msg = @req.errors.full_messages.first
code = Api::V1::ErrorMessage::CODES[err_msg] || Api::V1::ErrorMessage::DEFAULT_CODE
render json: { result: "error", msg: err_msg, code: code } and return
end
end
end
and engine controller code is -
class Api::V1::EngineController < Api::V1::MainController
include Api::V1::ErrorMessage
before_filter :validate_request
API_CMDS_LIST["Engine"].each do |method|
define_method(method) do
response = @req.send(method)
resulting_json(response)
end
end
def users_add_params
params.permit(:first_name, :last_name)
end
end
but when i try to hit the endpoint "/users" with params {first_name : "satyam",last_name:"agrawal"} it gives me this error ---
Processing by Api::V1::EngineController#users_add as JSON Parameters: {"first_name"=>"satyam", "last_name"=>"agrawal"} Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)
TypeError (no implicit conversion of nil into String):
activesupport (5.0.1) lib/active_support/security_utils.rb:23:in digest'
activesupport (5.0.1) lib/active_support/security_utils.rb:23:in
hexdigest'
activesupport (5.0.1) lib/active_support/security_utils.rb:23:in variable_size_secure_compare'
actionpack (5.0.1) lib/action_controller/metal/http_authentication.rb:75:in
block (2 levels) in http_basic_authenticate_with'
actionpack (5.0.1) lib/action_controller/metal/http_authentication.rb:97:in call'
actionpack (5.0.1) lib/action_controller/metal/http_authentication.rb:97:in
authenticate'
actionpack (5.0.1) lib/action_controller/metal/http_authentication.rb:87:in authenticate_with_http_basic'
actionpack (5.0.1) lib/action_controller/metal/http_authentication.rb:83:in
authenticate_or_request_with_http_basic'
actionpack (5.0.1) lib/action_controller/metal/http_authentication.rb:71:in block in http_basic_authenticate_with'
activesupport (5.0.1) lib/active_support/callbacks.rb:396:in
instance_exec'
activesupport (5.0.1) lib/active_support/callbacks.rb:396:in block in make_lambda'
activesupport (5.0.1) lib/active_support/callbacks.rb:169:in
call'
activesupport (5.0.1) lib/active_support/callbacks.rb:169:in block (2 levels) in halting'
actionpack (5.0.1) lib/abstract_controller/callbacks.rb:12:in
call'
actionpack (5.0.1) lib/abstract_controller/callbacks.rb:12:in block (2 levels) in <module:Callbacks>'
activesupport (5.0.1) lib/active_support/callbacks.rb:170:in
call'
activesupport (5.0.1) lib/active_support/callbacks.rb:170:in block in halting'
activesupport (5.0.1) lib/active_support/callbacks.rb:454:in
call'
activesupport (5.0.1) lib/active_support/callbacks.rb:454:in block in call'
activesupport (5.0.1) lib/active_support/callbacks.rb:454:in
each'
activesupport (5.0.1) lib/active_support/callbacks.rb:454:in call'
activesupport (5.0.1) lib/active_support/callbacks.rb:101:in
run_callbacks'
activesupport (5.0.1) lib/active_support/callbacks.rb:750:in _run_process_action_callbacks'
activesupport (5.0.1) lib/active_support/callbacks.rb:90:in
run_callbacks'
actionpack (5.0.1) lib/abstract_controller/callbacks.rb:19:in process_action'
actionpack (5.0.1) lib/action_controller/metal/rescue.rb:20:in
process_action'
actionpack (5.0.1) lib/action_controller/metal/instrumentation.rb:32:in block in process_action'
activesupport (5.0.1) lib/active_support/notifications.rb:164:in
block in instrument'
activesupport (5.0.1) lib/active_support/notifications/instrumenter.rb:21:in instrument'
activesupport (5.0.1) lib/active_support/notifications.rb:164:in
instrument'
actionpack (5.0.1) lib/action_controller/metal/instrumentation.rb:30:in process_action'
actionpack (5.0.1) lib/action_controller/metal/params_wrapper.rb:248:in
process_action'
activerecord (5.0.1) lib/active_record/railties/controller_runtime.rb:18:in process_action'
actionpack (5.0.1) lib/abstract_controller/base.rb:126:in
process'
actionview (5.0.1) lib/action_view/rendering.rb:30:in process'
actionpack (5.0.1) lib/action_controller/metal.rb:190:in
dispatch'
actionpack (5.0.1) lib/action_controller/metal.rb:262:in dispatch'
actionpack (5.0.1) lib/action_dispatch/routing/route_set.rb:50:in
dispatch'
actionpack (5.0.1) lib/action_dispatch/routing/route_set.rb:32:in serve'
actionpack (5.0.1) lib/action_dispatch/journey/router.rb:39:in
block in serve'
actionpack (5.0.1) lib/action_dispatch/journey/router.rb:26:in each'
actionpack (5.0.1) lib/action_dispatch/journey/router.rb:26:in
serve'
actionpack (5.0.1) lib/action_dispatch/routing/route_set.rb:725:in call'
rack (2.0.1) lib/rack/etag.rb:25:in
call'
rack (2.0.1) lib/rack/conditional_get.rb:38:in call'
rack (2.0.1) lib/rack/head.rb:12:in
call'
rack (2.0.1) lib/rack/session/abstract/id.rb:222:in context'
rack (2.0.1) lib/rack/session/abstract/id.rb:216:in
call'
actionpack (5.0.1) lib/action_dispatch/middleware/cookies.rb:613:in call'
activerecord (5.0.1) lib/active_record/migration.rb:553:in
call'
actionpack (5.0.1) lib/action_dispatch/middleware/callbacks.rb:38:in block in call'
activesupport (5.0.1) lib/active_support/callbacks.rb:97:in
run_callbacks'
activesupport (5.0.1) lib/active_support/callbacks.rb:750:in _run_call_callbacks'
activesupport (5.0.1) lib/active_support/callbacks.rb:90:in
run_callbacks'
actionpack (5.0.1) lib/action_dispatch/middleware/callbacks.rb:36:in call'
actionpack (5.0.1) lib/action_dispatch/middleware/executor.rb:12:in
call'
actionpack (5.0.1) lib/action_dispatch/middleware/remote_ip.rb:79:in call'
actionpack (5.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in
call'
web-console (3.4.0) lib/web_console/middleware.rb:135:in call_app'
web-console (3.4.0) lib/web_console/middleware.rb:28:in
block in call'
web-console (3.4.0) lib/web_console/middleware.rb:18:in catch'
web-console (3.4.0) lib/web_console/middleware.rb:18:in
call'
actionpack (5.0.1) lib/action_dispatch/middleware/show_exceptions.rb:31:in call'
railties (5.0.1) lib/rails/rack/logger.rb:36:in
call_app'
railties (5.0.1) lib/rails/rack/logger.rb:24:in block in call'
activesupport (5.0.1) lib/active_support/tagged_logging.rb:69:in
block in tagged'
activesupport (5.0.1) lib/active_support/tagged_logging.rb:26:in tagged'
activesupport (5.0.1) lib/active_support/tagged_logging.rb:69:in
tagged'
railties (5.0.1) lib/rails/rack/logger.rb:24:in call'
sprockets-rails (3.2.0) lib/sprockets/rails/quiet_assets.rb:13:in
call'
actionpack (5.0.1) lib/action_dispatch/middleware/request_id.rb:24:in call'
rack (2.0.1) lib/rack/method_override.rb:22:in
call'
rack (2.0.1) lib/rack/runtime.rb:22:in call'
activesupport (5.0.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in
call'
actionpack (5.0.1) lib/action_dispatch/middleware/executor.rb:12:in call'
actionpack (5.0.1) lib/action_dispatch/middleware/static.rb:136:in
call'
rack (2.0.1) lib/rack/sendfile.rb:111:in call'
railties (5.0.1) lib/rails/engine.rb:522:in
call'
puma (3.7.1) lib/puma/configuration.rb:232:in call'
puma (3.7.1) lib/puma/server.rb:578:in
handle_request'
puma (3.7.1) lib/puma/server.rb:415:in process_client'
puma (3.7.1) lib/puma/server.rb:275:in
block in run'
puma (3.7.1) lib/puma/thread_pool.rb:120:in call'
puma (3.7.1) lib/puma/thread_pool.rb:120:in
block in spawn_thread'
please help me to sort it out