class OscMacheteRails::ResourceRouteGenerator

Public Instance Methods

add_workflow_route() click to toggle source

Properly nests namespaces passed into a generator

$ rails generate osc_machete_rails:workflow_route admin/users/products

should give you

namespace :admin do
  namespace :users
    resources :products do
      member do
        put 'submit'
        put 'copy'
      end
    end
  end
end
# File lib/generators/osc_machete_rails/resource_route/resource_route_generator.rb, line 20
def add_workflow_route
  return if options[:actions].present?

  # iterates over all namespaces and opens up blocks
  regular_class_path.each_with_index do |namespace, index|
    write("namespace :#{namespace} do", index + 1)
  end

  # inserts the primary resource
  write("resources :#{file_name.pluralize} do", route_length + 1)
  write("member do", route_length + 2)
  write("put 'submit'", route_length + 3)
  write("put 'copy'", route_length + 3)
  write("end", route_length + 2)
  write("end", route_length + 1)

  # ends blocks
  regular_class_path.each_index do |index|
    write("end", route_length - index)
  end

  # route prepends two spaces onto the front of the string that is passed, this corrects that
  route route_string[2..-1]
end

Private Instance Methods

route_length() click to toggle source
# File lib/generators/osc_machete_rails/resource_route/resource_route_generator.rb, line 54
def route_length
  regular_class_path.length
end
route_string() click to toggle source
# File lib/generators/osc_machete_rails/resource_route/resource_route_generator.rb, line 46
def route_string
  @route_string ||= ""
end
write(str, indent) click to toggle source
# File lib/generators/osc_machete_rails/resource_route/resource_route_generator.rb, line 50
def write(str, indent)
  route_string << "#{"  " * indent}#{str}\n"
end