class Decidim::Generators::InstallGenerator
Installs `decidim` to a Rails app by adding the needed lines of code automatically to important files in the Rails app.
Remember that, for how generators work, actions are executed based on the definition order of the public methods.
Public Instance Methods
add_seeds()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 41 def add_seeds append_file "db/seeds.rb", <<~RUBY # You can remove the 'faker' gem if you don't want Decidim seeds. Decidim.seed! RUBY end
append_assets()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 62 def append_assets append_file "app/assets/javascripts/application.js", "//= require decidim" gsub_file "app/assets/javascripts/application.js", %r{//= require turbolinks\n}, "" inject_into_file "app/assets/stylesheets/application.css", before: "*= require_tree ." do "*= require decidim\n " end template "decidim.scss.erb", "app/assets/stylesheets/decidim.scss", force: true end
configure_js_compressor()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 86 def configure_js_compressor gsub_file "config/environments/production.rb", "config.assets.js_compressor = :uglifier", "config.assets.js_compressor = Uglifier.new(:harmony => true)" end
copy_initializer()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 48 def copy_initializer copy_file "carrierwave.rb", "config/initializers/carrierwave.rb" copy_file "social_share_button.rb", "config/initializers/social_share_button.rb" end
copy_migrations()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 109 def copy_migrations rails "decidim:upgrade" recreate_db if options[:recreate_db] end
disable_precompilation_on_demand()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 73 def disable_precompilation_on_demand %w(development test).each do |environment| inject_into_file "config/environments/#{environment}.rb", before: /^end$/ do cut <<~RUBY, strip: false | | # No precompilation on demand on first request | config.assets.check_precompiled_asset = false RUBY end end end
install()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 37 def install route "mount Decidim::Core::Engine => '/'" end
letter_opener_web()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 114 def letter_opener_web route <<~RUBY if Rails.env.development? mount LetterOpenerWeb::Engine, at: "/letter_opener" end RUBY inject_into_file "config/environments/development.rb", after: "config.action_mailer.raise_delivery_errors = false" do cut <<~RUBY | | config.action_mailer.delivery_method = :letter_opener_web | config.action_mailer.default_url_options = { port: 3000 } RUBY end end
profiling_gems()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 132 def profiling_gems return unless options[:profiling] append_file "Gemfile", <<~RUBY group :development do # Profiling gems gem "bullet" gem "flamegraph" gem "memory_profiler" gem "rack-mini-profiler", require: false gem "stackprof" end RUBY copy_file "bullet_initializer.rb", "config/initializers/bullet.rb" copy_file "rack_profiler_initializer.rb", "config/initializers/rack_profiler.rb" run "bundle install" end
remove_layout()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 57 def remove_layout remove_file "app/views/layouts/application.html.erb" remove_file "app/views/layouts/mailer.text.erb" end
secrets()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 53 def secrets template "secrets.yml.erb", "config/secrets.yml", force: true end
smtp_environment()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 90 def smtp_environment inject_into_file "config/environments/production.rb", after: "config.log_formatter = ::Logger::Formatter.new" do cut <<~RUBY | | config.action_mailer.smtp_settings = { | :address => Rails.application.secrets.smtp_address, | :port => Rails.application.secrets.smtp_port, | :authentication => Rails.application.secrets.smtp_authentication, | :user_name => Rails.application.secrets.smtp_username, | :password => Rails.application.secrets.smtp_password, | :domain => Rails.application.secrets.smtp_domain, | :enable_starttls_auto => Rails.application.secrets.smtp_starttls_auto, | :openssl_verify_mode => 'none' | } RUBY end end
Private Instance Methods
cut(text, strip: true)
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 181 def cut(text, strip: true) cutted = text.gsub(/^ *\|/, "") return cutted unless strip cutted.rstrip end
rails(*args)
click to toggle source
Runs rails commands in a subprocess, and aborts if it doesn't suceeed
# File lib/decidim/generators/install_generator.rb, line 167 def rails(*args) abort unless system("bin/rails", *args) end
recreate_db()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 155 def recreate_db soft_rails "db:environment:set", "db:drop" rails "db:create" rails "db:migrate" rails "db:seed" if options[:seed_db] rails "db:test:prepare" end
scss_variables()
click to toggle source
# File lib/decidim/generators/install_generator.rb, line 176 def scss_variables variables = File.join(Gem.loaded_specs["decidim-core"].full_gem_path, "app", "assets", "stylesheets", "decidim", "_variables.scss") File.read(variables).split("\n").map { |line| "// #{line}".gsub(" !default", "") }.join("\n") end
soft_rails(*args)
click to toggle source
Runs rails commands in a subprocess silencing errors, and ignores status
# File lib/decidim/generators/install_generator.rb, line 172 def soft_rails(*args) system("bin/rails", *args, err: File::NULL) end