Class: Rails::Generators::ResourceRouteGenerator

Inherits:
NamedBase
  • Object
show all
Defined in:
lib/rails/generators/rails/resource_route/resource_route_generator.rb

Overview

:nodoc:

Instance Method Summary collapse

Methods inherited from NamedBase

#initialize

Methods inherited from Base

base_root, class_option, default_source_root, desc, exit_on_failure?, hide!, hook_for, inherited, namespace, remove_hook_for, source_root

Methods included from Actions

#add_source, #environment, #gem, #gem_group, #generate, #git, #github, #initialize, #initializer, #lib, #rails_command, #rake, #rakefile, #readme, #route, #vendor

Constructor Details

This class inherits a constructor from Rails::Generators::NamedBase

Instance Method Details

#add_resource_routeObject

Properly nests namespaces passed into a generator

$ rails generate resource admin/users/products

should give you

namespace :admin do
  namespace :users do
    resources :products
  end
end


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rails/generators/rails/resource_route/resource_route_generator.rb', line 17

def add_resource_route
  return if options[:actions].present?

  depth = 0
  lines = []

  # Create 'namespace' ladder
  # namespace :foo do
  #   namespace :bar do
  regular_class_path.each do |ns|
    lines << indent("namespace :#{ns} do\n", depth * 2)
    depth += 1
  end

  # inserts the primary resource
  # Create route
  #     resources 'products'
  lines << indent(%{resources :#{file_name.pluralize}\n}, depth * 2)

  # Create `end` ladder
  #   end
  # end
  until depth.zero?
    depth -= 1
    lines << indent("end\n", depth * 2)
  end

  route lines.join
end