saaskit 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +22 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +81 -0
  9. data/Rakefile +10 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/lib/generators/saaskit/install/install_generator.rb +207 -0
  13. data/lib/generators/saaskit/install/templates/README +30 -0
  14. data/lib/generators/saaskit/install/templates/app/adapters/mailchimp/base_adapter.rb +51 -0
  15. data/lib/generators/saaskit/install/templates/app/controllers/application_controller.rb +3 -0
  16. data/lib/generators/saaskit/install/templates/app/controllers/pages_controller.rb +30 -0
  17. data/lib/generators/saaskit/install/templates/app/forms/newsletter_form.rb +17 -0
  18. data/lib/generators/saaskit/install/templates/app/helpers/application_helper.rb +10 -0
  19. data/lib/generators/saaskit/install/templates/app/helpers/meta_tags_helper.rb +21 -0
  20. data/lib/generators/saaskit/install/templates/app/javascript/controllers/aos_controller.js +12 -0
  21. data/lib/generators/saaskit/install/templates/app/javascript/controllers/index.js +6 -0
  22. data/lib/generators/saaskit/install/templates/app/javascript/controllers/notice_controller.js +14 -0
  23. data/lib/generators/saaskit/install/templates/app/javascript/controllers/noty_controller.js +10 -0
  24. data/lib/generators/saaskit/install/templates/app/javascript/controllers/reveal_controller.js +43 -0
  25. data/lib/generators/saaskit/install/templates/app/javascript/controllers/smooth_scroll_controller.js +11 -0
  26. data/lib/generators/saaskit/install/templates/app/javascript/controllers/typed_controller.js +17 -0
  27. data/lib/generators/saaskit/install/templates/app/javascript/images/address-book-2.svg +8 -0
  28. data/lib/generators/saaskit/install/templates/app/javascript/images/chart-bar-1.svg +10 -0
  29. data/lib/generators/saaskit/install/templates/app/javascript/images/cloud-upload.svg +8 -0
  30. data/lib/generators/saaskit/install/templates/app/javascript/images/credit-card.svg +9 -0
  31. data/lib/generators/saaskit/install/templates/app/javascript/images/display-1.svg +8 -0
  32. data/lib/generators/saaskit/install/templates/app/javascript/images/facebook.svg +1 -0
  33. data/lib/generators/saaskit/install/templates/app/javascript/images/file.svg +9 -0
  34. data/lib/generators/saaskit/install/templates/app/javascript/images/github.svg +1 -0
  35. data/lib/generators/saaskit/install/templates/app/javascript/images/group.svg +8 -0
  36. data/lib/generators/saaskit/install/templates/app/javascript/images/layout-left-panel-1.svg +8 -0
  37. data/lib/generators/saaskit/install/templates/app/javascript/images/layout-top-panel-6.svg +8 -0
  38. data/lib/generators/saaskit/install/templates/app/javascript/images/logo_color_horizontal.svg +1 -0
  39. data/lib/generators/saaskit/install/templates/app/javascript/images/logo_color_stacked.svg +1 -0
  40. data/lib/generators/saaskit/install/templates/app/javascript/images/logo_color_symbol.svg +1 -0
  41. data/lib/generators/saaskit/install/templates/app/javascript/images/logo_white_horizontal.svg +1 -0
  42. data/lib/generators/saaskit/install/templates/app/javascript/images/logo_white_stacked.svg +1 -0
  43. data/lib/generators/saaskit/install/templates/app/javascript/images/logo_white_symbol.svg +1 -0
  44. data/lib/generators/saaskit/install/templates/app/javascript/images/mail-opened.svg +8 -0
  45. data/lib/generators/saaskit/install/templates/app/javascript/images/notifications-1.svg +7 -0
  46. data/lib/generators/saaskit/install/templates/app/javascript/images/outlet.svg +8 -0
  47. data/lib/generators/saaskit/install/templates/app/javascript/images/pablo-done.png +0 -0
  48. data/lib/generators/saaskit/install/templates/app/javascript/images/paypal.svg +9 -0
  49. data/lib/generators/saaskit/install/templates/app/javascript/images/rails.svg +7 -0
  50. data/lib/generators/saaskit/install/templates/app/javascript/images/repeat.svg +8 -0
  51. data/lib/generators/saaskit/install/templates/app/javascript/images/right-circle.svg +8 -0
  52. data/lib/generators/saaskit/install/templates/app/javascript/images/sale-2.svg +10 -0
  53. data/lib/generators/saaskit/install/templates/app/javascript/images/selected-file.svg +8 -0
  54. data/lib/generators/saaskit/install/templates/app/javascript/images/sending-mail.svg +8 -0
  55. data/lib/generators/saaskit/install/templates/app/javascript/images/shield-check.svg +8 -0
  56. data/lib/generators/saaskit/install/templates/app/javascript/images/shield-protected.svg +8 -0
  57. data/lib/generators/saaskit/install/templates/app/javascript/images/stimulus.svg +1 -0
  58. data/lib/generators/saaskit/install/templates/app/javascript/images/stripe.svg +6 -0
  59. data/lib/generators/saaskit/install/templates/app/javascript/images/tailwind.svg +12 -0
  60. data/lib/generators/saaskit/install/templates/app/javascript/images/tgav_logo_white_symbol.svg +1 -0
  61. data/lib/generators/saaskit/install/templates/app/javascript/images/user.svg +8 -0
  62. data/lib/generators/saaskit/install/templates/app/javascript/images/webpack.svg +8 -0
  63. data/lib/generators/saaskit/install/templates/app/javascript/stylesheets/application.scss +3 -0
  64. data/lib/generators/saaskit/install/templates/app/javascript/stylesheets/tailwind.config.js +542 -0
  65. data/lib/generators/saaskit/install/templates/app/models/concerns/coming_soon_pending_subscribable.rb +31 -0
  66. data/lib/generators/saaskit/install/templates/app/views/layouts/application.html.erb +7 -0
  67. data/lib/generators/saaskit/install/templates/app/views/layouts/land.html.erb +24 -0
  68. data/lib/generators/saaskit/install/templates/app/views/pages/_errors.html.erb +14 -0
  69. data/lib/generators/saaskit/install/templates/app/views/pages/home.html.erb +472 -0
  70. data/lib/generators/saaskit/install/templates/app/views/pages/subscribe.js.erb +24 -0
  71. data/lib/generators/saaskit/install/templates/app/views/shared/_footer.html.erb +23 -0
  72. data/lib/generators/saaskit/install/templates/app/views/shared/_head.html.erb +9 -0
  73. data/lib/generators/saaskit/install/templates/app/views/shared/_navbar.html.erb +76 -0
  74. data/lib/generators/saaskit/install/templates/app/views/shared/_notices.html.erb +8 -0
  75. data/lib/generators/saaskit/install/templates/config/credentials.yml.sample +8 -0
  76. data/lib/generators/saaskit/install/templates/config/initializers/meta_tags.rb +40 -0
  77. data/lib/generators/saaskit/install/templates/config/webpack/plugins/purgecss-webpack-plugin.js +21 -0
  78. data/lib/saaskit.rb +6 -0
  79. data/lib/saaskit/version.rb +3 -0
  80. data/saaskit.gemspec +33 -0
  81. data/template.rb +6 -0
  82. metadata +169 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 67cfe02cb43217ecf7a4e4d61308281315fb79b34a609466e8ab6c47807503f5
4
+ data.tar.gz: bf608859e3c553a5132ba5f1290a4d82cad03feaf4b430e09d1e9fd3ff117c6f
5
+ SHA512:
6
+ metadata.gz: 9a85bfb372a42f587fbe9be2a06016ca6629c98a4250b5570c014ffa3df346ae2f1726311dbd59eb9d7a303bfb04b600aa3f7dc32914f87e7876f184c20ba157
7
+ data.tar.gz: 48dc7351b5c79ad8731e8981a7ff2b2c2b4a20ca9732ed1363cbcb7414c2a69cbadbe6f909f4bc41167ec905b8877c5f26292afa13ad18983f6da2bc890fbe33
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /.idea/
10
+ /test/dummy/
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.3
7
+ before_install: gem install bundler -v 2.0.2
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at timshingyu@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in saaskit.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ saaskit (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ minitest (5.11.3)
10
+ rake (10.5.0)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ bundler (~> 2.0)
17
+ minitest (~> 5.0)
18
+ rake (~> 10.0)
19
+ saaskit!
20
+
21
+ BUNDLED WITH
22
+ 2.0.2
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 Tim Cheung
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,81 @@
1
+ # SaaSKit
2
+
3
+ SaaSKit is the Rails SaaS starter kit for building your SaaS business.
4
+
5
+ ## Requirements
6
+
7
+ - ruby 2.5 or higher
8
+ - Rails 6.0.0.rc1 or higher
9
+
10
+ ## Installation
11
+
12
+ Using rails template
13
+
14
+ ```bash
15
+ rails new appname --database=postgresql -m https://link.saaskitapp.com/rqp
16
+ ```
17
+
18
+ or add this line to your application's Gemfile
19
+
20
+ ```ruby
21
+ gem "saaskit"
22
+ ```
23
+
24
+ And then execute:
25
+
26
+ ```bash
27
+ bundle install
28
+ bundle exec rails generate saaskit:install
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ Before you start rails server, Please config your secret credential and use the sample template located in
34
+ `config/credentials.yml.sample` as the starting point.
35
+
36
+ ```yaml
37
+ # config/credentials.yml.sample
38
+
39
+ # Mailing list subscription
40
+ # -------------------------
41
+ # MailChimp
42
+ # Get API Key: mailchimp admin dashboard > profile dropdown > account > extras dropdown > API keys
43
+ # Get Audience ID: mailchimp admin dashboard > audience > manage audience > settings > Unique id for audience xxx
44
+
45
+ mailchimp:
46
+ api_key: your_api_key
47
+ audience_id: your_audience_id
48
+ ```
49
+
50
+ For development environment:
51
+ ```bash
52
+ EDITOR=vim rails credentials:edit --environment development
53
+ ```
54
+
55
+ For test environment:
56
+ ```bash
57
+ EDITOR=vim rails credentials:edit --environment test
58
+ ```
59
+
60
+ For production environment:
61
+ ```bash
62
+ EDITOR=vim rails credentials:edit
63
+ ```
64
+
65
+ ## Development
66
+
67
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
68
+
69
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
70
+
71
+ ## Contributing
72
+
73
+ Bug reports and pull requests are welcome on GitHub at https://github.com/tgavhq/saaskit. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
74
+
75
+ ## License
76
+
77
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
78
+
79
+ ## Code of Conduct
80
+
81
+ Everyone interacting in the Saaskit project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/tgavhq/saaskit/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "saaskit"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,207 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Saaskit
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ def add_gems_to_gemfile
9
+ gem 'meta-tags', '~> 2.11', '>= 2.11.1'
10
+ gem 'gibbon', '~> 3.2'
11
+
12
+ gem_group :development, :test do
13
+ gem 'standard', '~> 0.0.40'
14
+ end
15
+
16
+ gem_group :development do
17
+ gem 'eefgilm', '~> 1.2', '>= 1.2.1'
18
+ end
19
+ end
20
+
21
+ def bundle_install
22
+ Bundler.with_clean_env do
23
+ run "bundle install"
24
+ end
25
+ end
26
+
27
+ def organizing_gemfile
28
+ run "eefgilm"
29
+ end
30
+
31
+ def copy_credentials_sample
32
+ copy_file "config/credentials.yml.sample"
33
+ end
34
+
35
+ def enable_require_master_key_in_production
36
+ uncomment_lines "config/environments/production.rb",
37
+ /config.require_master_key = true/
38
+ end
39
+
40
+ def install_stimulus
41
+ run "yarn add stimulus"
42
+ copy_file "app/javascript/controllers/index.js"
43
+ insert_into_file "app/javascript/packs/application.js", after: "require(\"channels\")\n" do
44
+ <<~CODE
45
+ // Tell webpacker to require stimulus
46
+ require("stimulus")
47
+ import 'controllers'
48
+ CODE
49
+ end
50
+ end
51
+
52
+ def install_notice_controller
53
+ copy_file "app/javascript/controllers/notice_controller.js"
54
+ end
55
+
56
+ def install_typed_controller
57
+ run "yarn add typed.js"
58
+ copy_file "app/javascript/controllers/typed_controller.js"
59
+ end
60
+
61
+ def install_reveal_controller
62
+ copy_file "app/javascript/controllers/reveal_controller.js"
63
+ end
64
+
65
+ def install_smooth_scroll_controller
66
+ run "yarn add smooth-scroll"
67
+ copy_file "app/javascript/controllers/smooth_scroll_controller.js"
68
+ end
69
+
70
+ def install_aos_controller
71
+ run "yarn add aos@next"
72
+ copy_file "app/javascript/controllers/aos_controller.js"
73
+ end
74
+
75
+ def install_noty_controller
76
+ run "yarn add noty"
77
+ copy_file "app/javascript/controllers/noty_controller.js"
78
+ end
79
+
80
+ def install_tailwindcss
81
+ run "yarn add tailwindcss"
82
+ run "yarn add tailwindcss-transitions"
83
+ run "yarn add tailwindcss-gradients"
84
+ run "yarn add tailwindcss-pseudo"
85
+ copy_file "app/javascript/stylesheets/application.scss"
86
+ append_to_file "app/javascript/packs/application.js" do
87
+ <<~CODE
88
+ require("stylesheets/application.scss")
89
+ CODE
90
+ end
91
+ insert_into_file "app/views/layouts/application.html.erb", after: "<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>\n" do
92
+ <<~CODE
93
+ <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
94
+ CODE
95
+ end
96
+ copy_file "app/javascript/stylesheets/tailwind.config.js"
97
+ insert_into_file "postcss.config.js", after: "plugins: [\n" do
98
+ <<~CODE
99
+ require('tailwindcss')('./app/javascript/stylesheets/tailwind.config.js'),
100
+ require('autoprefixer'),
101
+ CODE
102
+ end
103
+ end
104
+
105
+ def install_purgecss
106
+ run "yarn add glob-all"
107
+ run "yarn add path"
108
+ run "yarn add purgecss-webpack-plugin"
109
+ copy_file "config/webpack/plugins/purgecss-webpack-plugin.js"
110
+ insert_into_file "config/webpack/production.js", after: "const environment = require('./environment')\n" do
111
+ <<~CODE
112
+ environment.plugins.append('PurgecssWebpackPlugin', require('./plugins/purgecss-webpack-plugin'))
113
+ CODE
114
+ end
115
+ end
116
+
117
+ def install_images
118
+ gsub_file "app/javascript/packs/application.js",
119
+ /\/\/ const images/, "const images"
120
+ gsub_file "app/javascript/packs/application.js",
121
+ /\/\/ const imagePath/, "const imagePath"
122
+
123
+ copy_file "app/javascript/images/logo_color_horizontal.svg"
124
+ copy_file "app/javascript/images/logo_color_stacked.svg"
125
+ copy_file "app/javascript/images/logo_color_symbol.svg"
126
+ copy_file "app/javascript/images/logo_white_horizontal.svg"
127
+ copy_file "app/javascript/images/logo_white_stacked.svg"
128
+ copy_file "app/javascript/images/logo_white_symbol.svg"
129
+ copy_file "app/javascript/images/tgav_logo_white_symbol.svg"
130
+ end
131
+
132
+ def create_application_controller
133
+ copy_file "app/controllers/application_controller.rb", force: true
134
+ end
135
+
136
+ def create_application_layouts
137
+ copy_file "app/views/shared/_head.html.erb"
138
+ copy_file "app/views/shared/_notices.html.erb"
139
+ copy_file "app/views/shared/_navbar.html.erb"
140
+ copy_file "app/views/shared/_footer.html.erb"
141
+ copy_file "app/views/layouts/application.html.erb", force: true
142
+ copy_file "app/views/layouts/land.html.erb"
143
+ end
144
+
145
+ def create_application_helpers
146
+ copy_file "app/helpers/application_helper.rb", force: true
147
+ end
148
+
149
+ def install_meta_tags
150
+ copy_file "config/initializers/meta_tags.rb"
151
+ copy_file "app/helpers/meta_tags_helper.rb"
152
+ end
153
+
154
+ def install_pages
155
+ copy_file "app/javascript/images/pablo-done.png"
156
+ copy_file "app/javascript/images/github.svg"
157
+ copy_file "app/javascript/images/rails.svg"
158
+ copy_file "app/javascript/images/webpack.svg"
159
+ copy_file "app/javascript/images/stimulus.svg"
160
+ copy_file "app/javascript/images/tailwind.svg"
161
+ copy_file "app/javascript/images/layout-top-panel-6.svg"
162
+ copy_file "app/javascript/images/shield-protected.svg"
163
+ copy_file "app/javascript/images/facebook.svg"
164
+ copy_file "app/javascript/images/user.svg"
165
+ copy_file "app/javascript/images/layout-left-panel-1.svg"
166
+ copy_file "app/javascript/images/right-circle.svg"
167
+ copy_file "app/javascript/images/group.svg"
168
+ copy_file "app/javascript/images/shield-check.svg"
169
+ copy_file "app/javascript/images/repeat.svg"
170
+ copy_file "app/javascript/images/credit-card.svg"
171
+ copy_file "app/javascript/images/sale-2.svg"
172
+ copy_file "app/javascript/images/file.svg"
173
+ copy_file "app/javascript/images/stripe.svg"
174
+ copy_file "app/javascript/images/paypal.svg"
175
+ copy_file "app/javascript/images/outlet.svg"
176
+ copy_file "app/javascript/images/notifications-1.svg"
177
+ copy_file "app/javascript/images/address-book-2.svg"
178
+ copy_file "app/javascript/images/mail-opened.svg"
179
+ copy_file "app/javascript/images/sending-mail.svg"
180
+ copy_file "app/javascript/images/chart-bar-1.svg"
181
+ copy_file "app/javascript/images/selected-file.svg"
182
+ copy_file "app/javascript/images/display-1.svg"
183
+ copy_file "app/javascript/images/cloud-upload.svg"
184
+ copy_file "app/forms/newsletter_form.rb"
185
+ copy_file "app/adapters/mailchimp/base_adapter.rb"
186
+ copy_file "app/models/concerns/coming_soon_pending_subscribable.rb"
187
+ directory "app/views/pages"
188
+ copy_file "app/controllers/pages_controller.rb"
189
+ route "root to: 'pages#home'"
190
+ route "post '/subscribe', to: 'pages#subscribe'"
191
+ end
192
+
193
+ def create_and_migrate_db
194
+ rails_command "db:create"
195
+ rails_command "db:migrate"
196
+ end
197
+
198
+ def tidy_up_codebase
199
+ run "bundle exec standardrb --fix"
200
+ end
201
+
202
+ def display_readme_in_terminal
203
+ readme "README"
204
+ end
205
+ end
206
+ end
207
+ end