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