potassium 6.5.0 → 6.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
});
|