pandarus 0.6.11 → 0.6.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2804b18d689e7ed8a5751319ca5b5ce58d08156d
4
- data.tar.gz: e082d7f449d94767e7a32aeba1a639b6bc0fdb6b
3
+ metadata.gz: dc52b8c16be9219b4d254f887dce321efb1bb631
4
+ data.tar.gz: 3b4c28d06d6cb043f8fc0a8f6a930a8c91488941
5
5
  SHA512:
6
- metadata.gz: 79112e00981e28fb37aa1ee03f31b308afc9be0bcfd0c8f73b8fc64e6d7826242be0456bdccb9fc4faa9189e5b37ed7c225844c45f6628c8386ee1b0a85d3277
7
- data.tar.gz: b5095438c2d48fc7504b5317f778138b66ea44104cc68ccfda2df3314b14d28a161ae7d76bf92013a1c10dda0d55ead527c6acd19676fb1ce42542cb4f97d892
6
+ metadata.gz: bafb0b9104a9bae6ab7250889085fa3b44a79b35cfe706996433b76b797791ce440bffbcf51e25e4d19363d9b51876fafd5e163a75a8fa891e7eb9583756e982
7
+ data.tar.gz: 9cecc7f837dbafdc4ebded24998749726225e14f796f4910a4ebf99042da3e7a29ec8430676dce6ab8fd08af7fdd02009266e14a34ead6db4c4e4ccddbee78eb
@@ -106,7 +106,7 @@ module Pandarus
106
106
  end
107
107
 
108
108
  def select_query_params(params, param_keys)
109
- param_keys << :per_page
109
+ param_keys.concat([:per_page, :cache_pages])
110
110
  select_params(params, param_keys)
111
111
  end
112
112
 
@@ -6,7 +6,8 @@ module Pandarus
6
6
  @http_client = http_client
7
7
  @target_class = target_class
8
8
  @path = path
9
- @query_params = query_params
9
+ @cache_pages = query_params[:cache_pages].nil? ? true : query_params[:cache_pages]
10
+ @query_params = query_params.except(:cache_pages)
10
11
 
11
12
  @pagination_links = []
12
13
  @next_page_cache = {}
@@ -39,17 +40,24 @@ module Pandarus
39
40
 
40
41
  def first_page
41
42
  @pagination_links = []
42
- @first_response ||= @http_client.get do |request|
43
+ response = @first_response || @http_client.get do |request|
43
44
  request.path = join_paths(base_path, @path)
44
45
  request.params = request.params.merge(@query_params) unless @query_params.empty?
45
46
  end
46
- handle_response(@first_response)
47
+ @first_response ||= response if @cache_pages
48
+ handle_response(response)
47
49
  end
48
50
 
49
51
  def next_page
50
52
  key = @pagination_links.last.next
51
- @next_page_cache[key] ||= @http_client.get(key)
52
- handle_response @next_page_cache[key]
53
+ # cache_pages defaults to true, but for massive remote collections
54
+ # keeping everything cached will eventually eat all the available memory
55
+ if @cache_pages
56
+ @next_page_cache[key] ||= @http_client.get(key)
57
+ handle_response @next_page_cache[key]
58
+ else
59
+ handle_response @http_client.get(key)
60
+ end
53
61
  end
54
62
 
55
63
  private
@@ -62,11 +70,19 @@ module Pandarus
62
70
  def handle_response(response)
63
71
  response_links = response.env[:pagination_links]
64
72
  if response_links && !@pagination_links.any? {|existing_links| existing_links == response_links }
65
- @pagination_links << response.env[:pagination_links]
73
+ update_pagination_links(response.env[:pagination_links])
66
74
  end
67
75
  response.body.map{|member| @target_class.new(member) }
68
76
  end
69
77
 
78
+ def update_pagination_links(response_pages)
79
+ if @cache_pages
80
+ @pagination_links << response_pages
81
+ else
82
+ @pagination_links = [response_pages]
83
+ end
84
+ end
85
+
70
86
  def base_path
71
87
  @http_client.url_prefix.path
72
88
  end
@@ -1,3 +1,3 @@
1
1
  module Pandarus
2
- VERSION = '0.6.11' unless defined?(Pandarus::VERSION)
2
+ VERSION = '0.6.12' unless defined?(Pandarus::VERSION)
3
3
  end
@@ -40,6 +40,17 @@ module Pandarus
40
40
  it 'must fetch the first page' do
41
41
  expect(page.all?{|member| User === member}).to be_truthy
42
42
  end
43
+
44
+ it 'caches the first page by default' do
45
+ page
46
+ expect(collection.instance_variable_get(:@first_response)).to be_present
47
+ end
48
+
49
+ it 'does not cache the first page when page caching disabled' do
50
+ collection.instance_variable_set(:@cache_pages, false)
51
+ page
52
+ expect(collection.instance_variable_get(:@first_response)).to be_nil
53
+ end
43
54
  end
44
55
 
45
56
  describe '#to_a' do
@@ -51,6 +62,19 @@ module Pandarus
51
62
  end
52
63
  end
53
64
 
65
+ it 'defaults page caching to true' do
66
+ VCR.use_cassette('remote_collection_single_page') do
67
+ expect(collection.instance_variable_get(:@cache_pages)).to be_truthy
68
+ end
69
+ end
70
+
71
+ it 'set page caching to false when the proper arg is passed' do
72
+ VCR.use_cassette('remote_collection_single_page') do
73
+ collection = RemoteCollection.new(client, Section, '', {cache_pages: false})
74
+ expect(collection.instance_variable_get(:@cache_pages)).to be_falsey
75
+ end
76
+ end
77
+
54
78
  it 'must happily fetch a collection with a single page' do
55
79
  VCR.use_cassette('remote_collection_single_page') do
56
80
  collection = RemoteCollection.new(client, Section, '/v1/courses/14/sections', {})
@@ -87,6 +111,25 @@ module Pandarus
87
111
 
88
112
  expect(collection.to_a.size).to eq 21
89
113
  end
114
+
115
+ it 'properly caches page links when enabled' do
116
+ VCR.use_cassette('remote_collection_all_pages') do
117
+ array = collection.to_a
118
+ expect(collection.instance_variable_get(:@pagination_links).length).to eq 3
119
+ expect(collection.instance_variable_get(:@next_page_cache).keys.length).to eq 2
120
+ expect(array.size).to eq 21
121
+ end
122
+ end
123
+
124
+ it 'does not cache page links when disabled' do
125
+ VCR.use_cassette('remote_collection_all_pages') do
126
+ collection.instance_variable_set(:@cache_pages, false)
127
+ array = collection.to_a
128
+ expect(collection.instance_variable_get(:@pagination_links).length).to eq 1
129
+ expect(collection.instance_variable_get(:@next_page_cache)).to be_empty
130
+ expect(array.size).to eq 21
131
+ end
132
+ end
90
133
  end
91
134
  end
92
135
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pandarus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.11
4
+ version: 0.6.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Duane Johnson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-28 00:00:00.000000000 Z
11
+ date: 2017-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake