class FilmAffinity::Top

Class Top

Public Class Methods

new(options: {}, limit: 30) click to toggle source
# File lib/filmaffinity/top.rb, line 4
def initialize(options: {}, limit: 30)
  @options = options
  @limit = limit
  @json_parser = JsonMoviesParser.new
end

Public Instance Methods

collect_from(collection = [], from = 0) { |from| ... } click to toggle source
# File lib/filmaffinity/top.rb, line 41
def collect_from(collection = [], from = 0, &block)
  response = yield(from)
  collection += response
  last_position = collection.size
  response.empty? || last_position >= @limit ? collection.flatten[0..@limit - 1] : collect_from(collection, last_position, &block)
end
document_html(from) click to toggle source
# File lib/filmaffinity/top.rb, line 14
def document_html(from)
  @document_html = Nokogiri::HTML(generate_html(from))
end
generate_html(from) click to toggle source
# File lib/filmaffinity/top.rb, line 18
def generate_html(from)
  params = { 'from' => from }
  url = URI.parse(Constants.urls[:top] % query_options)
  data = Net::HTTP.post_form(url, params)
  data.body
end
movies() click to toggle source
# File lib/filmaffinity/top.rb, line 10
def movies
  @movies = movies_with_limit
end
movies_with_limit() click to toggle source
# File lib/filmaffinity/top.rb, line 34
def movies_with_limit
  collect_from do |from|
    doc_obj = document_html from
    parse_movies doc_obj
  end
end
parse_movies(document_html) click to toggle source
# File lib/filmaffinity/top.rb, line 48
def parse_movies(document_html)
  movies = []
  document_html.search('.movie-card.movie-card-0').each_with_index do |movie_card, _index|
    id = movie_card['data-movie-id'].to_i
    title = movie_card.search('.mc-title a').first.content.strip
    movie = FilmAffinity::Movie.new id, title
    movies << movie
  end
  movies
end
query_options() click to toggle source
# File lib/filmaffinity/top.rb, line 25
def query_options
  query_options = ''
  query_options += '?'
  @options.each do |key, value|
    query_options += Constants.query_params[key] % value
  end
  query_options.gsub(/\&$/, '')
end
to_json() click to toggle source
# File lib/filmaffinity/top.rb, line 59
def to_json
  @json_parser.to_json movies
end