andrielfn/tmdb-api

View on GitHub
lib/tmdb-api/changes.rb

Summary

Maintainability
A
0 mins
Test Coverage
module TMDb
  class Changes < Base
    ATTRIBUTES = :changes, :page, :total_pages, :total_results

    attr_reader *ATTRIBUTES

    # Public: Get a list of movie ids that have been edited. By default we
    # show the last 24 hours and only 100 items per page. The maximum number
    # of days that can be returned in a single request is 14.
    #
    # options - The hash options used to filter the search (default: {}).
    #           :page - Page. Minimum 1, maximum 1000.
    #           :start_date - Start date (YYYY-MM-DD).
    #           :end_date - End date (YYYY-MM-DD).
    #
    # Examples
    #
    #   TMDb::Changes.movies
    #   TMDb::Changes.movies(page: 1, start_date: '2013-03-22')
    def self.movies(options = {})
      res = get('/movie/changes', query: options)
      res.success? ? Changes.new(res) : bad_response(res)
    end

    # Public: Get a list of people ids that have been edited. The rules of movie
    # changes are also valid here.
    #
    # options - The hash options used to filter the search (default: {}).
    #           :page - Page. Minimum 1, maximum 1000.
    #           :start_date - Start date (YYYY-MM-DD).
    #           :end_date - End date (YYYY-MM-DD).
    #
    # Examples
    #
    #   TMDb::Changes.people
    #   TMDb::Changes.people(page: 3, start_date: '2013-03-23')
    def self.people(options = {})
      res = get('/person/changes', query: options)
      res.success? ? Changes.new(res) : bad_response(res)
    end

    private

    # Internal: sets the fetched result to the instance variables.
    #
    # attributes - Returned attributes from the API.
    def set_attributes(attributes)
      @changes = results_ids(attributes['results'])
      @page = attributes['page']
      @total_pages = attributes['total_pages']
      @total_results = attributes['total_results']
    end

    # Internal: Extract only the IDs from the result.
    #
    # changes - The `results` key returned from the API.
    def results_ids(changes)
      changes.map do |item|
        item['id']
      end
    end
  end
end