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



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

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

#authorization_handlerObject



168
169
170
171
172
173
174
# File 'lib/decidim/generators/app_generator.rb', line 168

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



184
185
186
187
188
189
190
191
# File 'lib/decidim/generators/app_generator.rb', line 184

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



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

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

#database_ymlObject



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

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

#decidim_controllerObject



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

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

#decidim_initializerObject



158
159
160
161
162
163
164
165
166
# File 'lib/decidim/generators/app_generator.rb', line 158

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



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

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

#etherpadObject



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

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

#gemfileObject



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

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



217
218
219
220
221
222
223
224
225
226
227
# File 'lib/decidim/generators/app_generator.rb', line 217

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



101
102
103
# File 'lib/decidim/generators/app_generator.rb', line 101

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

#machine_translation_serviceObject



209
210
211
212
213
214
215
# File 'lib/decidim/generators/app_generator.rb', line 209

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



201
202
203
204
205
206
207
# File 'lib/decidim/generators/app_generator.rb', line 201

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



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

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

#remove_default_error_pagesObject



153
154
155
156
# File 'lib/decidim/generators/app_generator.rb', line 153

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

#sms_gatewayObject



176
177
178
179
180
181
182
# File 'lib/decidim/generators/app_generator.rb', line 176

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



193
194
195
196
197
198
199
# File 'lib/decidim/generators/app_generator.rb', line 193

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



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/decidim/generators/app_generator.rb', line 133

def tweak_bootsnap
  gsub_file "config/boot.rb", %r{require 'bootsnap/setup'.*$}, "    require \"bootsnap\"\n\n    env = ENV[\"RAILS_ENV\"] || \"development\"\n\n    Bootsnap.setup(\n      cache_dir: File.expand_path(File.join(\"..\", \"tmp\", \"cache\"), __dir__),\n      development_mode: env == \"development\",\n      load_path_cache: true,\n      compile_cache_iseq: !ENV[\"SIMPLECOV\"],\n      compile_cache_yaml: true\n    )\n  RUBY\nend\n".rstrip