tableau_rest_api 0.1.2 → 0.1.3

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: 8890790a4a3afb041589eabfbb6519624af16ae1
4
- data.tar.gz: 81f3bc4ac96e1c26049d2b2ca7bf07cd7dec4056
3
+ metadata.gz: b09a487d6e675e8c269d57e3034fa3d8889fb6c7
4
+ data.tar.gz: e9b1d15ecf421e2af1615370d5b9dcdb2e6e6bff
5
5
  SHA512:
6
- metadata.gz: 312646153259d40c71fa7230de20fe41507a423c596feb9e54ea9c7b2533c4881f59f4c033529c4595d91df69209faeb8619c8bc19da05d9063f5ef48ec1cea4
7
- data.tar.gz: acb36633edb38836e04ace51a13b6f9796124bb0179dc431f8a151aa938707fbc8d3046866536698b69289f6aff2b67cfef1aee131e03cb163f95d9ae7efde2f
6
+ metadata.gz: ff6cbe3ebf6bda4ea65619b0c3946549029fdcafe0528b471a533a47951e8591a1239e8fe8683d2b5188b0805df1695b001ee76537dc46ef6c39a6bc99c49ff6
7
+ data.tar.gz: bf7b55e5c93883561ff88514127cde5b0749fed5d3cf1b393526dba77db88bc2a042ff3fd017cfba099def4d6213dfeaa5b525b39f7b86730647205344f6a8fe
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .reek
11
+ .travis.yml
12
+ /*.gem
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.4.2
@@ -4,6 +4,8 @@ module TableauRestApi
4
4
  # See the Request sub-class for resource requests.
5
5
  class Client
6
6
  attr_reader :config, :token
7
+
8
+ include TableauRestApi::Pagination
7
9
 
8
10
  def initialize
9
11
  @config = Config.new.options
@@ -39,9 +41,10 @@ module TableauRestApi
39
41
  head = boundary ? head.merge({ :content_type => "multipart/mixed; boundary=#{boundary}"}) : head
40
42
  end
41
43
 
42
- def build_url(endpoint)
44
+ def build_url(endpoint, page=nil)
43
45
  endpoint = endpoint.is_a?(Array) ? endpoint.join('/') : endpoint
44
- "#{@config[:host]}/#{@config[:base]}/#{@config[:api_version]}/#{endpoint}"
46
+ url = "#{@config[:host]}/#{@config[:base]}/#{@config[:api_version]}/#{endpoint}"
47
+ url = page ? url + "?pageNumber=#{page}" : url
45
48
  end
46
49
 
47
50
  def get(url)
@@ -60,6 +63,6 @@ module TableauRestApi
60
63
 
61
64
  def delete(url)
62
65
  Response.new(RestClient.delete(url, header)).parse
63
- end
64
- end
66
+ end
67
+ end
65
68
  end
@@ -19,8 +19,9 @@ module TableauRestApi
19
19
  end
20
20
 
21
21
  def sites
22
- url = build_url 'sites'
23
- (get url).sites.site.to_a.map { |site| Site.new(site, self) }
22
+ resp = get build_url('sites')
23
+ sites = extract_sites(resp)
24
+ sites = retrieve_additional_pages(resp, sites, 'sites', :extract_sites)
24
25
  end
25
26
 
26
27
  def create_site(site)
@@ -38,5 +39,11 @@ module TableauRestApi
38
39
  delete url
39
40
  @token = nil
40
41
  end
42
+
43
+ private
44
+
45
+ def extract_sites(response)
46
+ response.sites.site.to_a.map { |site| Site.new(site, self) }
47
+ end
41
48
  end
42
49
  end
@@ -0,0 +1,40 @@
1
+ module TableauRestApi
2
+ module Pagination
3
+ def complete?(response)
4
+ pagination = response.pagination
5
+ pagination ? paginate(pagination) : true
6
+ end
7
+
8
+ def paginate(pagination)
9
+ read_pagination_header(pagination)
10
+ return has_multiple_pages? if first_page
11
+ @total % ((@page) * @per_page) == @total
12
+ end
13
+
14
+ def first_page
15
+ @page == 0
16
+ end
17
+
18
+ def has_multiple_pages?
19
+ @total > @per_page ? false : true
20
+ end
21
+
22
+ def read_pagination_header(pagination)
23
+ @page = pagination.pageNumber.to_i
24
+ @per_page = pagination.pageSize.to_i
25
+ @total = pagination.totalAvailable.to_i
26
+ end
27
+
28
+ def next_page
29
+ @page + 1
30
+ end
31
+
32
+ def retrieve_additional_pages(response, collection, entity, extract)
33
+ until complete?(response) do
34
+ response = (get build_url(entity, next_page))
35
+ collection = collection + self.send(extract, response)
36
+ end
37
+ collection
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module TableauRestApi
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -5,6 +5,7 @@ require 'timerizer'
5
5
  require 'securerandom'
6
6
 
7
7
  require 'tableau_rest_api/version'
8
+ require 'tableau_rest_api/util/pagination'
8
9
  require 'tableau_rest_api/client'
9
10
  require 'tableau_rest_api/area/user_group'
10
11
  require 'tableau_rest_api/area/workbook_datasource'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tableau_rest_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Lancaster
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-17 00:00:00.000000000 Z
11
+ date: 2018-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,6 +129,8 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".gitignore"
133
+ - ".ruby-version"
132
134
  - Gemfile
133
135
  - Guardfile
134
136
  - LICENSE.txt
@@ -190,6 +192,7 @@ files:
190
192
  - lib/tableau_rest_api/resources/user.rb
191
193
  - lib/tableau_rest_api/resources/workbook.rb
192
194
  - lib/tableau_rest_api/util/config.rb
195
+ - lib/tableau_rest_api/util/pagination.rb
193
196
  - lib/tableau_rest_api/util/response.rb
194
197
  - lib/tableau_rest_api/util/token.rb
195
198
  - lib/tableau_rest_api/util/upload.rb
@@ -215,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
218
  version: '0'
216
219
  requirements: []
217
220
  rubyforge_project:
218
- rubygems_version: 2.5.2.1
221
+ rubygems_version: 2.6.13
219
222
  signing_key:
220
223
  specification_version: 4
221
224
  summary: Ruby library wrapping the Tableau REST API.