Class: Decidim::Generators::AppGenerator

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

Overview

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.

Instance Method Summary collapse

Instance Method Details

#add_ignore_uploadsObject



145
146
147
# File 'lib/decidim/generators/app_generator.rb', line 145

def add_ignore_uploads
  append_file ".gitignore", "\n# Ignore public uploads\npublic/uploads" unless options["skip_git"]
end

#authorization_handlerObject



164
165
166
167
168
169
170
# File 'lib/decidim/generators/app_generator.rb', line 164

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_workflowsObject



180
181
182
183
184
185
186
187
# File 'lib/decidim/generators/app_generator.rb', line 180

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_ymlObject



89
90
91
# File 'lib/decidim/generators/app_generator.rb', line 89

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

#database_ymlObject



72
73
74
# File 'lib/decidim/generators/app_generator.rb', line 72

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

#decidim_controllerObject



76
77
78
# File 'lib/decidim/generators/app_generator.rb', line 76

def decidim_controller
  template "decidim_controller.rb.erb", "app/controllers/decidim_controller.rb", force: true
end

#decidim_initializerObject



154
155
156
157
158
159
160
161
162
# File 'lib/decidim/generators/app_generator.rb', line 154

def decidim_initializer
  copy_file "initializer.rb", "config/initializers/decidim.rb"

  if options[:force_ssl] == "false"
    gsub_file "config/initializers/decidim.rb",
              /# config.force_ssl = true/,
              "config.force_ssl = false"
  end
end

#dockerObject



80
81
82
83
# File 'lib/decidim/generators/app_generator.rb', line 80

def docker
  template "Dockerfile.erb", "Dockerfile"
  template "docker-compose.yml.erb", "docker-compose.yml"
end

#etherpadObject



85
86
87
# File 'lib/decidim/generators/app_generator.rb', line 85

def etherpad
  template "docker-compose-etherpad.yml", "docker-compose-etherpad.yml"
end

#gemfileObject



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/decidim/generators/app_generator.rb', line 101

def gemfile
  return if options[:skip_gemfile]

  if branch.present?
    get target_gemfile, "Gemfile", force: true
    get "#{target_gemfile}.lock", "Gemfile.lock", force: true
  else
    copy_file target_gemfile, "Gemfile", force: true
    copy_file "#{target_gemfile}.lock", "Gemfile.lock", force: true
  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

#installObject



213
214
215
216
217
218
219
220
221
222
223
# File 'lib/decidim/generators/app_generator.rb', line 213

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

#licenseObject



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

def license
  template "LICENSE-AGPLv3.txt", "LICENSE-AGPLv3.txt"
end

#machine_translation_serviceObject



205
206
207
208
209
210
211
# File 'lib/decidim/generators/app_generator.rb', line 205

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_serviceObject



197
198
199
200
201
202
203
# File 'lib/decidim/generators/app_generator.rb', line 197

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

#readmeObject



93
94
95
# File 'lib/decidim/generators/app_generator.rb', line 93

def readme
  template "README.md.erb", "README.md", force: true
end

#remove_default_error_pagesObject



149
150
151
152
# File 'lib/decidim/generators/app_generator.rb', line 149

def remove_default_error_pages
  remove_file "public/404.html"
  remove_file "public/500.html"
end

#sms_gatewayObject



172
173
174
175
176
177
178
# File 'lib/decidim/generators/app_generator.rb', line 172

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_pathsObject



19
20
21
22
23
24
# File 'lib/decidim/generators/app_generator.rb', line 19

def source_paths
  [
    self.class.source_root,
    Rails::Generators::AppGenerator.source_root
  ]
end

#timestamp_serviceObject



189
190
191
192
193
194
195
# File 'lib/decidim/generators/app_generator.rb', line 189

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_bootsnapObject



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

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,
      compile_cache_iseq: !ENV["SIMPLECOV"],
      compile_cache_yaml: true
    )
  RUBY
end