potassium 5.2.1 → 6.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.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +84 -0
  3. data/.gitignore +2 -1
  4. data/.node-version +1 -0
  5. data/.rubocop.yml +530 -0
  6. data/.ruby-version +1 -1
  7. data/CHANGELOG.md +91 -0
  8. data/README.md +41 -47
  9. data/docs/DSL.md +5 -5
  10. data/lib/potassium/assets/.buildpacks +0 -1
  11. data/lib/potassium/assets/.circleci/config.yml.erb +102 -0
  12. data/lib/potassium/assets/.eslintrc.json +352 -0
  13. data/lib/potassium/assets/.github/pull_request_template.md +9 -0
  14. data/lib/potassium/assets/.pryrc +1 -1
  15. data/lib/potassium/assets/.rubocop.yml +528 -0
  16. data/lib/potassium/assets/.stylelintrc.json +46 -0
  17. data/lib/potassium/assets/Dockerfile.ci +1 -1
  18. data/lib/potassium/assets/Makefile.erb +21 -32
  19. data/lib/potassium/assets/Procfile +1 -0
  20. data/lib/potassium/assets/README.yml +58 -11
  21. data/lib/potassium/assets/active_admin/admin-component.vue +35 -0
  22. data/lib/potassium/assets/active_admin/admin_application.js +14 -0
  23. data/lib/potassium/assets/active_admin/init_activeadmin_vue.rb +10 -0
  24. data/lib/potassium/assets/app/graphql/graphql_controller.rb +55 -0
  25. data/lib/potassium/assets/app/graphql/mutations/login_mutation.rb +23 -0
  26. data/lib/potassium/assets/app/graphql/queries/base_query.rb +4 -0
  27. data/lib/potassium/assets/app/graphql/types/base/base_argument.rb +4 -0
  28. data/lib/potassium/assets/app/graphql/types/base/base_enum.rb +4 -0
  29. data/lib/potassium/assets/app/graphql/types/base/base_field.rb +5 -0
  30. data/lib/potassium/assets/app/graphql/types/base/base_input_object.rb +5 -0
  31. data/lib/potassium/assets/app/graphql/types/base/base_interface.rb +7 -0
  32. data/lib/potassium/assets/app/graphql/types/base/base_object.rb +5 -0
  33. data/lib/potassium/assets/app/graphql/types/base/base_scalar.rb +4 -0
  34. data/lib/potassium/assets/app/graphql/types/base/base_union.rb +4 -0
  35. data/lib/potassium/assets/app/graphql/types/mutation_type.rb +10 -0
  36. data/lib/potassium/assets/app/graphql/types/query_type.rb +13 -0
  37. data/lib/potassium/assets/app/javascript/app.spec.js +14 -0
  38. data/lib/potassium/assets/app/uploaders/base_uploader.rb +11 -0
  39. data/lib/potassium/assets/app/uploaders/image_uploader.rb +5 -0
  40. data/lib/potassium/assets/app/views/shared/_gtm_body.html.erb +4 -0
  41. data/lib/potassium/assets/app/views/shared/_gtm_head.html.erb +7 -0
  42. data/lib/potassium/assets/bin/cibuild.erb +24 -7
  43. data/lib/potassium/assets/bin/release +9 -0
  44. data/lib/potassium/assets/bin/setup.erb +1 -1
  45. data/lib/potassium/assets/config/database_mysql.yml.erb +2 -2
  46. data/lib/potassium/assets/config/database_postgresql.yml.erb +2 -2
  47. data/lib/potassium/assets/config/graphql_playground.rb +20 -0
  48. data/lib/potassium/assets/config/puma.rb +1 -1
  49. data/lib/potassium/assets/config/shrine.rb +36 -0
  50. data/lib/potassium/assets/docker-compose.ci.yml +2 -1
  51. data/lib/potassium/assets/lib/tasks/auto_annotate_models.rake +34 -33
  52. data/lib/potassium/assets/package.json +4 -1
  53. data/lib/potassium/assets/redis.yml +1 -2
  54. data/lib/potassium/assets/testing/rails_helper.rb +4 -2
  55. data/lib/potassium/cli/commands/create.rb +12 -19
  56. data/lib/potassium/cli_options.rb +77 -26
  57. data/lib/potassium/helpers/gem-helpers.rb +1 -1
  58. data/lib/potassium/helpers/template-helpers.rb +4 -0
  59. data/lib/potassium/newest_version_ensurer.rb +19 -36
  60. data/lib/potassium/node_version_ensurer.rb +30 -0
  61. data/lib/potassium/recipes/admin.rb +3 -3
  62. data/lib/potassium/recipes/annotate.rb +1 -1
  63. data/lib/potassium/recipes/api.rb +93 -21
  64. data/lib/potassium/recipes/background_processor.rb +66 -19
  65. data/lib/potassium/recipes/ci.rb +6 -4
  66. data/lib/potassium/recipes/data_migrate.rb +44 -0
  67. data/lib/potassium/recipes/database.rb +4 -0
  68. data/lib/potassium/recipes/database_container.rb +7 -5
  69. data/lib/potassium/recipes/draper.rb +1 -10
  70. data/lib/potassium/recipes/file_storage.rb +66 -0
  71. data/lib/potassium/recipes/front_end.rb +219 -9
  72. data/lib/potassium/recipes/github.rb +93 -15
  73. data/lib/potassium/recipes/google_tag_manager.rb +90 -0
  74. data/lib/potassium/recipes/heroku.rb +44 -30
  75. data/lib/potassium/recipes/mailer.rb +27 -4
  76. data/lib/potassium/recipes/node.rb +21 -0
  77. data/lib/potassium/recipes/rack_cors.rb +18 -15
  78. data/lib/potassium/recipes/schedule.rb +17 -2
  79. data/lib/potassium/recipes/style.rb +21 -3
  80. data/lib/potassium/recipes/vue_admin.rb +124 -0
  81. data/lib/potassium/templates/application.rb +9 -7
  82. data/lib/potassium/version.rb +6 -4
  83. data/potassium.gemspec +11 -6
  84. data/spec/features/api_spec.rb +25 -0
  85. data/spec/features/background_processor_spec.rb +19 -6
  86. data/spec/features/data_migrate_spec.rb +14 -0
  87. data/spec/features/database_container_spec.rb +2 -5
  88. data/spec/features/draper_spec.rb +1 -6
  89. data/spec/features/file_storage_spec.rb +75 -0
  90. data/spec/features/front_end_spec.rb +88 -0
  91. data/spec/features/github_spec.rb +53 -8
  92. data/spec/features/google_tag_manager_spec.rb +59 -0
  93. data/spec/features/graphql_spec.rb +71 -0
  94. data/spec/features/heroku_spec.rb +8 -5
  95. data/spec/features/mailer_spec.rb +58 -0
  96. data/spec/features/new_project_spec.rb +6 -14
  97. data/spec/features/node_spec.rb +28 -0
  98. data/spec/features/power_types_spec.rb +5 -16
  99. data/spec/features/schedule_spec.rb +11 -4
  100. data/spec/features/vue_admin_spec.rb +47 -0
  101. data/spec/spec_helper.rb +5 -0
  102. data/spec/support/fake_octokit.rb +31 -0
  103. data/spec/support/potassium_test_helpers.rb +26 -9
  104. data/tmp/.keep +0 -0
  105. metadata +157 -48
  106. data/circle.yml +0 -12
  107. data/lib/potassium/assets/.circleci/config.yml +0 -20
  108. data/lib/potassium/assets/active_admin/active_admin.js.coffee +0 -4
  109. data/lib/potassium/assets/active_admin/init_activeadmin_angular.rb +0 -8
  110. data/lib/potassium/assets/api/api_error_concern.rb +0 -32
  111. data/lib/potassium/assets/api/base_controller.rb +0 -9
  112. data/lib/potassium/assets/api/draper_responder.rb +0 -62
  113. data/lib/potassium/assets/api/responder.rb +0 -41
  114. data/lib/potassium/assets/aws.rb +0 -1
  115. data/lib/potassium/assets/sidekiq_scheduler.yml +0 -9
  116. data/lib/potassium/assets/testing/paperclip.rb +0 -59
  117. data/lib/potassium/recipes/active_storage.rb +0 -40
  118. data/lib/potassium/recipes/angular_admin.rb +0 -56
  119. data/lib/potassium/recipes/aws_sdk.rb +0 -7
  120. data/lib/potassium/recipes/paperclip.rb +0 -47
  121. data/spec/features/active_storage_spec.rb +0 -30
  122. data/spec/features/front_end.rb +0 -30
@@ -0,0 +1,13 @@
1
+ module Types
2
+ class QueryType < Types::Base::BaseObject
3
+ # Add root-level fields here.
4
+ # They will be entry points for queries on your schema.
5
+
6
+ # TODO: remove me
7
+ field :test_field, String, null: false,
8
+ description: "An example field added by the generator"
9
+ def test_field
10
+ "Hello World!"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+ import App from 'app';
3
+
4
+ describe('App', () => {
5
+ test('is a Vue instance', () => {
6
+ const wrapper = shallowMount(App);
7
+ expect(wrapper.isVueInstance()).toBeTruthy();
8
+ });
9
+
10
+ it('displays message on load', () => {
11
+ const wrapper = shallowMount(App);
12
+ expect(wrapper.find('p').text()).toEqual('Hello Vue!');
13
+ });
14
+ });
@@ -0,0 +1,11 @@
1
+ class BaseUploader < Shrine
2
+ plugin :validation_helpers
3
+
4
+ Attacher.validate do
5
+ validate_mime_type store.allowed_types
6
+ end
7
+
8
+ def allowed_types
9
+ raise NotImplementedError
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class ImageUploader < BaseUploader
2
+ def allowed_types
3
+ @allowed_types ||= %w[image/jpeg image/jpg image/png image/svg+xml image/gif].freeze
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ <!-- Google Tag Manager (noscript) -->
2
+ <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=<%= ENV['GTM_CONTAINER_ID'] %>"
3
+ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
4
+ <!-- End Google Tag Manager (noscript) -->
@@ -0,0 +1,7 @@
1
+ <!-- Google Tag Manager -->
2
+ <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
3
+ new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
4
+ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
5
+ 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
6
+ })(window,document,'script','dataLayer','<%=ENV['GTM_CONTAINER_ID']%>');</script>
7
+ <!-- End Google Tag Manager -->
@@ -15,14 +15,14 @@ build(){
15
15
  # Wait services to be ready
16
16
  wait_services(){
17
17
  function test_service {
18
- docker-compose $DOCKER_COMPOSE_ARGS run test sh -c "nc -z $1 $2"
18
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test sh -c "nc -z $1 $2"
19
19
  }
20
20
 
21
21
  count=0
22
22
  # Chain tests together by using &&
23
23
  until (
24
24
  <% if(selected?(:database, :mysql) || selected?(:database, :postgresql))-%>
25
- test_service '$<%=get(:database).to_s.upcase%>_HOST' '$<%=get(:database).to_s.upcase%>_PORT' && \
25
+ test_service '$DB_HOST' '$DB_PORT' && \
26
26
  <% end-%>
27
27
  echo "Services ready"
28
28
  )
@@ -41,16 +41,22 @@ wait_services(){
41
41
 
42
42
  # Prepare dependencies
43
43
  dependencies(){
44
- docker-compose $DOCKER_COMPOSE_ARGS run test bundle install
44
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test bundle install
45
45
  }
46
46
 
47
+ <% if selected?(:front_end, :vue) %>
48
+ yarn_dependencies(){
49
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test yarn install
50
+ }
51
+ <% end %>
52
+
47
53
  assets() {
48
- docker-compose $DOCKER_COMPOSE_ARGS run test /bin/bash -c "bin/setup && bundle exec rake assets:precompile"
54
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test /bin/bash -c "bin/setup && bundle exec rake assets:precompile"
49
55
  }
50
56
 
51
57
  # Prepare database
52
58
  database(){
53
- docker-compose $DOCKER_COMPOSE_ARGS run test bundle exec rake db:create db:schema:load
59
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test bundle exec rake db:create db:schema:load
54
60
  }
55
61
 
56
62
  # Run the specs
@@ -59,9 +65,15 @@ tests(){
59
65
  RSPEC_JUNIT_ARGS="-r rspec_junit_formatter --format RspecJunitFormatter -o $HOME/.rspec_reports/junit.xml"
60
66
  RSPEC_FORMAT_ARGS="--format progress --no-color"
61
67
  }
62
- docker-compose $DOCKER_COMPOSE_ARGS run test bundle exec rspec spec $RSPEC_FORMAT_ARGS $RSPEC_JUNIT_ARGS
68
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test bundle exec rspec spec $RSPEC_FORMAT_ARGS $RSPEC_JUNIT_ARGS
63
69
  }
64
70
 
71
+ <% if selected?(:front_end, :vue) %>
72
+ js_tests(){
73
+ docker-compose $DOCKER_COMPOSE_ARGS run --rm test yarn run test
74
+ }
75
+ <% end %>
76
+
65
77
  # Run the complete ci build
66
78
  no_ci(){
67
79
  build
@@ -80,7 +92,7 @@ case "$1" in
80
92
  wait_services
81
93
  ;;
82
94
  "deps"|"dependencies")
83
- dependencies
95
+ dependencies <% if selected?(:front_end, :vue) %>&& yarn_dependencies<% end %>
84
96
  ;;
85
97
  "assets")
86
98
  assets
@@ -88,6 +100,11 @@ case "$1" in
88
100
  "db"|"database")
89
101
  database
90
102
  ;;
103
+ <% if selected?(:front_end, :vue) %>
104
+ "js_tests")
105
+ js_tests
106
+ ;;
107
+ <% end %>
91
108
  "specs"|"tests")
92
109
  tests
93
110
  ;;
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ echo 'Release Phase...'
6
+
7
+ bundle exec rails db:migrate:with_data
8
+
9
+ echo 'Release Phase: OK'
@@ -14,7 +14,7 @@ bundle check || bundle install
14
14
  bin/yarn install
15
15
 
16
16
  # Set up required services
17
- make services-up
17
+ docker-compose up -d
18
18
 
19
19
  # Set up database
20
20
  bin/rails db:setup
@@ -1,6 +1,6 @@
1
1
  development: &default
2
2
  adapter: mysql2
3
- database: <%= get(:underscorized_app_name) %>_development
3
+ database: <%= get(:dasherized_app_name) %>_development
4
4
  encoding: utf8
5
5
  host: <%%= ENV["DB_HOST"] || "127.0.0.1" %>
6
6
  port: <%%= ENV["DB_PORT"] || 3306 %>
@@ -12,7 +12,7 @@ development: &default
12
12
 
13
13
  test:
14
14
  <<: *default
15
- database: <%= get(:underscorized_app_name) %>_test
15
+ database: <%= get(:dasherized_app_name) %>_test
16
16
 
17
17
  production: &deploy
18
18
  encoding: utf8
@@ -1,6 +1,6 @@
1
1
  development: &default
2
2
  adapter: postgresql
3
- database: <%= get(:underscorized_app_name) %>_development
3
+ database: <%= get(:dasherized_app_name) %>_development
4
4
  encoding: utf8
5
5
  host: <%%= ENV["DB_HOST"] || "127.0.0.1" %>
6
6
  port: <%%= ENV["DB_PORT"] || 5432 %>
@@ -12,7 +12,7 @@ development: &default
12
12
 
13
13
  test:
14
14
  <<: *default
15
- database: <%= get(:underscorized_app_name) %>_test
15
+ database: <%= get(:dasherized_app_name) %>_test
16
16
 
17
17
  production: &deploy
18
18
  encoding: utf8
@@ -0,0 +1,20 @@
1
+ # config/initializers/graphql_playground.rb
2
+ # All config options have a default that should work out of the box
3
+ if Rails.env.development?
4
+ GraphqlPlayground::Rails.configure do |config|
5
+ # config.headers = {
6
+ # 'X-Auth-Header' => ->(view_context) { "123" }
7
+ # }
8
+ # config.title = "Playground"
9
+ # config.csrf = true
10
+ # config.playground_version = "latest"
11
+ # # Ideally the assets would be added to your projects `vendor/assets` directories
12
+ # config.favicon = "/assets/playground.ico"
13
+ # config.playground_js_url = "/assets/playground.js"
14
+ # config.playground_css_url = "/assets/playground.css"
15
+ # # see: https://github.com/prisma-labs/graphql-playground#settings
16
+ config.settings = {
17
+ "schema.polling.enable": false
18
+ }
19
+ end
20
+ end
@@ -24,7 +24,7 @@ rack_env = ENV.fetch("RACK_ENV", "development")
24
24
  environment rack_env
25
25
 
26
26
  # Set 1 day timeout for workers while developing
27
- worker_timeout 1.day.seconds.to_i if rack_env == "development"
27
+ worker_timeout 24 * 60 * 60 if rack_env == "development"
28
28
 
29
29
  on_worker_boot do
30
30
  # Worker specific setup for Rails 4.1+
@@ -0,0 +1,36 @@
1
+ require 'shrine'
2
+
3
+ if Rails.env.development?
4
+ require 'shrine/storage/file_system'
5
+
6
+ Shrine.storages = {
7
+ cache: Shrine::Storage::FileSystem.new('public', prefix: 'uploads/cache'),
8
+ store: Shrine::Storage::FileSystem.new('public', prefix: 'uploads')
9
+ }
10
+ elsif Rails.env.production?
11
+ require 'shrine/storage/s3'
12
+
13
+ s3_options = {
14
+ bucket: ENV.fetch('S3_BUCKET'),
15
+ region: ENV.fetch('AWS_REGION'),
16
+ access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
17
+ secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY')
18
+ }
19
+
20
+ Shrine.storages = {
21
+ cache: Shrine::Storage::S3.new(prefix: 'cache', **s3_options),
22
+ store: Shrine::Storage::S3.new(**s3_options)
23
+ }
24
+ else
25
+ require 'shrine/storage/memory'
26
+
27
+ Shrine.storages = {
28
+ cache: Shrine::Storage::Memory.new,
29
+ store: Shrine::Storage::Memory.new
30
+ }
31
+ end
32
+
33
+ Shrine.plugin :activerecord
34
+ Shrine.plugin :cached_attachment_data
35
+ Shrine.plugin :restore_cached_data
36
+ Shrine.plugin :determine_mime_type, analyzer: :marcel
@@ -6,6 +6,7 @@ services:
6
6
  context: "."
7
7
  dockerfile: Dockerfile.ci
8
8
  volumes:
9
- - "./vendor/bundle:/usr/local/bundle"
9
+ - "test_data:/usr/local/bundle"
10
+ - "./node_modules:/app/node_modules"
10
11
  environment:
11
12
  RACK_ENV: test
@@ -3,40 +3,41 @@ if Rails.env.development?
3
3
  # You can override any of these by setting an environment variable of the
4
4
  # same name.
5
5
  Annotate.set_defaults(
6
- 'routes' => 'false',
7
- 'position_in_routes' => 'after',
8
- 'position_in_class' => 'after',
9
- 'position_in_test' => 'after',
10
- 'position_in_fixture' => 'after',
11
- 'position_in_factory' => 'after',
12
- 'position_in_serializer' => 'after',
13
- 'show_foreign_keys' => 'true',
14
- 'show_indexes' => 'true',
15
- 'simple_indexes' => 'false',
16
- 'model_dir' => 'app/models',
17
- 'root_dir' => '',
18
- 'include_version' => 'false',
19
- 'require' => '',
20
- 'exclude_tests' => 'true',
21
- 'exclude_fixtures' => 'true',
22
- 'exclude_factories' => 'true',
23
- 'exclude_serializers' => 'true',
24
- 'exclude_scaffolds' => 'true',
25
- 'exclude_controllers' => 'true',
26
- 'exclude_helpers' => 'false',
27
- 'ignore_model_sub_dir' => 'false',
28
- 'ignore_columns' => nil,
29
- 'ignore_unknown_models' => 'false',
6
+ 'routes' => 'false',
7
+ 'position_in_routes' => 'after',
8
+ 'position_in_class' => 'after',
9
+ 'position_in_test' => 'after',
10
+ 'position_in_fixture' => 'after',
11
+ 'position_in_factory' => 'after',
12
+ 'position_in_serializer' => 'after',
13
+ 'show_foreign_keys' => 'true',
14
+ 'show_indexes' => 'true',
15
+ 'simple_indexes' => 'false',
16
+ 'model_dir' => 'app/models',
17
+ 'root_dir' => '',
18
+ 'include_version' => 'false',
19
+ 'require' => '',
20
+ 'exclude_tests' => 'true',
21
+ 'exclude_fixtures' => 'true',
22
+ 'exclude_factories' => 'true',
23
+ 'exclude_serializers' => 'true',
24
+ 'exclude_scaffolds' => 'true',
25
+ 'exclude_controllers' => 'true',
26
+ 'exclude_helpers' => 'false',
27
+ 'ignore_model_sub_dir' => 'false',
28
+ 'ignore_columns' => nil,
29
+ 'ignore_unknown_models' => 'false',
30
30
  'hide_limit_column_types' => 'integer,boolean',
31
- 'skip_on_db_migrate' => 'false',
32
- 'format_bare' => 'true',
33
- 'format_rdoc' => 'false',
34
- 'format_markdown' => 'false',
35
- 'sort' => 'false',
36
- 'force' => 'false',
37
- 'trace' => 'false',
38
- 'wrapper_open' => nil,
39
- 'wrapper_close' => nil
31
+ 'skip_on_db_migrate' => 'false',
32
+ 'format_bare' => 'true',
33
+ 'format_rdoc' => 'false',
34
+ 'format_markdown' => 'false',
35
+ 'sort' => 'false',
36
+ 'force' => 'false',
37
+ 'trace' => 'false',
38
+ 'wrapper_open' => nil,
39
+ 'wrapper_close' => nil,
40
+ 'models' => true
40
41
  )
41
42
  end
42
43
 
@@ -1,3 +1,6 @@
1
1
  {
2
- "name": "<%= @app_name.camelcase %>"
2
+ "name": "<%= @app_name.camelcase %>",
3
+ "engines": {
4
+ "node": "<%= get(:node_version) %>"
5
+ }
3
6
  }
@@ -1,6 +1,5 @@
1
1
  development: &default
2
- host: <%= ENV["BOXEN_REDIS_HOST"] || ENV["REDIS_HOST"] || "127.0.0.1" %>
3
- port: <%= ENV["BOXEN_REDIS_PORT"] || ENV["REDIS_PORT"] || 6379 %>
2
+ url: <%= ENV.fetch("REDIS_URL") %>
4
3
 
5
4
  test:
6
5
  <<: *default
@@ -1,6 +1,6 @@
1
1
  # This file is copied to spec/ when you run 'rails generate rspec:install'
2
2
  ENV['RACK_ENV'] ||= 'test'
3
- require File.expand_path('../../config/environment', __FILE__)
3
+ require File.expand_path('../config/environment', __dir__)
4
4
  require 'rspec/rails'
5
5
  require 'spec_helper'
6
6
  require 'shoulda/matchers'
@@ -20,12 +20,14 @@ require 'faker'
20
20
  # directory. Alternatively, in the individual `*_spec.rb` files, manually
21
21
  # require only the support files necessary.
22
22
  #
23
- Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
23
+ Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
24
24
 
25
25
  # Checks for pending migrations before tests are run.
26
26
  # If you are not using ActiveRecord, you can remove this line.
27
27
  ActiveRecord::Migration.maintain_test_schema!
28
28
 
29
+ PowerTypes::Observable.observable_disabled = true
30
+
29
31
  RSpec.configure do |config|
30
32
  # If you're not using ActiveRecord, or you'd prefer not to run each of your
31
33
  # examples within a transaction, remove the following line or assign false
@@ -3,36 +3,29 @@ require 'potassium/cli_options'
3
3
  module Potassium::CLI
4
4
  extend Potassium::CliOptions
5
5
 
6
- desc "Create a new Potassium Rails project."
6
+ desc 'Create a new Potassium Rails project.'
7
7
  arg 'app_path'
8
8
  command :create do |c|
9
- c.default_desc "Create a new project."
10
- c.switch "version-check",
11
- default_value: true,
12
- desc: "Performs a version check before running.",
13
- negatable: true
14
-
9
+ c.default_desc 'Create a new project.'
15
10
  create_options.each { |opts| c.send(opts.delete(:type), opts.delete(:name), opts) }
16
11
 
17
12
  c.action do |_global_options, options, _args|
18
- require "potassium/newest_version_ensurer"
19
-
20
- begin_creation = -> do
21
- require "potassium/generators/application"
22
- require "potassium/template_finder"
13
+ require 'potassium/newest_version_ensurer'
14
+ require 'potassium/node_version_ensurer'
15
+ require 'potassium/generators/application'
16
+ require 'potassium/template_finder'
23
17
 
18
+ begin
19
+ Potassium::NewestVersionEnsurer.new.ensure! if options['version-check']
20
+ Potassium::NodeVersionEnsurer.new.ensure! if options['node-version-check']
24
21
  template_finder = Potassium::TemplateFinder.new
25
22
  template = template_finder.default_template
26
23
  template.cli_options = options
27
24
  template.source_paths << Rails::Generators::AppGenerator.source_root
25
+ ARGV.push('--skip-webpack-install', '--skip-bundle')
28
26
  template.start
29
- end
30
-
31
- if options["version-check"]
32
- ensurer = Potassium::NewestVersionEnsurer.new
33
- ensurer.ensure(&begin_creation)
34
- else
35
- begin_creation.call
27
+ rescue VersionError => e
28
+ print "\nError: #{e.message}" # rubocop:disable Rails/Output
36
29
  end
37
30
  end
38
31
  end