potassium 6.5.0 → 6.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +30 -1
- data/docs/CONTRIBUTING.md +2 -2
- data/lib/potassium/assets/.circleci/config.yml.erb +11 -1
- data/lib/potassium/assets/.eslintrc.json +15 -9
- data/lib/potassium/assets/.rubocop.yml +1 -0
- data/lib/potassium/assets/Aptfile +5 -0
- data/lib/potassium/assets/README.yml +30 -6
- data/lib/potassium/assets/active_admin/admin-component.vue +22 -30
- data/lib/potassium/assets/app/javascript/{app.spec.js → components/app.spec.ts} +1 -1
- data/lib/potassium/assets/app/javascript/components/app.vue +9 -0
- data/lib/potassium/assets/app/javascript/types/vue.d.ts +5 -0
- data/lib/potassium/assets/app/jobs/shrine_promote_job.rb +14 -0
- data/lib/potassium/assets/app/mailers/application_mailer.rb +1 -1
- data/lib/potassium/assets/app/mailers/example_mailer.rb +6 -0
- data/lib/potassium/assets/app/serializers/base_serializer.rb +3 -0
- data/lib/potassium/assets/app/serializers/concerns/image_handling_attributes.rb +20 -0
- data/lib/potassium/assets/app/uploaders/cover_image_uploader.rb +52 -0
- data/lib/potassium/assets/app/views/example_mailer/example_mail.html.mjml +7 -0
- data/lib/potassium/assets/app/views/layouts/default_mail.html.mjml +49 -0
- data/lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb +143 -0
- data/lib/potassium/assets/config/mailer.rb.erb +0 -2
- data/lib/potassium/assets/config/shrine.rb +15 -0
- data/lib/potassium/assets/config/webpack/rules/css.js +5 -0
- data/lib/potassium/assets/config/webpack/rules/index.js +11 -0
- data/lib/potassium/assets/config/webpack/rules/jquery.js +11 -0
- data/lib/potassium/assets/config/webpack/rules/typescript.js +32 -0
- data/lib/potassium/assets/config/webpack/rules/vue.js +19 -0
- data/lib/potassium/assets/config/webpack/webpack.config.js +4 -0
- data/lib/potassium/assets/public/mails/platanus-logo.png +0 -0
- data/lib/potassium/assets/tsconfig.json +31 -0
- data/lib/potassium/cli/commands/create.rb +3 -1
- data/lib/potassium/cli_options.rb +15 -3
- data/lib/potassium/platanus_config.rb +20 -0
- data/lib/potassium/recipes/admin.rb +11 -0
- data/lib/potassium/recipes/api.rb +6 -85
- data/lib/potassium/recipes/coverage.rb +31 -0
- data/lib/potassium/recipes/file_storage.rb +50 -0
- data/lib/potassium/recipes/front_end.rb +82 -110
- data/lib/potassium/recipes/google_tag_manager.rb +1 -1
- data/lib/potassium/recipes/mailer.rb +22 -10
- data/lib/potassium/recipes/mjml.rb +31 -0
- data/lib/potassium/recipes/node.rb +11 -13
- data/lib/potassium/recipes/style.rb +9 -2
- data/lib/potassium/recipes/vue_admin.rb +38 -8
- data/lib/potassium/templates/application.rb +1 -0
- data/lib/potassium/version.rb +8 -3
- data/spec/features/api_spec.rb +6 -1
- data/spec/features/coverage_spec.rb +17 -0
- data/spec/features/file_storage_spec.rb +102 -26
- data/spec/features/front_end_spec.rb +14 -48
- data/spec/features/mailer_spec.rb +79 -33
- data/spec/features/mjml_spec.rb +53 -0
- data/spec/features/vue_admin_spec.rb +0 -10
- data/spec/support/shared_examples.rb +5 -0
- metadata +28 -21
- data/lib/potassium/assets/active_admin/admin_application.js +0 -14
- data/lib/potassium/assets/active_admin/init_activeadmin_vue.rb +0 -10
- data/lib/potassium/assets/app/graphql/graphql_controller.rb +0 -55
- data/lib/potassium/assets/app/graphql/mutations/login_mutation.rb +0 -23
- data/lib/potassium/assets/app/graphql/queries/base_query.rb +0 -4
- data/lib/potassium/assets/app/graphql/types/base/base_argument.rb +0 -4
- data/lib/potassium/assets/app/graphql/types/base/base_enum.rb +0 -4
- data/lib/potassium/assets/app/graphql/types/base/base_field.rb +0 -5
- data/lib/potassium/assets/app/graphql/types/base/base_input_object.rb +0 -5
- data/lib/potassium/assets/app/graphql/types/base/base_interface.rb +0 -7
- data/lib/potassium/assets/app/graphql/types/base/base_object.rb +0 -5
- data/lib/potassium/assets/app/graphql/types/base/base_scalar.rb +0 -4
- data/lib/potassium/assets/app/graphql/types/base/base_union.rb +0 -4
- data/lib/potassium/assets/app/graphql/types/mutation_type.rb +0 -10
- data/lib/potassium/assets/app/graphql/types/query_type.rb +0 -13
- data/lib/potassium/assets/config/graphql_playground.rb +0 -20
- data/spec/features/graphql_spec.rb +0 -71
|
@@ -32,44 +32,120 @@ RSpec.describe "File Storage" do
|
|
|
32
32
|
content = IO.read("#{project_path}/.env.development")
|
|
33
33
|
expect(content).to include("S3_BUCKET=")
|
|
34
34
|
end
|
|
35
|
+
|
|
36
|
+
it "does not add vips install step to ci config" do
|
|
37
|
+
content = IO.read("#{project_path}/.circleci/config.yml")
|
|
38
|
+
expect(content).not_to include("Install apt and vips buildpack dependencies")
|
|
39
|
+
end
|
|
35
40
|
end
|
|
36
41
|
|
|
37
42
|
context "when selecting shrine" do
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
shared_examples 'common shrine setup' do
|
|
44
|
+
it "adds the aws-sdk-s3, shrine and marcel gems to Gemfile" do
|
|
45
|
+
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
46
|
+
expect(gemfile_content).to include("gem 'aws-sdk-s3'")
|
|
47
|
+
expect(gemfile_content).to include("gem 'shrine'")
|
|
48
|
+
expect(gemfile_content).to include("gem 'marcel'")
|
|
49
|
+
end
|
|
43
50
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
expect(gemfile_content).to include("gem 'marcel'")
|
|
49
|
-
end
|
|
51
|
+
it "adds brief to README file" do
|
|
52
|
+
content = IO.read("#{project_path}/README.md")
|
|
53
|
+
expect(content).to include("Shrine")
|
|
54
|
+
end
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
it "adds shrine initializer" do
|
|
57
|
+
expect(File.exist?("#{project_path}/config/initializers/shrine.rb")).to be true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "adds base_uploader and image_uploader" do
|
|
61
|
+
expect(File.exist?("#{project_path}/app/uploaders/base_uploader.rb")).to be true
|
|
62
|
+
expect(File.exist?("#{project_path}/app/uploaders/image_uploader.rb")).to be true
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "adds S3 bucket ENV vars" do
|
|
66
|
+
content = IO.read("#{project_path}/.env.development")
|
|
67
|
+
expect(content).to include("S3_BUCKET=")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "adds filestorage path to gitignore" do
|
|
71
|
+
content = IO.read("#{project_path}/.gitignore")
|
|
72
|
+
expect(content).to include("/public/uploads")
|
|
73
|
+
end
|
|
55
74
|
|
|
56
|
-
|
|
57
|
-
|
|
75
|
+
it "adds vips install step to ci config" do
|
|
76
|
+
content = IO.read("#{project_path}/.circleci/config.yml")
|
|
77
|
+
expect(content).to include("Install apt and vips buildpack dependencies")
|
|
78
|
+
end
|
|
58
79
|
end
|
|
59
80
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
context 'with no heroku or api' do
|
|
82
|
+
before :all do
|
|
83
|
+
drop_dummy_database
|
|
84
|
+
remove_project_directory
|
|
85
|
+
create_dummy_project(storage: :shrine)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it_behaves_like 'common shrine setup'
|
|
89
|
+
|
|
90
|
+
it 'does not add buildpacks to missing .buildpacks' do
|
|
91
|
+
expect { IO.read("#{project_path}/.buildpacks") }.to raise_error(Errno::ENOENT)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'does not add Aptfile' do
|
|
95
|
+
expect { IO.read("#{project_path}/Aptfile") }.to raise_error(Errno::ENOENT)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'does not image_handling_attributes serializer concern' do
|
|
99
|
+
expect do
|
|
100
|
+
IO.read("#{project_path}/app/serializers/concerns/image_handling_attributes.rb")
|
|
101
|
+
end.to raise_error(Errno::ENOENT)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it 'does not add base serializer' do
|
|
105
|
+
expect do
|
|
106
|
+
IO.read("#{project_path}/app/serializers/base_serializer.rb")
|
|
107
|
+
end.to raise_error(Errno::ENOENT)
|
|
108
|
+
end
|
|
63
109
|
end
|
|
64
110
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
111
|
+
context 'with heroku' do
|
|
112
|
+
before :all do
|
|
113
|
+
drop_dummy_database
|
|
114
|
+
remove_project_directory
|
|
115
|
+
create_dummy_project(storage: :shrine, heroku: true)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it_behaves_like 'common shrine setup'
|
|
119
|
+
|
|
120
|
+
it 'adds buildpacks .buildpacks' do
|
|
121
|
+
content = IO.read("#{project_path}/.buildpacks")
|
|
122
|
+
expect(content).to include("heroku-buildpack-apt")
|
|
123
|
+
expect(content).to include("heroku-buildpack-vips")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'adds Aptfile' do
|
|
127
|
+
expect(File.exist?("#{project_path}/Aptfile")).to be(true)
|
|
128
|
+
end
|
|
68
129
|
end
|
|
69
130
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
131
|
+
context 'with api' do
|
|
132
|
+
before :all do
|
|
133
|
+
drop_dummy_database
|
|
134
|
+
remove_project_directory
|
|
135
|
+
create_dummy_project(storage: :shrine, api: true)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it_behaves_like 'common shrine setup'
|
|
139
|
+
|
|
140
|
+
it 'adds image_handling_attributes serializer concern' do
|
|
141
|
+
expect(
|
|
142
|
+
File.exist?("#{project_path}/app/serializers/concerns/image_handling_attributes.rb")
|
|
143
|
+
).to be(true)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it 'adds base serializer' do
|
|
147
|
+
expect(File.exist?("#{project_path}/app/serializers/base_serializer.rb")).to be(true)
|
|
148
|
+
end
|
|
73
149
|
end
|
|
74
150
|
end
|
|
75
151
|
end
|
|
@@ -9,7 +9,7 @@ RSpec.describe "Front end" do
|
|
|
9
9
|
let(:application_css_path) { "#{project_path}/app/javascript/css/application.css" }
|
|
10
10
|
let(:gemfile) { IO.read("#{project_path}/Gemfile") }
|
|
11
11
|
let(:node_modules_file) { IO.read("#{project_path}/package.json") }
|
|
12
|
-
let(:application_js_file) { IO.read("#{project_path}/app/javascript/
|
|
12
|
+
let(:application_js_file) { IO.read("#{project_path}/app/javascript/application.js") }
|
|
13
13
|
let(:layout_file) { IO.read("#{project_path}/app/views/layouts/application.html.erb") }
|
|
14
14
|
let(:application_css_file) { IO.read(application_css_path) }
|
|
15
15
|
let(:tailwind_config_file) { IO.read("#{project_path}/tailwind.config.js") }
|
|
@@ -18,13 +18,13 @@ RSpec.describe "Front end" do
|
|
|
18
18
|
it "creates a project without a front end framework" do
|
|
19
19
|
remove_project_directory
|
|
20
20
|
create_dummy_project("front_end" => "None")
|
|
21
|
-
expect(gemfile).to include('
|
|
21
|
+
expect(gemfile).to include('shakapacker')
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def
|
|
25
|
-
expect(node_modules_file).to include("\"tailwindcss\": \"
|
|
26
|
-
expect(node_modules_file).to include("\"autoprefixer\": \"^
|
|
27
|
-
expect(node_modules_file).to include("\"postcss\": \"^
|
|
24
|
+
def expect_to_have_tailwind_package_versions
|
|
25
|
+
expect(node_modules_file).to include("\"tailwindcss\": \"^3\"")
|
|
26
|
+
expect(node_modules_file).to include("\"autoprefixer\": \"^10\"")
|
|
27
|
+
expect(node_modules_file).to include("\"postcss\": \"^8\"")
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
context "with vue" do
|
|
@@ -33,11 +33,11 @@ RSpec.describe "Front end" do
|
|
|
33
33
|
create_dummy_project("front_end" => "vue")
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
it "creates a project with vue
|
|
37
|
-
expect(gemfile).to include('
|
|
36
|
+
it "creates a project with vue as frontend framework" do
|
|
37
|
+
expect(gemfile).to include('shakapacker')
|
|
38
38
|
expect(node_modules_file).to include("\"vue\"")
|
|
39
|
-
expect(application_js_file).to include('vue
|
|
40
|
-
expect(application_js_file).to include("
|
|
39
|
+
expect(application_js_file).to include('vue')
|
|
40
|
+
expect(application_js_file).to include("app.mount('#vue-app')")
|
|
41
41
|
expect(layout_file).to include('id="vue-app"')
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -46,7 +46,7 @@ RSpec.describe "Front end" do
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "creates a vue project with client css" do
|
|
49
|
-
expect(application_js_file).to include("import '
|
|
49
|
+
expect(application_js_file).to include("import './css/application.css';")
|
|
50
50
|
expect(layout_file).to include("<%= stylesheet_pack_tag 'application' %>")
|
|
51
51
|
expect(rails_css_file).not_to include('*= require_tree', '*= require_self')
|
|
52
52
|
end
|
|
@@ -54,52 +54,18 @@ RSpec.describe "Front end" do
|
|
|
54
54
|
it "creates a vue project with tailwindcss" do
|
|
55
55
|
expect(node_modules_file).to include("\"tailwindcss\"")
|
|
56
56
|
expect(application_css_file).to include(
|
|
57
|
-
"@
|
|
58
|
-
"@
|
|
57
|
+
"@tailwind base;",
|
|
58
|
+
"@tailwind components;"
|
|
59
59
|
)
|
|
60
60
|
expect(tailwind_config_file).to include('module.exports')
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
it 'includes correct packages for tailwind, postcss and autoprefixer compatibility build' do
|
|
64
|
-
|
|
64
|
+
expect_to_have_tailwind_package_versions
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
it 'includes correct version of vue-loader in package' do
|
|
68
68
|
expect(node_modules_file).to include("\"vue-loader\": \"#{Potassium::VUE_LOADER_VERSION}\"")
|
|
69
69
|
end
|
|
70
|
-
|
|
71
|
-
context "with graphql" do
|
|
72
|
-
before(:all) do
|
|
73
|
-
remove_project_directory
|
|
74
|
-
create_dummy_project("front_end" => "vue", "api" => "graphql")
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "creates a vue project with apollo" do
|
|
78
|
-
expect(node_modules_file).to include("\"vue-apollo\"")
|
|
79
|
-
expect(application_js_file).to include("import { ApolloClient } from 'apollo-client';")
|
|
80
|
-
expect(application_js_file).to include("Vue.use(VueApollo)")
|
|
81
|
-
expect(application_js_file).to include("apolloProvider,")
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
context "with angular" do
|
|
87
|
-
before(:all) do
|
|
88
|
-
remove_project_directory
|
|
89
|
-
create_dummy_project("front_end" => "angular")
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "creates a project without vue as front end framework" do
|
|
93
|
-
expect(gemfile).to include('webpacker')
|
|
94
|
-
expect(node_modules_file).to include("\"@angular/core\"")
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "creates application_js_file for tailwind without vue" do
|
|
98
|
-
expect(application_js_file).to include("import '../css/application.css';")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it 'includes correct packages for tailwind, postcss and autoprefixer compatibility build' do
|
|
102
|
-
expect_to_have_tailwind_compatibility_build
|
|
103
|
-
end
|
|
104
70
|
end
|
|
105
71
|
end
|
|
@@ -1,58 +1,104 @@
|
|
|
1
|
+
# rubocop:disable Rspec/MultipleMemoizedHelpers
|
|
1
2
|
require "spec_helper"
|
|
2
3
|
|
|
3
4
|
RSpec.describe "Mailer" do
|
|
4
5
|
let(:gemfile) { IO.read("#{project_path}/Gemfile") }
|
|
5
|
-
let(:
|
|
6
|
+
let(:env) { IO.read("#{project_path}/.env.development") }
|
|
6
7
|
let(:dev_config) { IO.read("#{project_path}/config/environments/development.rb") }
|
|
7
|
-
let(:
|
|
8
|
+
let(:prod_config) { IO.read("#{project_path}/config/environments/production.rb") }
|
|
9
|
+
let(:asset_host_dev) do
|
|
10
|
+
<<~RUBY
|
|
11
|
+
config.action_mailer.asset_host = "http://\#{ENV.fetch('APPLICATION_HOST')}"
|
|
12
|
+
RUBY
|
|
13
|
+
end
|
|
14
|
+
let(:asset_host_prod) do
|
|
15
|
+
<<~RUBY
|
|
16
|
+
config.action_mailer.asset_host = "https://\#{ENV.fetch('APPLICATION_HOST')}"
|
|
17
|
+
RUBY
|
|
18
|
+
end
|
|
19
|
+
let(:mailer_config_text) do
|
|
20
|
+
<<~RUBY
|
|
21
|
+
require Rails.root.join("config", "mailer")
|
|
22
|
+
RUBY
|
|
23
|
+
end
|
|
8
24
|
|
|
9
25
|
before(:all) { drop_dummy_database }
|
|
10
26
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
describe 'with mailer' do
|
|
28
|
+
let(:mailer_config) { IO.read("#{project_path}/config/mailer.rb") }
|
|
29
|
+
let(:sidekiq_config) { IO.read("#{project_path}/config/sidekiq.yml") }
|
|
30
|
+
|
|
31
|
+
context "when selecting sendgrid as mailer" do
|
|
32
|
+
before(:all) do
|
|
33
|
+
remove_project_directory
|
|
34
|
+
create_dummy_project("email_service" => "sendgrid")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it_behaves_like "name"
|
|
38
|
+
it { expect(gemfile).to include("send_grid_mailer") }
|
|
16
39
|
|
|
17
|
-
|
|
40
|
+
it "adds configuration to mailer.rb" do
|
|
41
|
+
expect(mailer_config).to include("delivery_method = :sendgrid")
|
|
42
|
+
expect(mailer_config).to include("sendgrid_settings = {")
|
|
43
|
+
expect(mailer_config).to include("api_key: ENV['SENDGRID_API_KEY']")
|
|
44
|
+
end
|
|
18
45
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
46
|
+
it "adds configuration to development.rb" do
|
|
47
|
+
expect(dev_config).to include("delivery_method = :sendgrid_dev")
|
|
48
|
+
expect(dev_config).to include("sendgrid_dev_settings = {")
|
|
49
|
+
expect(dev_config).to include("api_key: ENV['SENDGRID_API_KEY']")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "adds configuration to production" do
|
|
53
|
+
expect(prod_config).to include(mailer_config_text)
|
|
54
|
+
expect(prod_config).to include(asset_host_prod)
|
|
55
|
+
end
|
|
23
56
|
end
|
|
24
57
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
58
|
+
context "when selecting aws_ses as mailer" do
|
|
59
|
+
before(:all) do
|
|
60
|
+
remove_project_directory
|
|
61
|
+
create_dummy_project("email_service" => "aws_ses")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it_behaves_like "name"
|
|
65
|
+
it { expect(gemfile).to include("aws-sdk-rails") }
|
|
66
|
+
it { expect(gemfile).to include("letter_opener") }
|
|
67
|
+
it { expect(mailer_config).to include("delivery_method = :aws_sdk") }
|
|
68
|
+
it { expect(dev_config).to include("delivery_method = :letter_opener") }
|
|
29
69
|
end
|
|
30
70
|
|
|
31
|
-
|
|
71
|
+
context "when selecting a mailer and sidekiq" do
|
|
72
|
+
before :all do
|
|
73
|
+
drop_dummy_database
|
|
74
|
+
remove_project_directory
|
|
75
|
+
create_dummy_project(
|
|
76
|
+
"background_processor" => true, "email_service" => 'sendgrid'
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it { expect(sidekiq_config).to include("- mailers") }
|
|
81
|
+
end
|
|
32
82
|
end
|
|
33
83
|
|
|
34
|
-
context "when
|
|
84
|
+
context "when there is no mailer" do
|
|
35
85
|
before(:all) do
|
|
36
86
|
remove_project_directory
|
|
37
|
-
create_dummy_project
|
|
87
|
+
create_dummy_project
|
|
38
88
|
end
|
|
39
89
|
|
|
40
|
-
it { expect(gemfile).
|
|
41
|
-
it { expect(
|
|
42
|
-
it { expect(
|
|
43
|
-
it { expect(dev_config).to include("delivery_method = :letter_opener") }
|
|
44
|
-
it { expect(sidekiq_config).to include("- mailers") }
|
|
45
|
-
end
|
|
90
|
+
it { expect(gemfile).not_to include("letter_opener") }
|
|
91
|
+
it { expect(File.exists?("#{project_path}/config/mailer.rb")).to eq(false) }
|
|
92
|
+
it { expect(env).not_to include("EMAIL_RECIPIENTS") }
|
|
46
93
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
remove_project_directory
|
|
51
|
-
create_dummy_project(
|
|
52
|
-
"background_processor" => true, "email_service" => 'sendgrid'
|
|
53
|
-
)
|
|
94
|
+
it "adds configuration to development" do
|
|
95
|
+
expect(dev_config).not_to include(asset_host_dev)
|
|
96
|
+
expect(dev_config).not_to include("delivery_method")
|
|
54
97
|
end
|
|
55
98
|
|
|
56
|
-
it
|
|
99
|
+
it "adds configuration to production" do
|
|
100
|
+
expect(prod_config).not_to include(mailer_config_text)
|
|
101
|
+
expect(prod_config).not_to include(asset_host_prod)
|
|
102
|
+
end
|
|
57
103
|
end
|
|
58
104
|
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Mjml" do
|
|
4
|
+
let(:gemfile) { IO.read("#{project_path}/Gemfile") }
|
|
5
|
+
let(:mailer_config) { IO.read("#{project_path}/config/mailer.rb") }
|
|
6
|
+
let(:dev_config) { IO.read("#{project_path}/config/environments/development.rb") }
|
|
7
|
+
let(:sidekiq_config) { IO.read("#{project_path}/config/sidekiq.yml") }
|
|
8
|
+
let(:yarn_lock) { IO.read("#{project_path}/yarn.lock") }
|
|
9
|
+
|
|
10
|
+
before(:all) { drop_dummy_database }
|
|
11
|
+
|
|
12
|
+
context "when selecting a mailer" do
|
|
13
|
+
before(:all) do
|
|
14
|
+
remove_project_directory
|
|
15
|
+
create_dummy_project("email_service" => "sendgrid")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'adds gems and packages' do
|
|
19
|
+
expect(yarn_lock).to include("mjml")
|
|
20
|
+
expect(gemfile).to include("mjml-rails")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'creates example mailer' do
|
|
24
|
+
expect(File.exists?("#{project_path}/app/views/layouts/default_mail.html.mjml")).to eq(true)
|
|
25
|
+
expect(File.exists?("#{project_path}/app/mailers/example_mailer.rb")).to eq(true)
|
|
26
|
+
expect(File.exists?("#{project_path}/app/views/example_mailer/example_mail.html.mjml"))
|
|
27
|
+
.to eq(true)
|
|
28
|
+
expect(File.exists?("#{project_path}/public/mails/platanus-logo.png")).to eq(true)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "when there is no mailer selected" do
|
|
33
|
+
before(:all) do
|
|
34
|
+
remove_project_directory
|
|
35
|
+
create_dummy_project
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'adds gems and packages' do
|
|
39
|
+
expect(yarn_lock).not_to include("mjml")
|
|
40
|
+
expect(gemfile).not_to include("mjml-rails")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'creates example mailer' do
|
|
44
|
+
expect(File.exists?("#{project_path}/app/views/layouts/default_mail.html.mjml"))
|
|
45
|
+
.not_to eq(true)
|
|
46
|
+
expect(File.exists?("#{project_path}/app/mailers/example_mailer.rb"))
|
|
47
|
+
.not_to eq(true)
|
|
48
|
+
expect(File.exists?("#{project_path}/app/views/example_mailer/example_mail.html.mjml"))
|
|
49
|
+
.not_to eq(true)
|
|
50
|
+
expect(File.exists?("#{project_path}/public/mails/platanus-logo.png")).not_to eq(true)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -14,11 +14,6 @@ RSpec.describe "VueAdmin" do
|
|
|
14
14
|
expect(initializer_file).to include("AUTO_BUILD_ELEMENTS")
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
it "adds layout tags to active admin layout initializer" do
|
|
18
|
-
initializer_path = "#{project_path}/config/initializers/init_activeadmin_vue.rb"
|
|
19
|
-
expect(File).to be_file(initializer_path)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
17
|
it "adds vue_component to library" do
|
|
23
18
|
vue_component_lib_path = "#{project_path}/lib/vue_component.rb"
|
|
24
19
|
expect(File).to be_file(vue_component_lib_path)
|
|
@@ -26,11 +21,6 @@ RSpec.describe "VueAdmin" do
|
|
|
26
21
|
expect(vue_component_lib).to include("VueComponent")
|
|
27
22
|
end
|
|
28
23
|
|
|
29
|
-
it "adds admin_application pack to packs" do
|
|
30
|
-
application_pack_path = "#{project_path}/app/javascript/packs/admin_application.js"
|
|
31
|
-
expect(File).to be_file(application_pack_path)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
24
|
it "adds admin_component to vue components" do
|
|
35
25
|
application_pack_path = "#{project_path}/app/javascript/components/admin-component.vue"
|
|
36
26
|
expect(File).to be_file(application_pack_path)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: potassium
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.
|
|
4
|
+
version: 6.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- juliogarciag
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-06-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -271,34 +271,29 @@ files:
|
|
|
271
271
|
- lib/potassium/assets/.pryrc
|
|
272
272
|
- lib/potassium/assets/.rubocop.yml
|
|
273
273
|
- lib/potassium/assets/.stylelintrc.json
|
|
274
|
+
- lib/potassium/assets/Aptfile
|
|
274
275
|
- lib/potassium/assets/Makefile.erb
|
|
275
276
|
- lib/potassium/assets/Procfile
|
|
276
277
|
- lib/potassium/assets/README.md.erb
|
|
277
278
|
- lib/potassium/assets/README.yml
|
|
278
279
|
- lib/potassium/assets/active_admin/admin-component.vue
|
|
279
|
-
- lib/potassium/assets/active_admin/admin_application.js
|
|
280
|
-
- lib/potassium/assets/active_admin/init_activeadmin_vue.rb
|
|
281
280
|
- lib/potassium/assets/active_admin/policies/admin_user_policy.rb
|
|
282
281
|
- lib/potassium/assets/active_admin/policies/comment_policy.rb
|
|
283
282
|
- lib/potassium/assets/active_admin/policies/default_policy.rb
|
|
284
283
|
- lib/potassium/assets/active_admin/policies/page_policy.rb
|
|
285
|
-
- lib/potassium/assets/app/
|
|
286
|
-
- lib/potassium/assets/app/
|
|
287
|
-
- lib/potassium/assets/app/
|
|
288
|
-
- lib/potassium/assets/app/
|
|
289
|
-
- lib/potassium/assets/app/graphql/types/base/base_enum.rb
|
|
290
|
-
- lib/potassium/assets/app/graphql/types/base/base_field.rb
|
|
291
|
-
- lib/potassium/assets/app/graphql/types/base/base_input_object.rb
|
|
292
|
-
- lib/potassium/assets/app/graphql/types/base/base_interface.rb
|
|
293
|
-
- lib/potassium/assets/app/graphql/types/base/base_object.rb
|
|
294
|
-
- lib/potassium/assets/app/graphql/types/base/base_scalar.rb
|
|
295
|
-
- lib/potassium/assets/app/graphql/types/base/base_union.rb
|
|
296
|
-
- lib/potassium/assets/app/graphql/types/mutation_type.rb
|
|
297
|
-
- lib/potassium/assets/app/graphql/types/query_type.rb
|
|
298
|
-
- lib/potassium/assets/app/javascript/app.spec.js
|
|
284
|
+
- lib/potassium/assets/app/javascript/components/app.spec.ts
|
|
285
|
+
- lib/potassium/assets/app/javascript/components/app.vue
|
|
286
|
+
- lib/potassium/assets/app/javascript/types/vue.d.ts
|
|
287
|
+
- lib/potassium/assets/app/jobs/shrine_promote_job.rb
|
|
299
288
|
- lib/potassium/assets/app/mailers/application_mailer.rb
|
|
289
|
+
- lib/potassium/assets/app/mailers/example_mailer.rb
|
|
290
|
+
- lib/potassium/assets/app/serializers/base_serializer.rb
|
|
291
|
+
- lib/potassium/assets/app/serializers/concerns/image_handling_attributes.rb
|
|
300
292
|
- lib/potassium/assets/app/uploaders/base_uploader.rb
|
|
293
|
+
- lib/potassium/assets/app/uploaders/cover_image_uploader.rb
|
|
301
294
|
- lib/potassium/assets/app/uploaders/image_uploader.rb
|
|
295
|
+
- lib/potassium/assets/app/views/example_mailer/example_mail.html.mjml
|
|
296
|
+
- lib/potassium/assets/app/views/layouts/default_mail.html.mjml
|
|
302
297
|
- lib/potassium/assets/app/views/shared/_gtm_body.html.erb
|
|
303
298
|
- lib/potassium/assets/app/views/shared/_gtm_head.html.erb
|
|
304
299
|
- lib/potassium/assets/bin/release
|
|
@@ -307,17 +302,24 @@ files:
|
|
|
307
302
|
- lib/potassium/assets/bin/update.erb
|
|
308
303
|
- lib/potassium/assets/config/database_mysql.yml.erb
|
|
309
304
|
- lib/potassium/assets/config/database_postgresql.yml.erb
|
|
310
|
-
- lib/potassium/assets/config/
|
|
305
|
+
- lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb
|
|
311
306
|
- lib/potassium/assets/config/mailer.rb.erb
|
|
312
307
|
- lib/potassium/assets/config/puma.rb
|
|
313
308
|
- lib/potassium/assets/config/secrets.yml.erb
|
|
314
309
|
- lib/potassium/assets/config/sentry.rb.erb
|
|
315
310
|
- lib/potassium/assets/config/shrine.rb
|
|
316
311
|
- lib/potassium/assets/config/storage.yml
|
|
312
|
+
- lib/potassium/assets/config/webpack/rules/css.js
|
|
313
|
+
- lib/potassium/assets/config/webpack/rules/index.js
|
|
314
|
+
- lib/potassium/assets/config/webpack/rules/jquery.js
|
|
315
|
+
- lib/potassium/assets/config/webpack/rules/typescript.js
|
|
316
|
+
- lib/potassium/assets/config/webpack/rules/vue.js
|
|
317
|
+
- lib/potassium/assets/config/webpack/webpack.config.js
|
|
317
318
|
- lib/potassium/assets/docker-compose.yml
|
|
318
319
|
- lib/potassium/assets/es-CL.yml
|
|
319
320
|
- lib/potassium/assets/lib/tasks/auto_annotate_models.rake
|
|
320
321
|
- lib/potassium/assets/package.json
|
|
322
|
+
- lib/potassium/assets/public/mails/platanus-logo.png
|
|
321
323
|
- lib/potassium/assets/redis.yml
|
|
322
324
|
- lib/potassium/assets/seeds/admin_data_loader.rb
|
|
323
325
|
- lib/potassium/assets/seeds/fake_data_loader.rake
|
|
@@ -335,6 +337,7 @@ files:
|
|
|
335
337
|
- lib/potassium/assets/testing/shoulda_matchers_config.rb
|
|
336
338
|
- lib/potassium/assets/testing/simplecov_config.rb
|
|
337
339
|
- lib/potassium/assets/testing/system_tests_config.rb
|
|
340
|
+
- lib/potassium/assets/tsconfig.json
|
|
338
341
|
- lib/potassium/cli.rb
|
|
339
342
|
- lib/potassium/cli/commands/create.rb
|
|
340
343
|
- lib/potassium/cli/commands/install.rb
|
|
@@ -354,6 +357,7 @@ files:
|
|
|
354
357
|
- lib/potassium/helpers/variable-helpers.rb
|
|
355
358
|
- lib/potassium/newest_version_ensurer.rb
|
|
356
359
|
- lib/potassium/node_version_ensurer.rb
|
|
360
|
+
- lib/potassium/platanus_config.rb
|
|
357
361
|
- lib/potassium/recipe.rb
|
|
358
362
|
- lib/potassium/recipes/admin.rb
|
|
359
363
|
- lib/potassium/recipes/annotate.rb
|
|
@@ -379,6 +383,7 @@ files:
|
|
|
379
383
|
- lib/potassium/recipes/i18n.rb
|
|
380
384
|
- lib/potassium/recipes/listen.rb
|
|
381
385
|
- lib/potassium/recipes/mailer.rb
|
|
386
|
+
- lib/potassium/recipes/mjml.rb
|
|
382
387
|
- lib/potassium/recipes/monitoring.rb
|
|
383
388
|
- lib/potassium/recipes/node.rb
|
|
384
389
|
- lib/potassium/recipes/power_types.rb
|
|
@@ -421,10 +426,10 @@ files:
|
|
|
421
426
|
- spec/features/front_end_spec.rb
|
|
422
427
|
- spec/features/github_spec.rb
|
|
423
428
|
- spec/features/google_tag_manager_spec.rb
|
|
424
|
-
- spec/features/graphql_spec.rb
|
|
425
429
|
- spec/features/heroku_spec.rb
|
|
426
430
|
- spec/features/i18n_spec.rb
|
|
427
431
|
- spec/features/mailer_spec.rb
|
|
432
|
+
- spec/features/mjml_spec.rb
|
|
428
433
|
- spec/features/new_project_spec.rb
|
|
429
434
|
- spec/features/node_spec.rb
|
|
430
435
|
- spec/features/power_types_spec.rb
|
|
@@ -437,6 +442,7 @@ files:
|
|
|
437
442
|
- spec/support/fake_heroku.rb
|
|
438
443
|
- spec/support/fake_octokit.rb
|
|
439
444
|
- spec/support/potassium_test_helpers.rb
|
|
445
|
+
- spec/support/shared_examples.rb
|
|
440
446
|
- tmp/.keep
|
|
441
447
|
homepage: https://github.com/platanus/potassium
|
|
442
448
|
licenses:
|
|
@@ -477,10 +483,10 @@ test_files:
|
|
|
477
483
|
- spec/features/front_end_spec.rb
|
|
478
484
|
- spec/features/github_spec.rb
|
|
479
485
|
- spec/features/google_tag_manager_spec.rb
|
|
480
|
-
- spec/features/graphql_spec.rb
|
|
481
486
|
- spec/features/heroku_spec.rb
|
|
482
487
|
- spec/features/i18n_spec.rb
|
|
483
488
|
- spec/features/mailer_spec.rb
|
|
489
|
+
- spec/features/mjml_spec.rb
|
|
484
490
|
- spec/features/new_project_spec.rb
|
|
485
491
|
- spec/features/node_spec.rb
|
|
486
492
|
- spec/features/power_types_spec.rb
|
|
@@ -493,3 +499,4 @@ test_files:
|
|
|
493
499
|
- spec/support/fake_heroku.rb
|
|
494
500
|
- spec/support/fake_octokit.rb
|
|
495
501
|
- spec/support/potassium_test_helpers.rb
|
|
502
|
+
- spec/support/shared_examples.rb
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import Vue from 'vue/dist/vue.esm';
|
|
2
|
-
import AdminComponent from '../components/admin-component';
|
|
3
|
-
|
|
4
|
-
Vue.component('admin_component', AdminComponent);
|
|
5
|
-
|
|
6
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
7
|
-
if (document.getElementById('wrapper') !== null) {
|
|
8
|
-
return new Vue({
|
|
9
|
-
el: '#wrapper',
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return null;
|
|
14
|
-
});
|