Sha256: 5ee6f0456b6c76e99d154d66206d85c9869ffc63a6ea975c99423cab3b0c0e25

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

require 'xing/serializers/base'

module Xing::Serializers
  class PagedList < Base
    def initialize(list, page_num, total_pages, options = {})
      @page_num = page_num.to_i
      @total_pages = total_pages

      super(list, options)
    end

    attr_reader :page_num, :total_pages

    def item_serializer_class
      raise NotImplemented,
        "subclasses of Xing::Serializers::PagesData must override item_serializer_class to refer to the per-item serializer"
    end

    def item_serializer_options
      {}
    end

    def page_link(options)
      raise NotImplemented,
        "subclasses of Xing::Serializers::PagesData must override page_link to return the URL of a page based on a :page => Integer() hash"
    end

    def self_link
      raise NotImplemented,
        "subclasses of Xing::Serializers::PagesData must override self_link to return their own path"
    end

    def as_json_without_wrap(options={})
      object.map do |item|
        item_serializer_class.new(item, item_serializer_options).as_json
      end
    end

    def next_link
      page_link({page: page_num + 1}) unless page_num == total_pages
    end

    def previous_link
      page_link({page: page_num - 1}) unless page_num == 1
    end

    def links
      {
        :self => self_link,
        :next => next_link,
        :previous => previous_link
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xing-backend-0.0.12 lib/xing/serializers/paged_list.rb