class StaticRoutes

Attributes

context[RW]
limits[RW]
prefixed_modules[RW]

Public Class Methods

new(attributes = {}) click to toggle source
# File lib/static_routes.rb, line 5
def initialize(attributes = {})
  @context = attributes[:context]
  @limits = {}
end

Public Instance Methods

for(attributes) click to toggle source
# File lib/static_routes.rb, line 10
def for(attributes)
  splice_limits(attributes[:arguments])

  self.prefixed_modules = attributes[:prefixed_modules]&.split('/') || []

  attributes[:arguments].each do |controller|
    write_routes_for(controller)
  end
end

Private Instance Methods

controller_from_chars(chars) click to toggle source
# File lib/static_routes.rb, line 26
def controller_from_chars(chars)
  create_namespaced_controller(chars).constantize
end
create_namespaced_controller(chars) click to toggle source
# File lib/static_routes.rb, line 30
def create_namespaced_controller(chars)
  main_controller = "#{chars.to_s.camelize}Controller"

  if prefixed_modules
    (prefixed_modules.map(&:camelize) << main_controller).join('::')
  else
    main_controller
  end
end
desired_routes_from(controller) click to toggle source
# File lib/static_routes.rb, line 53
def desired_routes_from(controller)
  instance_methods = controller.instance_methods(false)
  if limits[:only]
    limits[:only].select { |method| instance_methods.include?(method) }
  else
    instance_methods.reject do |route|
      limits[:except]&.include?(route)
    end
  end
end
route_from_action(action) click to toggle source
# File lib/static_routes.rb, line 22
def route_from_action(action)
  action.to_s.gsub(/[^a-zA-Z]/, '-')
end
splice_limits(arguments) click to toggle source
# File lib/static_routes.rb, line 40
def splice_limits(arguments)
  return unless arguments.last.is_a? Hash

  self.limits = arguments.slice!(-1)
end
write_routes_for(controller) click to toggle source
# File lib/static_routes.rb, line 46
def write_routes_for(controller)
  controller_constant = controller_from_chars(controller)
  desired_routes_from(controller_constant).each do |action|
    context.get(route_from_action(action), to: "#{controller}##{action}")
  end
end