Skip to content
This repository has been archived by the owner on Feb 29, 2024. It is now read-only.

Commit

Permalink
Upgrading to Rails 5 (#41)
Browse files Browse the repository at this point in the history
Closes #5
  • Loading branch information
fjsanpedro committed Apr 6, 2017
1 parent b46a191 commit 2b040d5
Show file tree
Hide file tree
Showing 9 changed files with 160 additions and 71 deletions.
67 changes: 5 additions & 62 deletions pathfinder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
require_relative 'recipes/assets'
require_relative 'recipes/bower_rails'
require_relative 'recipes/carrier_wave'
require_relative 'recipes/configuration'
require_relative 'recipes/devise'
require_relative 'recipes/git_ignore'
require_relative 'recipes/postgres'
Expand Down Expand Up @@ -63,80 +64,22 @@ def call
ask_for_recipes
@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)}\'"

gem 'rails', Rails.version
# Model
gem 'aasm'
gem 'keynote'
gem 'paranoia' if yes?('Do you want to use Soft Deletes?')
# Searchs
gem 'ransack' if yes?('Do you want to use Ransack?')
gem 'kaminari'
gem 'searchkick' if yes?('Are you going to use ElasticSearch?')
# Jobs
gem 'redis'
gem 'sidekiq'
gem 'sinatra', require: nil
# Emails
gem 'premailer-rails'

pathfinder.generate_gems

gem_group :development, :test do
gem 'bundler-audit', require: false
gem 'byebug'
gem 'rspec-rails'
gem 'spring'
gem 'quiet_assets'
gem 'figaro'
gem 'mailcatcher'
gem 'factory_girl_rails'
gem 'faker'
gem 'pry-rails'
gem 'pry-coolline'
gem 'pry-byebug'
gem 'rubocop', require: false
end

gem_group :development do
gem 'spring-commands-rspec', require: false
gem 'better_errors'
end

gem_group :test do
gem 'simplecov', require: false
gem 'capybara', require: false
gem 'capybara-webkit', require: false
gem 'database_cleaner', require: false
gem 'fakeredis', require: false
gem 'poltergeist', require: false
gem 'shoulda-matchers', require: false
configuration.gems do
pathfinder.generate_gems
end

after_bundle do
run 'spring stop'

inside 'config' do
create_file 'application.yml'
create_file 'application.yml.example'
remove_file 'routes.rb'
create_file 'routes.rb' do <<~RUBY
Rails.application.routes.draw do
end
RUBY
end
end

create_file '.rubocop.yml' do <<~CODE
inherit_from: https://raw.githubusercontent.com/MarsBased/marstyle/master/ruby/.rubocop.yml
CODE
end
configuration.init_file

pathfinder.generate_initializers

Expand Down
14 changes: 11 additions & 3 deletions recipes/airbrake.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,21 @@ def gems
def init_file
@template.initializer 'airbrake.rb', <<~CODE
Airbrake.configure do |config|
config.api_key = ENV['AIRBRAKE_API_KEY']
config.project_id = ENV['AIRBRAKE_PROJECT_ID']
config.project_key = ENV['AIRBRAKE_PROJECT_KEY']
config.root_directory = Rails.root
config.logger = Rails.logger
config.environment = Rails.env
config.ignore_environments = %w(test)
config.blacklist_keys = [/password/i, /authorization/i]
end
CODE

@template.inside 'config' do
@template.append_file 'application.yml.example', "\nAIRBRAKE_API_KEY: ''"
@template.append_file 'application.yml', "\nAIRBRAKE_API_KEY: ''"
@template.append_file 'application.yml.example', "\nAIRBRAKE_PROJECT_ID: ''"
@template.append_file 'application.yml.example', "\nAIRBRAKE_PROJECT_KEY: ''"
@template.append_file 'application.yml', "\nAIRBRAKE_PROJECT_ID: ''"
@template.append_file 'application.yml', "\nAIRBRAKE_PROJECT_KEY: ''"
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion recipes/assets.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ module Recipes
class Assets < Base

def gems
# Assets
@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?')
@template.gem 'font-awesome-sass', '~> 4.3.0'
Expand All @@ -15,5 +14,6 @@ def gems
@template.gem 'uglifier', '>= 1.3.0'
@template.gem 'sdoc', '~> 0.4.0', group: :doc
end

end
end
2 changes: 1 addition & 1 deletion recipes/carrier_wave.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def init_file
config.fog_directory = ENV['AWS_S3_BUCKET']
config.fog_public = true
config.storage = :fog
config.cache_dir = Rails.root.join('tmp/cache')
config.cache_dir = Rails.root.join('tmp', 'cache')
config.fog_credentials = {
provider: 'AWS',
Expand Down
100 changes: 100 additions & 0 deletions recipes/configuration.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
module Recipes
class Configuration < Base
def initialize(template)
@template = template
end

def gems
@template.gem 'rails', '~> 5.0'
# Model
@template.gem 'aasm'
@template.gem 'keynote'
@template.gem 'paranoia' if @template.yes?('Do you want to use 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?')
# Emails
@template.gem 'premailer-rails'

yield if block_given?

@template.gem_group :development, :test do |group|
group.gem 'bundler-audit', require: false
group.gem 'byebug'
group.gem 'rspec-rails'
group.gem 'spring'
group.gem 'figaro'
group.gem 'mailcatcher'
group.gem 'factory_girl_rails'
group.gem 'faker'
group.gem 'listen'
group.gem 'pry-rails'
group.gem 'pry-coolline'
group.gem 'pry-byebug'
group.gem 'rubocop', require: false
end

@template.gem_group :development do |group|
group.gem 'spring-commands-rspec', require: false
group.gem 'better_errors'
end

@template.gem_group :test do |group|
group.gem 'simplecov', require: false
group.gem 'capybara', require: false
group.gem 'capybara-webkit', require: false
group.gem 'database_cleaner', require: false
group.gem 'fakeredis', require: false
group.gem 'poltergeist', require: false
group.gem 'shoulda-matchers', require: false
end
end

def init_file
create_application_yml
create_routes_file
set_error_handling
add_rubocop
end

private

def create_application_yml
@template.create_file 'config/application.yml'
@template.create_file 'config/application.yml.example'
end

def create_routes_file
@template.remove_file 'config/routes.rb'
@template.create_file 'config/routes.rb' do <<~RUBY
Rails.application.routes.draw do
end
RUBY
end
end

def set_error_handling
@template.insert_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do <<~RUBY
match '/404', to: 'errors#not_found', via: :all
match '/500', to: 'errors#internal_error', via: :all
RUBY
end
@template.insert_into_file 'config/application.rb', after: "class Application < Rails::Application\n" do <<~RUBY
\tconfig.exceptions_app = self.routes
RUBY
end
@template.run 'rails g controller errors not_found internal_error --no-assets --skip-routes --no-controller-specs --no-view-specs --no-helper'
@template.remove_file 'app/controllers/errors_controller.rb'
@template.copy_file(File.join(File.dirname(__FILE__), 'controllers', 'errors_controller.rb'), 'app/controllers/errors_controller.rb')
end

def add_rubocop
@template.create_file '.rubocop.yml' do <<~CODE
inherit_from: https://raw.githubusercontent.com/MarsBased/marstyle/master/ruby/.rubocop.yml
CODE
end
end

end
end
11 changes: 11 additions & 0 deletions recipes/controllers/errors_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class ErrorsController < ApplicationController

def not_found
render(status: 404)
end

def internal_error
render(status: 500)
end

end
4 changes: 4 additions & 0 deletions recipes/redis.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module Recipes
class Redis < Base

def gems
@template.gem 'redis'
end

def init_file
@template.initializer 'redis.rb', <<~CODE
Redis.current = Redis.new(Rails.application.config_for(:redis))
Expand Down
27 changes: 25 additions & 2 deletions recipes/sidekiq.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
module Recipes
class Sidekiq < Base

def gems
@template.gem 'sidekiq'
@template.gem 'sinatra', require: nil
end

def init_file
add_initializer
add_configuration
add_sidekiq_web
set_job_queue
end

private

def add_initializer
@template.initializer 'sidekiq.rb', <<~CODE
redis_host = Redis.current.client.host
redis_port = Redis.current.client.port
Expand All @@ -14,7 +28,9 @@ def init_file
config.redis = { url: "redis://\#{redis_host}:\#{redis_port}" }
end
CODE
end

def add_configuration
@template.inside 'config' do
@template.create_file 'sidekiq.yml' do <<~EOF
---
Expand All @@ -30,7 +46,9 @@ def init_file
EOF
end
end
end

def add_sidekiq_web
@template.insert_into_file 'config/routes.rb', before: "Rails.application.routes.draw do\n" do <<~RUBY
require 'sidekiq/web'
RUBY
Expand All @@ -42,8 +60,13 @@ def init_file
mount Sidekiq::Web => '/sidekiq'
end
end
get '/404', to: 'errors#not_found'
get '/500', to: 'errors#internal_error'
RUBY
end
end

def set_job_queue
@template.insert_into_file 'config/application.rb', after: "class Application < Rails::Application\n" do <<~RUBY
\tconfig.active_job.queue_adapter = :sidekiq
RUBY
end
end
Expand Down
4 changes: 2 additions & 2 deletions template.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
if Rails.version[0].to_i >= 5
if Rails.version[0].to_i < 5
puts ''
puts "\e[31mPathfinder only works with Rails versions lower than 5.0.\e[0m"
puts "\e[31mPathfinder only works with Rails versions greater or equal to 5.0.\e[0m"
exit
end

Expand Down

0 comments on commit 2b040d5

Please sign in to comment.