class HumanRoutes::Context

Attributes

controller[R]
options[R]

Public Class Methods

new(controller, options = {}) click to toggle source
# File lib/human_routes/context.rb, line 8
def initialize(controller, options = {})
  @controller = controller
  @options = options
end

Public Instance Methods

all() click to toggle source
# File lib/human_routes/context.rb, line 149
def all
  create
  update
  remove
  show
  list unless controller_name == controller_name.singularize
end
controller_name() click to toggle source
# File lib/human_routes/context.rb, line 13
def controller_name
  @controller_name ||= options.delete(:name) { controller.to_s }
end
create(*args) click to toggle source
# File lib/human_routes/context.rb, line 29
def create(*args)
  path, name, options = extract_route_args(
    segment: :new,
    default_name: "new_#{singular_controller_name}",
    args: args
  )

  routes << [
    path,
    {
      via: :get,
      controller: controller,
      action: :new,
      as: name
    }.merge(options)
  ]

  routes << [
    path,
    {
      via: :post,
      controller: controller,
      action: :create,
      as: ""
    }.merge(options)
  ]
end
list(*args) click to toggle source
# File lib/human_routes/context.rb, line 113
def list(*args)
  path, name, options = extract_route_args(
    segment: :list,
    default_name: controller_name,
    args: args
  )

  routes << [
    path,
    {
      via: :get,
      controller: controller,
      action: :index,
      as: name
    }.merge(options)
  ]
end
remove(*args) click to toggle source
# File lib/human_routes/context.rb, line 85
def remove(*args)
  path, name, options = extract_route_args(
    segment: :remove,
    default_name: "remove_#{singular_controller_name}",
    args: args
  )

  routes << [
    path,
    {
      via: :get,
      controller: controller,
      action: :remove,
      as: name
    }.merge(options)
  ]

  routes << [
    path,
    {
      via: :post,
      controller: controller,
      action: :destroy,
      as: ""
    }.merge(options)
  ]
end
resource?() click to toggle source
# File lib/human_routes/context.rb, line 21
def resource?
  controller_name == singular_controller_name
end
routes() click to toggle source
# File lib/human_routes/context.rb, line 25
def routes
  @routes ||= []
end
show(*args) click to toggle source
# File lib/human_routes/context.rb, line 131
def show(*args)
  path, name, options = extract_route_args(
    segment: :show,
    default_name: singular_controller_name,
    args: args
  )

  routes << [
    path,
    {
      via: :get,
      controller: controller,
      action: :show,
      as: name
    }.merge(options)
  ]
end
singular_controller_name() click to toggle source
# File lib/human_routes/context.rb, line 17
def singular_controller_name
  @singular_controller_name ||= controller_name.singularize
end
update(*args) click to toggle source
# File lib/human_routes/context.rb, line 57
def update(*args)
  path, name, options = extract_route_args(
    segment: :edit,
    default_name: "edit_#{singular_controller_name}",
    args: args
  )

  routes << [
    path,
    {
      via: :get,
      controller: controller,
      action: :edit,
      as: name
    }.merge(options)
  ]

  routes << [
    path,
    {
      via: :post,
      controller: controller,
      action: :update,
      as: ""
    }.merge(options)
  ]
end

Private Instance Methods

default_options() click to toggle source
# File lib/human_routes/context.rb, line 166
        def default_options
  {
    format: false
  }
end
extract_route_args(segment:, default_name:, args:) click to toggle source
# File lib/human_routes/context.rb, line 157
        def extract_route_args(segment:, default_name:, args:)
  route_options = args.extract_options!
  route_options = default_options.merge(options).merge(route_options)
  path = args.first || path_for(segment, route_options)
  name = route_options.delete(:as) { default_name.underscore.tr("/", "_") }

  [path, name, route_options]
end
path_for(segment, options) click to toggle source
# File lib/human_routes/context.rb, line 172
        def path_for(segment, options)
  param = options.fetch(:param, :id)

  segments = if resource?
               resource_segments(segment, param)
             else
               resources_segments(segment, param)
             end

  segments.compact.join("/")
end
resource_segments(segment, _param) click to toggle source
# File lib/human_routes/context.rb, line 184
        def resource_segments(segment, _param)
  segments = [controller_name]
  segments << segment unless segment == :show
  segments
end
resources_segments(segment, param) click to toggle source
# File lib/human_routes/context.rb, line 190
        def resources_segments(segment, param)
  case segment
  when :list
    [controller_name]
  when :new
    [controller_name, segment]
  when :show
    [controller_name, ":#{param}"]
  else
    [controller_name, ":#{param}", segment]
  end
end