Class: Decidim::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/decidim/install_generator.rb

Overview

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.

Instance Method Summary collapse

Instance Method Details

#add_seedsObject



32
33
34
35
36
37
# File 'lib/generators/decidim/install_generator.rb', line 32

def add_seeds
  append_file("db/seeds.rb", <<~SEEDS_CONTENT)
    # You can remove the 'faker' gem if you don't want Decidim seeds.
    Decidim.seed!
  SEEDS_CONTENT
end

#append_assetsObject



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/generators/decidim/install_generator.rb', line 54

def append_assets
  append_file "app/assets/javascripts/application.js", "//= require decidim"
  gsub_file "app/assets/javascripts/application.js", %r{//= require turbolinks\n}, ""
  gsub_file "app/assets/javascripts/application.js", %r{//= require rails-ujs\n}, "//= require jquery\n//= require jquery_ujs\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

#bundle_installObject



24
25
26
# File 'lib/generators/decidim/install_generator.rb', line 24

def bundle_install
  run "bundle install"
end

#copy_initializerObject



39
40
41
42
43
# File 'lib/generators/decidim/install_generator.rb', line 39

def copy_initializer
  template "initializer.rb", "config/initializers/decidim.rb"
  template "carrierwave.rb", "config/initializers/carrierwave.rb"
  template "social_share_button.rb", "config/initializers/social_share_button.rb"
end

#copy_migrationsObject



96
97
98
99
# File 'lib/generators/decidim/install_generator.rb', line 96

def copy_migrations
  rails "railties:install:migrations"
  recreate_db if options[:recreate_db]
end

#installObject



28
29
30
# File 'lib/generators/decidim/install_generator.rb', line 28

def install
  route "mount Decidim::Core::Engine => '/'"
end

#letter_opener_webObject



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/generators/decidim/install_generator.rb', line 101

def letter_opener_web
  route <<~RUBY.gsub(/^ *\|/, "")
    |
    |  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
    <<~RUBY.gsub(/^ *\|/, "")
      |
      |  config.action_mailer.delivery_method = :letter_opener_web
    RUBY
  end
end

#remove_layoutObject



49
50
51
52
# File 'lib/generators/decidim/install_generator.rb', line 49

def remove_layout
  remove_file "app/views/layouts/application.html.erb"
  remove_file "app/views/layouts/mailer.text.erb"
end

#secretsObject



45
46
47
# File 'lib/generators/decidim/install_generator.rb', line 45

def secrets
  template "secrets.yml.erb", "config/secrets.yml", force: true
end

#smtp_environmentObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/generators/decidim/install_generator.rb', line 66

def smtp_environment
  inject_into_file "config/environments/production.rb",
                   after: "config.log_formatter = ::Logger::Formatter.new" do
    <<~RUBY.gsub(/^ *\|/, "")
      |
      |  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'
      |  }
      |
      |  if Rails.application.secrets.sendgrid
      |    config.action_mailer.default_options = {
      |      "X-SMTPAPI" => {
      |        filters:  {
      |          clicktrack: { settings: { enable: 0 } },
      |          opentrack:  { settings: { enable: 0 } }
      |        }
      |      }.to_json
      |    }
      |  end
    RUBY
  end
end