Sha256: c2aae954f2428a9cbfa4f2fbb06dd1a6da8a3cbe82b57dd7883231c80ad2bad1

Contents?: true

Size: 1.56 KB

Versions: 7

Compression:

Stored size: 1.56 KB

Contents

require 'uri'
require 'cgi'
require_relative 'ids_please/parsers'
require_relative 'ids_please/grabbers'

class IdsPlease

  def self.parsers
    IdsPlease::Parsers
  end

  def self.grabbers
    IdsPlease::Grabbers
  end

  attr_accessor :original, :unrecognized, :parsed, :grabbed

  def initialize(*args)
    @original = args.flatten.dup
  end

  def recognize
    @recognized = {}
    @unrecognized = []
    original.each { |l| recognize_link(l) }
  end

  def recognized
    Hash[@recognized.map { |parser, links| [ parser.to_sym, links ] }]
  end

  def parse
    interact(:parsers)
  end

  def grab
    interact(:grabbers)
  end

  private

  def interact(interactors = :parsers)
    recognize
    interacted = Hash.new { |hash, network| hash[network] = [] }
    @recognized.each do |network, links|
      interactor = IdsPlease.send(interactors).by_symbol(network)
      interacted[network].concat interactor.interact(links)
    end
    self.instance_variable_set(interacted_var(interactors), interacted)

    interacted
  end

  def interacted_var(interactors)
    if interactors == :parsers
      :@parsed
    elsif interactors == :grabbers
      :@grabbed
    else
      throw 'Wrong interactors type'
    end
  end

  def recognize_link(link)
    link = "http://#{link}" unless link =~ /\Ahttps?:\/\//
    parsed_link = URI(URI.encode(link))
    IdsPlease::Parsers.each do |network|
      if parsed_link.host =~ network::MASK
        @recognized[network.to_sym] ||= []
        @recognized[network.to_sym] << parsed_link
        return
      end
    end
    unrecognized << link
  end

end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ids_please-2.2.0 lib/ids_please.rb
ids_please-2.1.2 lib/ids_please.rb
ids_please-2.1.1 lib/ids_please.rb
ids_please-2.1.0 lib/ids_please.rb
ids_please-2.0.0.beta2 lib/ids_please.rb
ids_please-2.0.0.beta1 lib/ids_please.rb
ids_please-2.0.0.beta lib/ids_please.rb