Class: RubyCms::Generators::AdminPageGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Defined in:
lib/generators/ruby_cms/admin_page_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_page_registrationObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/generators/ruby_cms/admin_page_generator.rb', line 64

def add_page_registration
  pages_file = Rails.root.join("config/initializers/ruby_cms_pages.rb")

  registration = register_page_code

  if pages_file.exist?
    content = File.read(pages_file)
    if content.include?("key: :#{file_name}")
      say "Page registration already exists, skipping.", :yellow
      return
    end
    append_to_file pages_file.to_s, "\n#{registration}\n"
  else
    create_file pages_file.to_s, "# frozen_string_literal: true\n\n#{registration}\n"
  end
  say "Registered page :#{file_name} in config/initializers/ruby_cms_pages.rb", :green
end

#add_routeObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/generators/ruby_cms/admin_page_generator.rb', line 38

def add_route
  routes_path = Rails.root.join("config/routes.rb")
  return unless routes_path.exist?

  content = File.read(routes_path)
  route_line = "    resources :#{plural_name}, only: [:index], controller: \"admin/#{file_name}\""

  if content.include?("resources :#{plural_name}") && content.include?("admin/#{file_name}")
    say "Route already exists, skipping.", :yellow
    return
  end

  if content.match?(/namespace\s+:admin\s+do/)
    inject_into_file routes_path.to_s, after: /namespace\s+:admin\s+do\s*\n/ do
      "#{route_line}\n"
    end
  else
    route <<~RUBY
      namespace :admin do
      #{route_line}
      end
    RUBY
  end
  say "Route: added admin/#{plural_name}", :green
end

#create_controllerObject



28
29
30
31
# File 'lib/generators/ruby_cms/admin_page_generator.rb', line 28

def create_controller
  template "controller.rb.tt",
           File.join("app/controllers/admin", "#{file_name}_controller.rb")
end

#create_viewObject



33
34
35
36
# File 'lib/generators/ruby_cms/admin_page_generator.rb', line 33

def create_view
  template "index.html.erb.tt",
           File.join("app/views/admin", file_name, "index.html.erb")
end

#show_next_stepsObject



82
83
84
85
# File 'lib/generators/ruby_cms/admin_page_generator.rb', line 82

def show_next_steps
  say "\nAdmin page '#{file_name}' created.", :green
  say "Next: rails ruby_cms:seed_permissions", :cyan
end

#validate_optionsObject

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
26
# File 'lib/generators/ruby_cms/admin_page_generator.rb', line 18

def validate_options
  raise ArgumentError, "--section must be 'main' or 'settings', got '#{section_name}'" unless %w[main settings].include?(section_name)

  icon_sym = icon_name.to_sym
  return if RubyCms::Icons::REGISTRY.key?(icon_sym)

  say "Warning: icon '#{icon_name}' is not in RubyCms::Icons::REGISTRY. " \
      "Available: #{RubyCms::Icons.available.join(', ')}", :yellow
end