Sha256: 5991d314d0103c0f7bbfb299c5faba31188edbafa9cf7c2462413413a66b3d2a

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

class Usher
  class Route
    class Path
  
      attr_reader :route, :parts
      
      def initialize(route, parts)
        @route = route
        @parts = parts
        @dynamic = @parts.any?{|p| p.is_a?(Variable)}
      end

      def dynamic_indicies
        unless @dynamic_indicies
          @dynamic_indicies = []
          parts.each_index{|i| @dynamic_indicies << i if parts[i].is_a?(Variable)}
        end
        @dynamic_indicies
      end

      def dynamic_parts
        @dynamic_parts ||= parts.values_at(*dynamic_indicies)
      end

      def dynamic_map
        unless @dynamic_map
          @dynamic_map = {}
          dynamic_parts.each{|p| @dynamic_map[p.name] = p }
        end
        @dynamic_map
      end
      
      def dynamic_keys
        @dynamic_keys ||= dynamic_map.keys
      end
      
      def dynamic_required_keys
        @dynamic_required_keys ||= dynamic_parts.select{|dp| !dp.default_value}.map{|dp| dp.name}
      end
      
      def dynamic?
        @dynamic
      end

      def can_generate_from?(keys)
        (dynamic_required_keys - keys).size.zero?
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
joshbuddy-usher-0.5.1 lib/usher/route/path.rb