Sha256: b1e95d0c408d463bfcbb1d43c58750cdd61e6439f50f10b78c0b4f85e60fbca5

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

module ProductSpy
  class Host
    class Parser
      def initialize(regexp, pk_keys)
        @regexp = regexp
        @pk_keys = pk_keys
      end

      def get_pk(url)
        if m = @regexp.match(url)
          return @pk_keys.map do |i|
            m[i]
          end
        else
          return nil
        end
      end
    end

    class Builder
      def initialize(pattern)
        @pattern = pattern
      end

      def get_url(pk)
        @pattern.gsub /:(\d+)/ do |i|
          pk[i.to_i]
        end
      end
    end

    attr_reader :host_name

    def initialize(host_name)
      @host_name = host_name
      @parser = []
      @builder = {}
    end

    def parse(regex, pk_keys)
      @parser << Parser.new(regex, pk_keys)
    end

    def build(type, pattern)
      @builder[type.to_sym] = Builder.new(pattern)
    end

    def make_url(pk, options)
      builder = @builder[options[:type].to_sym]
      builder.get_url(pk)
    end

    def make_pk(url)
      @parser.each do |parser|
        result = parser.get_pk(url)
        return result unless result.nil?
      end
      return nil
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
product_spy-0.0.1 lib/product_spy/host.rb