potassium 3.0.0 → 5.1.1
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 +15 -0
- data/README.md +6 -4
- data/lib/potassium/assets/README.yml +9 -3
- data/lib/potassium/assets/bin/cibuild.erb +9 -1
- data/lib/potassium/assets/bin/setup.erb +2 -2
- data/lib/potassium/assets/bin/update.erb +32 -0
- data/lib/potassium/assets/circle.yml +1 -0
- data/lib/potassium/assets/config/{mailer.rb → mailer.rb.erb} +1 -1
- data/lib/potassium/assets/config/sentry.rb.erb +3 -1
- data/lib/potassium/assets/package.json +3 -0
- data/lib/potassium/assets/redis.yml +9 -0
- data/lib/potassium/assets/sidekiq.rb +17 -0
- data/lib/potassium/assets/sidekiq.yml +4 -0
- data/lib/potassium/assets/sidekiq_scheduler.yml +9 -0
- data/lib/potassium/cli_options.rb +12 -8
- data/lib/potassium/generators/application.rb +6 -0
- data/lib/potassium/recipes/admin.rb +1 -1
- data/lib/potassium/recipes/angular_admin.rb +1 -1
- data/lib/potassium/recipes/api.rb +1 -1
- data/lib/potassium/recipes/background_processor.rb +55 -0
- data/lib/potassium/recipes/ci.rb +3 -0
- data/lib/potassium/recipes/draper.rb +1 -2
- data/lib/potassium/recipes/front_end.rb +61 -0
- data/lib/potassium/recipes/heroku.rb +1 -2
- data/lib/potassium/recipes/mailer.rb +3 -5
- data/lib/potassium/recipes/power_types.rb +28 -0
- data/lib/potassium/recipes/schedule.rb +10 -18
- data/lib/potassium/recipes/yarn.rb +14 -0
- data/lib/potassium/templates/application.rb +12 -6
- data/lib/potassium/version.rb +3 -3
- data/spec/features/background_processor_spec.rb +66 -0
- data/spec/features/front_end.rb +30 -0
- data/spec/features/heroku_spec.rb +2 -2
- data/spec/features/power_types_spec.rb +37 -0
- data/spec/features/schedule_spec.rb +19 -0
- metadata +26 -16
- data/lib/potassium/assets/.bowerrc +0 -3
- data/lib/potassium/assets/bower.json +0 -4
- data/lib/potassium/assets/config/clock.rb.erb +0 -16
- data/lib/potassium/recipes/bower.rb +0 -13
- data/lib/potassium/recipes/delayed_job.rb +0 -38
- data/lib/potassium/recipes/git.rb +0 -9
- data/spec/features/clockwork_spec.rb +0 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 479102f8435587025fd50c9c83bdc108773ceb61
|
|
4
|
+
data.tar.gz: 9e5e03778e9218dd0fe9efa1ea1dc4899e7aad96
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cc9c99c8da67c66bb18bb8f6ae214093e36eb42524349578403cfcccaa783642cc65a73e6f9257e899b7cf23f6124150544ab6eb3886a8979eec911df1e8f939
|
|
7
|
+
data.tar.gz: 1dfb6a5abbf465972f2ea326c2faa718e9117107efadb065c512cebb54ee5dfde3727e3c532ddd79763b0360ff8a316690ae18b5e6ad9f7bc37a3f29f4aaea78
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 5.1.1
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
- Rails 5.1.1 (`potassium` version will follow `Rails` version from now on) #136
|
|
9
|
+
- Adds front_end option to include Vue.js and Angular 2 (using `webpacker`)
|
|
10
|
+
- Replaces `bower` by `yarn`
|
|
11
|
+
- Add sidekiq as background processor alternative
|
|
12
|
+
|
|
13
|
+
Bugfixes:
|
|
14
|
+
- Force `DelayedJobs` migration to use 4.2 `ActiveRecord` class
|
|
15
|
+
- Fix custom `ActiveAdmin` footer
|
|
16
|
+
- Remove heroku dependency from mailer recipe, #124
|
|
17
|
+
- Sentry environment was not being overriden, #123
|
|
18
|
+
- Support for Draper gem
|
|
19
|
+
|
|
5
20
|
## 3.0.0
|
|
6
21
|
|
|
7
22
|
Features:
|
data/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Potassium Rails apps includes the following gems and technologies:
|
|
|
38
38
|
|
|
39
39
|
- [Ruby](https://www.ruby-lang.org) Set the project ruby version based on http://ruby.platan.us/latest
|
|
40
40
|
- [dotenv](https://github.com/bkeepers/dotenv) load environmental variables in development
|
|
41
|
-
- [
|
|
41
|
+
- [Yarn](https://yarnpkg.com) for frontend assets packages.
|
|
42
42
|
- [EditorConfig](http://editorconfig.org) for keeping all our editor configurations the same.
|
|
43
43
|
- [pry](http://pryrepl.org) and [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug) for a less painful debugging experience.
|
|
44
44
|
- [RSpec](http://rspec.info) for unit and integration testing.
|
|
@@ -59,10 +59,12 @@ The following optional integrations are added too:
|
|
|
59
59
|
- [ActiveAdminAddons](https://github.com/platanus/activeadmin_addons) for some help with ActiveAdmin.
|
|
60
60
|
- [Pundit](https://github.com/elabs/pundit) for role-based authorization.
|
|
61
61
|
- [DelayedJob](https://github.com/collectiveidea/delayed_job) to execute longer tasks in the background.]
|
|
62
|
+
- [Sidekiq](https://github.com/mperham/sidekiq) a simple, efficient background processing for Ruby.
|
|
63
|
+
- [Sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler) to run scheduled processes
|
|
62
64
|
- Mailing configuration for [AWS SES](https://github.com/aws/aws-sdk-rails)
|
|
63
65
|
and [Sendgrid](https://github.com/platanus/send_grid_mailer) with recipient interceptor support
|
|
64
|
-
- [Clockwork](https://github.com/Rykian/clockwork) to run scheduled processes
|
|
65
66
|
- [Sentry](https://sentry.io) to monitor exceptions and errors
|
|
67
|
+
- [Vue.js](https://vuejs.org) or [Angular 2](https://angular.io/) for frontend development
|
|
66
68
|
|
|
67
69
|
A few more things are added to the project:
|
|
68
70
|
|
|
@@ -99,7 +101,7 @@ When you choose to deploy to heroku a few extra things are added for the project
|
|
|
99
101
|
|
|
100
102
|
| index | buildpack | description |
|
|
101
103
|
|-------|-----------|-------------|
|
|
102
|
-
| 1. | [
|
|
104
|
+
| 1. | [nodejs][heroku-buildpack-nodejs] | to support javascript package management with `yarn` and `webpack` based asset compiling |
|
|
103
105
|
| 2. | [ruby-version][heroku-buildpack-ruby-version] | to support the use of `.ruby-version` file to instruct heroku which ruby version to use |
|
|
104
106
|
| 3. | [ruby][heroku-buildpack-ruby] | the base buildpack to run ruby applications |
|
|
105
107
|
| 4. | [ruby-deploy-tasks][buildpack-deploy-tasks] | to run rake task after the deployment is complete, for example `db:migrate` |
|
|
@@ -135,7 +137,7 @@ Go to https://monkeyci.platan.us, choose the repository from the list and hit
|
|
|
135
137
|
[heroku-logging]: https://devcenter.heroku.com/articles/logging#writing-to-your-log
|
|
136
138
|
[procfile]: https://devcenter.heroku.com/articles/procfile
|
|
137
139
|
[heroku-buildpack-ruby-version]: http://github.com/platanus/heroku-buildpack-ruby-version
|
|
138
|
-
[heroku-buildpack-
|
|
140
|
+
[heroku-buildpack-nodejs]: https://github.com/heroku/heroku-buildpack-nodejs
|
|
139
141
|
[heroku-buildpack-ruby]: http://github.com/heroku/heroku-buildpack-ruby
|
|
140
142
|
[heroku-buildpack-multi]: http://github.com/heroku/heroku-buildpack-multi
|
|
141
143
|
[buildpack-deploy-tasks]: http://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks
|
|
@@ -72,7 +72,7 @@ readme:
|
|
|
72
72
|
The emails can be send through the gem `<%= get(:mailer_gem_name) %>` using the `<%= get(:mailer_delivery_method) %>` delivery method.
|
|
73
73
|
All the `action_mailer` configuration can be found at `config/mailer.rb`, which is loaded only on production environments.
|
|
74
74
|
|
|
75
|
-
All emails should be sent using background jobs, by default we install `
|
|
75
|
+
All emails should be sent using background jobs, by default we install `sidekiq` for that purpuse.
|
|
76
76
|
|
|
77
77
|
#### Testing in staging
|
|
78
78
|
|
|
@@ -92,15 +92,21 @@ readme:
|
|
|
92
92
|
delayed_job:
|
|
93
93
|
title: "Queue System"
|
|
94
94
|
body: "For managing tasks in the background, this project uses [DelayedJob](https://github.com/collectiveidea/delayed_job)"
|
|
95
|
-
|
|
95
|
+
sidekiq:
|
|
96
|
+
title: "Queue System"
|
|
97
|
+
body: "For managing tasks in the background, this project uses [Sidekiq](https://github.com/mperham/sidekiq)"
|
|
98
|
+
sidekiq_scheduler:
|
|
96
99
|
title: "Scheduled Tasks"
|
|
97
|
-
body: "To schedule recurring work at particular times or dates, this project uses [
|
|
100
|
+
body: "To schedule recurring work at particular times or dates, this project uses [Sidekiq Scheduler](https://github.com/moove-it/sidekiq-scheduler)"
|
|
98
101
|
sentry:
|
|
99
102
|
title: "Error Reporting"
|
|
100
103
|
body: "To report our errors we use [Sentry](https://github.com/getsentry/raven-ruby)"
|
|
101
104
|
draper:
|
|
102
105
|
title: "Presentation Layer"
|
|
103
106
|
body: "This project uses [Draper](https://github.com/drapergem/draper) to add an object-oriented layer of presentation logic"
|
|
107
|
+
power_types:
|
|
108
|
+
title: "Rails pattern enforcing types"
|
|
109
|
+
body: "This projects uses [Power-Types](https://github.com/platanus/power-types) to generate Services, Commands, Utils and Values."
|
|
104
110
|
seeds:
|
|
105
111
|
title: "Seeds"
|
|
106
112
|
body: |
|
|
@@ -44,6 +44,10 @@ dependencies(){
|
|
|
44
44
|
docker-compose $DOCKER_COMPOSE_ARGS run test bundle install
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
assets() {
|
|
48
|
+
docker-compose $DOCKER_COMPOSE_ARGS run test /bin/bash -c "bin/setup && bundle exec rake assets:precompile"
|
|
49
|
+
}
|
|
50
|
+
|
|
47
51
|
# Prepare database
|
|
48
52
|
database(){
|
|
49
53
|
docker-compose $DOCKER_COMPOSE_ARGS run test bundle exec rake db:create db:schema:load
|
|
@@ -63,6 +67,7 @@ no_ci(){
|
|
|
63
67
|
build
|
|
64
68
|
wait_services
|
|
65
69
|
dependencies
|
|
70
|
+
assets
|
|
66
71
|
database
|
|
67
72
|
tests
|
|
68
73
|
}
|
|
@@ -77,6 +82,9 @@ case "$1" in
|
|
|
77
82
|
"deps"|"dependencies")
|
|
78
83
|
dependencies
|
|
79
84
|
;;
|
|
85
|
+
"assets")
|
|
86
|
+
assets
|
|
87
|
+
;;
|
|
80
88
|
"db"|"database")
|
|
81
89
|
database
|
|
82
90
|
;;
|
|
@@ -87,6 +95,6 @@ case "$1" in
|
|
|
87
95
|
build
|
|
88
96
|
;;
|
|
89
97
|
*)
|
|
90
|
-
echo "Usage: cibuild [services|deps|db|specs|build]"
|
|
98
|
+
echo "Usage: cibuild [services|deps|assets|db|specs|build]"
|
|
91
99
|
;;
|
|
92
100
|
esac
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'pathname'
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
include FileUtils
|
|
5
|
+
|
|
6
|
+
# path to your application root.
|
|
7
|
+
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
|
8
|
+
|
|
9
|
+
def system!(*args)
|
|
10
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
chdir APP_ROOT do
|
|
14
|
+
# This script is a way to update your development environment automatically.
|
|
15
|
+
# Add necessary update steps to this file.
|
|
16
|
+
|
|
17
|
+
puts '== Installing dependencies =='
|
|
18
|
+
system! 'gem install bundler --conservative'
|
|
19
|
+
|
|
20
|
+
puts '== Installing YARN stuff =='
|
|
21
|
+
system! 'bin/yarn install'
|
|
22
|
+
|
|
23
|
+
system('bundle check') || system!('bundle install')
|
|
24
|
+
puts "\n== Updating database =="
|
|
25
|
+
system! 'bin/rails db:migrate'
|
|
26
|
+
|
|
27
|
+
puts "\n== Removing old logs and tempfiles =="
|
|
28
|
+
system! 'bin/rails log:clear tmp:clear'
|
|
29
|
+
|
|
30
|
+
puts "\n== Restarting application server =="
|
|
31
|
+
system! 'bin/rails restart'
|
|
32
|
+
end
|
|
@@ -13,6 +13,6 @@ Rails.application.config.action_mailer.asset_host = ASSET_HOST
|
|
|
13
13
|
if ENV["EMAIL_RECIPIENTS"].present?
|
|
14
14
|
Mail.register_interceptor RecipientInterceptor.new(
|
|
15
15
|
ENV["EMAIL_RECIPIENTS"],
|
|
16
|
-
subject_prefix: "[#{Heroku.stage.upcase}]"
|
|
16
|
+
subject_prefix: "[<%= get(:heroku) ? '#{Heroku.stage.upcase}' : '#{Rails.env}' %>]"
|
|
17
17
|
)
|
|
18
18
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
if Rails.env.production?
|
|
2
2
|
Raven.configure do |config|
|
|
3
3
|
config.sanitize_fields = Rails.application.config.filter_parameters.map(&:to_s)
|
|
4
|
-
|
|
4
|
+
<% if get(:heroku) %>
|
|
5
|
+
config.current_environment = Heroku.stage
|
|
6
|
+
<% end %>
|
|
5
7
|
end
|
|
6
8
|
|
|
7
9
|
# In case you want to group the events with different ids in the
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'sidekiq'
|
|
2
|
+
require 'sidekiq/web'
|
|
3
|
+
|
|
4
|
+
redis_config = Rails.application.config_for(:redis)
|
|
5
|
+
|
|
6
|
+
Sidekiq.configure_client do |config|
|
|
7
|
+
config.redis = redis_config
|
|
8
|
+
end
|
|
9
|
+
Sidekiq.configure_server do |config|
|
|
10
|
+
config.redis = redis_config
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
if !Rails.env.development?
|
|
14
|
+
Sidekiq::Web.use Rack::Auth::Basic do |username, password|
|
|
15
|
+
username == 'admin' && password == ENV["SIDEKIQ_ADMIN_PASSWORD"]
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -83,12 +83,10 @@ module Potassium::CliOptions # rubocop:disable Metrics/ModuleLength
|
|
|
83
83
|
default_test_value: false
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
|
-
type: :
|
|
87
|
-
name: "
|
|
88
|
-
desc: "
|
|
89
|
-
|
|
90
|
-
default_value: "none",
|
|
91
|
-
default_test_value: false
|
|
86
|
+
type: :flag,
|
|
87
|
+
name: "background_processor",
|
|
88
|
+
desc: "Decides which background processor to use. Available: sidekiq, delayed_job, none",
|
|
89
|
+
default_test_value: "sidekiq"
|
|
92
90
|
},
|
|
93
91
|
{
|
|
94
92
|
type: :switch,
|
|
@@ -116,8 +114,8 @@ module Potassium::CliOptions # rubocop:disable Metrics/ModuleLength
|
|
|
116
114
|
},
|
|
117
115
|
{
|
|
118
116
|
type: :switch,
|
|
119
|
-
name: "
|
|
120
|
-
desc: "Whether to use
|
|
117
|
+
name: "schedule",
|
|
118
|
+
desc: "Whether to use sidekiq-scheduler as job scheduler",
|
|
121
119
|
negatable: true,
|
|
122
120
|
default_value: "none",
|
|
123
121
|
default_test_value: false
|
|
@@ -129,6 +127,12 @@ module Potassium::CliOptions # rubocop:disable Metrics/ModuleLength
|
|
|
129
127
|
negatable: true,
|
|
130
128
|
default_value: "none",
|
|
131
129
|
default_test_value: false
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: :flag,
|
|
133
|
+
name: :front_end,
|
|
134
|
+
desc: "Decides which front-end framework to use. Available: Vue, Angular 2, None",
|
|
135
|
+
default_test_value: "None"
|
|
132
136
|
}
|
|
133
137
|
]
|
|
134
138
|
|
|
@@ -15,6 +15,12 @@ module Potassium
|
|
|
15
15
|
template_location = File.expand_path('../templates/application.rb', File.dirname(__FILE__))
|
|
16
16
|
instance_eval File.read(template_location), template_location
|
|
17
17
|
super
|
|
18
|
+
|
|
19
|
+
after_bundle do
|
|
20
|
+
git :init
|
|
21
|
+
git add: "."
|
|
22
|
+
git commit: %{ -m 'Initial commit' -q }
|
|
23
|
+
end
|
|
18
24
|
end
|
|
19
25
|
end
|
|
20
26
|
end
|
|
@@ -43,7 +43,7 @@ class Recipes::Admin < Rails::AppBuilder
|
|
|
43
43
|
gsub_file initializer, /(#{Regexp.escape(line)})/mi do |_match|
|
|
44
44
|
<<-HERE.gsub(/^ {11}/, '')
|
|
45
45
|
class CustomFooter < ActiveAdmin::Component
|
|
46
|
-
def build
|
|
46
|
+
def build _arg
|
|
47
47
|
super(id: "footer")
|
|
48
48
|
para "Powered by Platanus"
|
|
49
49
|
end
|
|
@@ -29,7 +29,7 @@ class Recipes::Api < Rails::AppBuilder
|
|
|
29
29
|
insert_into_file "config/routes.rb", after: line do
|
|
30
30
|
<<-HERE.gsub(/^ {8}/, '')
|
|
31
31
|
scope path: '/api' do
|
|
32
|
-
api_version(module: "Api::V1", path: { value: "v1" }) do
|
|
32
|
+
api_version(module: "Api::V1", path: { value: "v1" }, defaults: { format: 'json' }) do
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
HERE
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class Recipes::BackgroundProcessor < Rails::AppBuilder
|
|
2
|
+
def ask
|
|
3
|
+
response = if selected?(:email_service, :none)
|
|
4
|
+
answer(:background_processor) do
|
|
5
|
+
Ask.confirm("Do you want to use Sidekiq for background job processing?")
|
|
6
|
+
end
|
|
7
|
+
else
|
|
8
|
+
info "Note: Emails should be sent on background jobs. We'll install sidekiq"
|
|
9
|
+
true
|
|
10
|
+
end
|
|
11
|
+
set(:background_processor, response)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create
|
|
15
|
+
add_sidekiq if get(:background_processor)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def install
|
|
19
|
+
ask
|
|
20
|
+
heroku = load_recipe(:heroku)
|
|
21
|
+
set(:heroku, heroku.installed?)
|
|
22
|
+
create
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def installed?
|
|
26
|
+
gem_exists?(/sidekiq/)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def add_sidekiq
|
|
30
|
+
gather_gem("sidekiq")
|
|
31
|
+
add_adapters("sidekiq")
|
|
32
|
+
add_readme_section :internal_dependencies, :sidekiq
|
|
33
|
+
edit_procfile("bundle exec sidekiq")
|
|
34
|
+
append_to_file(".env.development", "DB_POOL=25\n")
|
|
35
|
+
copy_file("../assets/sidekiq.rb", "config/initializers/sidekiq.rb", force: true)
|
|
36
|
+
copy_file("../assets/sidekiq.yml", "config/sidekiq.yml", force: true)
|
|
37
|
+
copy_file("../assets/redis.yml", "config/redis.yml", force: true)
|
|
38
|
+
|
|
39
|
+
insert_into_file "config/routes.rb", after: "Rails.application.routes.draw do\n" do
|
|
40
|
+
<<-HERE.gsub(/^ {6}/, '')
|
|
41
|
+
mount Sidekiq::Web => '/queue'
|
|
42
|
+
HERE
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def edit_procfile(cmd)
|
|
47
|
+
gsub_file("Procfile", /^.*$/m) { |match| "#{match}worker: #{cmd}" } if selected?(:heroku)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def add_adapters(name)
|
|
51
|
+
application("config.active_job.queue_adapter = :#{name}")
|
|
52
|
+
application "config.active_job.queue_adapter = :inline", env: "development"
|
|
53
|
+
application "config.active_job.queue_adapter = :test", env: "test"
|
|
54
|
+
end
|
|
55
|
+
end
|
data/lib/potassium/recipes/ci.rb
CHANGED
|
@@ -21,8 +21,7 @@ class Recipes::Draper < Rails::AppBuilder
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def add_draper
|
|
24
|
-
gather_gem '
|
|
25
|
-
gather_gem 'draper'
|
|
24
|
+
gather_gem 'draper', '3.0.0.pre1'
|
|
26
25
|
add_readme_section :internal_dependencies, :draper
|
|
27
26
|
create_file 'app/decorators/.keep'
|
|
28
27
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
class Recipes::FrontEnd < Rails::AppBuilder
|
|
2
|
+
def ask
|
|
3
|
+
frameworks = {
|
|
4
|
+
vue: "Vue",
|
|
5
|
+
angular: "Angular 2",
|
|
6
|
+
none: "None"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
framework = answer(:front_end) do
|
|
10
|
+
frameworks.keys[
|
|
11
|
+
Ask.list("Which front-end framework are you going to use?", frameworks.values)
|
|
12
|
+
]
|
|
13
|
+
end
|
|
14
|
+
set :front_end, framework.to_sym
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def create
|
|
18
|
+
return if [:none, :None].include? get(:front_end).to_sym
|
|
19
|
+
|
|
20
|
+
gather_gem 'webpacker', github: 'rails/webpacker'
|
|
21
|
+
|
|
22
|
+
after(:gem_install) do
|
|
23
|
+
value = get(:front_end)
|
|
24
|
+
run "rails webpacker:install"
|
|
25
|
+
run "rails webpacker:install:#{value}" if value
|
|
26
|
+
|
|
27
|
+
if value == :vue
|
|
28
|
+
application_js_file = "app/javascript/packs/application.js"
|
|
29
|
+
FileUtils.move "app/javascript/packs/hello_vue.js", application_js_file
|
|
30
|
+
gsub_file application_js_file, %r{\/\/.*\n}, ""
|
|
31
|
+
|
|
32
|
+
js_pack_tag = "\n <%= javascript_pack_tag 'application' %>\n"
|
|
33
|
+
layout_file = "app/views/layouts/application.html.erb"
|
|
34
|
+
insert_into_file layout_file, js_pack_tag, after: "<%= csrf_meta_tags %>"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def install
|
|
40
|
+
ask
|
|
41
|
+
create
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def installed?
|
|
45
|
+
package_file = 'package.json'
|
|
46
|
+
return false unless file_exist?(package_file)
|
|
47
|
+
package_content = read_file(package_file)
|
|
48
|
+
package_content.include?("\"@angular/core\"") || package_content.include?("\"vue\"")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def frameworks(framework)
|
|
54
|
+
frameworks = {
|
|
55
|
+
vue: "vue",
|
|
56
|
+
angular: "angular",
|
|
57
|
+
none: nil
|
|
58
|
+
}
|
|
59
|
+
frameworks[framework]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -36,10 +36,9 @@ class Recipes::Heroku < Rails::AppBuilder
|
|
|
36
36
|
def add_heroku
|
|
37
37
|
gather_gems(:production) do
|
|
38
38
|
gather_gem('rails_stdout_logging')
|
|
39
|
+
gather_gem('heroku-stage')
|
|
39
40
|
end
|
|
40
41
|
|
|
41
|
-
gather_gem 'heroku-stage'
|
|
42
|
-
|
|
43
42
|
copy_file '../assets/Procfile', 'Procfile'
|
|
44
43
|
copy_file '../assets/.buildpacks', '.buildpacks'
|
|
45
44
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
class Recipes::Mailer < Rails::AppBuilder
|
|
2
2
|
def ask
|
|
3
|
-
info "Note: Emails should be sent on background jobs. We'll install delayed_jobs recipe"
|
|
4
3
|
email_services = {
|
|
5
4
|
aws_ses: "Amazon SES",
|
|
6
5
|
sendgrid: "Sendgrid (beta)",
|
|
@@ -25,8 +24,8 @@ class Recipes::Mailer < Rails::AppBuilder
|
|
|
25
24
|
dependencies(email_service)
|
|
26
25
|
config(email_service)
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
background_processor = load_recipe(:background_processor)
|
|
28
|
+
background_processor.add_sidekiq unless background_processor.installed?
|
|
30
29
|
end
|
|
31
30
|
|
|
32
31
|
def install
|
|
@@ -58,12 +57,11 @@ class Recipes::Mailer < Rails::AppBuilder
|
|
|
58
57
|
else
|
|
59
58
|
gather_gem service[:gem_name]
|
|
60
59
|
end
|
|
61
|
-
gather_gem 'heroku-stage'
|
|
62
60
|
gather_gem 'recipient_interceptor'
|
|
63
61
|
end
|
|
64
62
|
|
|
65
63
|
def config(service)
|
|
66
|
-
template "../assets/config/mailer.rb", 'config/mailer.rb'
|
|
64
|
+
template "../assets/config/mailer.rb.erb", 'config/mailer.rb'
|
|
67
65
|
gsub_file 'config/environments/production.rb', /$\s*config.action_mailer.*/, ''
|
|
68
66
|
append_to_file '.env.development', "APPLICATION_HOST=localhost:3000\n"
|
|
69
67
|
append_to_file '.env.development', "EMAIL_RECIPIENTS=\n"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class Recipes::PowerTypes < Rails::AppBuilder
|
|
2
|
+
def create
|
|
3
|
+
add_power_types
|
|
4
|
+
generate_folders
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def install
|
|
8
|
+
add_power_types
|
|
9
|
+
generate_folders
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def installed?
|
|
13
|
+
gem_exists?(/power-types/)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def add_power_types
|
|
19
|
+
gather_gem 'power-types'
|
|
20
|
+
add_readme_section :internal_dependencies, :power_types
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def generate_folders
|
|
24
|
+
after(:gem_install) do
|
|
25
|
+
generate "power_types:init"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,33 +1,25 @@
|
|
|
1
1
|
class Recipes::Schedule < Rails::AppBuilder
|
|
2
2
|
def ask
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
if selected?(:background_processor)
|
|
4
|
+
response = answer(:schedule) { Ask.confirm("Do you need to schedule jobs?") }
|
|
5
|
+
end
|
|
6
|
+
set(:schedule, response)
|
|
5
7
|
end
|
|
6
8
|
|
|
7
9
|
def create
|
|
8
|
-
if selected?(:
|
|
9
|
-
gather_gem '
|
|
10
|
-
|
|
11
|
-
add_readme_section :internal_dependencies, :clockwork
|
|
12
|
-
|
|
13
|
-
if selected?(:heroku)
|
|
14
|
-
procfile('scheduler', 'bundle exec clockwork config/clock.rb')
|
|
15
|
-
end
|
|
10
|
+
if selected?(:schedule)
|
|
11
|
+
gather_gem 'sidekiq-scheduler'
|
|
12
|
+
add_readme_section :internal_dependencies, :sidekiq_scheduler
|
|
16
13
|
end
|
|
14
|
+
template '../assets/sidekiq_scheduler.yml', 'config/sidekiq.yml', force: true
|
|
17
15
|
end
|
|
18
16
|
|
|
19
17
|
def install
|
|
20
|
-
|
|
21
|
-
set(:heroku, heroku.installed?)
|
|
22
|
-
|
|
23
|
-
error_reporting = load_recipe(:error_reporting)
|
|
24
|
-
set(:report_error, error_reporting.installed?)
|
|
25
|
-
|
|
26
|
-
set(:scheduled, true)
|
|
18
|
+
set(:schedule, true)
|
|
27
19
|
create
|
|
28
20
|
end
|
|
29
21
|
|
|
30
22
|
def installed?
|
|
31
|
-
gem_exists?(
|
|
23
|
+
gem_exists?("sidekiq-scheduler") && file_exist?('config/sidekiq.yml')
|
|
32
24
|
end
|
|
33
25
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class Recipes::Yarn < Rails::AppBuilder
|
|
2
|
+
def create
|
|
3
|
+
template '../assets/package.json', 'package.json' unless get(:front_end)
|
|
4
|
+
template '../assets/bin/update.erb', 'bin/update', force: true
|
|
5
|
+
application "config.assets.paths << Rails.root.join('node_modules')"
|
|
6
|
+
append_to_file ".gitignore", "node_modules/\n"
|
|
7
|
+
|
|
8
|
+
if get(:heroku)
|
|
9
|
+
node_buildpack_url = 'https://github.com/heroku/heroku-buildpack-nodejs'
|
|
10
|
+
insert_point = 'https://github.com/platanus/heroku-buildpack-ruby-version.git'
|
|
11
|
+
inject_into_file '.buildpacks', "#{node_buildpack_url}\n", before: insert_point
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -12,12 +12,18 @@ run_action(:cleaning) do
|
|
|
12
12
|
gather_gem("spring")
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
run_action(:add_utils) do
|
|
16
|
+
gather_gem("enumerize")
|
|
17
|
+
end
|
|
18
|
+
|
|
15
19
|
run_action(:asking) do
|
|
16
20
|
ask :database
|
|
17
21
|
ask :devise
|
|
18
22
|
ask :admin
|
|
23
|
+
ask :front_end
|
|
19
24
|
ask :angular_admin
|
|
20
|
-
ask :
|
|
25
|
+
ask :mailer
|
|
26
|
+
ask :background_processor
|
|
21
27
|
ask :schedule
|
|
22
28
|
ask :error_reporting
|
|
23
29
|
ask :pundit
|
|
@@ -25,7 +31,6 @@ run_action(:asking) do
|
|
|
25
31
|
ask :api
|
|
26
32
|
ask :draper
|
|
27
33
|
ask :paperclip
|
|
28
|
-
ask :mailer
|
|
29
34
|
ask :heroku
|
|
30
35
|
ask :github
|
|
31
36
|
end
|
|
@@ -40,11 +45,12 @@ run_action(:recipe_loading) do
|
|
|
40
45
|
create :annotate
|
|
41
46
|
create :ruby
|
|
42
47
|
create :env
|
|
43
|
-
create :
|
|
48
|
+
create :yarn
|
|
44
49
|
create :editorconfig
|
|
45
50
|
create :aws_sdk
|
|
46
|
-
create :schedule
|
|
47
51
|
create :mailer
|
|
52
|
+
create :background_processor
|
|
53
|
+
create :schedule
|
|
48
54
|
create :i18n
|
|
49
55
|
create :pry
|
|
50
56
|
create :better_errors
|
|
@@ -53,19 +59,19 @@ run_action(:recipe_loading) do
|
|
|
53
59
|
create :angular_admin
|
|
54
60
|
create :seeds
|
|
55
61
|
create :error_reporting
|
|
56
|
-
create :delayed_job
|
|
57
62
|
create :pundit
|
|
58
63
|
create :testing
|
|
59
64
|
create :secrets
|
|
60
|
-
create :git
|
|
61
65
|
create :api
|
|
62
66
|
create :draper
|
|
67
|
+
create :power_types
|
|
63
68
|
create :rack_cors
|
|
64
69
|
create :paperclip
|
|
65
70
|
create :tzinfo
|
|
66
71
|
create :script
|
|
67
72
|
create :github
|
|
68
73
|
create :cleanup
|
|
74
|
+
create :front_end
|
|
69
75
|
end
|
|
70
76
|
|
|
71
77
|
info "Gathered enough information. Applying the template. Wait a minute."
|
data/lib/potassium/version.rb
CHANGED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "BackgroundProcessor" do
|
|
4
|
+
context "working with sidekiq" do
|
|
5
|
+
before :all do
|
|
6
|
+
drop_dummy_database
|
|
7
|
+
remove_project_directory
|
|
8
|
+
create_dummy_project("background_processor" => "sidekiq", "heroku" => true)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "adds sidekiq gem to Gemfile" do
|
|
12
|
+
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
13
|
+
expect(gemfile_content).to include("gem 'sidekiq'")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "adds queue_adapter to application.rb" do
|
|
17
|
+
content = IO.read("#{project_path}/config/application.rb")
|
|
18
|
+
expect(content).to include("config.active_job.queue_adapter = :sidekiq")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "adds inline queue_adapter to development.rb" do
|
|
22
|
+
content = IO.read("#{project_path}/config/environments/development.rb")
|
|
23
|
+
expect(content).to include("config.active_job.queue_adapter = :inline")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "adds test queue_adapter to test.rb" do
|
|
27
|
+
content = IO.read("#{project_path}/config/environments/test.rb")
|
|
28
|
+
expect(content).to include("config.active_job.queue_adapter = :test")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "modifies Procfile" do
|
|
32
|
+
content = IO.read("#{project_path}/Procfile")
|
|
33
|
+
expect(content).to include("worker: bundle exec sidekiq")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "modifies README" do
|
|
37
|
+
content = IO.read("#{project_path}/README.md")
|
|
38
|
+
expect(content).to include("this project uses [Sidekiq]")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "adds ENV vars" do
|
|
42
|
+
content = IO.read("#{project_path}/.env.development")
|
|
43
|
+
expect(content).to include("DB_POOL=25")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "adds sidekiq.rb file" do
|
|
47
|
+
content = IO.read("#{project_path}/config/initializers/sidekiq.rb")
|
|
48
|
+
expect(content).to include("require 'sidekiq'")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "adds sidekiq.yml file" do
|
|
52
|
+
content = IO.read("#{project_path}/config/sidekiq.yml")
|
|
53
|
+
expect(content).to include("concurrency: 5")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "adds redis.yml file" do
|
|
57
|
+
content = IO.read("#{project_path}/config/redis.yml")
|
|
58
|
+
expect(content).to include("REDIS_HOST")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "mounts sidekiq app" do
|
|
62
|
+
content = IO.read("#{project_path}/config/routes.rb")
|
|
63
|
+
expect(content).to include("mount Sidekiq::Web => '/queue'")
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Front end" do
|
|
4
|
+
before(:all) { drop_dummy_database }
|
|
5
|
+
before(:each) { remove_project_directory }
|
|
6
|
+
|
|
7
|
+
it "creates a project wihtout a front end framework" do
|
|
8
|
+
create_dummy_project("front_end" => "None")
|
|
9
|
+
gemfile = IO.read("#{project_path}/Gemfile")
|
|
10
|
+
expect(gemfile).not_to include('webpacker')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "creates a project wihtout vue as front end framework" do
|
|
14
|
+
create_dummy_project("front_end" => "angular")
|
|
15
|
+
gemfile = IO.read("#{project_path}/Gemfile")
|
|
16
|
+
node_modules_file = IO.read("#{project_path}/package.json")
|
|
17
|
+
|
|
18
|
+
expect(gemfile).to include('webpacker')
|
|
19
|
+
expect(node_modules_file).to include("\"@angular/core\"")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "creates a project wihtout vue as front end framework" do
|
|
23
|
+
create_dummy_project("front_end" => "vue")
|
|
24
|
+
gemfile = IO.read("#{project_path}/Gemfile")
|
|
25
|
+
node_modules_file = IO.read("#{project_path}/package.json")
|
|
26
|
+
|
|
27
|
+
expect(gemfile).to include('webpacker')
|
|
28
|
+
expect(node_modules_file).to include("\"vue\"")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -6,7 +6,7 @@ RSpec.describe "Heroku" do
|
|
|
6
6
|
remove_project_directory
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
it "creates a project for Heroku" do
|
|
10
10
|
create_dummy_project("heroku" => true)
|
|
11
11
|
app_name = PotassiumTestHelpers::APP_NAME.dasherize
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@ RSpec.describe "Heroku" do
|
|
|
22
22
|
buildpacks_path = "#{project_path}/.buildpacks"
|
|
23
23
|
buildpacks = IO.read(buildpacks_path)
|
|
24
24
|
|
|
25
|
-
expect(buildpacks).to include("https://github.com/
|
|
25
|
+
expect(buildpacks).to include("https://github.com/heroku/heroku-buildpack-nodejs")
|
|
26
26
|
expect(buildpacks).to include("https://github.com/platanus/heroku-buildpack-ruby-version.git")
|
|
27
27
|
expect(buildpacks).to include("https://github.com/heroku/heroku-buildpack-ruby.git")
|
|
28
28
|
expect(buildpacks).to(
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "PowerTypes" do
|
|
4
|
+
before :all do
|
|
5
|
+
drop_dummy_database
|
|
6
|
+
remove_project_directory
|
|
7
|
+
create_dummy_project
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "adds the PowerTypes gem to Gemfile" do
|
|
11
|
+
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
12
|
+
expect(gemfile_content).to include("gem 'power-types'")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "adds the PowerTypes brief to README file" do
|
|
16
|
+
readme = IO.read("#{project_path}/README.md")
|
|
17
|
+
expect(readme).to include("Power-Types")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "adds commands directory" do
|
|
21
|
+
commands_directory = "#{project_path}/app/commands"
|
|
22
|
+
expect(File.directory?(commands_directory)).to eq(true)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "adds services directory" do
|
|
26
|
+
services_directory = "#{project_path}/app/services"
|
|
27
|
+
expect(File.directory?(services_directory)).to eq(true)
|
|
28
|
+
end
|
|
29
|
+
it "adds utils directory" do
|
|
30
|
+
utils_directory = "#{project_path}/app/utils"
|
|
31
|
+
expect(File.directory?(utils_directory)).to eq(true)
|
|
32
|
+
end
|
|
33
|
+
it "adds values directory" do
|
|
34
|
+
values_directory = "#{project_path}/app/values"
|
|
35
|
+
expect(File.directory?(values_directory)).to eq(true)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "schedule" do
|
|
4
|
+
before :all do
|
|
5
|
+
drop_dummy_database
|
|
6
|
+
remove_project_directory
|
|
7
|
+
create_dummy_project("schedule" => true)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "adds the sidekiq-scheduler gem to Gemfile" do
|
|
11
|
+
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
12
|
+
expect(gemfile_content).to include("gem 'sidekiq-scheduler'")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "creates the config with schedule" do
|
|
16
|
+
initializer_content = IO.read("#{project_path}/config/sidekiq.yml")
|
|
17
|
+
expect(initializer_content).to include(":schedule:")
|
|
18
|
+
end
|
|
19
|
+
end
|
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:
|
|
4
|
+
version: 5.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- juliogarciag
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-06-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -72,28 +72,28 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0.
|
|
75
|
+
version: 0.49.1
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.
|
|
82
|
+
version: 0.49.1
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rails
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 5.
|
|
89
|
+
version: 5.1.1
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 5.
|
|
96
|
+
version: 5.1.1
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: gli
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -188,7 +188,6 @@ files:
|
|
|
188
188
|
- docs/CONTRIBUTING.md
|
|
189
189
|
- docs/DSL.md
|
|
190
190
|
- lib/potassium.rb
|
|
191
|
-
- lib/potassium/assets/.bowerrc
|
|
192
191
|
- lib/potassium/assets/.buildpacks
|
|
193
192
|
- lib/potassium/assets/.dockerignore
|
|
194
193
|
- lib/potassium/assets/.editorconfig
|
|
@@ -211,22 +210,26 @@ files:
|
|
|
211
210
|
- lib/potassium/assets/bin/cibuild.erb
|
|
212
211
|
- lib/potassium/assets/bin/setup.erb
|
|
213
212
|
- lib/potassium/assets/bin/setup_heroku.erb
|
|
214
|
-
- lib/potassium/assets/
|
|
213
|
+
- lib/potassium/assets/bin/update.erb
|
|
215
214
|
- lib/potassium/assets/circle.yml
|
|
216
|
-
- lib/potassium/assets/config/clock.rb.erb
|
|
217
215
|
- lib/potassium/assets/config/database_mysql.yml.erb
|
|
218
216
|
- lib/potassium/assets/config/database_postgresql.yml.erb
|
|
219
|
-
- lib/potassium/assets/config/mailer.rb
|
|
217
|
+
- lib/potassium/assets/config/mailer.rb.erb
|
|
220
218
|
- lib/potassium/assets/config/puma.rb
|
|
221
219
|
- lib/potassium/assets/config/secrets.yml.erb
|
|
222
220
|
- lib/potassium/assets/config/sentry.rb.erb
|
|
223
221
|
- lib/potassium/assets/docker-compose.ci.yml
|
|
224
222
|
- lib/potassium/assets/es-CL.yml
|
|
225
223
|
- lib/potassium/assets/lib/tasks/auto_annotate_models.rake
|
|
224
|
+
- lib/potassium/assets/package.json
|
|
225
|
+
- lib/potassium/assets/redis.yml
|
|
226
226
|
- lib/potassium/assets/seeds/admin_data_loader.rb
|
|
227
227
|
- lib/potassium/assets/seeds/fake_data_loader.rake
|
|
228
228
|
- lib/potassium/assets/seeds/fake_data_loader.rb
|
|
229
229
|
- lib/potassium/assets/seeds/seeds.rb
|
|
230
|
+
- lib/potassium/assets/sidekiq.rb
|
|
231
|
+
- lib/potassium/assets/sidekiq.yml
|
|
232
|
+
- lib/potassium/assets/sidekiq_scheduler.yml
|
|
230
233
|
- lib/potassium/assets/testing/.rspec
|
|
231
234
|
- lib/potassium/assets/testing/paperclip.rb
|
|
232
235
|
- lib/potassium/assets/testing/platanus.png
|
|
@@ -255,23 +258,23 @@ files:
|
|
|
255
258
|
- lib/potassium/recipes/annotate.rb
|
|
256
259
|
- lib/potassium/recipes/api.rb
|
|
257
260
|
- lib/potassium/recipes/aws_sdk.rb
|
|
261
|
+
- lib/potassium/recipes/background_processor.rb
|
|
258
262
|
- lib/potassium/recipes/better_errors.rb
|
|
259
|
-
- lib/potassium/recipes/bower.rb
|
|
260
263
|
- lib/potassium/recipes/ci.rb
|
|
261
264
|
- lib/potassium/recipes/cleanup.rb
|
|
262
265
|
- lib/potassium/recipes/database.rb
|
|
263
|
-
- lib/potassium/recipes/delayed_job.rb
|
|
264
266
|
- lib/potassium/recipes/devise.rb
|
|
265
267
|
- lib/potassium/recipes/draper.rb
|
|
266
268
|
- lib/potassium/recipes/editorconfig.rb
|
|
267
269
|
- lib/potassium/recipes/env.rb
|
|
268
270
|
- lib/potassium/recipes/error_reporting.rb
|
|
269
|
-
- lib/potassium/recipes/
|
|
271
|
+
- lib/potassium/recipes/front_end.rb
|
|
270
272
|
- lib/potassium/recipes/github.rb
|
|
271
273
|
- lib/potassium/recipes/heroku.rb
|
|
272
274
|
- lib/potassium/recipes/i18n.rb
|
|
273
275
|
- lib/potassium/recipes/mailer.rb
|
|
274
276
|
- lib/potassium/recipes/paperclip.rb
|
|
277
|
+
- lib/potassium/recipes/power_types.rb
|
|
275
278
|
- lib/potassium/recipes/pry.rb
|
|
276
279
|
- lib/potassium/recipes/puma.rb
|
|
277
280
|
- lib/potassium/recipes/pundit.rb
|
|
@@ -285,6 +288,7 @@ files:
|
|
|
285
288
|
- lib/potassium/recipes/style.rb
|
|
286
289
|
- lib/potassium/recipes/testing.rb
|
|
287
290
|
- lib/potassium/recipes/tzinfo.rb
|
|
291
|
+
- lib/potassium/recipes/yarn.rb
|
|
288
292
|
- lib/potassium/template_finder.rb
|
|
289
293
|
- lib/potassium/templates/application.rb
|
|
290
294
|
- lib/potassium/templates/recipe.rb
|
|
@@ -294,14 +298,17 @@ files:
|
|
|
294
298
|
- potassium.gemspec
|
|
295
299
|
- spec/fakes/bin/heroku
|
|
296
300
|
- spec/fakes/bin/hub
|
|
301
|
+
- spec/features/background_processor_spec.rb
|
|
297
302
|
- spec/features/ci_spec.rb
|
|
298
|
-
- spec/features/clockwork_spec.rb
|
|
299
303
|
- spec/features/draper_spec.rb
|
|
300
304
|
- spec/features/error_reporting_spec.rb
|
|
305
|
+
- spec/features/front_end.rb
|
|
301
306
|
- spec/features/github_spec.rb
|
|
302
307
|
- spec/features/heroku_spec.rb
|
|
303
308
|
- spec/features/i18n_spec.rb
|
|
304
309
|
- spec/features/new_project_spec.rb
|
|
310
|
+
- spec/features/power_types_spec.rb
|
|
311
|
+
- spec/features/schedule_spec.rb
|
|
305
312
|
- spec/spec_helper.rb
|
|
306
313
|
- spec/support/fake_github.rb
|
|
307
314
|
- spec/support/fake_heroku.rb
|
|
@@ -326,21 +333,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
326
333
|
version: '0'
|
|
327
334
|
requirements: []
|
|
328
335
|
rubyforge_project:
|
|
329
|
-
rubygems_version: 2.
|
|
336
|
+
rubygems_version: 2.6.12
|
|
330
337
|
signing_key:
|
|
331
338
|
specification_version: 4
|
|
332
339
|
summary: An application generator from Platanus
|
|
333
340
|
test_files:
|
|
334
341
|
- spec/fakes/bin/heroku
|
|
335
342
|
- spec/fakes/bin/hub
|
|
343
|
+
- spec/features/background_processor_spec.rb
|
|
336
344
|
- spec/features/ci_spec.rb
|
|
337
|
-
- spec/features/clockwork_spec.rb
|
|
338
345
|
- spec/features/draper_spec.rb
|
|
339
346
|
- spec/features/error_reporting_spec.rb
|
|
347
|
+
- spec/features/front_end.rb
|
|
340
348
|
- spec/features/github_spec.rb
|
|
341
349
|
- spec/features/heroku_spec.rb
|
|
342
350
|
- spec/features/i18n_spec.rb
|
|
343
351
|
- spec/features/new_project_spec.rb
|
|
352
|
+
- spec/features/power_types_spec.rb
|
|
353
|
+
- spec/features/schedule_spec.rb
|
|
344
354
|
- spec/spec_helper.rb
|
|
345
355
|
- spec/support/fake_github.rb
|
|
346
356
|
- spec/support/fake_heroku.rb
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
require 'clockwork'
|
|
2
|
-
require_relative './boot'
|
|
3
|
-
require_relative './environment'
|
|
4
|
-
|
|
5
|
-
module Clockwork
|
|
6
|
-
<% if selected?(:report_error) -%>
|
|
7
|
-
error_handler do |error|
|
|
8
|
-
Raven.capture_exception(error)
|
|
9
|
-
end
|
|
10
|
-
<% end -%>
|
|
11
|
-
# Example
|
|
12
|
-
#
|
|
13
|
-
# every(5.minutes, 'ScheduledJob') do
|
|
14
|
-
# ScheduledJob.perform_later
|
|
15
|
-
# end
|
|
16
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
class Recipes::Bower < Rails::AppBuilder
|
|
2
|
-
def create
|
|
3
|
-
copy_file '../assets/.bowerrc', '.bowerrc'
|
|
4
|
-
template '../assets/bower.json', 'bower.json'
|
|
5
|
-
application "config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components')"
|
|
6
|
-
|
|
7
|
-
if get(:heroku)
|
|
8
|
-
bower_buildpack_url = 'https://github.com/platanus/heroku-buildpack-bower.git'
|
|
9
|
-
insert_point = 'https://github.com/platanus/heroku-buildpack-ruby-version.git'
|
|
10
|
-
inject_into_file '.buildpacks', "#{bower_buildpack_url}\n", before: insert_point
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
class Recipes::DelayedJob < Rails::AppBuilder
|
|
2
|
-
def ask
|
|
3
|
-
use_delayed_job = answer(:"delayed-job") { Ask.confirm("Do you want to use delayed jobs?") }
|
|
4
|
-
set(:delayed_job, use_delayed_job)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def create
|
|
8
|
-
add_delayed_job if selected?(:delayed_job)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def install
|
|
12
|
-
heroku = load_recipe(:heroku)
|
|
13
|
-
set(:heroku, heroku.installed?)
|
|
14
|
-
add_delayed_job
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def installed?
|
|
18
|
-
gem_exists?(/delayed_job_active_record/)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def add_delayed_job
|
|
22
|
-
gather_gem "delayed_job_active_record"
|
|
23
|
-
|
|
24
|
-
general_config = "config.active_job.queue_adapter = :delayed_job"
|
|
25
|
-
application(general_config)
|
|
26
|
-
dev_config = "config.active_job.queue_adapter = :inline"
|
|
27
|
-
application dev_config, env: "development"
|
|
28
|
-
|
|
29
|
-
after(:gem_install) do
|
|
30
|
-
generate "delayed_job:active_record"
|
|
31
|
-
add_readme_section :internal_dependencies, :delayed_job
|
|
32
|
-
|
|
33
|
-
if selected?(:heroku)
|
|
34
|
-
gsub_file("Procfile", /^.*$/m) { |match| "#{match}worker: bundle exec rails jobs:work" }
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
RSpec.describe "Clockwork" do
|
|
4
|
-
before :all do
|
|
5
|
-
drop_dummy_database
|
|
6
|
-
remove_project_directory
|
|
7
|
-
create_dummy_project("clockwork" => true)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "adds the Clockwork gem to Gemfile" do
|
|
11
|
-
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
12
|
-
|
|
13
|
-
expect(gemfile_content).to include("gem 'clockwork'")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "creates the config for clockwork scheduler" do
|
|
17
|
-
initializer_content = IO.read("#{project_path}/config/clock.rb")
|
|
18
|
-
|
|
19
|
-
expect(initializer_content).to include("module Clockwork")
|
|
20
|
-
end
|
|
21
|
-
end
|