Sha256: f36bc751fd8788dfefac9570921277a240391385600a12c3c78ad7058b9f2076

Contents?: true

Size: 917 Bytes

Versions: 4

Compression:

Stored size: 917 Bytes

Contents

require 'set'

class Usher
  class Grapher

    def initialize
      reset!
    end

    def reset!
      @significant_keys = nil
      @orders = Hash.new{|h,k| h[k] = Hash.new{|h2, k2| h2[k2] = []}}
      @key_count = Hash.new(0)
    end

    def add_route(route)
      route.paths.each do |path|
        unless path.dynamic_set.size.zero?
          path.dynamic_set.each do |k|
            @orders[path.dynamic_set.size][k] << path
            @key_count[k] += 1
          end
        end
      end
    end

    def significant_keys
      @significant_keys ||= Set.new(@key_count.keys)
    end

    def find_matching_path(params)
      unless params.empty?
        set = Set.new(params.keys) & significant_keys
        set.size.downto(1) do |o|
          set.each do |k|
            @orders[o][k].each { |r| return r if r.dynamic_set.subset?(set) }
          end
        end
        nil
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
joshbuddy-usher-0.4.0 lib/usher/grapher.rb
joshbuddy-usher-0.4.1 lib/usher/grapher.rb
joshbuddy-usher-0.4.2 lib/usher/grapher.rb
joshbuddy-usher-0.4.3 lib/usher/grapher.rb