Class: Thingiverse::Pagination
- Inherits:
-
Object
- Object
- Thingiverse::Pagination
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/thingiverse/pagination.rb
Instance Attribute Summary collapse
-
#current_page ⇒ Object
readonly
Returns the value of attribute current_page.
-
#first_url ⇒ Object
readonly
Returns the value of attribute first_url.
-
#last_url ⇒ Object
readonly
Returns the value of attribute last_url.
-
#next_url ⇒ Object
readonly
Returns the value of attribute next_url.
-
#object ⇒ Object
readonly
Returns the value of attribute object.
-
#prev_url ⇒ Object
readonly
Returns the value of attribute prev_url.
-
#response ⇒ Object
readonly
Returns the value of attribute response.
-
#total_pages ⇒ Object
readonly
Returns the value of attribute total_pages.
Instance Method Summary collapse
- #each(&block) ⇒ Object
- #get_url_page(which, *args, &block) ⇒ Object
-
#initialize(response, object) ⇒ Pagination
constructor
A new instance of Pagination.
- #method_missing(meth, *args, &block) ⇒ Object
Constructor Details
#initialize(response, object) ⇒ Pagination
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/thingiverse/pagination.rb', line 11 def initialize(response, object) @response = response @object = object # TODO: provide more debug info and raise a custom exception raise "#{@response.code}: #{JSON.parse(@response.body)['error']}" unless @response.success? @objects = @response.parsed_response.collect do |attrs| @object.new attrs end if @response.headers.include?("link") @response.headers["link"].split(",").each do |link| url, rel = link.split(";").collect{|p| p.gsub(/\<|\>|rel\=|\"/,'').strip} instance_variable_set("@#{rel}_url", url) url_params = CGI.parse(URI.parse(url).query.to_s) case rel when "last" @total_pages = url_params["page"][0].to_i when "next" @current_page = url_params["page"][0].to_i - 1 when "prev" @current_page = url_params["page"][0].to_i + 1 end end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/thingiverse/pagination.rb', line 42 def method_missing(meth, *args, &block) if meth.to_s =~ /^(.*)_page$/ get_url_page($1, *args, &block) else super end end |
Instance Attribute Details
#current_page ⇒ Object (readonly)
Returns the value of attribute current_page.
9 10 11 |
# File 'lib/thingiverse/pagination.rb', line 9 def current_page @current_page end |
#first_url ⇒ Object (readonly)
Returns the value of attribute first_url.
9 10 11 |
# File 'lib/thingiverse/pagination.rb', line 9 def first_url @first_url end |
#last_url ⇒ Object (readonly)
Returns the value of attribute last_url.
9 10 11 |
# File 'lib/thingiverse/pagination.rb', line 9 def last_url @last_url end |
#next_url ⇒ Object (readonly)
Returns the value of attribute next_url.
9 10 11 |
# File 'lib/thingiverse/pagination.rb', line 9 def next_url @next_url end |
#object ⇒ Object (readonly)
Returns the value of attribute object.
8 9 10 |
# File 'lib/thingiverse/pagination.rb', line 8 def object @object end |
#prev_url ⇒ Object (readonly)
Returns the value of attribute prev_url.
9 10 11 |
# File 'lib/thingiverse/pagination.rb', line 9 def prev_url @prev_url end |
#response ⇒ Object (readonly)
Returns the value of attribute response.
8 9 10 |
# File 'lib/thingiverse/pagination.rb', line 8 def response @response end |
#total_pages ⇒ Object (readonly)
Returns the value of attribute total_pages.
9 10 11 |
# File 'lib/thingiverse/pagination.rb', line 9 def total_pages @total_pages end |
Instance Method Details
#each(&block) ⇒ Object
55 56 57 |
# File 'lib/thingiverse/pagination.rb', line 55 def each(&block) @objects.each(&block) end |
#get_url_page(which, *args, &block) ⇒ Object
50 51 52 53 |
# File 'lib/thingiverse/pagination.rb', line 50 def get_url_page(which, *args, &block) url = instance_variable_get("@#{which}_url") Thingiverse::Pagination.new(Thingiverse::Connection.get(url), @object) if url end |