class Decidim::Generators::AppGenerator

Generates a Rails app and installs decidim to it. Uses the default Rails generator for most of the work.

Remember that, for how generators work, actions are executed based on the definition order of the public methods.

Public Instance Methods

add_ignore_uploads() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 148
def add_ignore_uploads
  append_file ".gitignore", "\n# Ignore public uploads\npublic/uploads" unless options["skip_git"]
end
authorization_handler() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 161
def authorization_handler
  return unless options[:demo]

  copy_file "dummy_authorization_handler.rb", "app/services/dummy_authorization_handler.rb"
  copy_file "another_dummy_authorization_handler.rb", "app/services/another_dummy_authorization_handler.rb"
  copy_file "verifications_initializer.rb", "config/initializers/decidim_verifications.rb"
end
budgets_workflows() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 177
def budgets_workflows
  return unless options[:demo]

  copy_file "budgets_workflow_random.rb", "lib/budgets_workflow_random.rb"
  copy_file "budgets_workflow_random.en.yml", "config/locales/budgets_workflow_random.en.yml"

  copy_file "budgets_initializer.rb", "config/initializers/decidim_budgets.rb"
end
cable_yml() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 85
def cable_yml
  template "cable.yml.erb", "config/cable.yml", force: true
end
database_yml() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 68
def database_yml
  template "database.yml.erb", "config/database.yml", force: true
end
decidim_controller() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 72
def decidim_controller
  template "decidim_controller.rb.erb", "app/controllers/decidim_controller.rb", force: true
end
decidim_initializer() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 157
def decidim_initializer
  copy_file "initializer.rb", "config/initializers/decidim.rb"
end
docker() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 76
def docker
  template "Dockerfile.erb", "Dockerfile"
  template "docker-compose.yml.erb", "docker-compose.yml"
end
etherpad() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 81
def etherpad
  template "docker-compose-etherpad.yml", "docker-compose-etherpad.yml"
end
gemfile() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 97
def gemfile
  return if options[:skip_gemfile]

  copy_file target_gemfile, "Gemfile", force: true
  copy_file "#{target_gemfile}.lock", "Gemfile.lock", force: true

  gem_modifier = if options[:path]
                   "path: \"#{options[:path]}\""
                 elsif options[:edge]
                   "git: \"https://github.com/decidim/decidim.git\", branch: \"develop\""
                 elsif options[:branch]
                   "git: \"https://github.com/decidim/decidim.git\", branch: \"#{options[:branch]}\""
                 else
                   "\"#{Decidim::Generators.version}\""
                 end

  gsub_file "Gemfile", /gem "#{current_gem}".*/, "gem \"#{current_gem}\", #{gem_modifier}"

  if current_gem == "decidim"
    gsub_file "Gemfile", /gem "decidim-dev".*/, "gem \"decidim-dev\", #{gem_modifier}"

    %w(conferences consultations elections initiatives templates).each do |component|
      if options[:demo]
        gsub_file "Gemfile", /gem "decidim-#{component}".*/, "gem \"decidim-#{component}\", #{gem_modifier}"
      else
        gsub_file "Gemfile", /gem "decidim-#{component}".*/, "# gem \"decidim-#{component}\", #{gem_modifier}"
      end
    end
  end

  run "bundle install"
end
install() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 210
def install
  Decidim::Generators::InstallGenerator.start(
    [
      "--recreate_db=#{options[:recreate_db]}",
      "--seed_db=#{options[:seed_db]}",
      "--skip_gemfile=#{options[:skip_gemfile]}",
      "--app_name=#{app_name}",
      "--profiling=#{options[:profiling]}"
    ]
  )
end
license() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 93
def license
  template "LICENSE-AGPLv3.txt", "LICENSE-AGPLv3.txt"
end
machine_translation_service() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 202
def machine_translation_service
  return unless options[:demo]

  gsub_file "config/initializers/decidim.rb",
            /# config.machine_translation_service = "MyTranslationService"/,
            "config.machine_translation_service = 'Decidim::Dev::DummyTranslator'"
end
pdf_signature_service() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 194
def pdf_signature_service
  return unless options[:demo]

  gsub_file "config/initializers/decidim.rb",
            /# config.pdf_signature_service = "MyPDFSignatureService"/,
            "config.pdf_signature_service = \"Decidim::Initiatives::PdfSignatureExample\""
end
readme() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 89
def readme
  template "README.md.erb", "README.md", force: true
end
remove_default_error_pages() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 152
def remove_default_error_pages
  remove_file "public/404.html"
  remove_file "public/500.html"
end
sms_gateway() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 169
def sms_gateway
  return unless options[:demo]

  gsub_file "config/initializers/decidim.rb",
            /# config.sms_gateway_service = "MySMSGatewayService"/,
            "config.sms_gateway_service = 'Decidim::Verifications::Sms::ExampleGateway'"
end
source_paths() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 19
def source_paths
  [
    self.class.source_root,
    Rails::Generators::AppGenerator.source_root
  ]
end
timestamp_service() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 186
def timestamp_service
  return unless options[:demo]

  gsub_file "config/initializers/decidim.rb",
            /# config.timestamp_service = "MyTimestampService"/,
            "config.timestamp_service = \"Decidim::Initiatives::DummyTimestamp\""
end
tweak_bootsnap() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 130
      def tweak_bootsnap
        gsub_file "config/boot.rb", %r{require 'bootsnap/setup'.*$}, <<~RUBY.rstrip
          require "bootsnap"

          env = ENV["RAILS_ENV"] || "development"

          Bootsnap.setup(
            cache_dir: File.expand_path(File.join("..", "tmp", "cache"), __dir__),
            development_mode: env == "development",
            load_path_cache: true,
            autoload_paths_cache: true,
            disable_trace: false,
            compile_cache_iseq: !ENV["SIMPLECOV"],
            compile_cache_yaml: true
          )
        RUBY
      end

Private Instance Methods

app_const_base() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 228
def app_const_base
  app_name.gsub(/\W/, "_").squeeze("_").camelize
end
app_name() click to toggle source
Calls superclass method
# File lib/decidim/generators/app_generator.rb, line 224
def app_name
  options[:app_name] || super
end
current_gem() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 232
def current_gem
  return "decidim" unless options[:path]

  @current_gem ||= File.read(gemspec).match(/name\s*=\s*['"](?<name>.*)["']/)[:name]
end
expanded_path() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 252
def expanded_path
  File.expand_path(options[:path])
end
gemspec() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 238
def gemspec
  File.expand_path(Dir.glob("*.gemspec", base: expanded_path).first, expanded_path)
end
root_path() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 256
def root_path
  File.expand_path(File.join("..", "..", ".."), __dir__)
end
target_gemfile() click to toggle source
# File lib/decidim/generators/app_generator.rb, line 242
def target_gemfile
  root = if options[:path]
           expanded_path
         else
           root_path
         end

  File.join(root, "Gemfile")
end