Class: Moderate::Generators::ViewsGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/moderate/views_generator.rb

Overview

‘rails generate moderate:views` — eject the engine’s overridable templates into the HOST app so they can be restyled. This is the Devise move (‘rails g devise:views`), and it works for the same boring Rails reason: the host app’s ‘app/views` sits AHEAD of any engine’s view paths in the lookup chain, so a file copied to ‘app/views/moderate/notices/new.html.erb` SHADOWS the gem’s bundled default automatically — no config, no registration. Delete your copy and the gem’s default comes back. Upgrade the gem and your ejected copies are untouched (re-run only if you WANT the new defaults).

‘source_root` points at the engine’s own ‘app/views`, so `copy_file` / `directory` read the exact templates the engine renders.

Instance Method Summary collapse

Instance Method Details

#copy_viewsObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/generators/moderate/views_generator.rb', line 31

def copy_views
  # The whole notices directory (new/show + any partials that ship with it).
  directory "moderate/notices", "app/views/moderate/notices" if include?("notices")

  # Just the field partial, for the "I only want to restyle the fields" path.
  # Guarded by File.exist? so the generator doesn't fail if the partial isn't
  # part of the shipped set in a given version.
  if include?("form") && !include?("notices")
    partial = "moderate/notices/_form.html.erb"
    copy_file partial, "app/views/#{partial}" if engine_view_exists?(partial)
  end

  # The engine layout (only if one ships under layouts/moderate).
  if include?("layout")
    directory "layouts/moderate", "app/views/layouts/moderate" if engine_view_exists?("layouts/moderate")
  end
end