module LinkedIn
  module API
    module Authentication
      def authorize_url(**params)
        params.reverse_merge! configuration.to_h.slice :scope, :state, :redirect_uri
        params[:scope] = serialize_scope params[:scope]
        credentials.auth_code.authorize_url params
      end

      def request_access_token(authorization_code, params = {})
        raise Error::CSRF.new state, params[:state] if params[:state] && params[:state] != state

        params.reverse_merge! redirect_uri: configuration.redirect_uri
        opts = { mode: :query, param_name: 'oauth2_access_token' }

        self.access_token = auth_code.get_token authorization_code, params, opts
      end

      private

      def serialize_scope(scope)
        Array[scope].flatten.join ' '
      end
    end
  end
end

module LinkedIn
  module API
    module Authentication
      def authorize_url(**params)
        params.reverse_merge! configuration.to_h.slice :scope, :state, :redirect_uri
        params[:scope] = serialize_scope params[:scope]
        credentials.auth_code.authorize_url params
      end

      def request_access_token(authorization_code, params = {})
        raise Error::CSRF.new state, params[:state] if params[:state] && params[:state] != state

        params.reverse_merge! redirect_uri: configuration.redirect_uri
        opts = { mode: :query, param_name: 'oauth2_access_token' }

        credentials.auth_code.get_token authorization_code, params, opts
      end

      private

      def serialize_scope(scope)
        Array[scope].flatten.join ' '
      end
    end
  end
end

Use auth_code provided by credentials
Use auth_code provided by credentials
