Skip to content

Commit c18c36e

Browse files
committed
Use GraphqlDevise in included concerns (generator)
1 parent a85404d commit c18c36e

2 files changed

Lines changed: 50 additions & 5 deletions

File tree

lib/generators/graphql_devise/install_generator.rb

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@ def execute_devise_installer
1010
end
1111

1212
def execute_dta_installer
13+
# Necessary in case of a re-run of the generator, for DTA to detect concerns already included
14+
if File.exist?(File.expand_path("app/models/#{user_class.underscore}.rb", destination_root))
15+
gsub_file(
16+
"app/models/#{user_class.underscore}.rb",
17+
'GraphqlDevise::Concerns::Model',
18+
'DeviseTokenAuth::Concerns::User'
19+
)
20+
end
21+
gsub_file(
22+
'app/controllers/application_controller.rb',
23+
'GraphqlDevise::Concerns::SetUserByToken',
24+
'DeviseTokenAuth::Concerns::SetUserByToken'
25+
)
26+
1327
generate 'devise_token_auth:install', "#{user_class} #{mount_path}"
1428
end
1529

@@ -19,13 +33,30 @@ def mount_resource_route
1933
dta_route = "mount_devise_token_auth_for '#{user_class}', at: '#{mount_path}'"
2034

2135
if file_contains_str?(routes_file, gem_route)
22-
gsub_file(routes_file, /^\s+#{Regexp.escape(dta_route + "\n")}/i, '') if file_contains_str?(routes_file, dta_route)
36+
gsub_file(routes_file, /^\s+#{Regexp.escape(dta_route + "\n")}/i, '')
37+
2338
say_status('skipped', "Routes already exist for #{user_class} at #{mount_path}")
2439
else
2540
gsub_file(routes_file, /#{Regexp.escape(dta_route)}/i, gem_route)
2641
end
2742
end
2843

44+
def replace_model_concern
45+
gsub_file(
46+
"app/models/#{user_class.underscore}.rb",
47+
/^\s+include DeviseTokenAuth::Concerns::User/,
48+
' include GraphqlDevise::Concerns::Model'
49+
)
50+
end
51+
52+
def replace_controller_concern
53+
gsub_file(
54+
'app/controllers/application_controller.rb',
55+
/^\s+include DeviseTokenAuth::Concerns::SetUserByToken/,
56+
' include GraphqlDevise::Concerns::SetUserByToken'
57+
)
58+
end
59+
2960
private
3061

3162
def file_contains_str?(filename, regex_str)

spec/generators/graphql_devise/install_generator_spec.rb

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
require 'generators/graphql_devise/install_generator'
44

55
RSpec.describe GraphqlDevise::InstallGenerator, type: :generator do
6-
destination File.expand_path('../../../../dummy', __dir__)
6+
destination File.expand_path('../../../../gqld_dummy', __dir__)
77

88
before do
99
prepare_destination
@@ -18,29 +18,43 @@
1818
before { run_generator }
1919

2020
it 'creates and updated required files' do
21-
assert_file 'config/routes.rb', /\s{2,}mount_graphql_devise_for 'User', at: 'auth'/
21+
assert_file 'config/routes.rb', /^\s{2}mount_graphql_devise_for 'User', at: 'auth'/
2222
expect(routes_content).not_to match(dta_route)
2323

2424
assert_file 'config/initializers/devise.rb'
2525
assert_file 'config/initializers/devise_token_auth.rb'
26+
assert_file 'config/locales/devise.en.yml'
27+
28+
assert_migration 'db/migrate/devise_token_auth_create_users.rb'
29+
30+
assert_file 'app/models/user.rb', /^\s{2}devise :.+include GraphqlDevise::Concerns::Model/m
31+
32+
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetUserByToken/
2633
end
2734
end
2835

2936
context 'when passing custom params to the generator' do
3037
before { run_generator %w[Admin api] }
3138

3239
it 'creates and updated required files' do
33-
assert_file 'config/routes.rb', /\s{2,}mount_graphql_devise_for 'Admin', at: 'api'/
40+
assert_file 'config/routes.rb', /^\s{2}mount_graphql_devise_for 'Admin', at: 'api'/
3441
expect(routes_content).not_to match(dta_route)
3542

3643
assert_file 'config/initializers/devise.rb'
3744
assert_file 'config/initializers/devise_token_auth.rb'
45+
assert_file 'config/locales/devise.en.yml'
46+
47+
assert_migration 'db/migrate/devise_token_auth_create_admins.rb'
48+
49+
assert_file 'app/models/admin.rb', /^\s{2}devise :.+include GraphqlDevise::Concerns::Model/m
50+
51+
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetUserByToken/
3852
end
3953
end
4054

4155
def create_rails_project
4256
FileUtils.cd(File.join(destination_root, '..')) do
43-
`rails new dummy -S -C --skip-action-mailbox --skip-action-text -T --skip-spring --skip-bundle --skip-keeps -G --skip-active-storage -J --skip-listen --skip-bootsnap`
57+
`rails new gqld_dummy -S -C --skip-action-mailbox --skip-action-text -T --skip-spring --skip-bundle --skip-keeps -G --skip-active-storage -J --skip-listen --skip-bootsnap`
4458
end
4559
end
4660
end

0 commit comments

Comments
 (0)