• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mgmodell / devise_token_auth_multi_email / #598

07 Mar 2026 03:46AM UTC coverage: 12.281% (-78.4%) from 90.725%
#598

push

web-flow
Merge pull request #9 from mgmodell/copilot/fix-devise-token-auth-error

Fix NameError: uninitialized constant DeviseTokenAuth by adding missing gem entry point

1 of 1 new or added line in 1 file covered. (100.0%)

1351 existing lines in 24 files now uncovered.

203 of 1653 relevant lines covered (12.28%)

0.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/app/controllers/devise_token_auth/application_controller.rb
1
# frozen_string_literal: true
2

UNCOV
3
module DeviseTokenAuth
×
UNCOV
4
  class ApplicationController < DeviseController
×
UNCOV
5
    include DeviseTokenAuth::Concerns::SetUserByToken
×
6

UNCOV
7
    def resource_data(opts = {})
×
UNCOV
8
      response_data = opts[:resource_json] || @resource.as_json
×
UNCOV
9
      response_data['type'] = @resource.class.name.parameterize if json_api?
×
UNCOV
10
      response_data
×
UNCOV
11
    end
×
12

UNCOV
13
    def resource_errors
×
UNCOV
14
      @resource.errors.to_hash.merge(full_messages: @resource.errors.full_messages)
×
UNCOV
15
    end
×
16

UNCOV
17
    protected
×
18

UNCOV
19
    def blacklisted_redirect_url?(redirect_url)
×
UNCOV
20
      DeviseTokenAuth.redirect_whitelist && !DeviseTokenAuth::Url.whitelisted?(redirect_url)
×
UNCOV
21
    end
×
22

UNCOV
23
    def build_redirect_headers(access_token, client, redirect_header_options = {})
×
UNCOV
24
      {
×
UNCOV
25
        DeviseTokenAuth.headers_names[:"access-token"] => access_token,
×
UNCOV
26
        DeviseTokenAuth.headers_names[:"client"] => client,
×
UNCOV
27
        :config => params[:config],
×
28

29
        # Legacy parameters which may be removed in a future release.
30
        # Consider using "client" and "access-token" in client code.
31
        # See: github.com/lynndylanhurley/devise_token_auth/issues/993
UNCOV
32
        :client_id => client,
×
UNCOV
33
        :token => access_token
×
UNCOV
34
      }.merge(redirect_header_options)
×
UNCOV
35
    end
×
36

UNCOV
37
    def params_for_resource(resource)
×
UNCOV
38
      devise_parameter_sanitizer.instance_values['permitted'][resource].each do |type|
×
UNCOV
39
        params[type.to_s] ||= request.headers[type.to_s] unless request.headers[type.to_s].nil?
×
UNCOV
40
      end
×
UNCOV
41
      devise_parameter_sanitizer.instance_values['permitted'][resource]
×
UNCOV
42
    end
×
43

UNCOV
44
    def resource_class(m = nil)
×
UNCOV
45
      if m
×
UNCOV
46
        mapping = Devise.mappings[m]
×
UNCOV
47
      else
×
UNCOV
48
        mapping = Devise.mappings[resource_name] || Devise.mappings.values.first
×
UNCOV
49
      end
×
50

UNCOV
51
      mapping.to
×
UNCOV
52
    end
×
53

UNCOV
54
    def json_api?
×
UNCOV
55
      return false unless defined?(ActiveModel::Serializer)
×
UNCOV
56
      return ActiveModel::Serializer.setup do |config|
×
57
        config.adapter == :json_api
×
58
      end if ActiveModel::Serializer.respond_to?(:setup)
×
59
      ActiveModelSerializers.config.adapter == :json_api
×
UNCOV
60
    end
×
61

UNCOV
62
    def recoverable_enabled?
×
UNCOV
63
      resource_class.devise_modules.include?(:recoverable)
×
UNCOV
64
    end
×
65

UNCOV
66
    def confirmable_enabled?
×
UNCOV
67
      resource_class.devise_modules.include?(:confirmable)
×
UNCOV
68
    end
×
69

UNCOV
70
    def render_error(status, message, data = nil)
×
UNCOV
71
      response = {
×
UNCOV
72
        success: false,
×
UNCOV
73
        errors: [message]
×
UNCOV
74
      }
×
UNCOV
75
      response = response.merge(data) if data
×
UNCOV
76
      render json: response, status: status
×
UNCOV
77
    end
×
78

UNCOV
79
    def success_message(name, email)
×
UNCOV
80
      if Devise.paranoid
×
UNCOV
81
        I18n.t("devise_token_auth.#{name}.sended_paranoid")
×
UNCOV
82
      else
×
UNCOV
83
        I18n.t("devise_token_auth.#{name}.sended", email: email)
×
UNCOV
84
      end
×
UNCOV
85
    end
×
86

UNCOV
87
    def redirect_options
×
UNCOV
88
      {}
×
UNCOV
89
    end
×
90

91
    # When using a cookie to transport the auth token we can set it immediately in flows such as
92
    # reset password and OmniAuth success, rather than making the client scrape the token from
93
    # query params (to then send in the initial validate_token request).
94
    # TODO: We should be able to stop exposing the token in query params when this method is used
UNCOV
95
    def set_token_in_cookie(resource, token)
×
96
      auth_header = resource.build_auth_headers(token.token, token.client)
×
97
      cookies[DeviseTokenAuth.cookie_name] = DeviseTokenAuth.cookie_attributes.merge(value: auth_header.to_json)
×
UNCOV
98
    end
×
UNCOV
99
  end
×
UNCOV
100
end
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc