Sha256: d08c114d86c8460ca919ffb535d45a8f8ea2ba15e5b4859e3eb5d91a35e22751

Contents?: true

Size: 1.11 KB

Versions: 8

Compression:

Stored size: 1.11 KB

Contents

require 'typhoeus'

module PageRankr
  module Trackers
    attr_accessor :site_trackers
    
    def initialize
      @site_trackers = self.class.constants.collect{|tracker| symbol_for(tracker)}
    end

    def lookup(site, *trackers)
      trackers = site_trackers if trackers.empty?
      
      tracked = {}
      hydra = Typhoeus::Hydra.new
      trackers.each do |tracker|
        name, klass = constant_name(tracker), self.class
        
        next unless klass.const_defined? name

        tracked[tracker] = klass.const_get(name).new(site)
        hydra.queue tracked[tracker].request
      end
      hydra.run
      
      tracked.keys.each do |tracker|
        tracked[tracker] = tracked[tracker].tracked
      end
      
      tracked
    end
    
    private
    
    def symbol_for(klass)
      word = klass.to_s.dup
      word.gsub!(/([A-Z]+)([A-Z][a-z])/){|match| "#{$1}_#{$2}" }
      word.gsub!(/([a-z\d])([A-Z])/){|match| "#{$1}_#{$2}" }
      word.tr!("-", "_")
      word.downcase!
      word.to_sym
    end
    
    def constant_name(sym)
      sym.to_s.split('_').collect{|str| str.capitalize}.join
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
PageRankr-3.2.1 lib/page_rankr/trackers.rb
PageRankr-3.2.0 lib/page_rankr/trackers.rb
PageRankr-3.1.2 lib/page_rankr/trackers.rb
PageRankr-3.1.1 lib/page_rankr/trackers.rb
PageRankr-3.1.0 lib/page_rankr/trackers.rb
PageRankr-3.0.2 lib/page_rankr/trackers.rb
PageRankr-3.0.1 lib/page_rankr/trackers.rb
PageRankr-3.0.0 lib/page_rankr/trackers.rb