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