potassium 2.3.0 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f71e24e05f47b7fb707f13f8c0fca1d2ea0e5c0
4
- data.tar.gz: c384d34410bc2b3550dbaa9e3b862eeb2e823416
3
+ metadata.gz: 3c4a19d0503fea30781bf341b2b73f8356e9ad07
4
+ data.tar.gz: 9de9d7b253c62e7d3c5486204c7a408f4375bc5f
5
5
  SHA512:
6
- metadata.gz: b0e757d2e989811ed3215629d60470f77958919e028814aed72652ac747d85a4398a92c2772559da40d6488a6152e8fa82cd9e4179d37343c451c90de0a92cc8
7
- data.tar.gz: 1b8ea264f0c9567348662c020011b548b467d7bb67210ae1db5ad0205436e1d6f3dbb4d1eca25e8cb618715fd12b39cbb4a590afdb2beb797ffe2428abbdcc08
6
+ metadata.gz: d09d2f6e7342f589e44d54981dd093cd89a3998ef39007e326be9653509fe637cce0e255ffeffea5b6229a7b7416e948b52de17d6888d96125ef507c22a4ba19
7
+ data.tar.gz: db39d009346a0d435f9d6f316205ef9d5e0670637188a92695e2dc33bc0c78ce232236e8e24fa50f9ed52d854e9dc2af32db0b8c45b9cb287dda85d3f1a642fd
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 3.0.0
6
+
7
+ Features:
8
+ - Rails 5.0.2
9
+ - `better_errors` and `binding_of_caller` gem in development
10
+ - Update `aws_sdk` to `~> 2.5`
11
+ - Update `paperclip` to `~> 5,0`
12
+ - Add draper gem to decorate models
13
+
5
14
  ## 2.3.0
6
15
 
7
16
  Features:
data/README.md CHANGED
@@ -59,7 +59,7 @@ 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
- - Mailing configuration for [AWS SES](https://github.com/aws/aws-sdk-rails)
62
+ - Mailing configuration for [AWS SES](https://github.com/aws/aws-sdk-rails)
63
63
  and [Sendgrid](https://github.com/platanus/send_grid_mailer) with recipient interceptor support
64
64
  - [Clockwork](https://github.com/Rykian/clockwork) to run scheduled processes
65
65
  - [Sentry](https://sentry.io) to monitor exceptions and errors
@@ -71,7 +71,7 @@ A few more things are added to the project:
71
71
  - Create the github repository for the project (it used `hub` under the hood)
72
72
  - A `bin/setup` script to setup things on a newly cloned project
73
73
  - A `bin/cibuild` script to run continuous integration build on CI
74
- - A `db:fake_data:load` rake task to load fake data for development
74
+ - A `db:fake_data:load` rake task to load fake data for development
75
75
 
76
76
  [pool]: https://devcenter.heroku.com/articles/concurrency-and-database-connections
77
77
 
@@ -141,6 +141,23 @@ Go to https://monkeyci.platan.us, choose the repository from the list and hit
141
141
  [buildpack-deploy-tasks]: http://github.com/gunpowderlabs/buildpack-ruby-rake-deploy-tasks
142
142
  [circle-ci]: https://circleci.com
143
143
 
144
+ ## Development Tools
145
+
146
+ ### Creating a new **Test** project from scratch
147
+
148
+ This is useful when you are adding new recipes to Potassium, and you want to use the `potassium create` command, to check the new functionality without pain.
149
+ To achieve this you need to run, **In the Potassium's root path**, the `bin/potassium_test create` instead of `potassium create` command.
150
+ This command, will do the same as `potassium create` but first:
151
+
152
+ - Will drop any existent database of the test app.
153
+ - Will remove the directory containing a previous version of the test app.
154
+
155
+ It's important to remember that `bin/potassium_test create`:
156
+
157
+ - Does not receive an `app_path` param. It always creates the test project inside `/tmp/dummy_app`
158
+ - Can receive the same options as `potassium create`.
159
+ - Runs with options with a default value. This is to avoid the "asking part" of the creation process. You need to enable what you want to test like this: `$ bin/potassium_test create --clockwork`
160
+
144
161
  ## Contributing
145
162
 
146
163
  If you want to add functionality please go to
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
3
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
4
+
5
+ # require 'potassium/cli'
6
+ require 'potassium/test_cli'
@@ -62,7 +62,7 @@ readme:
62
62
  style_guide:
63
63
  title: "Style Guides"
64
64
  body: |
65
- The style guides are enforced through a self hosted version of [Hound CI](http://monkyeci.platan.us). The style configuration can also be used locally
65
+ The style guides are enforced through a self hosted version of [Hound CI](http://monkeyci.platan.us). The style configuration can also be used locally
66
66
  in development runing `rubocop` or just using the rubocop integration for your text editor of choice.
67
67
 
68
68
  You can add custom rules to this project just adding them to the `.ruby-style.yml` file.
@@ -98,6 +98,9 @@ readme:
98
98
  sentry:
99
99
  title: "Error Reporting"
100
100
  body: "To report our errors we use [Sentry](https://github.com/getsentry/raven-ruby)"
101
+ draper:
102
+ title: "Presentation Layer"
103
+ body: "This project uses [Draper](https://github.com/drapergem/draper) to add an object-oriented layer of presentation logic"
101
104
  seeds:
102
105
  title: "Seeds"
103
106
  body: |
@@ -0,0 +1,62 @@
1
+ class ApiResponder < ActionController::Responder
2
+ def respond
3
+ return display_errors if has_errors?
4
+ return head :no_content if delete?
5
+
6
+ display resource, status_code: status_code
7
+ end
8
+
9
+ private
10
+
11
+ def display(_resource, given_options = {})
12
+ controller.render options.merge(given_options).merge(
13
+ json: serializer.as_json
14
+ )
15
+ end
16
+
17
+ def serializer
18
+ serializer_class = ActiveModel::Serializer.serializer_for(resource)
19
+ if serializer_class.present?
20
+ serializer_options = infer_serializer(serializer_class).merge(options)
21
+ serializer_class.new(decorated_resource, serializer_options)
22
+ else
23
+ decorated_resource
24
+ end
25
+ end
26
+
27
+ def status_code
28
+ return :created if post?
29
+ :ok
30
+ end
31
+
32
+ def display_errors
33
+ controller.render(
34
+ status: :unprocessable_entity,
35
+ json: { msg: "invalid_attributes", errors: format_errors }
36
+ )
37
+ end
38
+
39
+ def format_errors
40
+ resource.errors.as_json
41
+ end
42
+
43
+ def infer_serializer(serializer_class)
44
+ if serializer_class == ActiveModel::ArraySerializer
45
+ s = options.delete(:each_serializer) || "#{resource.klass}Serializer".constantize
46
+ { each_serializer: s }
47
+ else
48
+ s = options.delete(:serializer) || "#{resource.class}Serializer".constantize
49
+ { serializer: s }
50
+ end
51
+ end
52
+
53
+ def decorated_resource
54
+ if resource.respond_to?(:decorate)
55
+ resource.decorate
56
+ else
57
+ resource
58
+ end
59
+ rescue Draper::UninferrableDecoratorError
60
+ resource
61
+ end
62
+ end
@@ -14,7 +14,7 @@ bundle check || bundle install
14
14
  bower install
15
15
 
16
16
  # Set up database
17
- bin/rake db:setup
17
+ bin/rails db:setup
18
18
 
19
19
  # Add binstubs to PATH via export PATH=".git/safe/../../bin:$PATH" in ~/.zshenv
20
20
  mkdir -p .git/safe
@@ -1,4 +1,8 @@
1
+ require 'potassium/cli_options'
2
+
1
3
  module Potassium::CLI
4
+ extend Potassium::CliOptions
5
+
2
6
  desc "Create a new Potassium Rails project."
3
7
  arg 'app_path'
4
8
  command :create do |c|
@@ -8,64 +12,7 @@ module Potassium::CLI
8
12
  desc: "Performs a version check before running.",
9
13
  negatable: true
10
14
 
11
- c.flag [:db, :database],
12
- desc: "Decides which database to use. Available: mysql, postgresql, none"
13
- c.flag "locale",
14
- desc: "Decides which locale to use. Available: es-CL, en"
15
- c.flag [:email_service, :email],
16
- desc: "Decides which email adapter to use. Available: aws_ses, sendgrid, none"
17
- c.switch "devise",
18
- desc: "Whether to use Devise for authentication or not",
19
- negatable: true,
20
- default_value: "none"
21
- c.switch "devise-user-model",
22
- desc: "Whether to create a User model for Devise",
23
- negatable: true,
24
- default_value: "none"
25
- c.switch "admin",
26
- desc: "Whether to use ActiveAdmin or not",
27
- negatable: true,
28
- default_value: "none"
29
- c.switch "angular-admin",
30
- desc: "Whether to use Angular within ActiveAdmin or not",
31
- negatable: true,
32
- default_value: "none"
33
- c.switch "pundit",
34
- desc: "Whether to use Pundit for authorization or not",
35
- negatable: true,
36
- default_value: "none"
37
- c.switch "api",
38
- desc: "Whether to apply the API mode or not",
39
- negatable: true,
40
- default_value: "none"
41
- c.switch "paperclip",
42
- desc: "Whether to include Paperclip as dependency",
43
- negatable: true,
44
- default_value: "none"
45
- c.switch "heroku",
46
- desc: "Whether to prepare to application for Heroku or not",
47
- negatable: true,
48
- default_value: "none"
49
- c.switch "delayed-job",
50
- desc: "Whether to use DelayedJob or not",
51
- negatable: true,
52
- default_value: "none"
53
- c.switch "github",
54
- desc: "Whether to create a github repository",
55
- negatable: true,
56
- default_value: "none"
57
- c.switch "github-private",
58
- desc: "Whether to the github repository is private",
59
- negatable: true,
60
- default_value: false
61
- c.switch "clockwork",
62
- desc: "Whether to use clockwork as job scheduler",
63
- negatable: true,
64
- default_value: "none"
65
- c.switch "sentry",
66
- desc: "Whether to use Sentry as error reporting tool",
67
- negatable: true,
68
- default_value: "none"
15
+ create_options.each { |opts| c.send(opts.delete(:type), opts.delete(:name), opts) }
69
16
 
70
17
  c.action do |_global_options, options, _args|
71
18
  require "potassium/newest_version_ensurer"
data/lib/potassium/cli.rb CHANGED
@@ -4,11 +4,9 @@ require "gli"
4
4
  module Potassium::CLI
5
5
  extend GLI::App
6
6
 
7
- program_desc "Plataus Rails application generator"
8
-
7
+ program_desc "Platanus Rails application generator"
9
8
  version Potassium::VERSION
10
9
  hide_commands_without_desc true
11
-
12
10
  commands_from "potassium/cli/commands"
13
11
 
14
12
  exit Potassium::CLI.run(ARGV)
@@ -0,0 +1,151 @@
1
+ module Potassium::CliOptions # rubocop:disable Metrics/ModuleLength
2
+ CREATE_OPTIONS = [
3
+ {
4
+ type: :flag,
5
+ name: [:db, :database],
6
+ desc: "Decides which database to use. Available: mysql, postgresql, none",
7
+ default_test_value: "postgresql"
8
+ },
9
+ {
10
+ type: :flag,
11
+ name: "locale",
12
+ desc: "Decides which locale to use. Available: es-CL, en",
13
+ default_test_value: "es-CL"
14
+ },
15
+ {
16
+ type: :flag,
17
+ name: [:email_service, :email],
18
+ desc: "Decides which email adapter to use. Available: aws_ses, sendgrid, none",
19
+ default_test_value: "aws_ses"
20
+ },
21
+ {
22
+ type: :switch,
23
+ name: "devise",
24
+ desc: "Whether to use Devise for authentication or not",
25
+ negatable: true,
26
+ default_value: "none",
27
+ default_test_value: false
28
+ },
29
+ {
30
+ type: :switch,
31
+ name: "devise-user-model",
32
+ desc: "Whether to create a User model for Devise",
33
+ negatable: true,
34
+ default_value: "none",
35
+ default_test_value: false
36
+ },
37
+ {
38
+ type: :switch,
39
+ name: "admin",
40
+ desc: "Whether to use ActiveAdmin or not",
41
+ negatable: true,
42
+ default_value: "none",
43
+ default_test_value: false
44
+ },
45
+ {
46
+ type: :switch,
47
+ name: "angular-admin",
48
+ desc: "Whether to use Angular within ActiveAdmin or not",
49
+ negatable: true,
50
+ default_value: "none",
51
+ default_test_value: false
52
+ },
53
+ {
54
+ type: :switch,
55
+ name: "pundit",
56
+ desc: "Whether to use Pundit for authorization or not",
57
+ negatable: true,
58
+ default_value: "none",
59
+ default_test_value: false
60
+ },
61
+ {
62
+ type: :switch,
63
+ name: "api",
64
+ desc: "Whether to apply the API mode or not",
65
+ negatable: true,
66
+ default_value: "none",
67
+ default_test_value: false
68
+ },
69
+ {
70
+ type: :switch,
71
+ name: "paperclip",
72
+ desc: "Whether to include Paperclip as dependency",
73
+ negatable: true,
74
+ default_value: "none",
75
+ default_test_value: false
76
+ },
77
+ {
78
+ type: :switch,
79
+ name: "heroku",
80
+ desc: "Whether to prepare to application for Heroku or not",
81
+ negatable: true,
82
+ default_value: "none",
83
+ default_test_value: false
84
+ },
85
+ {
86
+ type: :switch,
87
+ name: "delayed-job",
88
+ desc: "Whether to use DelayedJob or not",
89
+ negatable: true,
90
+ default_value: "none",
91
+ default_test_value: false
92
+ },
93
+ {
94
+ type: :switch,
95
+ name: "draper",
96
+ desc: "Whether to use Draper or not",
97
+ negatable: true,
98
+ default_value: "none",
99
+ default_test_value: false
100
+ },
101
+ {
102
+ type: :switch,
103
+ name: "github",
104
+ desc: "Whether to create a github repository",
105
+ negatable: true,
106
+ default_value: "none",
107
+ default_test_value: false
108
+ },
109
+ {
110
+ type: :switch,
111
+ name: "github-private",
112
+ desc: "Whether to the github repository is private",
113
+ negatable: true,
114
+ default_value: false,
115
+ default_test_value: false
116
+ },
117
+ {
118
+ type: :switch,
119
+ name: "clockwork",
120
+ desc: "Whether to use clockwork as job scheduler",
121
+ negatable: true,
122
+ default_value: "none",
123
+ default_test_value: false
124
+ },
125
+ {
126
+ type: :switch,
127
+ name: "sentry",
128
+ desc: "Whether to use Sentry as error reporting tool",
129
+ negatable: true,
130
+ default_value: "none",
131
+ default_test_value: false
132
+ }
133
+ ]
134
+
135
+ def create_options(test_env = false)
136
+ CREATE_OPTIONS.map do |opts|
137
+ opts = opts.dup
138
+ test_default_value = opts.delete(:default_test_value)
139
+ opts[:default_value] = test_default_value if test_env
140
+ opts
141
+ end
142
+ end
143
+
144
+ def create_arguments(test_env = false)
145
+ create_options(test_env).inject({}) do |memo, opts|
146
+ opt = opts[:name].is_a?(Array) ? opts[:name].first : opts[:name]
147
+ memo[opt.to_s] = opts[:default_value]
148
+ memo
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,15 @@
1
+ module RubocopHelpers
2
+ def rubocop_revision
3
+ fix_environments
4
+ end
5
+
6
+ private
7
+
8
+ def fix_environments
9
+ # Style problem in Rails 5 production environments
10
+ file_name = "config/environments/production.rb"
11
+ production = File.read(file_name)
12
+ production.gsub!("config.log_tags = [ :request_id ]", "config.log_tags = [:request_id]")
13
+ File.open(file_name, "w") { |file| file.write(production) }
14
+ end
15
+ end
@@ -9,6 +9,7 @@ module TemplateDSL
9
9
  require_relative './answer-helpers'
10
10
  require_relative './info-helpers'
11
11
  require_relative './readme-helpers'
12
+ require_relative './rubocop-helpers'
12
13
 
13
14
  object.send :extend, TemplateHelpers
14
15
  object.send :extend, VariableHelpers
@@ -18,6 +19,7 @@ module TemplateDSL
18
19
  object.send :extend, AnswerHelpers
19
20
  object.send :extend, InfoHelpers
20
21
  object.send :extend, ReadmeHelpers
22
+ object.send :extend, RubocopHelpers
21
23
 
22
24
  object.send :source_path, source_path
23
25
  object.load_answers
@@ -1,5 +1,5 @@
1
1
  class Recipes::AwsSdk < Rails::AppBuilder
2
2
  def create
3
- gather_gem('aws-sdk')
3
+ gather_gem('aws-sdk', '~> 2.5')
4
4
  end
5
5
  end
@@ -0,0 +1,8 @@
1
+ class Recipes::BetterErrors < Rails::AppBuilder
2
+ def create
3
+ gather_gems(:development, :test) do
4
+ gather_gem('better_errors')
5
+ gather_gem('binding_of_caller')
6
+ end
7
+ end
8
+ end
@@ -31,7 +31,7 @@ class Recipes::DelayedJob < Rails::AppBuilder
31
31
  add_readme_section :internal_dependencies, :delayed_job
32
32
 
33
33
  if selected?(:heroku)
34
- gsub_file("Procfile", /^.*$/m) { |match| "#{match}worker: bundle exec rake jobs:work" }
34
+ gsub_file("Procfile", /^.*$/m) { |match| "#{match}worker: bundle exec rails jobs:work" }
35
35
  end
36
36
  end
37
37
  end
@@ -0,0 +1,35 @@
1
+ class Recipes::Draper < Rails::AppBuilder
2
+ def ask
3
+ draper = answer(:draper) { Ask.confirm('Do you want to use Draper to decorate models?') }
4
+ set(:draper, draper)
5
+ end
6
+
7
+ def create
8
+ return unless selected?(:draper)
9
+ add_draper
10
+ add_api_responder if selected?(:api_support)
11
+ end
12
+
13
+ def installed?
14
+ gem_exists?(/draper/)
15
+ end
16
+
17
+ def install
18
+ add_draper
19
+ api_recipe = load_recipe(:api)
20
+ add_api_responder if api_recipe.installed?
21
+ end
22
+
23
+ def add_draper
24
+ gather_gem 'activemodel-serializers-xml', github: 'rails/activemodel-serializers-xml'
25
+ gather_gem 'draper'
26
+ add_readme_section :internal_dependencies, :draper
27
+ create_file 'app/decorators/.keep'
28
+ end
29
+
30
+ def add_api_responder
31
+ after(:gem_install) do
32
+ copy_file '../assets/api/draper_responder.rb', 'app/responders/api_responder.rb', force: true
33
+ end
34
+ end
35
+ end
@@ -2,7 +2,9 @@ class Recipes::Github < Rails::AppBuilder
2
2
  def ask
3
3
  repo_name = "platanus/#{get(:dasherized_app_name)}"
4
4
  github_repo_create = answer(:github) do
5
- Ask.confirm("Do you want to use create the github repository? (#{repo_name})")
5
+ q = "Do you want to create the Github repository (https://github.com/#{repo_name}) " +
6
+ "for this project?"
7
+ Ask.confirm(q)
6
8
  end
7
9
  if github_repo_create
8
10
  github_repo_private = answer(:"github-private") do
@@ -19,8 +19,8 @@ class Recipes::I18n < Rails::AppBuilder
19
19
  template('../assets/es-CL.yml', 'config/locales/es-CL.yml')
20
20
  end
21
21
 
22
- gsub_file 'config/application.rb', /# config\.i18n\.default_locale =[^\n]+\n/ do
23
- "config.i18n.default_locale = '#{get(:lang)}'\n config.i18n.fallbacks = [:es, :en]\n"
22
+ gsub_file 'config/application.rb', /< Rails::Application/ do
23
+ "< Rails::Application\n config.i18n.default_locale = '#{get(:lang)}'\n config.i18n.fallbacks = [:es, :en]\n"
24
24
  end
25
25
  end
26
26
  end
@@ -74,7 +74,7 @@ class Recipes::Mailer < Rails::AppBuilder
74
74
  RUBY
75
75
 
76
76
  prepend_file "config/environments/production.rb", mailer_config
77
- copy_file '../assets/app/mailers/application_mailer.rb', 'app/mailers/application_mailer.rb'
77
+ copy_file '../assets/app/mailers/application_mailer.rb', 'app/mailers/application_mailer.rb', force: true
78
78
 
79
79
  send(service[:name])
80
80
  end
@@ -22,7 +22,7 @@ class Recipes::Paperclip < Rails::AppBuilder
22
22
  private
23
23
 
24
24
  def add_paperclip
25
- gather_gem 'paperclip', '~> 4.3'
25
+ gather_gem 'paperclip', '~> 5.0'
26
26
  paperclip_config =
27
27
  <<-RUBY.gsub(/^ {7}/, '')
28
28
  config.paperclip_defaults = {
@@ -1,12 +1,10 @@
1
1
  class Recipes::Puma < Rails::AppBuilder
2
2
  def create
3
- gather_gem 'puma'
4
-
5
3
  gather_gems(:production) do
6
4
  gather_gem 'rack-timeout'
7
5
  end
8
6
 
9
- copy_file '../assets/config/puma.rb', 'config/puma.rb'
7
+ copy_file '../assets/config/puma.rb', 'config/puma.rb', force: true
10
8
 
11
9
  # Configure rack-timout
12
10
  rack_timeout_config =
@@ -4,7 +4,7 @@ class Recipes::RackCors < Rails::AppBuilder
4
4
  after(:gem_install) do
5
5
  rack_cors_config =
6
6
  <<-RUBY.gsub(/^ {7}/, '')
7
- config.middleware.insert_before 0, "Rack::Cors" do
7
+ config.middleware.insert_before 0, Rack::Cors do
8
8
  allow do
9
9
  origins '*'
10
10
  resource '*',
@@ -3,6 +3,10 @@ set :titleized_app_name, get(:app_name).titleize
3
3
  set :underscorized_app_name, get(:app_name).underscore
4
4
  set :dasherized_app_name, get(:app_name).dasherize
5
5
 
6
+ run_action(:after_create_rails) do
7
+ rubocop_revision
8
+ end
9
+
6
10
  run_action(:cleaning) do
7
11
  clean_gemfile
8
12
  gather_gem("spring")
@@ -19,6 +23,7 @@ run_action(:asking) do
19
23
  ask :pundit
20
24
  ask :i18n
21
25
  ask :api
26
+ ask :draper
22
27
  ask :paperclip
23
28
  ask :mailer
24
29
  ask :heroku
@@ -42,6 +47,7 @@ run_action(:recipe_loading) do
42
47
  create :mailer
43
48
  create :i18n
44
49
  create :pry
50
+ create :better_errors
45
51
  create :devise
46
52
  create :admin
47
53
  create :angular_admin
@@ -53,6 +59,7 @@ run_action(:recipe_loading) do
53
59
  create :secrets
54
60
  create :git
55
61
  create :api
62
+ create :draper
56
63
  create :rack_cors
57
64
  create :paperclip
58
65
  create :tzinfo
@@ -69,6 +76,6 @@ run_action(:gem_install) do
69
76
  end
70
77
 
71
78
  run_action(:database_creation) do
72
- run "bundle exec rake db:create db:migrate"
73
- run "RACK_ENV=test bundle exec rake db:create db:migrate"
79
+ run "bundle exec rails db:create db:migrate"
80
+ run "RACK_ENV=test bundle exec rails db:create db:migrate"
74
81
  end
@@ -0,0 +1,33 @@
1
+ require "potassium/version"
2
+ require 'potassium/cli_options'
3
+ require './spec/support/potassium_test_helpers'
4
+ require "term/ansicolor"
5
+ require "gli"
6
+
7
+ module Potassium::TestCLI
8
+ extend self
9
+ extend GLI::App
10
+ extend PotassiumTestHelpers
11
+ extend Potassium::CliOptions
12
+ extend Term::ANSIColor
13
+
14
+ program_desc "Platanus Rails TEST application generator"
15
+ version Potassium::VERSION
16
+ hide_commands_without_desc true
17
+
18
+ desc "Create a new Potassium TEST project"
19
+ command :create do |c|
20
+ c.default_desc "Create a TEST project"
21
+
22
+ create_options(true).each { |opts| c.send(opts.delete(:type), opts.delete(:name), opts) }
23
+
24
+ c.action do |_global_options, options, _args|
25
+ drop_dummy_database
26
+ remove_project_directory
27
+ create_dummy_project(options)
28
+ puts green("Your test app was created inside the #{project_path} directory")
29
+ end
30
+ end
31
+
32
+ exit Potassium::TestCLI.run(ARGV)
33
+ end
@@ -1,6 +1,6 @@
1
1
  module Potassium
2
- VERSION = "2.3.0"
2
+ VERSION = "3.0.0"
3
3
  RUBY_VERSION = "2.3.1"
4
- RAILS_VERSION = "~> 4.2.0"
4
+ RAILS_VERSION = "~> 5.0.2"
5
5
  RUBOCOP_VERSION = "~> 0.46.0"
6
6
  end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Draper" do
4
+ before :all do
5
+ drop_dummy_database
6
+ remove_project_directory
7
+ create_dummy_project("draper" => true, "api" => true)
8
+ end
9
+
10
+ it "adds the Draper gem to Gemfile" do
11
+ gemfile_content = IO.read("#{project_path}/Gemfile")
12
+ expect(gemfile_content).to include("gem 'draper'")
13
+ end
14
+
15
+ it "adds the Draper brief to README file" do
16
+ readme = IO.read("#{project_path}/README.md")
17
+ expect(readme).to include("Draper")
18
+ end
19
+
20
+ it "adds api responder to work with draper" do
21
+ responder_content = IO.read("#{project_path}/app/responders/api_responder.rb")
22
+ expect(responder_content).to include("decorated_resource")
23
+ end
24
+
25
+ it "adds decorators directory" do
26
+ content = IO.read("#{project_path}/app/decorators/.keep")
27
+ expect(content).to be_empty
28
+ end
29
+ end
@@ -1,4 +1,10 @@
1
+ require 'pathname'
2
+ require 'bundler'
3
+ require 'potassium/cli_options'
4
+
1
5
  module PotassiumTestHelpers
6
+ include Potassium::CliOptions
7
+
2
8
  APP_NAME = "dummy_app"
3
9
 
4
10
  def remove_project_directory
@@ -13,7 +19,7 @@ module PotassiumTestHelpers
13
19
  Dir.chdir(tmp_path) do
14
20
  Bundler.with_clean_env do
15
21
  add_fakes_to_path
16
- full_arguments = hash_to_arguments(default_arguments.merge(arguments))
22
+ full_arguments = hash_to_arguments(create_arguments(true).merge(arguments))
17
23
  run_command("#{potassium_bin} create #{APP_NAME} #{full_arguments}")
18
24
  on_project { run_command("hound rules update ruby --local") }
19
25
  end
@@ -22,7 +28,7 @@ module PotassiumTestHelpers
22
28
 
23
29
  def drop_dummy_database
24
30
  return unless File.exist?(project_path)
25
- on_project { run_command("bundle exec rake db:drop") }
31
+ on_project { run_command("bundle exec rails db:drop") }
26
32
  end
27
33
 
28
34
  def add_fakes_to_path
@@ -51,25 +57,6 @@ module PotassiumTestHelpers
51
57
  File.join(root_path, "bin", "potassium")
52
58
  end
53
59
 
54
- def default_arguments
55
- {
56
- "db" => "postgresql",
57
- "locale" => "es-CL",
58
- "heroku" => false,
59
- "admin" => false,
60
- "pundit" => false,
61
- "paperclip" => false,
62
- "email_service" => "aws_ses",
63
- "devise" => false,
64
- "api" => false,
65
- "delayed-job" => false,
66
- "github" => false,
67
- "github-private" => false,
68
- "clockwork" => false,
69
- "sentry" => false
70
- }
71
- end
72
-
73
60
  def hash_to_arguments(hash)
74
61
  hash.map do |key, value|
75
62
  if value == true
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: 2.3.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - juliogarciag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-27 00:00:00.000000000 Z
11
+ date: 2017-03-03 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: 4.2.0
89
+ version: 5.0.2
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: 4.2.0
96
+ version: 5.0.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: gli
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -169,6 +169,7 @@ email:
169
169
  - julioggonz@gmail.com
170
170
  executables:
171
171
  - potassium
172
+ - potassium_test
172
173
  extensions: []
173
174
  extra_rdoc_files: []
174
175
  files:
@@ -182,6 +183,7 @@ files:
182
183
  - README.md
183
184
  - Rakefile
184
185
  - bin/potassium
186
+ - bin/potassium_test
185
187
  - circle.yml
186
188
  - docs/CONTRIBUTING.md
187
189
  - docs/DSL.md
@@ -203,6 +205,7 @@ files:
203
205
  - lib/potassium/assets/active_admin/pundit_page_policy.rb
204
206
  - lib/potassium/assets/api/api_error_concern.rb
205
207
  - lib/potassium/assets/api/base_controller.rb
208
+ - lib/potassium/assets/api/draper_responder.rb
206
209
  - lib/potassium/assets/api/responder.rb
207
210
  - lib/potassium/assets/app/mailers/application_mailer.rb
208
211
  - lib/potassium/assets/bin/cibuild.erb
@@ -231,6 +234,7 @@ files:
231
234
  - lib/potassium/cli.rb
232
235
  - lib/potassium/cli/commands/create.rb
233
236
  - lib/potassium/cli/commands/install.rb
237
+ - lib/potassium/cli_options.rb
234
238
  - lib/potassium/generators/application.rb
235
239
  - lib/potassium/generators/recipe.rb
236
240
  - lib/potassium/helpers/answer-helpers.rb
@@ -240,6 +244,7 @@ files:
240
244
  - lib/potassium/helpers/gem-helpers.rb
241
245
  - lib/potassium/helpers/info-helpers.rb
242
246
  - lib/potassium/helpers/readme-helpers.rb
247
+ - lib/potassium/helpers/rubocop-helpers.rb
243
248
  - lib/potassium/helpers/template-dsl.rb
244
249
  - lib/potassium/helpers/template-helpers.rb
245
250
  - lib/potassium/helpers/variable-helpers.rb
@@ -250,12 +255,14 @@ files:
250
255
  - lib/potassium/recipes/annotate.rb
251
256
  - lib/potassium/recipes/api.rb
252
257
  - lib/potassium/recipes/aws_sdk.rb
258
+ - lib/potassium/recipes/better_errors.rb
253
259
  - lib/potassium/recipes/bower.rb
254
260
  - lib/potassium/recipes/ci.rb
255
261
  - lib/potassium/recipes/cleanup.rb
256
262
  - lib/potassium/recipes/database.rb
257
263
  - lib/potassium/recipes/delayed_job.rb
258
264
  - lib/potassium/recipes/devise.rb
265
+ - lib/potassium/recipes/draper.rb
259
266
  - lib/potassium/recipes/editorconfig.rb
260
267
  - lib/potassium/recipes/env.rb
261
268
  - lib/potassium/recipes/error_reporting.rb
@@ -281,6 +288,7 @@ files:
281
288
  - lib/potassium/template_finder.rb
282
289
  - lib/potassium/templates/application.rb
283
290
  - lib/potassium/templates/recipe.rb
291
+ - lib/potassium/test_cli.rb
284
292
  - lib/potassium/text_spinner.rb
285
293
  - lib/potassium/version.rb
286
294
  - potassium.gemspec
@@ -288,6 +296,7 @@ files:
288
296
  - spec/fakes/bin/hub
289
297
  - spec/features/ci_spec.rb
290
298
  - spec/features/clockwork_spec.rb
299
+ - spec/features/draper_spec.rb
291
300
  - spec/features/error_reporting_spec.rb
292
301
  - spec/features/github_spec.rb
293
302
  - spec/features/heroku_spec.rb
@@ -326,6 +335,7 @@ test_files:
326
335
  - spec/fakes/bin/hub
327
336
  - spec/features/ci_spec.rb
328
337
  - spec/features/clockwork_spec.rb
338
+ - spec/features/draper_spec.rb
329
339
  - spec/features/error_reporting_spec.rb
330
340
  - spec/features/github_spec.rb
331
341
  - spec/features/heroku_spec.rb