maquina-generators 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +158 -0
  4. data/Rakefile +10 -0
  5. data/lib/generators/maquina/clave/USAGE +11 -0
  6. data/lib/generators/maquina/clave/clave_generator.rb +184 -0
  7. data/lib/generators/maquina/clave/templates/app/controllers/concerns/authentication.rb.tt +63 -0
  8. data/lib/generators/maquina/clave/templates/app/controllers/registration/verification_resends_controller.rb.tt +38 -0
  9. data/lib/generators/maquina/clave/templates/app/controllers/registration/verifications_controller.rb.tt +51 -0
  10. data/lib/generators/maquina/clave/templates/app/controllers/registrations_controller.rb.tt +63 -0
  11. data/lib/generators/maquina/clave/templates/app/controllers/session/verification_resends_controller.rb.tt +44 -0
  12. data/lib/generators/maquina/clave/templates/app/controllers/session/verifications_controller.rb.tt +55 -0
  13. data/lib/generators/maquina/clave/templates/app/controllers/sessions_controller.rb.tt +56 -0
  14. data/lib/generators/maquina/clave/templates/app/helpers/authentication_helper.rb.tt +20 -0
  15. data/lib/generators/maquina/clave/templates/app/jobs/authentication_cleanup_job.rb.tt +13 -0
  16. data/lib/generators/maquina/clave/templates/app/mailers/verification_mailer.rb.tt +15 -0
  17. data/lib/generators/maquina/clave/templates/app/models/current.rb.tt +4 -0
  18. data/lib/generators/maquina/clave/templates/app/models/email_verification.rb.tt +40 -0
  19. data/lib/generators/maquina/clave/templates/app/models/session.rb.tt +18 -0
  20. data/lib/generators/maquina/clave/templates/app/models/user.rb.tt +38 -0
  21. data/lib/generators/maquina/clave/templates/app/views/registration/verifications/new.html.erb.tt +42 -0
  22. data/lib/generators/maquina/clave/templates/app/views/registrations/new.html.erb.tt +38 -0
  23. data/lib/generators/maquina/clave/templates/app/views/session/verifications/new.html.erb.tt +42 -0
  24. data/lib/generators/maquina/clave/templates/app/views/sessions/new.html.erb.tt +39 -0
  25. data/lib/generators/maquina/clave/templates/app/views/verification_mailer/verification_code.html.erb.tt +37 -0
  26. data/lib/generators/maquina/clave/templates/app/views/verification_mailer/verification_code.text.erb.tt +11 -0
  27. data/lib/generators/maquina/clave/templates/config/locales/clave.en.yml +101 -0
  28. data/lib/generators/maquina/clave/templates/config/locales/clave.es.yml +101 -0
  29. data/lib/generators/maquina/clave/templates/migration_create_email_verifications.rb.tt +17 -0
  30. data/lib/generators/maquina/clave/templates/migration_create_sessions.rb.tt +12 -0
  31. data/lib/generators/maquina/clave/templates/migration_create_users.rb.tt +16 -0
  32. data/lib/generators/maquina/clave/templates/test/test_helpers/session_test_helper.rb.tt +19 -0
  33. data/lib/generators/maquina/mission_control_jobs/USAGE +14 -0
  34. data/lib/generators/maquina/mission_control_jobs/mission_control_jobs_generator.rb +75 -0
  35. data/lib/generators/maquina/mission_control_jobs/templates/app/controllers/backstage_controller.rb.tt +4 -0
  36. data/lib/generators/maquina/mission_control_jobs/templates/config/initializers/mission_control.rb.tt +10 -0
  37. data/lib/generators/maquina/solid_errors/USAGE +15 -0
  38. data/lib/generators/maquina/solid_errors/solid_errors_generator.rb +85 -0
  39. data/lib/generators/maquina/solid_errors/templates/app/controllers/backstage_controller.rb.tt +4 -0
  40. data/lib/generators/maquina/solid_errors/templates/config/initializers/solid_errors.rb.tt +10 -0
  41. data/lib/maquina_generators/version.rb +3 -0
  42. data/lib/maquina_generators.rb +1 -0
  43. data/test/generators/maquina/clave_generator_test.rb +187 -0
  44. data/test/generators/maquina/mission_control_jobs_generator_test.rb +97 -0
  45. data/test/generators/maquina/solid_errors_generator_test.rb +97 -0
  46. data/test/test_helper.rb +7 -0
  47. data/test/tmp/Gemfile +3 -0
  48. data/test/tmp/app/controllers/backstage_controller.rb +4 -0
  49. data/test/tmp/config/initializers/solid_errors.rb +10 -0
  50. data/test/tmp/config/routes.rb +3 -0
  51. metadata +134 -0
@@ -0,0 +1,97 @@
1
+ require "test_helper"
2
+ require "generators/maquina/mission_control_jobs/mission_control_jobs_generator"
3
+
4
+ class Maquina::Generators::MissionControlJobsGeneratorTest < Rails::Generators::TestCase
5
+ tests Maquina::Generators::MissionControlJobsGenerator
6
+ destination File.expand_path("../../tmp", __dir__)
7
+
8
+ setup do
9
+ prepare_destination
10
+
11
+ mkdir_p("config")
12
+ File.write(
13
+ File.join(destination_root, "config/routes.rb"),
14
+ "Rails.application.routes.draw do\nend\n"
15
+ )
16
+
17
+ File.write(
18
+ File.join(destination_root, "Gemfile"),
19
+ "source \"https://rubygems.org\"\n"
20
+ )
21
+ end
22
+
23
+ test "generates backstage controller" do
24
+ run_generator %w[--prefix /admin]
25
+
26
+ assert_file "app/controllers/backstage_controller.rb", /class BackstageController < ActionController::Base/
27
+ end
28
+
29
+ test "does not overwrite existing backstage controller" do
30
+ mkdir_p("app/controllers")
31
+ File.write(
32
+ File.join(destination_root, "app/controllers/backstage_controller.rb"),
33
+ "class BackstageController < ActionController::Base\n # custom\nend\n"
34
+ )
35
+
36
+ run_generator %w[--prefix /admin]
37
+
38
+ assert_file "app/controllers/backstage_controller.rb", /# custom/
39
+ end
40
+
41
+ test "generates initializer with base controller and credentials-first auth" do
42
+ run_generator %w[--prefix /admin]
43
+
44
+ assert_file "config/initializers/mission_control.rb" do |content|
45
+ assert_match(/base_controller_class = "BackstageController"/, content)
46
+ assert_match(/credentials\.backstage/, content)
47
+ assert_match(/ENV\.fetch\("MISSION_CONTROL_JOBS_USER"/, content)
48
+ assert_match(/ENV\.fetch\("MISSION_CONTROL_JOBS_PASSWORD"/, content)
49
+ end
50
+ end
51
+
52
+ test "generates initializer with custom env var names" do
53
+ run_generator %w[--prefix /admin --user-env-var ADMIN_USER --password-env-var ADMIN_PASSWORD]
54
+
55
+ assert_file "config/initializers/mission_control.rb" do |content|
56
+ assert_match(/ENV\.fetch\("ADMIN_USER"/, content)
57
+ assert_match(/ENV\.fetch\("ADMIN_PASSWORD"/, content)
58
+ end
59
+ end
60
+
61
+ test "adds gem to Gemfile" do
62
+ run_generator %w[--prefix /admin]
63
+
64
+ assert_file "Gemfile", /gem "mission_control-jobs"/
65
+ end
66
+
67
+ test "does not duplicate gem in Gemfile" do
68
+ File.write(
69
+ File.join(destination_root, "Gemfile"),
70
+ "source \"https://rubygems.org\"\ngem \"mission_control-jobs\"\n"
71
+ )
72
+
73
+ run_generator %w[--prefix /admin]
74
+
75
+ assert_file "Gemfile" do |content|
76
+ assert_equal 1, content.scan('gem "mission_control-jobs"').length
77
+ end
78
+ end
79
+
80
+ test "adds route with prefix" do
81
+ run_generator %w[--prefix /admin]
82
+
83
+ assert_file "config/routes.rb", %r{mount MissionControl::Jobs::Engine, at: "/admin/mission_control_jobs"}
84
+ end
85
+
86
+ test "adds route with custom prefix" do
87
+ run_generator %w[--prefix /backstage]
88
+
89
+ assert_file "config/routes.rb", %r{mount MissionControl::Jobs::Engine, at: "/backstage/mission_control_jobs"}
90
+ end
91
+
92
+ private
93
+
94
+ def mkdir_p(path)
95
+ FileUtils.mkdir_p(File.join(destination_root, path))
96
+ end
97
+ end
@@ -0,0 +1,97 @@
1
+ require "test_helper"
2
+ require "generators/maquina/solid_errors/solid_errors_generator"
3
+
4
+ class Maquina::Generators::SolidErrorsGeneratorTest < Rails::Generators::TestCase
5
+ tests Maquina::Generators::SolidErrorsGenerator
6
+ destination File.expand_path("../../tmp", __dir__)
7
+
8
+ setup do
9
+ prepare_destination
10
+
11
+ mkdir_p("config")
12
+ File.write(
13
+ File.join(destination_root, "config/routes.rb"),
14
+ "Rails.application.routes.draw do\nend\n"
15
+ )
16
+
17
+ File.write(
18
+ File.join(destination_root, "Gemfile"),
19
+ "source \"https://rubygems.org\"\n"
20
+ )
21
+ end
22
+
23
+ test "generates backstage controller" do
24
+ run_generator %w[--prefix /admin]
25
+
26
+ assert_file "app/controllers/backstage_controller.rb", /class BackstageController < ActionController::Base/
27
+ end
28
+
29
+ test "does not overwrite existing backstage controller" do
30
+ mkdir_p("app/controllers")
31
+ File.write(
32
+ File.join(destination_root, "app/controllers/backstage_controller.rb"),
33
+ "class BackstageController < ActionController::Base\n # custom\nend\n"
34
+ )
35
+
36
+ run_generator %w[--prefix /admin]
37
+
38
+ assert_file "app/controllers/backstage_controller.rb", /# custom/
39
+ end
40
+
41
+ test "generates initializer with credentials-first auth" do
42
+ run_generator %w[--prefix /admin]
43
+
44
+ assert_file "config/initializers/solid_errors.rb" do |content|
45
+ assert_match(/credentials\.backstage/, content)
46
+ assert_match(/ENV\.fetch\("SOLID_ERRORS_USER"/, content)
47
+ assert_match(/ENV\.fetch\("SOLID_ERRORS_PASSWORD"/, content)
48
+ assert_match(/connects_to/, content)
49
+ end
50
+ end
51
+
52
+ test "generates initializer with custom env var names" do
53
+ run_generator %w[--prefix /admin --user-env-var ADMIN_USER --password-env-var ADMIN_PASSWORD]
54
+
55
+ assert_file "config/initializers/solid_errors.rb" do |content|
56
+ assert_match(/ENV\.fetch\("ADMIN_USER"/, content)
57
+ assert_match(/ENV\.fetch\("ADMIN_PASSWORD"/, content)
58
+ end
59
+ end
60
+
61
+ test "adds gem to Gemfile" do
62
+ run_generator %w[--prefix /admin]
63
+
64
+ assert_file "Gemfile", /gem "solid_errors"/
65
+ end
66
+
67
+ test "does not duplicate gem in Gemfile" do
68
+ File.write(
69
+ File.join(destination_root, "Gemfile"),
70
+ "source \"https://rubygems.org\"\ngem \"solid_errors\"\n"
71
+ )
72
+
73
+ run_generator %w[--prefix /admin]
74
+
75
+ assert_file "Gemfile" do |content|
76
+ assert_equal 1, content.scan('gem "solid_errors"').length
77
+ end
78
+ end
79
+
80
+ test "adds route with prefix" do
81
+ run_generator %w[--prefix /admin]
82
+
83
+ assert_file "config/routes.rb", %r{mount SolidErrors::Engine, at: "/admin/solid_errors"}
84
+ end
85
+
86
+ test "adds route with custom prefix" do
87
+ run_generator %w[--prefix /backstage]
88
+
89
+ assert_file "config/routes.rb", %r{mount SolidErrors::Engine, at: "/backstage/solid_errors"}
90
+ end
91
+
92
+ private
93
+
94
+ def mkdir_p(path)
95
+ FileUtils.mkdir_p(File.join(destination_root, path))
96
+ end
97
+ end
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
+
3
+ require "minitest/autorun"
4
+ require "rails/version"
5
+ require "rails/generators"
6
+ require "rails/generators/testing/setup_and_teardown"
7
+ require "rails/generators/testing/assertions"
data/test/tmp/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "solid_errors"
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class BackstageController < ActionController::Base
4
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.configure do
4
+ config.solid_errors.connects_to = { database: { writing: :errors } }
5
+
6
+ backstage = Rails.application.credentials.backstage || {}
7
+
8
+ config.solid_errors.username = backstage[:username] || ENV.fetch("SOLID_ERRORS_USER", nil)
9
+ config.solid_errors.password = backstage[:password] || ENV.fetch("SOLID_ERRORS_PASSWORD", nil)
10
+ end
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ mount SolidErrors::Engine, at: "/admin/solid_errors"
3
+ end
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: maquina-generators
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mario Alberto Chavez
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: minitest
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '5.0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '5.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rails
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '7.2'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '7.2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rake
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '13.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '13.0'
54
+ description: 'A collection of Rails generators: clave (passwordless auth), and more
55
+ to come.'
56
+ email:
57
+ - mario.chavez@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE.txt
63
+ - README.md
64
+ - Rakefile
65
+ - lib/generators/maquina/clave/USAGE
66
+ - lib/generators/maquina/clave/clave_generator.rb
67
+ - lib/generators/maquina/clave/templates/app/controllers/concerns/authentication.rb.tt
68
+ - lib/generators/maquina/clave/templates/app/controllers/registration/verification_resends_controller.rb.tt
69
+ - lib/generators/maquina/clave/templates/app/controllers/registration/verifications_controller.rb.tt
70
+ - lib/generators/maquina/clave/templates/app/controllers/registrations_controller.rb.tt
71
+ - lib/generators/maquina/clave/templates/app/controllers/session/verification_resends_controller.rb.tt
72
+ - lib/generators/maquina/clave/templates/app/controllers/session/verifications_controller.rb.tt
73
+ - lib/generators/maquina/clave/templates/app/controllers/sessions_controller.rb.tt
74
+ - lib/generators/maquina/clave/templates/app/helpers/authentication_helper.rb.tt
75
+ - lib/generators/maquina/clave/templates/app/jobs/authentication_cleanup_job.rb.tt
76
+ - lib/generators/maquina/clave/templates/app/mailers/verification_mailer.rb.tt
77
+ - lib/generators/maquina/clave/templates/app/models/current.rb.tt
78
+ - lib/generators/maquina/clave/templates/app/models/email_verification.rb.tt
79
+ - lib/generators/maquina/clave/templates/app/models/session.rb.tt
80
+ - lib/generators/maquina/clave/templates/app/models/user.rb.tt
81
+ - lib/generators/maquina/clave/templates/app/views/registration/verifications/new.html.erb.tt
82
+ - lib/generators/maquina/clave/templates/app/views/registrations/new.html.erb.tt
83
+ - lib/generators/maquina/clave/templates/app/views/session/verifications/new.html.erb.tt
84
+ - lib/generators/maquina/clave/templates/app/views/sessions/new.html.erb.tt
85
+ - lib/generators/maquina/clave/templates/app/views/verification_mailer/verification_code.html.erb.tt
86
+ - lib/generators/maquina/clave/templates/app/views/verification_mailer/verification_code.text.erb.tt
87
+ - lib/generators/maquina/clave/templates/config/locales/clave.en.yml
88
+ - lib/generators/maquina/clave/templates/config/locales/clave.es.yml
89
+ - lib/generators/maquina/clave/templates/migration_create_email_verifications.rb.tt
90
+ - lib/generators/maquina/clave/templates/migration_create_sessions.rb.tt
91
+ - lib/generators/maquina/clave/templates/migration_create_users.rb.tt
92
+ - lib/generators/maquina/clave/templates/test/test_helpers/session_test_helper.rb.tt
93
+ - lib/generators/maquina/mission_control_jobs/USAGE
94
+ - lib/generators/maquina/mission_control_jobs/mission_control_jobs_generator.rb
95
+ - lib/generators/maquina/mission_control_jobs/templates/app/controllers/backstage_controller.rb.tt
96
+ - lib/generators/maquina/mission_control_jobs/templates/config/initializers/mission_control.rb.tt
97
+ - lib/generators/maquina/solid_errors/USAGE
98
+ - lib/generators/maquina/solid_errors/solid_errors_generator.rb
99
+ - lib/generators/maquina/solid_errors/templates/app/controllers/backstage_controller.rb.tt
100
+ - lib/generators/maquina/solid_errors/templates/config/initializers/solid_errors.rb.tt
101
+ - lib/maquina_generators.rb
102
+ - lib/maquina_generators/version.rb
103
+ - test/generators/maquina/clave_generator_test.rb
104
+ - test/generators/maquina/mission_control_jobs_generator_test.rb
105
+ - test/generators/maquina/solid_errors_generator_test.rb
106
+ - test/test_helper.rb
107
+ - test/tmp/Gemfile
108
+ - test/tmp/app/controllers/backstage_controller.rb
109
+ - test/tmp/config/initializers/solid_errors.rb
110
+ - test/tmp/config/routes.rb
111
+ homepage: https://maquina.app
112
+ licenses:
113
+ - MIT
114
+ metadata:
115
+ homepage_uri: https://maquina.app
116
+ source_code_uri: https://maquina.app
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 3.2.0
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubygems_version: 4.0.3
132
+ specification_version: 4
133
+ summary: Rails generators from the Maquina umbrella
134
+ test_files: []