From c3336f4fc1924d4236b12579a4628cae0723b4e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Thu, 17 May 2018 18:08:34 +0200 Subject: [PATCH 01/15] Organization refactor --- concerns/askable.rb | 13 ++++ concerns/optionable.rb | 13 ++++ concerns/registerable.rb | 3 + configurators.rb | 3 + configurators/base.rb | 21 ++++++ configurators/form_framework.rb | 27 ++++++++ configurators/monitoring.rb | 18 +++++ pathfinder.rb | 115 +++++++++++++++----------------- recipes.rb | 20 ++++++ recipes/active_admin.rb | 22 ++++-- recipes/assets.rb | 10 ++- recipes/base.rb | 4 ++ recipes/carrier_wave.rb | 12 +++- recipes/configuration.rb | 18 ++++- recipes/devise.rb | 6 +- recipes/mailgun.rb | 2 + recipes/modernizr.rb | 2 + recipes/pundit.rb | 3 +- recipes/simple_form.rb | 20 ------ recipes/status.rb | 7 +- 20 files changed, 242 insertions(+), 97 deletions(-) create mode 100644 concerns/askable.rb create mode 100644 concerns/optionable.rb create mode 100644 concerns/registerable.rb create mode 100644 configurators.rb create mode 100644 configurators/base.rb create mode 100644 configurators/form_framework.rb create mode 100644 configurators/monitoring.rb create mode 100644 recipes.rb diff --git a/concerns/askable.rb b/concerns/askable.rb new file mode 100644 index 0000000..b2d84e8 --- /dev/null +++ b/concerns/askable.rb @@ -0,0 +1,13 @@ +module Askable + def self.included(base) + base.send(:extend, ClassMethods) + end + + module ClassMethods + attr_accessor :ask + + def askable(askable) + @ask = askable + end + end +end diff --git a/concerns/optionable.rb b/concerns/optionable.rb new file mode 100644 index 0000000..8e76ba2 --- /dev/null +++ b/concerns/optionable.rb @@ -0,0 +1,13 @@ +module Optionable + def self.included(base) + base.send(:extend, ClassMethods) + end + + module ClassMethods + attr_accessor :options + + def optionable(options) + @options = options + end + end +end diff --git a/concerns/registerable.rb b/concerns/registerable.rb new file mode 100644 index 0000000..eddf568 --- /dev/null +++ b/concerns/registerable.rb @@ -0,0 +1,3 @@ +module Registerable + +end diff --git a/configurators.rb b/configurators.rb new file mode 100644 index 0000000..5ccf959 --- /dev/null +++ b/configurators.rb @@ -0,0 +1,3 @@ +require_relative 'configurators/base' +require_relative 'configurators/form_framework' +require_relative 'configurators/monitoring' diff --git a/configurators/base.rb b/configurators/base.rb new file mode 100644 index 0000000..11313dc --- /dev/null +++ b/configurators/base.rb @@ -0,0 +1,21 @@ +require_relative '../concerns/askable' +require_relative '../concerns/optionable' + +module Configurators + class Base + include ::Askable + include ::Optionable + + def initialize(pathfinder) + @pathfinder = pathfinder + @template = pathfinder.template + end + + def cook + end + + def recipe + end + + end +end diff --git a/configurators/form_framework.rb b/configurators/form_framework.rb new file mode 100644 index 0000000..805cc27 --- /dev/null +++ b/configurators/form_framework.rb @@ -0,0 +1,27 @@ +module Configurators + class FormFramework < Base + + askable 'What framework do you want to use for your forms?' + optionable %w(marsman bootstrap default) + + def cook + case @template.ask(self.class.ask, limited_to: self.class.options) + when 'marsman' + @template.initializer('simple_form.rb', simple_form_template('marsman.rb')) + when 'bootstrap' + @template.generate('simple_form:install --bootstrap') + else + @template.generate('simple_form:install') + end + end + + private + + def simple_form_template(filename) + base_path = File.dirname(__FILE__).split('/') + base_path.pop + File.read(File.join(base_path, 'recipes', 'simple_form', filename)) + end + + end +end diff --git a/configurators/monitoring.rb b/configurators/monitoring.rb new file mode 100644 index 0000000..28ec784 --- /dev/null +++ b/configurators/monitoring.rb @@ -0,0 +1,18 @@ +module Configurators + class Monitoring < Base + + askable 'Choose Monitoring Engine:' + optionable %w(rollbar airbrake none) + + def recipe + case @template.ask(self.class.ask, limited_to: self.class.options) + when 'rollbar' + Recipes::Rollbar.new(@pathfinder) + when 'airbrake' + Recipes::Airbrake.new(@pathfinder) + else + end + end + + end +end diff --git a/pathfinder.rb b/pathfinder.rb index 12e6d3e..b301b18 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -1,23 +1,5 @@ -require_relative 'recipes/base' -require_relative 'recipes/active_admin' -require_relative 'recipes/airbrake' -require_relative 'recipes/assets' -require_relative 'recipes/carrier_wave' -require_relative 'recipes/configuration' -require_relative 'recipes/database' -require_relative 'recipes/devise' -require_relative 'recipes/git_ignore' -require_relative 'recipes/modernizr' -require_relative 'recipes/mailgun' -require_relative 'recipes/pundit' -require_relative 'recipes/redis' -require_relative 'recipes/rollbar' -require_relative 'recipes/sidekiq' -require_relative 'recipes/simple_form' -require_relative 'recipes/status' -require_relative 'recipes/testing' -require_relative 'recipes/utils' -require_relative 'recipes/webpacker' +require_relative 'recipes' +require_relative 'configurators' class Pathfinder @@ -26,51 +8,28 @@ class Pathfinder def initialize(app_name, template) @template = template @recipes_list = [] + @configurators_list = [] @app_name = app_name end - def add_recipe(recipe) - @recipes_list << recipe - recipe - end - - def generate_gems - recipes_operation(:gems) - end - - def generate_initializers - recipes_operation(:cook) - end - def ask_for_recipes - add_recipe(Recipes::Database.new(self)) - add_recipe(Recipes::CarrierWave.new(self)) if @template.yes?('Do you want to use Carrierwave?') - if @template.yes?('Do you want to use Mailgun for production emails?') - add_recipe(Recipes::Mailgun.new(self)) - end - aux = case @template.ask('Choose Monitoring Engine:', - limited_to: %w(rollbar airbrake none)) - when 'rollbar' - Recipes::Rollbar.new(self) - when 'airbrake' - Recipes::Airbrake.new(self) - else - end - add_recipe(aux) if aux.present? - add_recipe(Recipes::Assets.new(self)) - add_recipe(Recipes::Devise.new(self)) - add_recipe(Recipes::Pundit.new(self)) - add_recipe(Recipes::GitIgnore.new(self)) - add_recipe(Recipes::Redis.new(self)) - add_recipe(Recipes::Sidekiq.new(self)) + # add_recipe(Recipes::Database.new(self)) + # add_recipe(Recipes::CarrierWave.new(self)) + # add_recipe(Recipes::Mailgun.new(self)) + # add_recipe_from_configurator(Configurators::Monitoring.new(self)) + # add_recipe(Recipes::Assets.new(self)) + # add_recipe(Recipes::Devise.new(self)) + # add_recipe(Recipes::Pundit.new(self)) + # add_recipe(Recipes::GitIgnore.new(self)) + # add_recipe(Recipes::Redis.new(self)) + # add_recipe(Recipes::Sidekiq.new(self)) add_recipe(Recipes::SimpleForm.new(self)) - add_recipe(Recipes::Status.new(self)) - add_recipe(Recipes::Webpacker.new(self)) - if @template.yes?('Do you want to use Modernizr?') - add_recipe(Recipes::Modernizr.new(self)) - end - add_recipe(Recipes::ActiveAdmin.new(self)) - add_recipe(Recipes::Testing.new(self)) + add_configurator(Configurators::FormFramework.new(self)) + # add_recipe(Recipes::Status.new(self)) + # add_recipe(Recipes::Webpacker.new(self)) + # add_recipe(Recipes::Modernizr.new(self)) + # add_recipe(Recipes::ActiveAdmin.new(self)) + # add_recipe(Recipes::Testing.new(self)) end def call @@ -87,6 +46,7 @@ def call configuration.gems do pathfinder.generate_gems + pathfinder.generate_gems_configurations end after_bundle do @@ -99,10 +59,45 @@ def call end end + def add_recipe(recipe) + if recipe.class.ask + @recipes_list << recipe if @template.yes?(recipe.class.ask) + else + @recipes_list << recipe + end + + recipe + end + + def add_recipe_from_configurator(configurator) + recipe = Configurators::Monitoring.new(self).recipe + add_recipe(recipe) if recipe + end + + def add_configurator(configurator) + @configurators_list << configurator + end + + def generate_gems_configurations + configurators_operation(:cook) + end + + def generate_gems + recipes_operation(:gems) + end + + def generate_initializers + recipes_operation(:cook) + end + private def recipes_operation(method) @recipes_list.map(&method.to_sym) end + def configurators_operation(method) + @configurators_list.map(&method.to_sym) + end + end diff --git a/recipes.rb b/recipes.rb new file mode 100644 index 0000000..b6088c5 --- /dev/null +++ b/recipes.rb @@ -0,0 +1,20 @@ +require_relative 'recipes/base' +require_relative 'recipes/active_admin' +require_relative 'recipes/airbrake' +require_relative 'recipes/assets' +require_relative 'recipes/carrier_wave' +require_relative 'recipes/configuration' +require_relative 'recipes/database' +require_relative 'recipes/devise' +require_relative 'recipes/git_ignore' +require_relative 'recipes/modernizr' +require_relative 'recipes/mailgun' +require_relative 'recipes/pundit' +require_relative 'recipes/redis' +require_relative 'recipes/rollbar' +require_relative 'recipes/sidekiq' +require_relative 'recipes/simple_form' +require_relative 'recipes/status' +require_relative 'recipes/testing' +require_relative 'recipes/utils' +require_relative 'recipes/webpacker' diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index 24cf72d..e876834 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -1,18 +1,26 @@ module Recipes class ActiveAdmin < Base + askable 'Will you need ActiveAdmin to have an admin area?' + def gems - if @template.yes? 'Will you need ActiveAdmin to have an admin area?' - @install = true - @template.gem 'activeadmin' - end + @install = true + @template.gem 'activeadmin' end def cook return unless @install - msg = 'What will be the main user class for Devise and ActiveAdmin?' - user_classname = @template.ask msg, default: 'AdminUser' - @template.run "rails g active_admin:install #{user_classname}" + + user_class_name = ask_user_class_name + @template.run "rails g active_admin:install #{user_class_name}" + end + + private + + def ask_for_user_class_name + ask = 'What will be the main user class for Devise and ActiveAdmin?' + @template.ask(ask, default: 'AdminUser') end + end end diff --git a/recipes/assets.rb b/recipes/assets.rb index df9a165..a528f0f 100644 --- a/recipes/assets.rb +++ b/recipes/assets.rb @@ -3,7 +3,7 @@ class Assets < Base def gems @template.gem 'bootstrap-sass', '~> 3.3.3' - @template.gem 'bootstrap-datepicker-rails', '~> 1.6.0' if @template.yes?('Do you want to use Bootstrap datepicker?') + ask_for_bootstrap_datepicker @template.gem 'font-awesome-sass', '~> 4.7.0' @template.gem 'sass-rails' @template.gem 'autoprefixer-rails' @@ -13,5 +13,13 @@ def gems @template.gem 'sdoc', '~> 0.4.0', group: :doc end + private + + def ask_for_bootstrap_datepicker + if @template.yes?('Do you want to use Bootstrap datepicker?') + @template.gem 'bootstrap-datepicker-rails', '~> 1.6.0' + end + end + end end diff --git a/recipes/base.rb b/recipes/base.rb index 1ba2e19..09a0518 100644 --- a/recipes/base.rb +++ b/recipes/base.rb @@ -1,5 +1,8 @@ +require_relative '../concerns/askable' + module Recipes class Base + include ::Askable def initialize(pathfinder) @pathfinder = pathfinder @@ -11,5 +14,6 @@ def gems def cook end + end end diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index 64d3b94..f743323 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -1,10 +1,11 @@ module Recipes class CarrierWave < Base + askable 'Do you want to use Carrierwave?' + def gems @template.gem 'carrierwave' @template.gem 'fog-aws' - @template.gem 'mini_magick' if @template.yes?("Are you going to handle images with CarrierWave?") end def cook @@ -36,4 +37,13 @@ def cook end end end + + private + + def ask_for_imagemagick + if @template.yes?('Are you going to handle images with CarrierWave?') + @template.gem 'mini_magick' + end + end + end diff --git a/recipes/configuration.rb b/recipes/configuration.rb index 085d8f3..5f63cec 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -9,11 +9,11 @@ def gems # Model @template.gem 'aasm' @template.gem 'keynote' - @template.gem 'paranoia' if @template.yes?('Do you want to use Soft Deletes?') + ask_for_soft_deletes # Searchs - @template.gem 'ransack' if @template.yes?('Do you want to use Ransack?') @template.gem 'kaminari' - @template.gem 'searchkick' if @template.yes?('Are you going to use ElasticSearch?') + ask_for_ransack + ask_for_elastic_search # Emails @template.gem 'premailer-rails' @@ -49,6 +49,18 @@ def cook private + def ask_for_soft_deletes + @template.gem 'paranoia' if @template.yes?('Do you want to use Soft Deletes?') + end + + def ask_for_ransack + @template.gem 'ransack' if @template.yes?('Do you want to use Ransack?') + end + + def ask_for_elastic_search + @template.gem 'searchkick' if @template.yes?('Are you going to use ElasticSearch?') + end + def create_hound_yml @template.create_file '.hound.yml' do <<~CODE ruby: diff --git a/recipes/devise.rb b/recipes/devise.rb index 7a47ac8..f0e6ad2 100644 --- a/recipes/devise.rb +++ b/recipes/devise.rb @@ -14,7 +14,8 @@ def cook private def add_development_env_config - @template.insert_into_file 'config/environments/development.rb', after: "Rails.application.configure do\n" do <<~RUBY + @template.insert_into_file 'config/environments/development.rb', + after: "Rails.application.configure do\n" do <<~RUBY \n \s\sconfig.action_controller.asset_host = 'http://localhost:3000' \s\sconfig.action_mailer.default_url_options = { host: 'localhost', port: 3000 } @@ -25,7 +26,8 @@ def add_development_env_config end def add_route_config - @template.insert_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do <<~RUBY + @template.insert_into_file 'config/routes.rb', + after: "Rails.application.routes.draw do\n" do <<~RUBY \s\sif Rails.env.development? \s\s\s\smount LetterOpenerWeb::Engine, at: "/letter_opener" \s\send diff --git a/recipes/mailgun.rb b/recipes/mailgun.rb index e263a95..c0d6b73 100644 --- a/recipes/mailgun.rb +++ b/recipes/mailgun.rb @@ -1,6 +1,8 @@ module Recipes class Mailgun < Base + askable 'Do you want to use Mailgun for production emails?' + def gems @template.gem 'mailgun-ruby' end diff --git a/recipes/modernizr.rb b/recipes/modernizr.rb index 1d7b92b..4b0054c 100644 --- a/recipes/modernizr.rb +++ b/recipes/modernizr.rb @@ -1,6 +1,8 @@ module Recipes class Modernizr < Base + askable 'Do you want to use Modernizr?' + def gems @template.gem 'modernizr-rails' end diff --git a/recipes/pundit.rb b/recipes/pundit.rb index 340cdaa..84fb6a5 100644 --- a/recipes/pundit.rb +++ b/recipes/pundit.rb @@ -7,7 +7,8 @@ def gems def cook @template.generate 'pundit:install' - @template.insert_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-RUBY + @template.insert_into_file 'app/controllers/application_controller.rb', + after: "class ApplicationController < ActionController::Base\n" do <<-RUBY include Pundit RUBY end diff --git a/recipes/simple_form.rb b/recipes/simple_form.rb index 7ff0a6b..01dedac 100644 --- a/recipes/simple_form.rb +++ b/recipes/simple_form.rb @@ -6,35 +6,15 @@ def gems end def cook - run_generators add_sample_i18n end private - def run_generators - case ask_framework_for_forms - when 'marsman' - @template.initializer 'simple_form.rb', simple_form_template('marsman.rb') - when 'bootstrap' - @template.generate 'simple_form:install --bootstrap' - else - @template.generate 'simple_form:install' - end - end - def add_sample_i18n @template.run 'rm config/locales/simple_form.en.yml' @template.append_to_file 'config/locales/en.yml', simple_form_template('en.yml') end - def ask_framework_for_forms - @template.ask('What framework do you want to use for your forms?', - limited_to: %w(marsman bootstrap default)) - end - - def simple_form_template(filename) - File.read(File.join(File.dirname(__FILE__), 'simple_form', filename)) - end end end diff --git a/recipes/status.rb b/recipes/status.rb index ed48703..eb7cc10 100644 --- a/recipes/status.rb +++ b/recipes/status.rb @@ -9,14 +9,17 @@ def cook private def set_route_path - @template.insert_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do <<~RUBY + @template.insert_into_file 'config/routes.rb', + after: "Rails.application.routes.draw do\n" do <<~RUBY \s\sresource :status, only: :show RUBY end end def add_controller - @template.copy_file(File.join(File.dirname(__FILE__), 'controllers', 'statuses_controller.rb'), 'app/controllers/statuses_controller.rb') + @template.copy_file( + File.join(File.dirname(__FILE__), 'controllers', 'statuses_controller.rb'), + 'app/controllers/statuses_controller.rb') end end From 8f63bf4cec79e863dba3717259c64a75f1cd2b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Thu, 17 May 2018 18:09:20 +0200 Subject: [PATCH 02/15] Remove comments --- pathfinder.rb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pathfinder.rb b/pathfinder.rb index b301b18..798bbe9 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -13,23 +13,23 @@ def initialize(app_name, template) end def ask_for_recipes - # add_recipe(Recipes::Database.new(self)) - # add_recipe(Recipes::CarrierWave.new(self)) - # add_recipe(Recipes::Mailgun.new(self)) - # add_recipe_from_configurator(Configurators::Monitoring.new(self)) - # add_recipe(Recipes::Assets.new(self)) - # add_recipe(Recipes::Devise.new(self)) - # add_recipe(Recipes::Pundit.new(self)) - # add_recipe(Recipes::GitIgnore.new(self)) - # add_recipe(Recipes::Redis.new(self)) - # add_recipe(Recipes::Sidekiq.new(self)) + add_recipe(Recipes::Database.new(self)) + add_recipe(Recipes::CarrierWave.new(self)) + add_recipe(Recipes::Mailgun.new(self)) + add_recipe_from_configurator(Configurators::Monitoring.new(self)) + add_recipe(Recipes::Assets.new(self)) + add_recipe(Recipes::Devise.new(self)) + add_recipe(Recipes::Pundit.new(self)) + add_recipe(Recipes::GitIgnore.new(self)) + add_recipe(Recipes::Redis.new(self)) + add_recipe(Recipes::Sidekiq.new(self)) add_recipe(Recipes::SimpleForm.new(self)) add_configurator(Configurators::FormFramework.new(self)) - # add_recipe(Recipes::Status.new(self)) - # add_recipe(Recipes::Webpacker.new(self)) - # add_recipe(Recipes::Modernizr.new(self)) - # add_recipe(Recipes::ActiveAdmin.new(self)) - # add_recipe(Recipes::Testing.new(self)) + add_recipe(Recipes::Status.new(self)) + add_recipe(Recipes::Webpacker.new(self)) + add_recipe(Recipes::Modernizr.new(self)) + add_recipe(Recipes::ActiveAdmin.new(self)) + add_recipe(Recipes::Testing.new(self)) end def call From d2efe1e884a4ec9fa69dd0df8f82e5a990418c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 10:56:09 +0200 Subject: [PATCH 03/15] More changes --- concerns/askable.rb | 4 ++-- concerns/registerable.rb | 3 --- configurators/base.rb | 1 + pathfinder.rb | 35 +++++++++++++++++++++-------------- recipes.rb | 3 +++ recipes/active_admin.rb | 2 +- recipes/base.rb | 1 + recipes/configuration.rb | 15 +-------------- recipes/elastic_search.rb | 11 +++++++++++ recipes/paranoia.rb | 11 +++++++++++ recipes/ransack.rb | 11 +++++++++++ recipes/simple_form.rb | 8 +++++++- 12 files changed, 70 insertions(+), 35 deletions(-) delete mode 100644 concerns/registerable.rb create mode 100644 recipes/elastic_search.rb create mode 100644 recipes/paranoia.rb create mode 100644 recipes/ransack.rb diff --git a/concerns/askable.rb b/concerns/askable.rb index b2d84e8..e02686e 100644 --- a/concerns/askable.rb +++ b/concerns/askable.rb @@ -6,8 +6,8 @@ def self.included(base) module ClassMethods attr_accessor :ask - def askable(askable) - @ask = askable + def askable(value) + @ask = value end end end diff --git a/concerns/registerable.rb b/concerns/registerable.rb deleted file mode 100644 index eddf568..0000000 --- a/concerns/registerable.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Registerable - -end diff --git a/configurators/base.rb b/configurators/base.rb index 11313dc..1a4c51a 100644 --- a/configurators/base.rb +++ b/configurators/base.rb @@ -3,6 +3,7 @@ module Configurators class Base + include ::Askable include ::Optionable diff --git a/pathfinder.rb b/pathfinder.rb index 798bbe9..a092a8f 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -6,17 +6,16 @@ class Pathfinder attr_reader :template, :app_name def initialize(app_name, template) + @app_name = app_name @template = template @recipes_list = [] @configurators_list = [] - @app_name = app_name end def ask_for_recipes add_recipe(Recipes::Database.new(self)) add_recipe(Recipes::CarrierWave.new(self)) add_recipe(Recipes::Mailgun.new(self)) - add_recipe_from_configurator(Configurators::Monitoring.new(self)) add_recipe(Recipes::Assets.new(self)) add_recipe(Recipes::Devise.new(self)) add_recipe(Recipes::Pundit.new(self)) @@ -24,16 +23,24 @@ def ask_for_recipes add_recipe(Recipes::Redis.new(self)) add_recipe(Recipes::Sidekiq.new(self)) add_recipe(Recipes::SimpleForm.new(self)) - add_configurator(Configurators::FormFramework.new(self)) add_recipe(Recipes::Status.new(self)) add_recipe(Recipes::Webpacker.new(self)) add_recipe(Recipes::Modernizr.new(self)) add_recipe(Recipes::ActiveAdmin.new(self)) add_recipe(Recipes::Testing.new(self)) + add_recipe(Recipes::Paranoia.new(self)) + add_recipe(Recipes::Ransack.new(self)) + add_recipe(Recipes::ElasticSearch.new(self)) + end + + def ask_for_configurators + add_recipe_from_configurator(Configurators::Monitoring.new(self)) + add_configurator(Configurators::FormFramework.new(self)) end def call ask_for_recipes + ask_for_configurators @template.instance_exec(self) do |pathfinder| utils = Recipes::Utils.new(self) configuration = Recipes::Configuration.new(self) @@ -45,8 +52,8 @@ def call append_file 'Gemfile', "ruby \'#{utils.ask_with_default('Which version of ruby do you want to use?', default: RUBY_VERSION)}\'" configuration.gems do - pathfinder.generate_gems - pathfinder.generate_gems_configurations + pathfinder.generate_recipes_gems + pathfinder.generate_configurators_gems end after_bundle do @@ -54,7 +61,7 @@ def call configuration.cook - pathfinder.generate_initializers + pathfinder.generate_recipes_initializers end end end @@ -69,24 +76,24 @@ def add_recipe(recipe) recipe end - def add_recipe_from_configurator(configurator) - recipe = Configurators::Monitoring.new(self).recipe - add_recipe(recipe) if recipe - end - def add_configurator(configurator) @configurators_list << configurator end - def generate_gems_configurations + def add_recipe_from_configurator(configurator) + recipe = configurator.recipe + add_recipe(recipe) if recipe + end + + def generate_configurators_gems configurators_operation(:cook) end - def generate_gems + def generate_recipes_gems recipes_operation(:gems) end - def generate_initializers + def generate_recipes_initializers recipes_operation(:cook) end diff --git a/recipes.rb b/recipes.rb index b6088c5..9c4298e 100644 --- a/recipes.rb +++ b/recipes.rb @@ -6,10 +6,13 @@ require_relative 'recipes/configuration' require_relative 'recipes/database' require_relative 'recipes/devise' +require_relative 'recipes/elastic_search' require_relative 'recipes/git_ignore' require_relative 'recipes/modernizr' require_relative 'recipes/mailgun' +require_relative 'recipes/paranoia' require_relative 'recipes/pundit' +require_relative 'recipes/ransack' require_relative 'recipes/redis' require_relative 'recipes/rollbar' require_relative 'recipes/sidekiq' diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index e876834..78c35c4 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -11,7 +11,7 @@ def gems def cook return unless @install - user_class_name = ask_user_class_name + user_class_name = ask_for_user_class_name @template.run "rails g active_admin:install #{user_class_name}" end diff --git a/recipes/base.rb b/recipes/base.rb index 09a0518..dc1cf2b 100644 --- a/recipes/base.rb +++ b/recipes/base.rb @@ -2,6 +2,7 @@ module Recipes class Base + include ::Askable def initialize(pathfinder) diff --git a/recipes/configuration.rb b/recipes/configuration.rb index 5f63cec..136b89d 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -6,15 +6,10 @@ def initialize(template) def gems @template.gem 'rails', '~> 5.1.0' - # Model + @template.gem 'aasm' @template.gem 'keynote' - ask_for_soft_deletes - # Searchs @template.gem 'kaminari' - ask_for_ransack - ask_for_elastic_search - # Emails @template.gem 'premailer-rails' yield if block_given? @@ -49,14 +44,6 @@ def cook private - def ask_for_soft_deletes - @template.gem 'paranoia' if @template.yes?('Do you want to use Soft Deletes?') - end - - def ask_for_ransack - @template.gem 'ransack' if @template.yes?('Do you want to use Ransack?') - end - def ask_for_elastic_search @template.gem 'searchkick' if @template.yes?('Are you going to use ElasticSearch?') end diff --git a/recipes/elastic_search.rb b/recipes/elastic_search.rb new file mode 100644 index 0000000..55560fc --- /dev/null +++ b/recipes/elastic_search.rb @@ -0,0 +1,11 @@ +module Recipes + class ElasticSearch < Base + + askable 'Are you going to use ElasticSearch?' + + def gems + @template.gem 'searchkick' + end + + end +end diff --git a/recipes/paranoia.rb b/recipes/paranoia.rb new file mode 100644 index 0000000..15691e6 --- /dev/null +++ b/recipes/paranoia.rb @@ -0,0 +1,11 @@ +module Recipes + class Paranoia < Base + + askable 'Do you want to use Soft Deletes?' + + def gems + @template.gem 'paranoia' + end + + end +end diff --git a/recipes/ransack.rb b/recipes/ransack.rb new file mode 100644 index 0000000..4efcc8a --- /dev/null +++ b/recipes/ransack.rb @@ -0,0 +1,11 @@ +module Recipes + class Ransack < Base + + askable 'Do you want to use Ransack?' + + def gems + @template.gem 'ransack' + end + + end +end diff --git a/recipes/simple_form.rb b/recipes/simple_form.rb index 01dedac..90ba52a 100644 --- a/recipes/simple_form.rb +++ b/recipes/simple_form.rb @@ -13,7 +13,13 @@ def cook def add_sample_i18n @template.run 'rm config/locales/simple_form.en.yml' - @template.append_to_file 'config/locales/en.yml', simple_form_template('en.yml') + @template.append_to_file 'config/locales/en.yml', simple_form_locale('en.yml') + end + + def simple_form_locale(filename) + base_path = File.dirname(__FILE__).split('/') + base_path.pop + File.read(File.join(base_path, 'recipes', 'simple_form', filename)) end end From 59d77c4061f290e0af2299f41b70c4f5155081fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 12:49:49 +0200 Subject: [PATCH 04/15] More refactor --- concerns/askable.rb | 20 +++ concerns/confirmable.rb | 17 +++ concerns/optionable.rb | 4 + configurators/base.rb | 2 + configurators/form_framework.rb | 2 +- configurators/monitoring.rb | 2 +- pathfinder.rb | 208 ++++++++++++++++---------------- recipes.rb | 1 + recipes/active_admin.rb | 1 + recipes/assets.rb | 9 -- recipes/base.rb | 4 + recipes/bootstrap_datepicker.rb | 11 ++ recipes/carrier_wave.rb | 3 +- recipes/configuration.rb | 5 +- recipes/elastic_search.rb | 1 + recipes/mailgun.rb | 1 + recipes/modernizr.rb | 1 + recipes/paranoia.rb | 1 + recipes/ransack.rb | 1 + recipes/utils.rb | 12 ++ 20 files changed, 190 insertions(+), 116 deletions(-) create mode 100644 concerns/confirmable.rb create mode 100644 recipes/bootstrap_datepicker.rb diff --git a/concerns/askable.rb b/concerns/askable.rb index e02686e..58f7c6f 100644 --- a/concerns/askable.rb +++ b/concerns/askable.rb @@ -1,6 +1,7 @@ module Askable def self.included(base) base.send(:extend, ClassMethods) + base.send(:include, InstanceMethods) end module ClassMethods @@ -10,4 +11,23 @@ def askable(value) @ask = value end end + + module InstanceMethods + def ask? + self.class.ask.present? + end + + def ask! + return unless ask? + + if self.class.options.any? + @pathfinder.utils.ask_with_options(self.class.ask, + limited_to: self.class.options) + elsif self.class.confirm + @pathfinder.utils.ask_with_confirmation(self.class.ask) + else + @pathfinder.utils.ask(self.class.ask) + end + end + end end diff --git a/concerns/confirmable.rb b/concerns/confirmable.rb new file mode 100644 index 0000000..16f951f --- /dev/null +++ b/concerns/confirmable.rb @@ -0,0 +1,17 @@ +module Confirmable + def self.included(base) + base.send(:extend, ClassMethods) + end + + module ClassMethods + attr_accessor :confirm + + def confirmable(value) + @confirm = value + end + + def confirm + @confirm || false + end + end +end diff --git a/concerns/optionable.rb b/concerns/optionable.rb index 8e76ba2..ce5bab5 100644 --- a/concerns/optionable.rb +++ b/concerns/optionable.rb @@ -9,5 +9,9 @@ module ClassMethods def optionable(options) @options = options end + + def options + @options || [] + end end end diff --git a/configurators/base.rb b/configurators/base.rb index 1a4c51a..229202e 100644 --- a/configurators/base.rb +++ b/configurators/base.rb @@ -1,11 +1,13 @@ require_relative '../concerns/askable' require_relative '../concerns/optionable' +require_relative '../concerns/confirmable' module Configurators class Base include ::Askable include ::Optionable + include ::Confirmable def initialize(pathfinder) @pathfinder = pathfinder diff --git a/configurators/form_framework.rb b/configurators/form_framework.rb index 805cc27..ed80c6c 100644 --- a/configurators/form_framework.rb +++ b/configurators/form_framework.rb @@ -5,7 +5,7 @@ class FormFramework < Base optionable %w(marsman bootstrap default) def cook - case @template.ask(self.class.ask, limited_to: self.class.options) + case ask! when 'marsman' @template.initializer('simple_form.rb', simple_form_template('marsman.rb')) when 'bootstrap' diff --git a/configurators/monitoring.rb b/configurators/monitoring.rb index 28ec784..fcb9008 100644 --- a/configurators/monitoring.rb +++ b/configurators/monitoring.rb @@ -5,7 +5,7 @@ class Monitoring < Base optionable %w(rollbar airbrake none) def recipe - case @template.ask(self.class.ask, limited_to: self.class.options) + case ask! when 'rollbar' Recipes::Rollbar.new(@pathfinder) when 'airbrake' diff --git a/pathfinder.rb b/pathfinder.rb index a092a8f..2218f86 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -3,108 +3,110 @@ class Pathfinder - attr_reader :template, :app_name - - def initialize(app_name, template) - @app_name = app_name - @template = template - @recipes_list = [] - @configurators_list = [] - end - - def ask_for_recipes - add_recipe(Recipes::Database.new(self)) - add_recipe(Recipes::CarrierWave.new(self)) - add_recipe(Recipes::Mailgun.new(self)) - add_recipe(Recipes::Assets.new(self)) - add_recipe(Recipes::Devise.new(self)) - add_recipe(Recipes::Pundit.new(self)) - add_recipe(Recipes::GitIgnore.new(self)) - add_recipe(Recipes::Redis.new(self)) - add_recipe(Recipes::Sidekiq.new(self)) - add_recipe(Recipes::SimpleForm.new(self)) - add_recipe(Recipes::Status.new(self)) - add_recipe(Recipes::Webpacker.new(self)) - add_recipe(Recipes::Modernizr.new(self)) - add_recipe(Recipes::ActiveAdmin.new(self)) - add_recipe(Recipes::Testing.new(self)) - add_recipe(Recipes::Paranoia.new(self)) - add_recipe(Recipes::Ransack.new(self)) - add_recipe(Recipes::ElasticSearch.new(self)) - end - - def ask_for_configurators - add_recipe_from_configurator(Configurators::Monitoring.new(self)) - add_configurator(Configurators::FormFramework.new(self)) - end - - def call - ask_for_recipes - ask_for_configurators - @template.instance_exec(self) do |pathfinder| - utils = Recipes::Utils.new(self) - configuration = Recipes::Configuration.new(self) - - remove_file 'Gemfile' - run 'touch Gemfile' - add_source 'https://rubygems.org' - - append_file 'Gemfile', "ruby \'#{utils.ask_with_default('Which version of ruby do you want to use?', default: RUBY_VERSION)}\'" - - configuration.gems do - pathfinder.generate_recipes_gems - pathfinder.generate_configurators_gems - end - - after_bundle do - run 'spring stop' - - configuration.cook - - pathfinder.generate_recipes_initializers - end - end - end - - def add_recipe(recipe) - if recipe.class.ask - @recipes_list << recipe if @template.yes?(recipe.class.ask) - else - @recipes_list << recipe - end - - recipe - end - - def add_configurator(configurator) - @configurators_list << configurator - end - - def add_recipe_from_configurator(configurator) - recipe = configurator.recipe - add_recipe(recipe) if recipe - end - - def generate_configurators_gems - configurators_operation(:cook) - end - - def generate_recipes_gems - recipes_operation(:gems) - end - - def generate_recipes_initializers - recipes_operation(:cook) - end - - private - - def recipes_operation(method) - @recipes_list.map(&method.to_sym) - end - - def configurators_operation(method) - @configurators_list.map(&method.to_sym) - end + attr_reader :template, :app_name, :utils + + def initialize(app_name, template) + @app_name = app_name + @template = template + @utils = Recipes::Utils.new(@template) + @recipes_list = [] + @configurators_list = [] + end + + def ask_for_recipes + add_recipe(Recipes::Database.new(self)) + add_recipe(Recipes::CarrierWave.new(self)) + add_recipe(Recipes::Mailgun.new(self)) + add_recipe(Recipes::Assets.new(self)) + add_recipe(Recipes::BootstrapDatepicker.new(self)) + add_recipe(Recipes::Devise.new(self)) + add_recipe(Recipes::Pundit.new(self)) + add_recipe(Recipes::GitIgnore.new(self)) + add_recipe(Recipes::Redis.new(self)) + add_recipe(Recipes::Sidekiq.new(self)) + add_recipe(Recipes::SimpleForm.new(self)) + add_recipe(Recipes::Status.new(self)) + add_recipe(Recipes::Webpacker.new(self)) + add_recipe(Recipes::Modernizr.new(self)) + add_recipe(Recipes::ActiveAdmin.new(self)) + add_recipe(Recipes::Testing.new(self)) + add_recipe(Recipes::Paranoia.new(self)) + add_recipe(Recipes::Ransack.new(self)) + add_recipe(Recipes::ElasticSearch.new(self)) + end + + def ask_for_configurators + add_recipe_from_configurator(Configurators::Monitoring.new(self)) + add_configurator(Configurators::FormFramework.new(self)) + end + + def call + ask_for_recipes + ask_for_configurators + @template.instance_exec(self) do |pathfinder| + configuration = Recipes::Configuration.new(self) + + remove_file 'Gemfile' + run 'touch Gemfile' + add_source 'https://rubygems.org' + + append_file 'Gemfile', + "ruby \'#{pathfinder.utils.ask_with_default('Which version of ruby do you want to use?', default: RUBY_VERSION)}\'" + + configuration.gems do + pathfinder.generate_recipes_gems + pathfinder.generate_configurators_gems + end + + after_bundle do + run 'spring stop' + + configuration.cook + + pathfinder.generate_recipes_initializers + end + end + end + + def add_recipe(recipe) + if recipe.ask? + @recipes_list << recipe if recipe.ask! + else + @recipes_list << recipe + end + + recipe + end + + def add_configurator(configurator) + @configurators_list << configurator + end + + def add_recipe_from_configurator(configurator) + recipe = configurator.recipe + add_recipe(recipe) if recipe + end + + def generate_configurators_gems + configurators_operation(:cook) + end + + def generate_recipes_gems + recipes_operation(:gems) + end + + def generate_recipes_initializers + recipes_operation(:cook) + end + + private + + def recipes_operation(method) + @recipes_list.map(&method.to_sym) + end + + def configurators_operation(method) + @configurators_list.map(&method.to_sym) + end end diff --git a/recipes.rb b/recipes.rb index 9c4298e..996ae3c 100644 --- a/recipes.rb +++ b/recipes.rb @@ -2,6 +2,7 @@ require_relative 'recipes/active_admin' require_relative 'recipes/airbrake' require_relative 'recipes/assets' +require_relative 'recipes/bootstrap_datepicker' require_relative 'recipes/carrier_wave' require_relative 'recipes/configuration' require_relative 'recipes/database' diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index 78c35c4..4367314 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -2,6 +2,7 @@ module Recipes class ActiveAdmin < Base askable 'Will you need ActiveAdmin to have an admin area?' + confirmable true def gems @install = true diff --git a/recipes/assets.rb b/recipes/assets.rb index a528f0f..bcf9744 100644 --- a/recipes/assets.rb +++ b/recipes/assets.rb @@ -3,7 +3,6 @@ class Assets < Base def gems @template.gem 'bootstrap-sass', '~> 3.3.3' - ask_for_bootstrap_datepicker @template.gem 'font-awesome-sass', '~> 4.7.0' @template.gem 'sass-rails' @template.gem 'autoprefixer-rails' @@ -13,13 +12,5 @@ def gems @template.gem 'sdoc', '~> 0.4.0', group: :doc end - private - - def ask_for_bootstrap_datepicker - if @template.yes?('Do you want to use Bootstrap datepicker?') - @template.gem 'bootstrap-datepicker-rails', '~> 1.6.0' - end - end - end end diff --git a/recipes/base.rb b/recipes/base.rb index dc1cf2b..8f28549 100644 --- a/recipes/base.rb +++ b/recipes/base.rb @@ -1,9 +1,13 @@ require_relative '../concerns/askable' +require_relative '../concerns/optionable' +require_relative '../concerns/confirmable' module Recipes class Base include ::Askable + include ::Optionable + include ::Confirmable def initialize(pathfinder) @pathfinder = pathfinder diff --git a/recipes/bootstrap_datepicker.rb b/recipes/bootstrap_datepicker.rb new file mode 100644 index 0000000..af5631a --- /dev/null +++ b/recipes/bootstrap_datepicker.rb @@ -0,0 +1,11 @@ +module Recipes + class BootstrapDatepicker < Base + + askable 'Do you want to use Bootstrap datepicker?' + + def gems + @template.gem 'bootstrap-datepicker-rails', '~> 1.6.0' + end + + end +end diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index f743323..7e7ed8c 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -2,6 +2,7 @@ module Recipes class CarrierWave < Base askable 'Do you want to use Carrierwave?' + confirmable true def gems @template.gem 'carrierwave' @@ -41,7 +42,7 @@ def cook private def ask_for_imagemagick - if @template.yes?('Are you going to handle images with CarrierWave?') + if @pathfinder.utils.ask('Are you going to handle images with CarrierWave?') @template.gem 'mini_magick' end end diff --git a/recipes/configuration.rb b/recipes/configuration.rb index 136b89d..daa1a44 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -6,6 +6,7 @@ def initialize(template) def gems @template.gem 'rails', '~> 5.1.0' + @template.gem 'bootsnap', '>= 1.1.0', require: false @template.gem 'aasm' @template.gem 'keynote' @@ -45,7 +46,9 @@ def cook private def ask_for_elastic_search - @template.gem 'searchkick' if @template.yes?('Are you going to use ElasticSearch?') + if @pathfinder.utils.ask('Are you going to use ElasticSearch?') + @template.gem 'searchkick' + end end def create_hound_yml diff --git a/recipes/elastic_search.rb b/recipes/elastic_search.rb index 55560fc..97a0aeb 100644 --- a/recipes/elastic_search.rb +++ b/recipes/elastic_search.rb @@ -2,6 +2,7 @@ module Recipes class ElasticSearch < Base askable 'Are you going to use ElasticSearch?' + confirmable true def gems @template.gem 'searchkick' diff --git a/recipes/mailgun.rb b/recipes/mailgun.rb index c0d6b73..26753aa 100644 --- a/recipes/mailgun.rb +++ b/recipes/mailgun.rb @@ -2,6 +2,7 @@ module Recipes class Mailgun < Base askable 'Do you want to use Mailgun for production emails?' + confirmable true def gems @template.gem 'mailgun-ruby' diff --git a/recipes/modernizr.rb b/recipes/modernizr.rb index 4b0054c..c26e63b 100644 --- a/recipes/modernizr.rb +++ b/recipes/modernizr.rb @@ -2,6 +2,7 @@ module Recipes class Modernizr < Base askable 'Do you want to use Modernizr?' + confirmable true def gems @template.gem 'modernizr-rails' diff --git a/recipes/paranoia.rb b/recipes/paranoia.rb index 15691e6..9c5a7d2 100644 --- a/recipes/paranoia.rb +++ b/recipes/paranoia.rb @@ -2,6 +2,7 @@ module Recipes class Paranoia < Base askable 'Do you want to use Soft Deletes?' + confirmable true def gems @template.gem 'paranoia' diff --git a/recipes/ransack.rb b/recipes/ransack.rb index 4efcc8a..fa6f22f 100644 --- a/recipes/ransack.rb +++ b/recipes/ransack.rb @@ -2,6 +2,7 @@ module Recipes class Ransack < Base askable 'Do you want to use Ransack?' + confirmable true def gems @template.gem 'ransack' diff --git a/recipes/utils.rb b/recipes/utils.rb index 9098492..80bd060 100644 --- a/recipes/utils.rb +++ b/recipes/utils.rb @@ -5,6 +5,18 @@ def initialize(template) @template = template end + def ask(question) + @template.ask(question) + end + + def ask_with_confirmation(question) + @template.yes?(question) + end + + def ask_with_options(question, options) + @template.ask(question, options) + end + def ask_with_default(question, default:) answer = @template.ask("#{question} (Default #{default})") answer.empty? ? default : answer From 79591c5d764035303087799790b8e650e270aad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 12:58:11 +0200 Subject: [PATCH 05/15] Fix ActiveAdmin ask class --- pathfinder.rb | 4 +++- recipes/active_admin.rb | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pathfinder.rb b/pathfinder.rb index 2218f86..9fdbf78 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -1,14 +1,16 @@ require_relative 'recipes' require_relative 'configurators' +require 'tty-prompt' class Pathfinder - attr_reader :template, :app_name, :utils + attr_reader :template, :app_name, :utils, :prompt def initialize(app_name, template) @app_name = app_name @template = template @utils = Recipes::Utils.new(@template) + @prompt = TTY::Prompt.new @recipes_list = [] @configurators_list = [] end diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index 4367314..625a25f 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -20,7 +20,7 @@ def cook def ask_for_user_class_name ask = 'What will be the main user class for Devise and ActiveAdmin?' - @template.ask(ask, default: 'AdminUser') + @pathfinder.utils.ask_with_default(ask, default: 'AdminUser') end end From 6c221acb11db43ca550a30232ef7145d3b989f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 13:19:00 +0200 Subject: [PATCH 06/15] Add dependable --- concerns/askable.rb | 8 +++++- concerns/dependable.rb | 24 ++++++++++++++++++ configurators.rb | 1 + configurators/active_admin.rb | 14 +++++++++++ configurators/base.rb | 2 ++ pathfinder.rb | 47 +++++++++++++++++++---------------- recipes/active_admin.rb | 15 ----------- recipes/base.rb | 2 ++ recipes/utils.rb | 2 +- 9 files changed, 77 insertions(+), 38 deletions(-) create mode 100644 concerns/dependable.rb create mode 100644 configurators/active_admin.rb diff --git a/concerns/askable.rb b/concerns/askable.rb index 58f7c6f..d494ce9 100644 --- a/concerns/askable.rb +++ b/concerns/askable.rb @@ -5,11 +5,15 @@ def self.included(base) end module ClassMethods - attr_accessor :ask + attr_accessor :ask, :default def askable(value) @ask = value end + + def default_answer(value) + @default = value + end end module InstanceMethods @@ -23,6 +27,8 @@ def ask! if self.class.options.any? @pathfinder.utils.ask_with_options(self.class.ask, limited_to: self.class.options) + elsif self.class.default + @pathfinder.utils.ask_with_default(self.class.ask, self.class.default) elsif self.class.confirm @pathfinder.utils.ask_with_confirmation(self.class.ask) else diff --git a/concerns/dependable.rb b/concerns/dependable.rb new file mode 100644 index 0000000..589cbac --- /dev/null +++ b/concerns/dependable.rb @@ -0,0 +1,24 @@ +module Dependable + def self.included(base) + base.send(:extend, ClassMethods) + base.send(:include, InstanceMethods) + end + + module ClassMethods + attr_accessor :dependent + + def dependable(value) + @dependent = value + end + end + + module InstanceMethods + def dependent? + self.class.dependent || false + end + + def runnable? + @pathfinder.recipes_list.map(&:class).include?(self.class.dependent.constantize) + end + end +end diff --git a/configurators.rb b/configurators.rb index 5ccf959..25f769c 100644 --- a/configurators.rb +++ b/configurators.rb @@ -1,3 +1,4 @@ require_relative 'configurators/base' require_relative 'configurators/form_framework' require_relative 'configurators/monitoring' +require_relative 'configurators/active_admin' diff --git a/configurators/active_admin.rb b/configurators/active_admin.rb new file mode 100644 index 0000000..1fe26ae --- /dev/null +++ b/configurators/active_admin.rb @@ -0,0 +1,14 @@ +module Configurators + class ActiveAdmin < Base + + askable 'What will be the main user class for Devise and ActiveAdmin?' + default_answer 'AdminUser' + dependable 'Recipes::ActiveAdmin' + + def cook + admin_class_name = ask! + @template.run "rails g active_admin:install #{admin_class_name}" + end + + end +end diff --git a/configurators/base.rb b/configurators/base.rb index 229202e..55b6653 100644 --- a/configurators/base.rb +++ b/configurators/base.rb @@ -1,6 +1,7 @@ require_relative '../concerns/askable' require_relative '../concerns/optionable' require_relative '../concerns/confirmable' +require_relative '../concerns/dependable' module Configurators class Base @@ -8,6 +9,7 @@ class Base include ::Askable include ::Optionable include ::Confirmable + include ::Dependable def initialize(pathfinder) @pathfinder = pathfinder diff --git a/pathfinder.rb b/pathfinder.rb index 9fdbf78..fd3f3a0 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -4,7 +4,7 @@ class Pathfinder - attr_reader :template, :app_name, :utils, :prompt + attr_reader :template, :app_name, :utils, :prompt, :recipes_list def initialize(app_name, template) @app_name = app_name @@ -16,30 +16,31 @@ def initialize(app_name, template) end def ask_for_recipes - add_recipe(Recipes::Database.new(self)) - add_recipe(Recipes::CarrierWave.new(self)) - add_recipe(Recipes::Mailgun.new(self)) - add_recipe(Recipes::Assets.new(self)) - add_recipe(Recipes::BootstrapDatepicker.new(self)) - add_recipe(Recipes::Devise.new(self)) - add_recipe(Recipes::Pundit.new(self)) - add_recipe(Recipes::GitIgnore.new(self)) - add_recipe(Recipes::Redis.new(self)) - add_recipe(Recipes::Sidekiq.new(self)) - add_recipe(Recipes::SimpleForm.new(self)) - add_recipe(Recipes::Status.new(self)) - add_recipe(Recipes::Webpacker.new(self)) - add_recipe(Recipes::Modernizr.new(self)) + # add_recipe(Recipes::Database.new(self)) + # add_recipe(Recipes::CarrierWave.new(self)) + # add_recipe(Recipes::Mailgun.new(self)) + # add_recipe(Recipes::Assets.new(self)) + # add_recipe(Recipes::BootstrapDatepicker.new(self)) + # add_recipe(Recipes::Devise.new(self)) + # add_recipe(Recipes::Pundit.new(self)) + # add_recipe(Recipes::GitIgnore.new(self)) + # add_recipe(Recipes::Redis.new(self)) + # add_recipe(Recipes::Sidekiq.new(self)) + # add_recipe(Recipes::SimpleForm.new(self)) + # add_recipe(Recipes::Status.new(self)) + # add_recipe(Recipes::Webpacker.new(self)) + # add_recipe(Recipes::Modernizr.new(self)) add_recipe(Recipes::ActiveAdmin.new(self)) - add_recipe(Recipes::Testing.new(self)) - add_recipe(Recipes::Paranoia.new(self)) - add_recipe(Recipes::Ransack.new(self)) - add_recipe(Recipes::ElasticSearch.new(self)) + # add_recipe(Recipes::Testing.new(self)) + # add_recipe(Recipes::Paranoia.new(self)) + # add_recipe(Recipes::Ransack.new(self)) + # add_recipe(Recipes::ElasticSearch.new(self)) end def ask_for_configurators add_recipe_from_configurator(Configurators::Monitoring.new(self)) add_configurator(Configurators::FormFramework.new(self)) + add_configurator(Configurators::ActiveAdmin.new(self)) end def call @@ -53,7 +54,7 @@ def call add_source 'https://rubygems.org' append_file 'Gemfile', - "ruby \'#{pathfinder.utils.ask_with_default('Which version of ruby do you want to use?', default: RUBY_VERSION)}\'" + "ruby \'#{pathfinder.utils.ask_with_default('Which version of ruby do you want to use?', RUBY_VERSION)}\'" configuration.gems do pathfinder.generate_recipes_gems @@ -81,7 +82,11 @@ def add_recipe(recipe) end def add_configurator(configurator) - @configurators_list << configurator + if configurator.dependent? + @configurators_list << configurator if configurator.runnable? + else + @configurators_list << configurator + end end def add_recipe_from_configurator(configurator) diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index 625a25f..e1899b1 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -5,23 +5,8 @@ class ActiveAdmin < Base confirmable true def gems - @install = true @template.gem 'activeadmin' end - def cook - return unless @install - - user_class_name = ask_for_user_class_name - @template.run "rails g active_admin:install #{user_class_name}" - end - - private - - def ask_for_user_class_name - ask = 'What will be the main user class for Devise and ActiveAdmin?' - @pathfinder.utils.ask_with_default(ask, default: 'AdminUser') - end - end end diff --git a/recipes/base.rb b/recipes/base.rb index 8f28549..3345331 100644 --- a/recipes/base.rb +++ b/recipes/base.rb @@ -1,6 +1,7 @@ require_relative '../concerns/askable' require_relative '../concerns/optionable' require_relative '../concerns/confirmable' +require_relative '../concerns/dependable' module Recipes class Base @@ -8,6 +9,7 @@ class Base include ::Askable include ::Optionable include ::Confirmable + include ::Dependable def initialize(pathfinder) @pathfinder = pathfinder diff --git a/recipes/utils.rb b/recipes/utils.rb index 80bd060..d27031d 100644 --- a/recipes/utils.rb +++ b/recipes/utils.rb @@ -17,7 +17,7 @@ def ask_with_options(question, options) @template.ask(question, options) end - def ask_with_default(question, default:) + def ask_with_default(question, default) answer = @template.ask("#{question} (Default #{default})") answer.empty? ? default : answer end From 9f34d6fb5b7061d17748328b15d05bfd370f4bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 13:20:14 +0200 Subject: [PATCH 07/15] Remove comments --- pathfinder.rb | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pathfinder.rb b/pathfinder.rb index fd3f3a0..7dbf329 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -16,25 +16,25 @@ def initialize(app_name, template) end def ask_for_recipes - # add_recipe(Recipes::Database.new(self)) - # add_recipe(Recipes::CarrierWave.new(self)) - # add_recipe(Recipes::Mailgun.new(self)) - # add_recipe(Recipes::Assets.new(self)) - # add_recipe(Recipes::BootstrapDatepicker.new(self)) - # add_recipe(Recipes::Devise.new(self)) - # add_recipe(Recipes::Pundit.new(self)) - # add_recipe(Recipes::GitIgnore.new(self)) - # add_recipe(Recipes::Redis.new(self)) - # add_recipe(Recipes::Sidekiq.new(self)) - # add_recipe(Recipes::SimpleForm.new(self)) - # add_recipe(Recipes::Status.new(self)) - # add_recipe(Recipes::Webpacker.new(self)) - # add_recipe(Recipes::Modernizr.new(self)) + add_recipe(Recipes::Database.new(self)) + add_recipe(Recipes::CarrierWave.new(self)) + add_recipe(Recipes::Mailgun.new(self)) + add_recipe(Recipes::Assets.new(self)) + add_recipe(Recipes::BootstrapDatepicker.new(self)) + add_recipe(Recipes::Devise.new(self)) + add_recipe(Recipes::Pundit.new(self)) + add_recipe(Recipes::GitIgnore.new(self)) + add_recipe(Recipes::Redis.new(self)) + add_recipe(Recipes::Sidekiq.new(self)) + add_recipe(Recipes::SimpleForm.new(self)) + add_recipe(Recipes::Status.new(self)) + add_recipe(Recipes::Webpacker.new(self)) + add_recipe(Recipes::Modernizr.new(self)) add_recipe(Recipes::ActiveAdmin.new(self)) - # add_recipe(Recipes::Testing.new(self)) - # add_recipe(Recipes::Paranoia.new(self)) - # add_recipe(Recipes::Ransack.new(self)) - # add_recipe(Recipes::ElasticSearch.new(self)) + add_recipe(Recipes::Testing.new(self)) + add_recipe(Recipes::Paranoia.new(self)) + add_recipe(Recipes::Ransack.new(self)) + add_recipe(Recipes::ElasticSearch.new(self)) end def ask_for_configurators From 0e5e99c405c5721ba5cae717c0e3f7d24894066c Mon Sep 17 00:00:00 2001 From: Pablo Rivera Conde Date: Fri, 18 May 2018 14:03:26 +0200 Subject: [PATCH 08/15] Use tty-prompt --- concerns/askable.rb | 3 +-- configurators/form_framework.rb | 6 +++--- configurators/monitoring.rb | 6 +++--- pathfinder.rb | 9 ++++++--- recipes/active_admin.rb | 1 - recipes/bootstrap_datepicker.rb | 1 + recipes/utils.rb | 15 ++++++--------- 7 files changed, 20 insertions(+), 21 deletions(-) diff --git a/concerns/askable.rb b/concerns/askable.rb index d494ce9..f47bad5 100644 --- a/concerns/askable.rb +++ b/concerns/askable.rb @@ -25,8 +25,7 @@ def ask! return unless ask? if self.class.options.any? - @pathfinder.utils.ask_with_options(self.class.ask, - limited_to: self.class.options) + @pathfinder.utils.ask_with_options(self.class.ask, self.class.options) elsif self.class.default @pathfinder.utils.ask_with_default(self.class.ask, self.class.default) elsif self.class.confirm diff --git a/configurators/form_framework.rb b/configurators/form_framework.rb index ed80c6c..d0f6830 100644 --- a/configurators/form_framework.rb +++ b/configurators/form_framework.rb @@ -2,13 +2,13 @@ module Configurators class FormFramework < Base askable 'What framework do you want to use for your forms?' - optionable %w(marsman bootstrap default) + optionable %w(Default Marsman Bootstrap) def cook case ask! - when 'marsman' + when 'Marsman' @template.initializer('simple_form.rb', simple_form_template('marsman.rb')) - when 'bootstrap' + when 'Bootstrap' @template.generate('simple_form:install --bootstrap') else @template.generate('simple_form:install') diff --git a/configurators/monitoring.rb b/configurators/monitoring.rb index fcb9008..4f3d2d3 100644 --- a/configurators/monitoring.rb +++ b/configurators/monitoring.rb @@ -2,13 +2,13 @@ module Configurators class Monitoring < Base askable 'Choose Monitoring Engine:' - optionable %w(rollbar airbrake none) + optionable %w(None Rollbar Airbrake) def recipe case ask! - when 'rollbar' + when 'Rollbar' Recipes::Rollbar.new(@pathfinder) - when 'airbrake' + when 'Airbrake' Recipes::Airbrake.new(@pathfinder) else end diff --git a/pathfinder.rb b/pathfinder.rb index 7dbf329..caccaef 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -9,8 +9,8 @@ class Pathfinder def initialize(app_name, template) @app_name = app_name @template = template - @utils = Recipes::Utils.new(@template) @prompt = TTY::Prompt.new + @utils = Recipes::Utils.new(@prompt) @recipes_list = [] @configurators_list = [] end @@ -53,8 +53,11 @@ def call run 'touch Gemfile' add_source 'https://rubygems.org' - append_file 'Gemfile', - "ruby \'#{pathfinder.utils.ask_with_default('Which version of ruby do you want to use?', RUBY_VERSION)}\'" + ruby_version = pathfinder.utils.ask_with_default( + 'Which version of ruby do you want to use?', + RUBY_VERSION) + + append_file 'Gemfile', "ruby '#{ruby_version}'" configuration.gems do pathfinder.generate_recipes_gems diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index e1899b1..c62fe54 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -7,6 +7,5 @@ class ActiveAdmin < Base def gems @template.gem 'activeadmin' end - end end diff --git a/recipes/bootstrap_datepicker.rb b/recipes/bootstrap_datepicker.rb index af5631a..5a0f532 100644 --- a/recipes/bootstrap_datepicker.rb +++ b/recipes/bootstrap_datepicker.rb @@ -2,6 +2,7 @@ module Recipes class BootstrapDatepicker < Base askable 'Do you want to use Bootstrap datepicker?' + confirmable true def gems @template.gem 'bootstrap-datepicker-rails', '~> 1.6.0' diff --git a/recipes/utils.rb b/recipes/utils.rb index d27031d..6c0577d 100644 --- a/recipes/utils.rb +++ b/recipes/utils.rb @@ -1,26 +1,23 @@ module Recipes class Utils - - def initialize(template) - @template = template + def initialize(prompt) + @prompt = prompt end def ask(question) - @template.ask(question) + @prompt.ask(question) end def ask_with_confirmation(question) - @template.yes?(question) + @prompt.select(question, %w[yes no]) == 'yes' end def ask_with_options(question, options) - @template.ask(question, options) + @prompt.select(question, options) end def ask_with_default(question, default) - answer = @template.ask("#{question} (Default #{default})") - answer.empty? ? default : answer + @prompt.ask("#{question} (#{default})", default: default) end - end end From 4dfe93d1335cba3ef6077cffa2d90d88d57c872d Mon Sep 17 00:00:00 2001 From: Pablo Rivera Conde Date: Fri, 18 May 2018 15:03:30 +0200 Subject: [PATCH 09/15] Recipes are auto loaded into pathfinder.rb --- concerns/runnable.rb | 24 +++++++++++++++++ pathfinder.rb | 30 +++++++-------------- recipes.rb | 48 ++++++++++++++++----------------- recipes/active_admin.rb | 2 ++ recipes/assets.rb | 1 + recipes/base.rb | 3 ++- recipes/bootstrap_datepicker.rb | 1 + recipes/carrier_wave.rb | 2 ++ recipes/database.rb | 2 ++ recipes/devise.rb | 2 ++ recipes/elastic_search.rb | 2 ++ recipes/git_ignore.rb | 2 ++ recipes/mailgun.rb | 2 ++ recipes/modernizr.rb | 2 ++ recipes/paranoia.rb | 2 ++ recipes/pundit.rb | 2 ++ recipes/ransack.rb | 2 ++ recipes/redis.rb | 2 ++ recipes/sidekiq.rb | 2 ++ recipes/simple_form.rb | 2 ++ recipes/status.rb | 2 ++ recipes/testing.rb | 3 +++ recipes/utils.rb | 23 ---------------- recipes/webpacker.rb | 2 ++ utils.rb | 21 +++++++++++++++ 25 files changed, 118 insertions(+), 68 deletions(-) create mode 100644 concerns/runnable.rb delete mode 100644 recipes/utils.rb create mode 100644 utils.rb diff --git a/concerns/runnable.rb b/concerns/runnable.rb new file mode 100644 index 0000000..e658a56 --- /dev/null +++ b/concerns/runnable.rb @@ -0,0 +1,24 @@ + + +module Runnable + def self.runnables_for_module(mod) + mod.constants.reduce([]) do |acc, c| + klass = mod.const_get(c) + runnable = klass.is_a?(Class) && klass.runnable ? klass : nil + (acc << runnable).compact + end + end + + def self.included(base) + base.send(:extend, ClassMethods) + end + + module ClassMethods + + attr_accessor :runnable + + def is_runnable + @runnable = true + end + end +end diff --git a/pathfinder.rb b/pathfinder.rb index caccaef..174fb6f 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -1,6 +1,12 @@ require_relative 'recipes' require_relative 'configurators' +require_relative 'utils' require 'tty-prompt' +require_relative 'recipes/base' +require 'pry' +Dir[File.join(__dir__, 'recipes', '*.rb')].each do |recipe_file| + require recipe_file +end class Pathfinder @@ -10,31 +16,15 @@ def initialize(app_name, template) @app_name = app_name @template = template @prompt = TTY::Prompt.new - @utils = Recipes::Utils.new(@prompt) + @utils = ::Utils.new(@prompt) @recipes_list = [] @configurators_list = [] end def ask_for_recipes - add_recipe(Recipes::Database.new(self)) - add_recipe(Recipes::CarrierWave.new(self)) - add_recipe(Recipes::Mailgun.new(self)) - add_recipe(Recipes::Assets.new(self)) - add_recipe(Recipes::BootstrapDatepicker.new(self)) - add_recipe(Recipes::Devise.new(self)) - add_recipe(Recipes::Pundit.new(self)) - add_recipe(Recipes::GitIgnore.new(self)) - add_recipe(Recipes::Redis.new(self)) - add_recipe(Recipes::Sidekiq.new(self)) - add_recipe(Recipes::SimpleForm.new(self)) - add_recipe(Recipes::Status.new(self)) - add_recipe(Recipes::Webpacker.new(self)) - add_recipe(Recipes::Modernizr.new(self)) - add_recipe(Recipes::ActiveAdmin.new(self)) - add_recipe(Recipes::Testing.new(self)) - add_recipe(Recipes::Paranoia.new(self)) - add_recipe(Recipes::Ransack.new(self)) - add_recipe(Recipes::ElasticSearch.new(self)) + ::Runnable.runnables_for_module(::Recipes).each do |recipe| + add_recipe(recipe.new(self)) + end end def ask_for_configurators diff --git a/recipes.rb b/recipes.rb index 996ae3c..d7909cb 100644 --- a/recipes.rb +++ b/recipes.rb @@ -1,24 +1,24 @@ -require_relative 'recipes/base' -require_relative 'recipes/active_admin' -require_relative 'recipes/airbrake' -require_relative 'recipes/assets' -require_relative 'recipes/bootstrap_datepicker' -require_relative 'recipes/carrier_wave' -require_relative 'recipes/configuration' -require_relative 'recipes/database' -require_relative 'recipes/devise' -require_relative 'recipes/elastic_search' -require_relative 'recipes/git_ignore' -require_relative 'recipes/modernizr' -require_relative 'recipes/mailgun' -require_relative 'recipes/paranoia' -require_relative 'recipes/pundit' -require_relative 'recipes/ransack' -require_relative 'recipes/redis' -require_relative 'recipes/rollbar' -require_relative 'recipes/sidekiq' -require_relative 'recipes/simple_form' -require_relative 'recipes/status' -require_relative 'recipes/testing' -require_relative 'recipes/utils' -require_relative 'recipes/webpacker' +# require_relative 'recipes/base' +# require_relative 'recipes/active_admin' +# require_relative 'recipes/airbrake' +# require_relative 'recipes/assets' +# require_relative 'recipes/bootstrap_datepicker' +# require_relative 'recipes/carrier_wave' +# require_relative 'recipes/configuration' +# require_relative 'recipes/database' +# require_relative 'recipes/devise' +# require_relative 'recipes/elastic_search' +# require_relative 'recipes/git_ignore' +# require_relative 'recipes/modernizr' +# require_relative 'recipes/mailgun' +# require_relative 'recipes/paranoia' +# require_relative 'recipes/pundit' +# require_relative 'recipes/ransack' +# require_relative 'recipes/redis' +# require_relative 'recipes/rollbar' +# require_relative 'recipes/sidekiq' +# require_relative 'recipes/simple_form' +# require_relative 'recipes/status' +# require_relative 'recipes/testing' +# require_relative 'recipes/utils' +# require_relative 'recipes/webpacker' diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index c62fe54..07f3c8c 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -1,6 +1,8 @@ module Recipes class ActiveAdmin < Base + is_runnable + askable 'Will you need ActiveAdmin to have an admin area?' confirmable true diff --git a/recipes/assets.rb b/recipes/assets.rb index bcf9744..6470b46 100644 --- a/recipes/assets.rb +++ b/recipes/assets.rb @@ -1,5 +1,6 @@ module Recipes class Assets < Base + is_runnable def gems @template.gem 'bootstrap-sass', '~> 3.3.3' diff --git a/recipes/base.rb b/recipes/base.rb index 3345331..57d239f 100644 --- a/recipes/base.rb +++ b/recipes/base.rb @@ -2,6 +2,7 @@ require_relative '../concerns/optionable' require_relative '../concerns/confirmable' require_relative '../concerns/dependable' +require_relative '../concerns/runnable' module Recipes class Base @@ -10,6 +11,7 @@ class Base include ::Optionable include ::Confirmable include ::Dependable + include ::Runnable def initialize(pathfinder) @pathfinder = pathfinder @@ -21,6 +23,5 @@ def gems def cook end - end end diff --git a/recipes/bootstrap_datepicker.rb b/recipes/bootstrap_datepicker.rb index 5a0f532..60b3801 100644 --- a/recipes/bootstrap_datepicker.rb +++ b/recipes/bootstrap_datepicker.rb @@ -1,5 +1,6 @@ module Recipes class BootstrapDatepicker < Base + is_runnable askable 'Do you want to use Bootstrap datepicker?' confirmable true diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index 7e7ed8c..72946ec 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -1,6 +1,8 @@ module Recipes class CarrierWave < Base + is_runnable + askable 'Do you want to use Carrierwave?' confirmable true diff --git a/recipes/database.rb b/recipes/database.rb index 4bdefac..8f68d05 100644 --- a/recipes/database.rb +++ b/recipes/database.rb @@ -1,6 +1,8 @@ module Recipes class Database < Base + is_runnable + def gems case @template.options.database when 'postgresql' diff --git a/recipes/devise.rb b/recipes/devise.rb index f0e6ad2..d9323a0 100644 --- a/recipes/devise.rb +++ b/recipes/devise.rb @@ -1,6 +1,8 @@ module Recipes class Devise < Base + is_runnable + def gems @template.gem 'devise' end diff --git a/recipes/elastic_search.rb b/recipes/elastic_search.rb index 97a0aeb..24f6a8c 100644 --- a/recipes/elastic_search.rb +++ b/recipes/elastic_search.rb @@ -1,6 +1,8 @@ module Recipes class ElasticSearch < Base + is_runnable + askable 'Are you going to use ElasticSearch?' confirmable true diff --git a/recipes/git_ignore.rb b/recipes/git_ignore.rb index b85974b..5b26558 100644 --- a/recipes/git_ignore.rb +++ b/recipes/git_ignore.rb @@ -1,6 +1,8 @@ module Recipes class GitIgnore < Base + is_runnable + def cook @template.remove_file '.gitignore' @template.create_file '.gitignore', File.open(gitignore_path).read diff --git a/recipes/mailgun.rb b/recipes/mailgun.rb index 26753aa..844df99 100644 --- a/recipes/mailgun.rb +++ b/recipes/mailgun.rb @@ -1,6 +1,8 @@ module Recipes class Mailgun < Base + is_runnable + askable 'Do you want to use Mailgun for production emails?' confirmable true diff --git a/recipes/modernizr.rb b/recipes/modernizr.rb index c26e63b..d661776 100644 --- a/recipes/modernizr.rb +++ b/recipes/modernizr.rb @@ -1,6 +1,8 @@ module Recipes class Modernizr < Base + is_runnable + askable 'Do you want to use Modernizr?' confirmable true diff --git a/recipes/paranoia.rb b/recipes/paranoia.rb index 9c5a7d2..044115d 100644 --- a/recipes/paranoia.rb +++ b/recipes/paranoia.rb @@ -1,6 +1,8 @@ module Recipes class Paranoia < Base + is_runnable + askable 'Do you want to use Soft Deletes?' confirmable true diff --git a/recipes/pundit.rb b/recipes/pundit.rb index 84fb6a5..7b205cc 100644 --- a/recipes/pundit.rb +++ b/recipes/pundit.rb @@ -1,6 +1,8 @@ module Recipes class Pundit < Base + is_runnable + def gems @template.gem 'pundit' end diff --git a/recipes/ransack.rb b/recipes/ransack.rb index fa6f22f..c065047 100644 --- a/recipes/ransack.rb +++ b/recipes/ransack.rb @@ -1,6 +1,8 @@ module Recipes class Ransack < Base + is_runnable + askable 'Do you want to use Ransack?' confirmable true diff --git a/recipes/redis.rb b/recipes/redis.rb index 3cf7bab..29d1d78 100644 --- a/recipes/redis.rb +++ b/recipes/redis.rb @@ -1,6 +1,8 @@ module Recipes class Redis < Base + is_runnable + def gems @template.gem 'redis', '~> 3.3' end diff --git a/recipes/sidekiq.rb b/recipes/sidekiq.rb index cad410f..bea1602 100644 --- a/recipes/sidekiq.rb +++ b/recipes/sidekiq.rb @@ -1,6 +1,8 @@ module Recipes class Sidekiq < Base + is_runnable + def gems @template.gem 'sidekiq' @template.gem 'sidekiq-failures' diff --git a/recipes/simple_form.rb b/recipes/simple_form.rb index 90ba52a..b17209f 100644 --- a/recipes/simple_form.rb +++ b/recipes/simple_form.rb @@ -1,6 +1,8 @@ module Recipes class SimpleForm < Base + is_runnable + def gems @template.gem 'simple_form' end diff --git a/recipes/status.rb b/recipes/status.rb index eb7cc10..1977b08 100644 --- a/recipes/status.rb +++ b/recipes/status.rb @@ -1,6 +1,8 @@ module Recipes class Status < Base + is_runnable + def cook set_route_path add_controller diff --git a/recipes/testing.rb b/recipes/testing.rb index eddcbd5..b7f03dd 100644 --- a/recipes/testing.rb +++ b/recipes/testing.rb @@ -1,5 +1,8 @@ module Recipes class Testing < Base + + is_runnable + RSPEC_ROOT_FOLDER = 'spec' FACTORIES_FOLDERS = [RSPEC_ROOT_FOLDER, 'factories'] RSPEC_UNIT_FOLDERS = [RSPEC_ROOT_FOLDER, 'models'] diff --git a/recipes/utils.rb b/recipes/utils.rb deleted file mode 100644 index 6c0577d..0000000 --- a/recipes/utils.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Recipes - class Utils - def initialize(prompt) - @prompt = prompt - end - - def ask(question) - @prompt.ask(question) - end - - def ask_with_confirmation(question) - @prompt.select(question, %w[yes no]) == 'yes' - end - - def ask_with_options(question, options) - @prompt.select(question, options) - end - - def ask_with_default(question, default) - @prompt.ask("#{question} (#{default})", default: default) - end - end -end diff --git a/recipes/webpacker.rb b/recipes/webpacker.rb index 8f55c90..df71d6e 100644 --- a/recipes/webpacker.rb +++ b/recipes/webpacker.rb @@ -1,6 +1,8 @@ module Recipes class Webpacker < Base + is_runnable + def gems @template.gem 'webpacker', '~> 3.0' end diff --git a/utils.rb b/utils.rb new file mode 100644 index 0000000..1bb0608 --- /dev/null +++ b/utils.rb @@ -0,0 +1,21 @@ +class Utils + def initialize(prompt) + @prompt = prompt + end + + def ask(question) + @prompt.ask(question) + end + + def ask_with_confirmation(question) + @prompt.select(question, %w[yes no]) == 'yes' + end + + def ask_with_options(question, options) + @prompt.select(question, options) + end + + def ask_with_default(question, default) + @prompt.ask("#{question} (#{default})", default: default) + end +end From 1f0e62c4cba080e29d7359e5c3f659ea6bc36279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 15:19:49 +0200 Subject: [PATCH 10/15] Naming changes --- concerns/dependable.rb | 2 +- concerns/runnable.rb | 2 -- pathfinder.rb | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/concerns/dependable.rb b/concerns/dependable.rb index 589cbac..4885fbb 100644 --- a/concerns/dependable.rb +++ b/concerns/dependable.rb @@ -17,7 +17,7 @@ def dependent? self.class.dependent || false end - def runnable? + def perform? @pathfinder.recipes_list.map(&:class).include?(self.class.dependent.constantize) end end diff --git a/concerns/runnable.rb b/concerns/runnable.rb index e658a56..2524ed8 100644 --- a/concerns/runnable.rb +++ b/concerns/runnable.rb @@ -1,5 +1,3 @@ - - module Runnable def self.runnables_for_module(mod) mod.constants.reduce([]) do |acc, c| diff --git a/pathfinder.rb b/pathfinder.rb index 174fb6f..8026516 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -76,7 +76,7 @@ def add_recipe(recipe) def add_configurator(configurator) if configurator.dependent? - @configurators_list << configurator if configurator.runnable? + @configurators_list << configurator if configurator.perform? else @configurators_list << configurator end From 20c75e70d37061ce67094a67feaae424ffc5cb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 15:42:59 +0200 Subject: [PATCH 11/15] Changes --- concerns/auto_runnable.rb | 21 +++++++++++++++++++++ concerns/runnable.rb | 22 ---------------------- configurators/monitoring.rb | 5 ++--- pathfinder.rb | 6 ++---- recipes.rb | 24 ------------------------ recipes/active_admin.rb | 2 +- recipes/assets.rb | 3 ++- recipes/base.rb | 4 ++-- recipes/bootstrap_datepicker.rb | 3 ++- recipes/carrier_wave.rb | 2 +- recipes/database.rb | 2 +- recipes/devise.rb | 2 +- recipes/elastic_search.rb | 2 +- recipes/git_ignore.rb | 2 +- recipes/mailgun.rb | 2 +- recipes/modernizr.rb | 2 +- recipes/paranoia.rb | 2 +- recipes/pundit.rb | 2 +- recipes/ransack.rb | 2 +- recipes/redis.rb | 2 +- recipes/sidekiq.rb | 2 +- recipes/simple_form.rb | 2 +- recipes/status.rb | 2 +- recipes/testing.rb | 2 +- recipes/webpacker.rb | 2 +- 25 files changed, 48 insertions(+), 74 deletions(-) create mode 100644 concerns/auto_runnable.rb delete mode 100644 concerns/runnable.rb delete mode 100644 recipes.rb diff --git a/concerns/auto_runnable.rb b/concerns/auto_runnable.rb new file mode 100644 index 0000000..ad21820 --- /dev/null +++ b/concerns/auto_runnable.rb @@ -0,0 +1,21 @@ +module AutoRunnable + def self.included(base) + base.send(:extend, ClassMethods) + end + + module ClassMethods + attr_accessor :auto_runnable + + def is_auto_runnable + @auto_runnable = true + end + end + + def self.auto_runnables_for_module(mod) + mod.constants.reduce([]) do |acc, c| + klass = mod.const_get(c) + auto_runnable = klass.is_a?(Class) && klass.auto_runnable ? klass : nil + (acc << auto_runnable).compact + end + end +end diff --git a/concerns/runnable.rb b/concerns/runnable.rb deleted file mode 100644 index 2524ed8..0000000 --- a/concerns/runnable.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Runnable - def self.runnables_for_module(mod) - mod.constants.reduce([]) do |acc, c| - klass = mod.const_get(c) - runnable = klass.is_a?(Class) && klass.runnable ? klass : nil - (acc << runnable).compact - end - end - - def self.included(base) - base.send(:extend, ClassMethods) - end - - module ClassMethods - - attr_accessor :runnable - - def is_runnable - @runnable = true - end - end -end diff --git a/configurators/monitoring.rb b/configurators/monitoring.rb index 4f3d2d3..d16427a 100644 --- a/configurators/monitoring.rb +++ b/configurators/monitoring.rb @@ -7,10 +7,9 @@ class Monitoring < Base def recipe case ask! when 'Rollbar' - Recipes::Rollbar.new(@pathfinder) + @pathfinder.add_recipe(Recipes::Rollbar.new(@pathfinder)) when 'Airbrake' - Recipes::Airbrake.new(@pathfinder) - else + @pathfinder.add_recipe(Recipes::Airbrake.new(@pathfinder)) end end diff --git a/pathfinder.rb b/pathfinder.rb index 8026516..54490fd 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -1,9 +1,7 @@ -require_relative 'recipes' require_relative 'configurators' require_relative 'utils' require 'tty-prompt' -require_relative 'recipes/base' -require 'pry' + Dir[File.join(__dir__, 'recipes', '*.rb')].each do |recipe_file| require recipe_file end @@ -22,7 +20,7 @@ def initialize(app_name, template) end def ask_for_recipes - ::Runnable.runnables_for_module(::Recipes).each do |recipe| + ::AutoRunnable.auto_runnables_for_module(::Recipes).each do |recipe| add_recipe(recipe.new(self)) end end diff --git a/recipes.rb b/recipes.rb deleted file mode 100644 index d7909cb..0000000 --- a/recipes.rb +++ /dev/null @@ -1,24 +0,0 @@ -# require_relative 'recipes/base' -# require_relative 'recipes/active_admin' -# require_relative 'recipes/airbrake' -# require_relative 'recipes/assets' -# require_relative 'recipes/bootstrap_datepicker' -# require_relative 'recipes/carrier_wave' -# require_relative 'recipes/configuration' -# require_relative 'recipes/database' -# require_relative 'recipes/devise' -# require_relative 'recipes/elastic_search' -# require_relative 'recipes/git_ignore' -# require_relative 'recipes/modernizr' -# require_relative 'recipes/mailgun' -# require_relative 'recipes/paranoia' -# require_relative 'recipes/pundit' -# require_relative 'recipes/ransack' -# require_relative 'recipes/redis' -# require_relative 'recipes/rollbar' -# require_relative 'recipes/sidekiq' -# require_relative 'recipes/simple_form' -# require_relative 'recipes/status' -# require_relative 'recipes/testing' -# require_relative 'recipes/utils' -# require_relative 'recipes/webpacker' diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index 07f3c8c..ee35d30 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -1,7 +1,7 @@ module Recipes class ActiveAdmin < Base - is_runnable + is_auto_runnable askable 'Will you need ActiveAdmin to have an admin area?' confirmable true diff --git a/recipes/assets.rb b/recipes/assets.rb index 6470b46..00d89c4 100644 --- a/recipes/assets.rb +++ b/recipes/assets.rb @@ -1,6 +1,7 @@ module Recipes class Assets < Base - is_runnable + + is_auto_runnable def gems @template.gem 'bootstrap-sass', '~> 3.3.3' diff --git a/recipes/base.rb b/recipes/base.rb index 57d239f..ebb5bdf 100644 --- a/recipes/base.rb +++ b/recipes/base.rb @@ -2,7 +2,7 @@ require_relative '../concerns/optionable' require_relative '../concerns/confirmable' require_relative '../concerns/dependable' -require_relative '../concerns/runnable' +require_relative '../concerns/auto_runnable' module Recipes class Base @@ -11,7 +11,7 @@ class Base include ::Optionable include ::Confirmable include ::Dependable - include ::Runnable + include ::AutoRunnable def initialize(pathfinder) @pathfinder = pathfinder diff --git a/recipes/bootstrap_datepicker.rb b/recipes/bootstrap_datepicker.rb index 60b3801..26f21de 100644 --- a/recipes/bootstrap_datepicker.rb +++ b/recipes/bootstrap_datepicker.rb @@ -1,6 +1,7 @@ module Recipes class BootstrapDatepicker < Base - is_runnable + + is_auto_runnable askable 'Do you want to use Bootstrap datepicker?' confirmable true diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index 72946ec..a927e58 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -1,7 +1,7 @@ module Recipes class CarrierWave < Base - is_runnable + is_auto_runnable askable 'Do you want to use Carrierwave?' confirmable true diff --git a/recipes/database.rb b/recipes/database.rb index 8f68d05..e71d3e4 100644 --- a/recipes/database.rb +++ b/recipes/database.rb @@ -1,7 +1,7 @@ module Recipes class Database < Base - is_runnable + is_auto_runnable def gems case @template.options.database diff --git a/recipes/devise.rb b/recipes/devise.rb index d9323a0..da247ba 100644 --- a/recipes/devise.rb +++ b/recipes/devise.rb @@ -1,7 +1,7 @@ module Recipes class Devise < Base - is_runnable + is_auto_runnable def gems @template.gem 'devise' diff --git a/recipes/elastic_search.rb b/recipes/elastic_search.rb index 24f6a8c..8ca6e5f 100644 --- a/recipes/elastic_search.rb +++ b/recipes/elastic_search.rb @@ -1,7 +1,7 @@ module Recipes class ElasticSearch < Base - is_runnable + is_auto_runnable askable 'Are you going to use ElasticSearch?' confirmable true diff --git a/recipes/git_ignore.rb b/recipes/git_ignore.rb index 5b26558..2fa750e 100644 --- a/recipes/git_ignore.rb +++ b/recipes/git_ignore.rb @@ -1,7 +1,7 @@ module Recipes class GitIgnore < Base - is_runnable + is_auto_runnable def cook @template.remove_file '.gitignore' diff --git a/recipes/mailgun.rb b/recipes/mailgun.rb index 844df99..1204b5c 100644 --- a/recipes/mailgun.rb +++ b/recipes/mailgun.rb @@ -1,7 +1,7 @@ module Recipes class Mailgun < Base - is_runnable + is_auto_runnable askable 'Do you want to use Mailgun for production emails?' confirmable true diff --git a/recipes/modernizr.rb b/recipes/modernizr.rb index d661776..021ddbf 100644 --- a/recipes/modernizr.rb +++ b/recipes/modernizr.rb @@ -1,7 +1,7 @@ module Recipes class Modernizr < Base - is_runnable + is_auto_runnable askable 'Do you want to use Modernizr?' confirmable true diff --git a/recipes/paranoia.rb b/recipes/paranoia.rb index 044115d..65c99c9 100644 --- a/recipes/paranoia.rb +++ b/recipes/paranoia.rb @@ -1,7 +1,7 @@ module Recipes class Paranoia < Base - is_runnable + is_auto_runnable askable 'Do you want to use Soft Deletes?' confirmable true diff --git a/recipes/pundit.rb b/recipes/pundit.rb index 7b205cc..27cae5e 100644 --- a/recipes/pundit.rb +++ b/recipes/pundit.rb @@ -1,7 +1,7 @@ module Recipes class Pundit < Base - is_runnable + is_auto_runnable def gems @template.gem 'pundit' diff --git a/recipes/ransack.rb b/recipes/ransack.rb index c065047..2f38669 100644 --- a/recipes/ransack.rb +++ b/recipes/ransack.rb @@ -1,7 +1,7 @@ module Recipes class Ransack < Base - is_runnable + is_auto_runnable askable 'Do you want to use Ransack?' confirmable true diff --git a/recipes/redis.rb b/recipes/redis.rb index 29d1d78..77b695b 100644 --- a/recipes/redis.rb +++ b/recipes/redis.rb @@ -1,7 +1,7 @@ module Recipes class Redis < Base - is_runnable + is_auto_runnable def gems @template.gem 'redis', '~> 3.3' diff --git a/recipes/sidekiq.rb b/recipes/sidekiq.rb index bea1602..55cd5ff 100644 --- a/recipes/sidekiq.rb +++ b/recipes/sidekiq.rb @@ -1,7 +1,7 @@ module Recipes class Sidekiq < Base - is_runnable + is_auto_runnable def gems @template.gem 'sidekiq' diff --git a/recipes/simple_form.rb b/recipes/simple_form.rb index b17209f..d55e91a 100644 --- a/recipes/simple_form.rb +++ b/recipes/simple_form.rb @@ -1,7 +1,7 @@ module Recipes class SimpleForm < Base - is_runnable + is_auto_runnable def gems @template.gem 'simple_form' diff --git a/recipes/status.rb b/recipes/status.rb index 1977b08..f061de7 100644 --- a/recipes/status.rb +++ b/recipes/status.rb @@ -1,7 +1,7 @@ module Recipes class Status < Base - is_runnable + is_auto_runnable def cook set_route_path diff --git a/recipes/testing.rb b/recipes/testing.rb index b7f03dd..7f9a0c2 100644 --- a/recipes/testing.rb +++ b/recipes/testing.rb @@ -1,7 +1,7 @@ module Recipes class Testing < Base - is_runnable + is_auto_runnable RSPEC_ROOT_FOLDER = 'spec' FACTORIES_FOLDERS = [RSPEC_ROOT_FOLDER, 'factories'] diff --git a/recipes/webpacker.rb b/recipes/webpacker.rb index df71d6e..071de62 100644 --- a/recipes/webpacker.rb +++ b/recipes/webpacker.rb @@ -1,7 +1,7 @@ module Recipes class Webpacker < Base - is_runnable + is_auto_runnable def gems @template.gem 'webpacker', '~> 3.0' From a1964402b816401a9baabfabd1b00d0203906cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 16:07:40 +0200 Subject: [PATCH 12/15] Remove bootsnap --- recipes/configuration.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/recipes/configuration.rb b/recipes/configuration.rb index daa1a44..ccf7139 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -6,7 +6,6 @@ def initialize(template) def gems @template.gem 'rails', '~> 5.1.0' - @template.gem 'bootsnap', '>= 1.1.0', require: false @template.gem 'aasm' @template.gem 'keynote' From 68a64132d8605c466ec804ee1c5ad5caf49b0622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 16:17:47 +0200 Subject: [PATCH 13/15] Fix carrierwave --- recipes/carrier_wave.rb | 13 +++++++------ recipes/configuration.rb | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index a927e58..fa58467 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -9,6 +9,7 @@ class CarrierWave < Base def gems @template.gem 'carrierwave' @template.gem 'fog-aws' + ask_for_imagemagick end def cook @@ -39,14 +40,14 @@ def cook @template.append_file 'application.yml', "\nAWS_S3_BUCKET: ''" end end - end - private + private - def ask_for_imagemagick - if @pathfinder.utils.ask('Are you going to handle images with CarrierWave?') - @template.gem 'mini_magick' + def ask_for_imagemagick + if @pathfinder.utils.ask('Are you going to handle images with CarrierWave?') + @template.gem 'mini_magick' + end end - end + end end diff --git a/recipes/configuration.rb b/recipes/configuration.rb index ccf7139..e67c628 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -5,7 +5,8 @@ def initialize(template) end def gems - @template.gem 'rails', '~> 5.1.0' + @template.gem 'rails', '>= 5.1.4' + @template.gem 'bootsnap', '>= 1.1.0', require: false @template.gem 'aasm' @template.gem 'keynote' From d157cc0049a4d28670dfa8dce439aeaa0dee6847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 16:51:48 +0200 Subject: [PATCH 14/15] More fixes --- configurators.rb | 3 ++- configurators/image_magick.rb | 15 +++++++++++++++ pathfinder.rb | 3 ++- recipes/carrier_wave.rb | 9 --------- recipes/configuration.rb | 9 +-------- 5 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 configurators/image_magick.rb diff --git a/configurators.rb b/configurators.rb index 25f769c..1dec202 100644 --- a/configurators.rb +++ b/configurators.rb @@ -1,4 +1,5 @@ require_relative 'configurators/base' +require_relative 'configurators/active_admin' require_relative 'configurators/form_framework' +require_relative 'configurators/image_magick' require_relative 'configurators/monitoring' -require_relative 'configurators/active_admin' diff --git a/configurators/image_magick.rb b/configurators/image_magick.rb new file mode 100644 index 0000000..7500ccf --- /dev/null +++ b/configurators/image_magick.rb @@ -0,0 +1,15 @@ +module Configurators + class ImageMagick < Base + + askable 'Are you going to handle images with CarrierWave?' + dependable 'Recipes::CarrierWave' + confirmable true + + def cook + if ask! + @template.gem 'mini_magick' + end + end + + end +end diff --git a/pathfinder.rb b/pathfinder.rb index 54490fd..f1807fe 100644 --- a/pathfinder.rb +++ b/pathfinder.rb @@ -27,8 +27,9 @@ def ask_for_recipes def ask_for_configurators add_recipe_from_configurator(Configurators::Monitoring.new(self)) - add_configurator(Configurators::FormFramework.new(self)) add_configurator(Configurators::ActiveAdmin.new(self)) + add_configurator(Configurators::FormFramework.new(self)) + add_configurator(Configurators::ImageMagick.new(self)) end def call diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index fa58467..3388f6c 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -9,7 +9,6 @@ class CarrierWave < Base def gems @template.gem 'carrierwave' @template.gem 'fog-aws' - ask_for_imagemagick end def cook @@ -41,13 +40,5 @@ def cook end end - private - - def ask_for_imagemagick - if @pathfinder.utils.ask('Are you going to handle images with CarrierWave?') - @template.gem 'mini_magick' - end - end - end end diff --git a/recipes/configuration.rb b/recipes/configuration.rb index e67c628..31ba87c 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -5,8 +5,7 @@ def initialize(template) end def gems - @template.gem 'rails', '>= 5.1.4' - @template.gem 'bootsnap', '>= 1.1.0', require: false + @template.gem 'rails', '~= 5.1.0' @template.gem 'aasm' @template.gem 'keynote' @@ -45,12 +44,6 @@ def cook private - def ask_for_elastic_search - if @pathfinder.utils.ask('Are you going to use ElasticSearch?') - @template.gem 'searchkick' - end - end - def create_hound_yml @template.create_file '.hound.yml' do <<~CODE ruby: From ab96c8d511a6a495e651b9a5aebb00dccd02ac4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B3mez?= Date: Fri, 18 May 2018 17:07:11 +0200 Subject: [PATCH 15/15] More changes --- concerns/askable.rb | 2 +- concerns/confirmable.rb | 10 +++++----- configurators/image_magick.rb | 2 +- recipes/active_admin.rb | 2 +- recipes/bootstrap_datepicker.rb | 2 +- recipes/carrier_wave.rb | 2 +- recipes/configuration.rb | 2 +- recipes/elastic_search.rb | 2 +- recipes/mailgun.rb | 2 +- recipes/modernizr.rb | 2 +- recipes/paranoia.rb | 2 +- recipes/ransack.rb | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/concerns/askable.rb b/concerns/askable.rb index f47bad5..90da018 100644 --- a/concerns/askable.rb +++ b/concerns/askable.rb @@ -28,7 +28,7 @@ def ask! @pathfinder.utils.ask_with_options(self.class.ask, self.class.options) elsif self.class.default @pathfinder.utils.ask_with_default(self.class.ask, self.class.default) - elsif self.class.confirm + elsif self.class.confirmable? @pathfinder.utils.ask_with_confirmation(self.class.ask) else @pathfinder.utils.ask(self.class.ask) diff --git a/concerns/confirmable.rb b/concerns/confirmable.rb index 16f951f..a72d5a0 100644 --- a/concerns/confirmable.rb +++ b/concerns/confirmable.rb @@ -4,14 +4,14 @@ def self.included(base) end module ClassMethods - attr_accessor :confirm + attr_accessor :confirmable - def confirmable(value) - @confirm = value + def is_confirmable + @confirmable = true end - def confirm - @confirm || false + def confirmable? + @confirmable || false end end end diff --git a/configurators/image_magick.rb b/configurators/image_magick.rb index 7500ccf..69bc413 100644 --- a/configurators/image_magick.rb +++ b/configurators/image_magick.rb @@ -3,7 +3,7 @@ class ImageMagick < Base askable 'Are you going to handle images with CarrierWave?' dependable 'Recipes::CarrierWave' - confirmable true + is_confirmable def cook if ask! diff --git a/recipes/active_admin.rb b/recipes/active_admin.rb index ee35d30..594f30e 100644 --- a/recipes/active_admin.rb +++ b/recipes/active_admin.rb @@ -4,7 +4,7 @@ class ActiveAdmin < Base is_auto_runnable askable 'Will you need ActiveAdmin to have an admin area?' - confirmable true + is_confirmable def gems @template.gem 'activeadmin' diff --git a/recipes/bootstrap_datepicker.rb b/recipes/bootstrap_datepicker.rb index 26f21de..29f812f 100644 --- a/recipes/bootstrap_datepicker.rb +++ b/recipes/bootstrap_datepicker.rb @@ -4,7 +4,7 @@ class BootstrapDatepicker < Base is_auto_runnable askable 'Do you want to use Bootstrap datepicker?' - confirmable true + is_confirmable def gems @template.gem 'bootstrap-datepicker-rails', '~> 1.6.0' diff --git a/recipes/carrier_wave.rb b/recipes/carrier_wave.rb index 3388f6c..5a1fb77 100644 --- a/recipes/carrier_wave.rb +++ b/recipes/carrier_wave.rb @@ -4,7 +4,7 @@ class CarrierWave < Base is_auto_runnable askable 'Do you want to use Carrierwave?' - confirmable true + is_confirmable def gems @template.gem 'carrierwave' diff --git a/recipes/configuration.rb b/recipes/configuration.rb index 31ba87c..abe1d60 100644 --- a/recipes/configuration.rb +++ b/recipes/configuration.rb @@ -5,7 +5,7 @@ def initialize(template) end def gems - @template.gem 'rails', '~= 5.1.0' + @template.gem 'rails', '~> 5.1.0' @template.gem 'aasm' @template.gem 'keynote' diff --git a/recipes/elastic_search.rb b/recipes/elastic_search.rb index 8ca6e5f..28eead3 100644 --- a/recipes/elastic_search.rb +++ b/recipes/elastic_search.rb @@ -4,7 +4,7 @@ class ElasticSearch < Base is_auto_runnable askable 'Are you going to use ElasticSearch?' - confirmable true + is_confirmable def gems @template.gem 'searchkick' diff --git a/recipes/mailgun.rb b/recipes/mailgun.rb index 1204b5c..b5ea9e6 100644 --- a/recipes/mailgun.rb +++ b/recipes/mailgun.rb @@ -4,7 +4,7 @@ class Mailgun < Base is_auto_runnable askable 'Do you want to use Mailgun for production emails?' - confirmable true + is_confirmable def gems @template.gem 'mailgun-ruby' diff --git a/recipes/modernizr.rb b/recipes/modernizr.rb index 021ddbf..4952a98 100644 --- a/recipes/modernizr.rb +++ b/recipes/modernizr.rb @@ -4,7 +4,7 @@ class Modernizr < Base is_auto_runnable askable 'Do you want to use Modernizr?' - confirmable true + is_confirmable def gems @template.gem 'modernizr-rails' diff --git a/recipes/paranoia.rb b/recipes/paranoia.rb index 65c99c9..5a80993 100644 --- a/recipes/paranoia.rb +++ b/recipes/paranoia.rb @@ -4,7 +4,7 @@ class Paranoia < Base is_auto_runnable askable 'Do you want to use Soft Deletes?' - confirmable true + is_confirmable def gems @template.gem 'paranoia' diff --git a/recipes/ransack.rb b/recipes/ransack.rb index 2f38669..399d3eb 100644 --- a/recipes/ransack.rb +++ b/recipes/ransack.rb @@ -4,7 +4,7 @@ class Ransack < Base is_auto_runnable askable 'Do you want to use Ransack?' - confirmable true + is_confirmable def gems @template.gem 'ransack'