Sha256: f0653163b83aac2d60e5c7d57e863d5422193070a9480bdaa8beb40e2a43f75d

Contents?: true

Size: 935 Bytes

Versions: 7

Compression:

Stored size: 935 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)
      @cache = {}
    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

7 entries across 7 versions & 1 rubygems

Version Path
joshbuddy-usher-0.2.2 lib/usher/grapher.rb
joshbuddy-usher-0.3.0 lib/usher/grapher.rb
joshbuddy-usher-0.3.2 lib/usher/grapher.rb
joshbuddy-usher-0.3.3 lib/usher/grapher.rb
joshbuddy-usher-0.3.4 lib/usher/grapher.rb
joshbuddy-usher-0.3.5 lib/usher/grapher.rb
joshbuddy-usher-0.3.6 lib/usher/grapher.rb