class Lolita::Test::Matchers::BeRoutable

Public Instance Methods

failure_message() click to toggle source
# File lib/lolita/test/matchers.rb, line 18
def failure_message
  "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to be routable"
end
matches?(actual) click to toggle source
# File lib/lolita/test/matchers.rb, line 8
def matches?(actual)
  @actual=actual
  collect_routes
  set_method_and_url
  result=@routes.detect{|route| 
    method_match(route) && @url.to_s.match(route[:path_info])
  }
  !!result
end
negative_failure_message() click to toggle source
# File lib/lolita/test/matchers.rb, line 21
def negative_failure_message
  "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""}  to not be routable"
end

Private Instance Methods

all_applications() click to toggle source
# File lib/lolita/test/matchers.rb, line 60
def all_applications
  if defined?(Rails) && defined?(Rails::Application)
    ObjectSpace.each_object(Rails::Application).select { |klass|
     klass.class < Rails::Application 
    }.map(&:class)
  else
    []
  end
end
collect_routes() click to toggle source
# File lib/lolita/test/matchers.rb, line 53
def collect_routes
  @routes=[]
  all_applications.each do |application|
    @routes+=application.routes.routes.map(&:conditions)
  end
end
method_match(route) click to toggle source
# File lib/lolita/test/matchers.rb, line 27
def method_match(route)
  if route[:request_method]
    if @method
      @method.to_s.upcase.match(route[:request_method])
    else
      false
    end
  else
    true
  end
end
set_method_and_url() click to toggle source
# File lib/lolita/test/matchers.rb, line 39
def set_method_and_url
  if @actual.is_a?(Hash)
    @method,@url=@actual.keys.first,@actual.values.first
  elsif @actual.is_a?(Array)
    if @actual.size>=2
      @method,@url=@actual[0],@actual[1]
    elsif
      @url=@actual.first
    end
  else
    @url=@actual.to_s
  end
end