conflikt/imdb_celebrity

View on GitHub
lib/imdb_celebrity/search.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'imdb_celebrity/parser/hpricot_parser/search_parser'
require 'imdb_celebrity/parser/nokogiri_parser/search_parser'

module ImdbCelebrity

  class Search
    attr_reader :query, :parser
    
    def initialize(query, parser ="HpricotParser")
      @query = search_uri query
      @parser_text = parser
      @parser = initialize_parser parser
    end
    
    def celebrities
      @celebrities = (@parser.exact_match? ? @parser.parse_celebrity : parse_celebrities)
    end
    
    private
    
    def search_uri query
      "http://imdb.com/find?s=nm&q=#{query}"
    end
    
    def parse_celebrity
      id = @document.at("head/link[@rel='canonical']")[:href][/\d+/]
      name = @document.at("h1").inner_html.split('<span').first.inner_text.imdb_unescape_html
      [ImdbCelebrity::Celebrity.new(id, name, @parser_text)]
    end
    
    def parse_celebrities
      celebrities = @parser.parse_celebrities @parser_text
      celebrities.uniq.map do |values|
        ImdbCelebrity::Celebrity.new(*values)
      end      
    end
    
    def initialize_parser parser
      return ImdbCelebrity::Parser::HpricotParser::SearchParser.new(@query) if parser == "HpricotParser"
      return ImdbCelebrity::Parser::NokogiriParser::SearchParser.new(@query) if parser == "NokogiriParser"
    end
    
  end
  
end