Class: Decidim::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/decidim/generators/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



41
42
43
44
45
46
# 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 do not want Decidim seeds.
    Decidim.seed!
  RUBY
end

#build_api_docsObject



110
111
112
# File 'lib/decidim/generators/install_generator.rb', line 110

def build_api_docs
  rails "decidim_api:generate_docs"
end

#bundle_installObject



167
168
169
# File 'lib/decidim/generators/install_generator.rb', line 167

def bundle_install
  run "bundle install"
end

#copy_migrationsObject



171
172
173
174
# File 'lib/decidim/generators/install_generator.rb', line 171

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

#installObject



37
38
39
# File 'lib/decidim/generators/install_generator.rb', line 37

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

#install_decidim_shakapackerObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/decidim/generators/install_generator.rb', line 78

def install_decidim_shakapacker
  # Copy CSS file
  copy_file "decidim_application.scss", "app/packs/stylesheets/decidim/decidim_application.scss"

  # Copy JS application file
  copy_file "decidim_application.js", "app/packs/src/decidim/decidim_application.js"

  # Create empty directory for images
  empty_directory "app/packs/images"
  # Add a .keep file so directory is included in git when committing
  create_file "app/packs/images/.keep"

  # Regenerate shakapacker binstubs
  remove_file "bin/yarn"
  bundle_install

  # Copy package.json
  copy_file "package.json", "package.json"

  rails "shakapacker:binstubs"

  # Run Decidim custom shakapacker installation
  rails "decidim:shakapacker:install"

  # Run Decidim custom procfile installation
  rails "decidim:procfile:install"

  # Replace robots.txt
  remove_file "public/robots.txt"
  rails "decidim:robots:replace"
end

#letter_opener_webObject



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# 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 <<~HERE
      |
      |  config.action_mailer.delivery_method = :letter_opener_web
      |  config.action_mailer.default_url_options = { port: 3000 }
    HERE
  end
end

#profiling_gemsObject



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# 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"
end

#remove_layoutObject



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

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

#skip_gemfile_if_definedObject



72
73
74
75
76
# File 'lib/decidim/generators/install_generator.rb', line 72

def skip_gemfile_if_defined
  return unless options[:skip_gemfile]

  remove_file "Gemfile"
end

#smtp_environmentObject



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/decidim/generators/install_generator.rb', line 53

def smtp_environment
  inject_into_file "config/environments/production.rb",
                   after: "config.log_tags = [ :request_id ]" do
    cut <<~HERE
      |
      |  config.action_mailer.smtp_settings = {
      |    :address        => Decidim::Env.new("SMTP_ADDRESS").to_s,
      |    :port           => Decidim::Env.new("SMTP_PORT", 587).to_i,
      |    :authentication => Decidim::Env.new("SMTP_AUTHENTICATION", "plain").to_s,
      |    :user_name      => Decidim::Env.new("SMTP_USERNAME").to_s,
      |    :password       => Decidim::Env.new("SMTP_PASSWORD").to_s,
      |    :domain         => Decidim::Env.new("SMTP_DOMAIN").to_s,
      |    :enable_starttls_auto => Decidim::Env.new("SMTP_STARTTLS_AUTO").to_boolean_string,
      |    :openssl_verify_mode => 'none'
      |  }
    HERE
  end
end

#tweak_springObject



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/decidim/generators/install_generator.rb', line 151

def tweak_spring
  run "bundle exec spring stop"
  run "bundle exec spring binstub --all"

  create_file "config/spring.rb", <<~CONFIG
    require "decidim/spring"

    Spring.watch(
      ".ruby-version",
      ".rbenv-vars",
      "tmp/restart.txt",
      "tmp/caching-dev.txt"
    )
  CONFIG
end