potassium 5.1.4 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/CHANGELOG.md +17 -0
- data/README.md +1 -1
- data/circle.yml +1 -1
- data/lib/potassium/assets/.circleci/config.yml +20 -0
- data/lib/potassium/assets/Dockerfile.ci +1 -1
- data/lib/potassium/assets/README.yml +3 -0
- data/lib/potassium/assets/aws.rb +1 -0
- data/lib/potassium/assets/config/mailer.rb.erb +10 -0
- data/lib/potassium/assets/config/storage.yml +12 -0
- data/lib/potassium/assets/docker-compose.ci.yml +11 -9
- data/lib/potassium/assets/seeds/admin_data_loader.rb +3 -3
- data/lib/potassium/assets/seeds/fake_data_loader.rb +3 -3
- data/lib/potassium/assets/testing/paperclip.rb +1 -1
- data/lib/potassium/assets/testing/rails_helper.rb +1 -1
- data/lib/potassium/cli_options.rb +8 -0
- data/lib/potassium/helpers/docker-helpers.rb +3 -3
- data/lib/potassium/helpers/readme-helpers.rb +8 -8
- data/lib/potassium/recipes/active_storage.rb +40 -0
- data/lib/potassium/recipes/admin.rb +19 -19
- data/lib/potassium/recipes/aws_sdk.rb +3 -1
- data/lib/potassium/recipes/ci.rb +28 -29
- data/lib/potassium/recipes/database.rb +2 -1
- data/lib/potassium/recipes/draper.rb +1 -1
- data/lib/potassium/recipes/env.rb +6 -6
- data/lib/potassium/recipes/i18n.rb +2 -3
- data/lib/potassium/recipes/paperclip.rb +11 -11
- data/lib/potassium/recipes/puma.rb +1 -6
- data/lib/potassium/recipes/rack_cors.rb +17 -12
- data/lib/potassium/recipes/rails.rb +13 -0
- data/lib/potassium/recipes/ruby.rb +1 -1
- data/lib/potassium/recipes/testing.rb +1 -1
- data/lib/potassium/templates/application.rb +2 -0
- data/lib/potassium/version.rb +3 -3
- data/spec/features/active_storage_spec.rb +30 -0
- data/spec/features/database_spec.rb +14 -0
- data/spec/features/new_project_spec.rb +9 -1
- metadata +13 -6
- data/lib/potassium/assets/circle.yml +0 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 586c6642ed62cba7a9a9aadba36fc53ea14f3dda6bd182c1e4e66e5818a4c19f
|
|
4
|
+
data.tar.gz: 8d12fa2fbf200d8664945c8187c4d257e3a5b5285057032a95eacb03ad088be4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 60726b985ce4c24e7be3f92ecb9f8f9532b171b995768eef00e3afc8aa4ab6480d7f39a48efcb4a2b4da0d48154caa2f66a5f4eea5cf9269569c5955a7155fa3
|
|
7
|
+
data.tar.gz: 8bb3ee2bac542101adc27bc41a5ea6823cbb6a94a0a76bbcff731a3139c8d050f6b7d3d8ca8ba7b1715bb64b269999c0e393d5d712e278f745ccbbadfad24479
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.5
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 5.2.0
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
- Add Active Storage recipe
|
|
9
|
+
|
|
10
|
+
Changes:
|
|
11
|
+
- Update AWS to 3
|
|
12
|
+
- Update Rails to 5.2.1
|
|
13
|
+
- Update `ActiveAdmin` to 1.3.0
|
|
14
|
+
- Update ruby to 2.5
|
|
15
|
+
- Update to circleci 2
|
|
16
|
+
|
|
17
|
+
Fix:
|
|
18
|
+
- Update `draper` to 3.0.1
|
|
19
|
+
- `FactoryGirl` update to `FactoryBot`
|
|
20
|
+
- `pg` gem has now explicit version: `~> 0.21`
|
|
21
|
+
|
|
5
22
|
## 5.1.4
|
|
6
23
|
|
|
7
24
|
Changes:
|
data/README.md
CHANGED
|
@@ -42,7 +42,7 @@ Potassium Rails apps includes the following gems and technologies:
|
|
|
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.
|
|
45
|
-
- [
|
|
45
|
+
- [FactoryBot](https://github.com/thoughtbot/factory_bot] for test factories.
|
|
46
46
|
- [Guard](http://guardgem.org) for continuous testing and other watch-related tasks.
|
|
47
47
|
- [AWS-SDK](https://github.com/aws/aws-sdk-ruby) for file uploads, sdks, etc and because we use AWS.
|
|
48
48
|
- [Puma](https://github.com/puma/puma) to serve HTTP requests
|
data/circle.yml
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
jobs:
|
|
3
|
+
build:
|
|
4
|
+
working_directory: ~/app
|
|
5
|
+
|
|
6
|
+
docker:
|
|
7
|
+
- image: platanus/compose:1.22.0
|
|
8
|
+
|
|
9
|
+
steps:
|
|
10
|
+
- checkout
|
|
11
|
+
- setup_remote_docker
|
|
12
|
+
|
|
13
|
+
- run: docker info
|
|
14
|
+
- run: docker-compose -f docker-compose.ci.yml pull
|
|
15
|
+
- run: docker-compose -f docker-compose.ci.yml build test
|
|
16
|
+
- run: bin/cibuild services
|
|
17
|
+
- run: bin/cibuild deps
|
|
18
|
+
|
|
19
|
+
- run: bin/cibuild db
|
|
20
|
+
- run: bin/cibuild tests
|
|
@@ -86,6 +86,9 @@ readme:
|
|
|
86
86
|
paperclip:
|
|
87
87
|
title: "Uploads"
|
|
88
88
|
body: "For managing uploads, this project uses [Paperclip](https://github.com/thoughtbot/paperclip), a gem made by the awesome [Thoughbot](https://thoughtbot.com/) team."
|
|
89
|
+
storage:
|
|
90
|
+
title: "Active Storage"
|
|
91
|
+
body: "For managing uploads, this project uses [Active Storage](https://github.com/rails/rails/tree/master/activestorage)."
|
|
89
92
|
pundit:
|
|
90
93
|
title: "Authorization"
|
|
91
94
|
body: "For defining which parts of the system each user has access to, we have chosen to include the [Pundit](https://github.com/elabs/pundit) gem, by [Elabs](http://elabs.se/)."
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Aws::VERSION = Gem.loaded_specs["aws-sdk"].version
|
|
@@ -16,3 +16,13 @@ if ENV["EMAIL_RECIPIENTS"].present?
|
|
|
16
16
|
subject_prefix: "[<%= get(:heroku) ? '#{Heroku.stage.upcase}' : '#{Rails.env}' %>]"
|
|
17
17
|
)
|
|
18
18
|
end
|
|
19
|
+
<% if get(:mailer_delivery_method) == :aws_sdk -%>
|
|
20
|
+
creds = Aws::Credentials.new(
|
|
21
|
+
ENV['AWS_ACCESS_KEY_ID'],
|
|
22
|
+
ENV['AWS_SECRET_ACCESS_KEY']
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
Aws::Rails.add_action_mailer_delivery_method(
|
|
26
|
+
:aws_sdk, credentials: creds, region: ENV.fetch('AWS_REGION', 'us-east-1')
|
|
27
|
+
)
|
|
28
|
+
<% end -%>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
version: '3.4'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
test:
|
|
5
|
+
build:
|
|
6
|
+
context: "."
|
|
7
|
+
dockerfile: Dockerfile.ci
|
|
8
|
+
volumes:
|
|
9
|
+
- "./vendor/bundle:/usr/local/bundle"
|
|
10
|
+
environment:
|
|
11
|
+
RACK_ENV: test
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Put, inside the load method, the necessary code to generate data with DEVELOPMENT PURPOSES.
|
|
2
|
-
# Whenever you can, use
|
|
2
|
+
# Whenever you can, use FactoryBot's methods to keep this code "self updated".
|
|
3
3
|
#
|
|
4
4
|
# For Example:
|
|
5
5
|
#
|
|
6
6
|
# Having a country factory in /spec/factories/countries.rb
|
|
7
7
|
#
|
|
8
|
-
#
|
|
8
|
+
# FactoryBot.define do
|
|
9
9
|
# factory :country do
|
|
10
10
|
# name "Chile"
|
|
11
11
|
# locale "es-CL"
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
Faker::Config.locale = I18n.locale
|
|
26
26
|
|
|
27
27
|
module FakeDataLoader
|
|
28
|
-
extend
|
|
28
|
+
extend FactoryBot::Syntax::Methods
|
|
29
29
|
|
|
30
30
|
def self.load
|
|
31
31
|
load_admin
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Put, inside the load method, the necessary code to generate data with DEVELOPMENT PURPOSES.
|
|
2
|
-
# Whenever you can, use
|
|
2
|
+
# Whenever you can, use FactoryBot's methods to keep this code "self updated".
|
|
3
3
|
#
|
|
4
4
|
# For Example:
|
|
5
5
|
#
|
|
6
6
|
# Having a country factory in /spec/factories/countries.rb
|
|
7
7
|
#
|
|
8
|
-
#
|
|
8
|
+
# FactoryBot.define do
|
|
9
9
|
# factory :country do
|
|
10
10
|
# name "Chile"
|
|
11
11
|
# locale "es-CL"
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
Faker::Config.locale = I18n.locale
|
|
26
26
|
|
|
27
27
|
module FakeDataLoader
|
|
28
|
-
extend
|
|
28
|
+
extend FactoryBot::Syntax::Methods
|
|
29
29
|
|
|
30
30
|
def self.load
|
|
31
31
|
# Put here the code to generate data with DEVELOPMENT PURPOSES.
|
|
@@ -47,7 +47,7 @@ RSpec.configure do |config|
|
|
|
47
47
|
# https://relishapp.com/rspec/rspec-rails/docs
|
|
48
48
|
config.infer_spec_type_from_file_location!
|
|
49
49
|
|
|
50
|
-
config.include
|
|
50
|
+
config.include FactoryBot::Syntax::Methods
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
Shoulda::Matchers.configure do |config|
|
|
@@ -74,6 +74,14 @@ module Potassium::CliOptions # rubocop:disable Metrics/ModuleLength
|
|
|
74
74
|
default_value: "none",
|
|
75
75
|
default_test_value: false
|
|
76
76
|
},
|
|
77
|
+
{
|
|
78
|
+
type: :switch,
|
|
79
|
+
name: "active_storage",
|
|
80
|
+
desc: "Whether to include Active Storage as dependency",
|
|
81
|
+
negatable: true,
|
|
82
|
+
default_value: "none",
|
|
83
|
+
default_test_value: false
|
|
84
|
+
},
|
|
77
85
|
{
|
|
78
86
|
type: :switch,
|
|
79
87
|
name: "heroku",
|
|
@@ -5,7 +5,7 @@ class DockerHelpers
|
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
def add_link(target_service, linked_service)
|
|
8
|
-
service = @compose[target_service]
|
|
8
|
+
service = @compose['services'][target_service]
|
|
9
9
|
unless service['links'].is_a? Array
|
|
10
10
|
service['links'] = []
|
|
11
11
|
end
|
|
@@ -14,7 +14,7 @@ class DockerHelpers
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def add_env(target_service, variable_key, variable_value)
|
|
17
|
-
service = @compose[target_service]
|
|
17
|
+
service = @compose['services'][target_service]
|
|
18
18
|
unless service['environment'].is_a? Hash
|
|
19
19
|
service['environment'] = {}
|
|
20
20
|
end
|
|
@@ -25,7 +25,7 @@ class DockerHelpers
|
|
|
25
25
|
def add_service(name, definition)
|
|
26
26
|
service = {}
|
|
27
27
|
service[name] = YAML.load(definition)
|
|
28
|
-
@compose.merge!(service)
|
|
28
|
+
@compose['services'].merge!(service)
|
|
29
29
|
save
|
|
30
30
|
end
|
|
31
31
|
|
|
@@ -4,11 +4,11 @@ module ReadmeHelpers
|
|
|
4
4
|
add_readme_header(header, iterpolation_values)
|
|
5
5
|
|
|
6
6
|
insert_into_readme(section_data[:header_title]) do
|
|
7
|
-
|
|
7
|
+
<<~HERE
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
### #{section_data[:title]}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
#{section_data[:body]}
|
|
12
12
|
HERE
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -19,18 +19,18 @@ module ReadmeHelpers
|
|
|
19
19
|
|
|
20
20
|
if header_data[:body]
|
|
21
21
|
insert_into_readme do
|
|
22
|
-
|
|
22
|
+
<<~HERE
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
## #{header_data[:title]}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
#{header_data[:body]}
|
|
27
27
|
HERE
|
|
28
28
|
end
|
|
29
29
|
else
|
|
30
30
|
insert_into_readme do
|
|
31
|
-
|
|
31
|
+
<<~HERE
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
## #{header_data[:title]}
|
|
34
34
|
HERE
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class Recipes::ActiveStorage < Rails::AppBuilder
|
|
2
|
+
def ask
|
|
3
|
+
active_storage = answer(:active_storage) do
|
|
4
|
+
Ask.confirm("Do you want to use ActiveStorage for uploads?")
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
set(:active_storage, active_storage)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def create
|
|
11
|
+
return unless selected?(:active_storage)
|
|
12
|
+
add_active_storage
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def install
|
|
16
|
+
add_active_storage
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def installed?
|
|
20
|
+
file_exist?('config/storage.yml')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def add_active_storage
|
|
26
|
+
after(:gem_install) { run("bundle exec rails active_storage:install") }
|
|
27
|
+
|
|
28
|
+
add_readme_section :internal_dependencies, :storage
|
|
29
|
+
|
|
30
|
+
copy_file("../assets/config/storage.yml", "config/storage.yml", force: true)
|
|
31
|
+
|
|
32
|
+
append_to_file '.env.development', "AWS_REGION=\n"
|
|
33
|
+
append_to_file '.env.development', "S3_BUCKET=\n"
|
|
34
|
+
|
|
35
|
+
raise_delivery_errors_regexp = /config.active_storage.service = :local\n/
|
|
36
|
+
gsub_file 'config/environments/production.rb', raise_delivery_errors_regexp do
|
|
37
|
+
"config.active_storage.service = :amazon"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -32,7 +32,7 @@ class Recipes::Admin < Rails::AppBuilder
|
|
|
32
32
|
private
|
|
33
33
|
|
|
34
34
|
def add_active_admin
|
|
35
|
-
gather_gem 'activeadmin',
|
|
35
|
+
gather_gem 'activeadmin', '~> 1.3.0'
|
|
36
36
|
gather_gem 'activeadmin_addons'
|
|
37
37
|
gather_gem 'active_skin'
|
|
38
38
|
|
|
@@ -41,16 +41,16 @@ class Recipes::Admin < Rails::AppBuilder
|
|
|
41
41
|
line = "ActiveAdmin.setup do |config|"
|
|
42
42
|
initializer = "config/initializers/active_admin.rb"
|
|
43
43
|
gsub_file initializer, /(#{Regexp.escape(line)})/mi do |_match|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
<<~HERE
|
|
45
|
+
class CustomFooter < ActiveAdmin::Component
|
|
46
|
+
def build _arg
|
|
47
|
+
super(id: "footer")
|
|
48
|
+
para "Powered by Platanus"
|
|
49
|
+
end
|
|
50
|
+
end\n
|
|
51
|
+
ActiveAdmin.setup do |config|
|
|
52
|
+
config.view_factory.footer = CustomFooter
|
|
53
|
+
HERE
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
line = "@import \"active_admin/base\";"
|
|
@@ -58,15 +58,15 @@ class Recipes::Admin < Rails::AppBuilder
|
|
|
58
58
|
style = File.exist?(style) ? style : "app/assets/stylesheets/active_admin.scss"
|
|
59
59
|
|
|
60
60
|
gsub_file style, /(#{Regexp.escape(line)})/mi do |_match|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
<<~HERE
|
|
62
|
+
#{line}
|
|
63
|
+
$skinActiveColor: #001CEE;
|
|
64
|
+
$skinHeaderBck: #002744;
|
|
65
|
+
$panelHeaderBck: #002744;
|
|
66
|
+
//$skinLogo: $skinHeaderBck image-url("logo_admin.png") no-repeat center center;
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
@import "active_skin";
|
|
69
|
+
HERE
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
generate "activeadmin_addons:install"
|
data/lib/potassium/recipes/ci.rb
CHANGED
|
@@ -1,49 +1,48 @@
|
|
|
1
1
|
class Recipes::Ci < Rails::AppBuilder
|
|
2
2
|
def create
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
copy_file '../assets/circle.yml', 'circle.yml'
|
|
3
|
+
copy_file '../assets/Dockerfile.ci', 'Dockerfile.ci'
|
|
4
|
+
copy_file '../assets/.circleci/config.yml', '.circleci/config.yml'
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
template '../assets/bin/cibuild.erb', 'bin/cibuild'
|
|
7
|
+
run "chmod a+x bin/cibuild"
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
copy_file '../assets/docker-compose.ci.yml', 'docker-compose.ci.yml'
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
gather_gems(:test) do
|
|
12
|
+
gather_gem 'rspec_junit_formatter', '0.2.2'
|
|
13
|
+
end
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
compose = DockerHelpers.new('docker-compose.ci.yml')
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
if selected?(:database, :mysql)
|
|
18
|
+
srv =
|
|
19
|
+
<<~YAML
|
|
20
20
|
image: "mysql:5.6.23"
|
|
21
21
|
environment:
|
|
22
22
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
|
|
23
23
|
YAML
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
compose.add_service("mysql", srv)
|
|
25
|
+
compose.add_link('test', 'mysql')
|
|
26
|
+
compose.add_env('test', 'MYSQL_HOST', 'mysql')
|
|
27
|
+
compose.add_env('test', 'MYSQL_PORT', '3306')
|
|
28
|
+
|
|
29
|
+
elsif selected?(:database, :postgresql)
|
|
30
|
+
srv =
|
|
31
|
+
<<~YAML
|
|
31
32
|
image: "postgres:9.4.5"
|
|
32
33
|
environment:
|
|
33
34
|
POSTGRES_USER: postgres
|
|
34
35
|
POSTGRES_PASSWORD: ''
|
|
35
36
|
YAML
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
add_readme_header :ci
|
|
37
|
+
compose.add_service("postgresql", srv)
|
|
38
|
+
compose.add_link('test', 'postgresql')
|
|
39
|
+
compose.add_env('test', 'POSTGRESQL_USER', 'postgres')
|
|
40
|
+
compose.add_env('test', 'POSTGRESQL_HOST', 'postgresql')
|
|
41
|
+
compose.add_env('test', 'POSTGRESQL_PORT', '5432')
|
|
44
42
|
end
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
add_readme_header :ci
|
|
45
|
+
|
|
46
|
+
application 'config.assets.js_compressor = :uglifier', env: 'test'
|
|
48
47
|
end
|
|
49
48
|
end
|
|
@@ -30,7 +30,7 @@ class Recipes::Database < Rails::AppBuilder
|
|
|
30
30
|
|
|
31
31
|
def databases(database)
|
|
32
32
|
databases = {
|
|
33
|
-
postgresql: { name: 'postgresql', gem_name: 'pg', relational: true },
|
|
33
|
+
postgresql: { name: 'postgresql', gem_name: 'pg', version: '~> 0.21', relational: true },
|
|
34
34
|
mysql: { name: 'mysql', gem_name: 'mysql2', version: '~> 0.3.18', relational: true }
|
|
35
35
|
}
|
|
36
36
|
databases[database]
|
|
@@ -40,6 +40,7 @@ class Recipes::Database < Rails::AppBuilder
|
|
|
40
40
|
remove_file 'config/database.yml'
|
|
41
41
|
template "../assets/config/database_#{db[:name]}.yml.erb", 'config/database.yml'
|
|
42
42
|
discard_gem 'sqlite3'
|
|
43
|
+
gather_gem 'strong_migrations'
|
|
43
44
|
if db[:version]
|
|
44
45
|
gather_gem db[:gem_name], db[:version]
|
|
45
46
|
else
|
|
@@ -9,11 +9,11 @@ class Recipes::Env < Rails::AppBuilder
|
|
|
9
9
|
append_to_file '.gitignore', ".env\n"
|
|
10
10
|
|
|
11
11
|
env_config =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
application env_config
|
|
12
|
+
<<~RUBY
|
|
13
|
+
config.before_configuration do
|
|
14
|
+
Dotenv.load(Dotenv::Railtie.root.join('.env.development'))
|
|
15
|
+
end
|
|
16
|
+
RUBY
|
|
17
|
+
application env_config, env: 'test'
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -19,8 +19,7 @@ class Recipes::I18n < Rails::AppBuilder
|
|
|
19
19
|
template('../assets/es-CL.yml', 'config/locales/es-CL.yml')
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
end
|
|
22
|
+
application("config.i18n.default_locale = '#{get(:lang)}'")
|
|
23
|
+
application("config.i18n.fallbacks = [:es, :en]")
|
|
25
24
|
end
|
|
26
25
|
end
|
|
@@ -24,17 +24,17 @@ class Recipes::Paperclip < Rails::AppBuilder
|
|
|
24
24
|
def add_paperclip
|
|
25
25
|
gather_gem 'paperclip', '~> 5.0'
|
|
26
26
|
paperclip_config =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
application paperclip_config
|
|
27
|
+
<<~RUBY
|
|
28
|
+
config.paperclip_defaults = {
|
|
29
|
+
storage: :s3,
|
|
30
|
+
s3_protocol: 'https',
|
|
31
|
+
s3_region: ENV.fetch('AWS_REGION', 'us-east-1'),
|
|
32
|
+
s3_credentials: {
|
|
33
|
+
bucket: ENV['S3_BUCKET']
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
RUBY
|
|
37
|
+
application paperclip_config, env: 'production'
|
|
38
38
|
append_to_file '.env.development', "S3_BUCKET=\n"
|
|
39
39
|
append_to_file '.gitignore', "/public/system/*\n"
|
|
40
40
|
add_readme_section :internal_dependencies, :paperclip
|
|
@@ -7,11 +7,6 @@ class Recipes::Puma < Rails::AppBuilder
|
|
|
7
7
|
copy_file '../assets/config/puma.rb', 'config/puma.rb', force: true
|
|
8
8
|
|
|
9
9
|
# Configure rack-timout
|
|
10
|
-
|
|
11
|
-
<<-RUBY.gsub(/^ {9}/, '')
|
|
12
|
-
Rack::Timeout.timeout = (ENV["RACK_TIMEOUT"] || 10).to_i
|
|
13
|
-
RUBY
|
|
14
|
-
|
|
15
|
-
append_file "config/environments/production.rb", rack_timeout_config
|
|
10
|
+
application "Rack::Timeout.timeout = (ENV[\"RACK_TIMEOUT\"] || 10).to_i", env: "production"
|
|
16
11
|
end
|
|
17
12
|
end
|
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
class Recipes::RackCors < Rails::AppBuilder
|
|
2
|
+
def install
|
|
3
|
+
create
|
|
4
|
+
end
|
|
5
|
+
|
|
2
6
|
def create
|
|
3
7
|
gather_gem('rack-cors', '~> 0.4.0')
|
|
4
8
|
after(:gem_install) do
|
|
5
9
|
rack_cors_config =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
<<~RUBY
|
|
11
|
+
config.middleware.insert_before 0, Rack::Cors do
|
|
12
|
+
allow do
|
|
13
|
+
origins '*'
|
|
14
|
+
resource '*',
|
|
15
|
+
headers: :any,
|
|
16
|
+
expose: ['X-Page', 'X-PageTotal'],
|
|
17
|
+
methods: [:get, :post, :delete, :put, :options]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
RUBY
|
|
17
22
|
|
|
18
|
-
application rack_cors_config
|
|
23
|
+
application rack_cors_config
|
|
19
24
|
end
|
|
20
25
|
end
|
|
21
26
|
end
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
class Recipes::Rails < Rails::AppBuilder
|
|
2
2
|
def create
|
|
3
|
+
gather_gem("bootsnap", require: false)
|
|
4
|
+
|
|
3
5
|
environment 'config.force_ssl = true', env: 'production'
|
|
6
|
+
|
|
7
|
+
line = "Rails.application.config.content_security_policy_nonce_generator = \
|
|
8
|
+
-> request { SecureRandom.base64(16) }"
|
|
9
|
+
initializer = "config/initializers/content_security_policy.rb"
|
|
10
|
+
gsub_file initializer, /(#{Regexp.escape(line)})/mi do |_match|
|
|
11
|
+
<<~HERE.chomp
|
|
12
|
+
# Rails.application.config.content_security_policy_nonce_generator = -> request do
|
|
13
|
+
# SecureRandom.base64(16)
|
|
14
|
+
# end
|
|
15
|
+
HERE
|
|
16
|
+
end
|
|
4
17
|
end
|
|
5
18
|
end
|
|
@@ -2,7 +2,7 @@ class Recipes::Testing < Rails::AppBuilder
|
|
|
2
2
|
def create
|
|
3
3
|
gather_gems(:development, :test) do
|
|
4
4
|
gather_gem('rspec-rails')
|
|
5
|
-
gather_gem('
|
|
5
|
+
gather_gem('factory_bot_rails')
|
|
6
6
|
gather_gem('faker')
|
|
7
7
|
gather_gem('guard-rspec', require: false)
|
|
8
8
|
gather_gem('rspec-nc', require: false)
|
|
@@ -30,6 +30,7 @@ run_action(:asking) do
|
|
|
30
30
|
ask :i18n
|
|
31
31
|
ask :api
|
|
32
32
|
ask :draper
|
|
33
|
+
ask :active_storage
|
|
33
34
|
ask :paperclip
|
|
34
35
|
ask :heroku
|
|
35
36
|
ask :github
|
|
@@ -67,6 +68,7 @@ run_action(:recipe_loading) do
|
|
|
67
68
|
create :draper
|
|
68
69
|
create :power_types
|
|
69
70
|
create :rack_cors
|
|
71
|
+
create :active_storage
|
|
70
72
|
create :paperclip
|
|
71
73
|
create :tzinfo
|
|
72
74
|
create :script
|
data/lib/potassium/version.rb
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Active Storage" do
|
|
4
|
+
before :all do
|
|
5
|
+
drop_dummy_database
|
|
6
|
+
remove_project_directory
|
|
7
|
+
create_dummy_project("active_storage" => true)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "customizes config file" do
|
|
11
|
+
content = IO.read("#{project_path}/config/storage.yml")
|
|
12
|
+
expect(content).to include("bucket: <%= ENV['S3_BUCKET'] %>")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "adds brief to README file" do
|
|
16
|
+
content = IO.read("#{project_path}/README.md")
|
|
17
|
+
expect(content).to include("Active Storage")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "uses amazon on production env" do
|
|
21
|
+
content = IO.read("#{project_path}/config/environments/production.rb")
|
|
22
|
+
expect(content).to include("config.active_storage.service = :amazon")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "adds amazon ENV vars" do
|
|
26
|
+
content = IO.read("#{project_path}/.env.development")
|
|
27
|
+
expect(content).to include("AWS_REGION=")
|
|
28
|
+
expect(content).to include("S3_BUCKET=")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Database" do
|
|
4
|
+
before :all do
|
|
5
|
+
drop_dummy_database
|
|
6
|
+
remove_project_directory
|
|
7
|
+
create_dummy_project
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "adds the Strong Migrations gem to Gemfile" do
|
|
11
|
+
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
12
|
+
expect(gemfile_content).to include("gem 'strong_migrations'")
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -26,10 +26,18 @@ RSpec.describe "A new project" do
|
|
|
26
26
|
expect(gemfile).to include %{gem 'pg'}
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
it "configures aws" do
|
|
30
|
+
gemfile_content = IO.read("#{project_path}/Gemfile")
|
|
31
|
+
expect(gemfile_content).to include("'aws-sdk', '~> 3'")
|
|
32
|
+
|
|
33
|
+
initializer = IO.read("#{project_path}/config/initializers/aws.rb")
|
|
34
|
+
expect(initializer).to include("Aws::VERSION")
|
|
35
|
+
end
|
|
36
|
+
|
|
29
37
|
it "configures the correct ruby version" do
|
|
30
38
|
ruby_version_file = IO.read("#{project_path}/.ruby-version")
|
|
31
39
|
|
|
32
|
-
expect(ruby_version_file).to eq("2.
|
|
40
|
+
expect(ruby_version_file).to eq("2.5")
|
|
33
41
|
end
|
|
34
42
|
|
|
35
43
|
it "setup ssl" do
|
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: 5.
|
|
4
|
+
version: 5.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- juliogarciag
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-09-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -86,14 +86,14 @@ dependencies:
|
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 5.1
|
|
89
|
+
version: 5.2.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.1
|
|
96
|
+
version: 5.2.1
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: gli
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -189,6 +189,7 @@ files:
|
|
|
189
189
|
- docs/DSL.md
|
|
190
190
|
- lib/potassium.rb
|
|
191
191
|
- lib/potassium/assets/.buildpacks
|
|
192
|
+
- lib/potassium/assets/.circleci/config.yml
|
|
192
193
|
- lib/potassium/assets/.dockerignore
|
|
193
194
|
- lib/potassium/assets/.editorconfig
|
|
194
195
|
- lib/potassium/assets/.env.development.erb
|
|
@@ -207,17 +208,18 @@ files:
|
|
|
207
208
|
- lib/potassium/assets/api/draper_responder.rb
|
|
208
209
|
- lib/potassium/assets/api/responder.rb
|
|
209
210
|
- lib/potassium/assets/app/mailers/application_mailer.rb
|
|
211
|
+
- lib/potassium/assets/aws.rb
|
|
210
212
|
- lib/potassium/assets/bin/cibuild.erb
|
|
211
213
|
- lib/potassium/assets/bin/setup.erb
|
|
212
214
|
- lib/potassium/assets/bin/setup_heroku.erb
|
|
213
215
|
- lib/potassium/assets/bin/update.erb
|
|
214
|
-
- lib/potassium/assets/circle.yml
|
|
215
216
|
- lib/potassium/assets/config/database_mysql.yml.erb
|
|
216
217
|
- lib/potassium/assets/config/database_postgresql.yml.erb
|
|
217
218
|
- lib/potassium/assets/config/mailer.rb.erb
|
|
218
219
|
- lib/potassium/assets/config/puma.rb
|
|
219
220
|
- lib/potassium/assets/config/secrets.yml.erb
|
|
220
221
|
- lib/potassium/assets/config/sentry.rb.erb
|
|
222
|
+
- lib/potassium/assets/config/storage.yml
|
|
221
223
|
- lib/potassium/assets/docker-compose.ci.yml
|
|
222
224
|
- lib/potassium/assets/es-CL.yml
|
|
223
225
|
- lib/potassium/assets/lib/tasks/auto_annotate_models.rake
|
|
@@ -253,6 +255,7 @@ files:
|
|
|
253
255
|
- lib/potassium/helpers/variable-helpers.rb
|
|
254
256
|
- lib/potassium/newest_version_ensurer.rb
|
|
255
257
|
- lib/potassium/recipe.rb
|
|
258
|
+
- lib/potassium/recipes/active_storage.rb
|
|
256
259
|
- lib/potassium/recipes/admin.rb
|
|
257
260
|
- lib/potassium/recipes/angular_admin.rb
|
|
258
261
|
- lib/potassium/recipes/annotate.rb
|
|
@@ -299,8 +302,10 @@ files:
|
|
|
299
302
|
- potassium.gemspec
|
|
300
303
|
- spec/fakes/bin/heroku
|
|
301
304
|
- spec/fakes/bin/hub
|
|
305
|
+
- spec/features/active_storage_spec.rb
|
|
302
306
|
- spec/features/background_processor_spec.rb
|
|
303
307
|
- spec/features/ci_spec.rb
|
|
308
|
+
- spec/features/database_spec.rb
|
|
304
309
|
- spec/features/draper_spec.rb
|
|
305
310
|
- spec/features/error_reporting_spec.rb
|
|
306
311
|
- spec/features/front_end.rb
|
|
@@ -334,15 +339,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
334
339
|
version: '0'
|
|
335
340
|
requirements: []
|
|
336
341
|
rubyforge_project:
|
|
337
|
-
rubygems_version: 2.6
|
|
342
|
+
rubygems_version: 2.7.6
|
|
338
343
|
signing_key:
|
|
339
344
|
specification_version: 4
|
|
340
345
|
summary: An application generator from Platanus
|
|
341
346
|
test_files:
|
|
342
347
|
- spec/fakes/bin/heroku
|
|
343
348
|
- spec/fakes/bin/hub
|
|
349
|
+
- spec/features/active_storage_spec.rb
|
|
344
350
|
- spec/features/background_processor_spec.rb
|
|
345
351
|
- spec/features/ci_spec.rb
|
|
352
|
+
- spec/features/database_spec.rb
|
|
346
353
|
- spec/features/draper_spec.rb
|
|
347
354
|
- spec/features/error_reporting_spec.rb
|
|
348
355
|
- spec/features/front_end.rb
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
machine:
|
|
2
|
-
services:
|
|
3
|
-
- docker
|
|
4
|
-
|
|
5
|
-
dependencies:
|
|
6
|
-
override:
|
|
7
|
-
- docker-compose -f docker-compose.ci.yml pull
|
|
8
|
-
- docker-compose -f docker-compose.ci.yml build test
|
|
9
|
-
- bin/cibuild services
|
|
10
|
-
- bin/cibuild deps
|
|
11
|
-
- bin/cibuild assets
|
|
12
|
-
|
|
13
|
-
database:
|
|
14
|
-
override:
|
|
15
|
-
- bin/cibuild db
|
|
16
|
-
|
|
17
|
-
test:
|
|
18
|
-
override:
|
|
19
|
-
- bin/cibuild tests
|