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", "    # You can remove the 'faker' gem if you don't want Decidim seeds.\n    Decidim.seed!\n  RUBY\nend\n"

#copy_initializerObject



48
49
50
51
# 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_migrationsObject



124
125
126
127
# File 'lib/decidim/generators/install_generator.rb', line 124

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_webpackerObject



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/decidim/generators/install_generator.rb', line 81

def install_decidim_webpacker
  # Copy CSS files
  copy_file "decidim_application.scss", "app/packs/stylesheets/decidim/decidim_application.scss"
  copy_file "_decidim-settings.scss", "app/packs/stylesheets/decidim/_decidim-settings.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 webpacker binstubs
  remove_file "bin/yarn"
  rails "webpacker:binstubs"

  # Run Decidim custom webpacker installation
  rails "decidim:webpacker:install"
end

#letter_opener_webObject



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/decidim/generators/install_generator.rb', line 129

def letter_opener_web
  route "    if Rails.env.development?\n      mount LetterOpenerWeb::Engine, at: \"/letter_opener\"\n    end\n\n  RUBY\n\n  inject_into_file \"config/environments/development.rb\",\n                   after: \"config.action_mailer.raise_delivery_errors = false\" do\n    cut <<~RUBY\n      |\n      |  config.action_mailer.delivery_method = :letter_opener_web\n      |  config.action_mailer.default_url_options = { port: 3000 }\n    RUBY\n  end\nend\n"

#profiling_gemsObject



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

def profiling_gems
  return unless options[:profiling]

  append_file "Gemfile", "\n    group :development do\n      # Profiling gems\n      gem \"bullet\"\n      gem \"flamegraph\"\n      gem \"memory_profiler\"\n      gem \"rack-mini-profiler\", require: false\n      gem \"stackprof\"\n    end\n  RUBY\n\n  copy_file \"bullet_initializer.rb\", \"config/initializers/bullet.rb\"\n  copy_file \"rack_profiler_initializer.rb\", \"config/initializers/rack_profiler.rb\"\n\n  run \"bundle install\"\nend\n"

#remove_layoutObject



57
58
59
60
# 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

#remove_old_assetsObject



102
103
104
105
106
# File 'lib/decidim/generators/install_generator.rb', line 102

def remove_old_assets
  remove_file "config/initializers/assets.rb"
  remove_dir("app/assets")
  remove_dir("app/javascript")
end

#remove_sprockets_requirementObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/decidim/generators/install_generator.rb', line 108

def remove_sprockets_requirement
  gsub_file "config/application.rb", %r{require ['"]rails/all['"]\R}, "    require \"decidim/rails\"\n\n    # Add the frameworks used by your app that are not loaded by Decidim.\n    # require \"action_mailbox/engine\"\n    # require \"action_text/engine\"\n    require \"action_cable/engine\"\n    require \"rails/test_unit/railtie\"\n  RUBY\n\n  gsub_file \"config/environments/development.rb\", /config\\.assets.*$/, \"\"\n  gsub_file \"config/environments/test.rb\", /config\\.assets.*$/, \"\"\n  gsub_file \"config/environments/production.rb\", /config\\.assets.*$/, \"\"\nend\n"

#secretsObject



53
54
55
# File 'lib/decidim/generators/install_generator.rb', line 53

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

#smtp_environmentObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/decidim/generators/install_generator.rb', line 62

def smtp_environment
  inject_into_file "config/environments/production.rb",
                   after: "config.log_formatter = ::Logger::Formatter.new" do
    cut "      |\n      |  config.action_mailer.smtp_settings = {\n      |    :address        => Rails.application.secrets.smtp_address,\n      |    :port           => Rails.application.secrets.smtp_port,\n      |    :authentication => Rails.application.secrets.smtp_authentication,\n      |    :user_name      => Rails.application.secrets.smtp_username,\n      |    :password       => Rails.application.secrets.smtp_password,\n      |    :domain         => Rails.application.secrets.smtp_domain,\n      |    :enable_starttls_auto => Rails.application.secrets.smtp_starttls_auto,\n      |    :openssl_verify_mode => 'none'\n      |  }\n    RUBY\n  end\nend\n"