Skip to content

Commit 02d7fdd

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

2 files changed

Lines changed: 59 additions & 11 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: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,61 @@
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__)
7+
8+
let(:routes_path) { "#{destination_root}/config/routes.rb" }
9+
let(:routes_content) { File.read(routes_path) }
10+
let(:dta_route) { 'mount_devise_token_auth_for' }
11+
12+
after(:all) { FileUtils.rm_rf(destination_root) }
713

814
before do
915
prepare_destination
1016
create_rails_project
17+
run_generator(args)
1118
end
1219

13-
let(:routes_path) { "#{destination_root}/config/routes.rb" }
14-
let(:routes_content) { File.read(routes_path) }
15-
let(:dta_route) { 'mount_devise_token_auth_for' }
16-
1720
context 'when passing no params to the generator' do
18-
before { run_generator }
21+
let(:args) { [] }
1922

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

2427
assert_file 'config/initializers/devise.rb'
2528
assert_file 'config/initializers/devise_token_auth.rb'
29+
assert_file 'config/locales/devise.en.yml'
30+
31+
assert_migration 'db/migrate/devise_token_auth_create_users.rb'
32+
33+
assert_file 'app/models/user.rb', /^\s{2}devise :.+include GraphqlDevise::Concerns::Model/m
34+
35+
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetUserByToken/
2636
end
2737
end
2838

2939
context 'when passing custom params to the generator' do
30-
before { run_generator %w[Admin api] }
40+
let(:args) { %w[Admin api] }
3141

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

3646
assert_file 'config/initializers/devise.rb'
3747
assert_file 'config/initializers/devise_token_auth.rb'
48+
assert_file 'config/locales/devise.en.yml'
49+
50+
assert_migration 'db/migrate/devise_token_auth_create_admins.rb'
51+
52+
assert_file 'app/models/admin.rb', /^\s{2}devise :.+include GraphqlDevise::Concerns::Model/m
53+
54+
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetUserByToken/
3855
end
3956
end
4057

4158
def create_rails_project
4259
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`
60+
`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`
4461
end
4562
end
4663
end

0 commit comments

Comments
 (0)