tableau_rest_api 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +8 -0
  3. data/Guardfile +21 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +103 -0
  6. data/Rakefile +10 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/fixtures/vcr_cassettes/add_user.yml +223 -0
  10. data/fixtures/vcr_cassettes/add_user_to_group.yml +451 -0
  11. data/fixtures/vcr_cassettes/add_user_to_group_through_site.yml +451 -0
  12. data/fixtures/vcr_cassettes/create_group.yml +224 -0
  13. data/fixtures/vcr_cassettes/create_group_through_site.yml +224 -0
  14. data/fixtures/vcr_cassettes/datasources.yml +234 -0
  15. data/fixtures/vcr_cassettes/datasources_through_site.yml +234 -0
  16. data/fixtures/vcr_cassettes/delete_datasource.yml +334 -0
  17. data/fixtures/vcr_cassettes/delete_group.yml +328 -0
  18. data/fixtures/vcr_cassettes/delete_group_through_site.yml +329 -0
  19. data/fixtures/vcr_cassettes/delete_schedule.yml +276 -0
  20. data/fixtures/vcr_cassettes/delete_site.yml +214 -0
  21. data/fixtures/vcr_cassettes/delete_subscription.yml +329 -0
  22. data/fixtures/vcr_cassettes/delete_workbook.yml +350 -0
  23. data/fixtures/vcr_cassettes/get_datasource.yml +673 -0
  24. data/fixtures/vcr_cassettes/get_workbook.yml +15044 -0
  25. data/fixtures/vcr_cassettes/groups.yml +229 -0
  26. data/fixtures/vcr_cassettes/groups_through_site.yml +230 -0
  27. data/fixtures/vcr_cassettes/projects_through_site.yml +230 -0
  28. data/fixtures/vcr_cassettes/query_workbooks.yml +250 -0
  29. data/fixtures/vcr_cassettes/remove_user_from_group_through_site.yml +440 -0
  30. data/fixtures/vcr_cassettes/remove_user_from_site_through_site.yml +329 -0
  31. data/fixtures/vcr_cassettes/schedules.yml +115 -0
  32. data/fixtures/vcr_cassettes/server_info.yml +53 -0
  33. data/fixtures/vcr_cassettes/signin.yml +57 -0
  34. data/fixtures/vcr_cassettes/signout.yml +102 -0
  35. data/fixtures/vcr_cassettes/sites.yml +118 -0
  36. data/fixtures/vcr_cassettes/subscriptions.yml +226 -0
  37. data/fixtures/vcr_cassettes/switch_site.yml +113 -0
  38. data/fixtures/vcr_cassettes/update_group_through_site.yml +343 -0
  39. data/fixtures/vcr_cassettes/update_user_through_site.yml +333 -0
  40. data/fixtures/vcr_cassettes/users_in_group.yml +339 -0
  41. data/fixtures/vcr_cassettes/users_on_site.yml +230 -0
  42. data/fixtures/vcr_cassettes/users_through_site.yml +230 -0
  43. data/fixtures/vcr_cassettes/workbooks_through_site.yml +250 -0
  44. data/lib/tableau_rest_api.rb +32 -0
  45. data/lib/tableau_rest_api/api_error.rb +7 -0
  46. data/lib/tableau_rest_api/area/schedule_subscription.rb +41 -0
  47. data/lib/tableau_rest_api/area/user_group.rb +72 -0
  48. data/lib/tableau_rest_api/area/workbook_datasource.rb +87 -0
  49. data/lib/tableau_rest_api/client.rb +65 -0
  50. data/lib/tableau_rest_api/helpers/helpers.rb +9 -0
  51. data/lib/tableau_rest_api/resource.rb +42 -0
  52. data/lib/tableau_rest_api/resources/base.rb +24 -0
  53. data/lib/tableau_rest_api/resources/datasource.rb +12 -0
  54. data/lib/tableau_rest_api/resources/group.rb +10 -0
  55. data/lib/tableau_rest_api/resources/project.rb +12 -0
  56. data/lib/tableau_rest_api/resources/schedule.rb +12 -0
  57. data/lib/tableau_rest_api/resources/server.rb +12 -0
  58. data/lib/tableau_rest_api/resources/site.rb +68 -0
  59. data/lib/tableau_rest_api/resources/subscription.rb +10 -0
  60. data/lib/tableau_rest_api/resources/user.rb +12 -0
  61. data/lib/tableau_rest_api/resources/workbook.rb +12 -0
  62. data/lib/tableau_rest_api/util/config.rb +22 -0
  63. data/lib/tableau_rest_api/util/response.rb +11 -0
  64. data/lib/tableau_rest_api/util/token.rb +16 -0
  65. data/lib/tableau_rest_api/util/upload.rb +29 -0
  66. data/lib/tableau_rest_api/version.rb +3 -0
  67. data/tableau_rest_api.gemspec +33 -0
  68. metadata +222 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8890790a4a3afb041589eabfbb6519624af16ae1
4
+ data.tar.gz: 81f3bc4ac96e1c26049d2b2ca7bf07cd7dec4056
5
+ SHA512:
6
+ metadata.gz: 312646153259d40c71fa7230de20fe41507a423c596feb9e54ea9c7b2533c4881f59f4c033529c4595d91df69209faeb8619c8bc19da05d9063f5ef48ec1cea4
7
+ data.tar.gz: acb36633edb38836e04ace51a13b6f9796124bb0179dc431f8a151aa938707fbc8d3046866536698b69289f6aff2b67cfef1aee131e03cb163f95d9ae7efde2f
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem "guard"
5
+ gem "guard-minitest"
6
+ end
7
+
8
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,21 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ guard :minitest do
19
+ watch(%r{^test/.+_test\.rb$})
20
+ end
21
+
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 lancaster.dave@gmail.com
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # TableauRestApi
2
+
3
+ A wrapper around a subset of version 2.6 of the Tableau REST API. The latest documentation for the API can be found at:
4
+
5
+ https://onlinehelp.tableau.com/current/api/rest_api/en-us/help.htm#REST
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'tableau_rest_api'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install tableau_rest_api
22
+
23
+ ## Configuration
24
+
25
+ You will need to export the following environmental variables if the default options are not suitable:
26
+ ```
27
+ export TABLEAU_HOST="https://tableau.lvh.me"
28
+ export TABLEAU_USERNAME="username"
29
+ export TABLEAU_PASSWORD="password"
30
+ export TABLEAU_AUTH_TOKEN_DURATION="4"
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ The easiest way to try out the client is from the root of this repo via the included console:
36
+ ```
37
+ ./bin/console
38
+ ```
39
+ You can then create an instance of the Resource Class and interact with it:
40
+ ```ruby
41
+ r = TableauRestApi::Resource.new
42
+ site = r.sites.first.id
43
+ users = r.users_on_site(site)
44
+ ```
45
+ There are also methods for retrieving resources through other resources:
46
+ ```ruby
47
+ site = r.sites.first
48
+ group = site.groups.last.name
49
+ user = site.users.find { |user| user.name == 'John Smith' }
50
+ new_user = site.add_user_to_site { :name => 'New User', :siteRole => 'Viewer' }
51
+ ```
52
+ Workbooks and Datasources can be uploaded like so:
53
+ ```ruby
54
+ workbook = File.read('sample.twbx')
55
+ site = r.sites.first
56
+ project = site.projects.first
57
+ metadata = { :name => 'Sample', :project => project.id }
58
+ payload = { :filename => 'sample.twbx', :data => workbook }
59
+ r.publish_workbook(site.id, metadata, payload )
60
+ ```
61
+ You can reconfigure an instance of the client at runtime:
62
+ ```ruby
63
+ r.configure({ :host => 'https://another.tableau.server' })
64
+ ```
65
+ You can switch sites, which will request a new token for the target site and invalidate your current token. To delete a site you will need to switch to it first to gain the required token. After the site is deleted your token will be invalidated in Tableau and cleared in the client.
66
+ ```ruby
67
+ r.switch_site({ :site => { :contentUrl => 'Another Site' } })
68
+ site = r.sites.find { |site| site.content_url == 'Another Site' }
69
+ r.delete_site(site.id)
70
+ ```
71
+ ## Coverage
72
+
73
+ General | UserGroup | WorkbookDatasource | ScheduleSubscription
74
+ --------|-----------|--------------------|---------------------
75
+ server_info | users_on_site | query_workbooks | subscriptions
76
+ sites | groups | datasources | query_subscription
77
+ create_site | users_in_group | get_workbook | create_subscription
78
+ switch_site | add_user_to_site | get_datasource | delete_subscription
79
+ delete_site | add_user_to_group | update_workbook | delete_schedule
80
+ || create_group | update_datasource | schedules
81
+ || delete_group | update_project |
82
+ || remove_user_from_group | query_projects |
83
+ || remove_user_from_site | delete_workbook |
84
+ || update_user | delete_datasource |
85
+ || update_group | delete_project |
86
+ ||| publish_workbook |
87
+ ||| publish_datasource |
88
+
89
+ ## Development
90
+
91
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
92
+
93
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
94
+
95
+ ## Contributing
96
+
97
+ Bug reports and pull requests are welcome on GitHub at https://github.com/davelancaster/tableau_rest_api.
98
+
99
+
100
+ ## License
101
+
102
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
103
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "tableau_rest_api"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,223 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://tableau.lvh.me/api/2.6/auth/signin
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"credentials":{"name":"<TABLEAU_USERNAME>","password":"<TABLEAU_PASSWORD>","site":{"contentUrl":""}}}'
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
16
+ Content-Type:
17
+ - application/json
18
+ Content-Length:
19
+ - '94'
20
+ Host:
21
+ - tableau.lvh.me
22
+ response:
23
+ status:
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ Date:
28
+ - Mon, 26 Jun 2017 10:50:18 GMT
29
+ Server:
30
+ - Tableau
31
+ Content-Type:
32
+ - application/json;charset=utf-8
33
+ Vary:
34
+ - Accept-Encoding
35
+ Content-Encoding:
36
+ - gzip
37
+ P3p:
38
+ - CP="NON"
39
+ X-Ua-Compatible:
40
+ - IE=Edge
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Content-Length:
46
+ - '191'
47
+ body:
48
+ encoding: ASCII-8BIT
49
+ string: !binary |-
50
+ H4sIAAAAAAAAAz2MSw6CMBQA7/LWNmn7KlDX/ohRVGLUZX8kKKJCFaJyd3Hj
51
+ ajYz8wZTOetKn6uihtEb6ty7H3MLI2CK0WyoJaFcaiLQCaICTkkYomWBpIiR
52
+ gQGYa+n7xa4q+ga6ATxqV/0nXDMmJZfEYjYkIqMRUdIwwik1TmAWhpH+Rf56
53
+ dmXvTy4nbPenNkW1Ytgst3FyWWw+Lk6T+5xbc7g1EsU00K97Kho1W9dHPxZP
54
+ 6LovBcHnv80AAAA=
55
+ http_version:
56
+ recorded_at: Mon, 26 Jun 2017 10:50:22 GMT
57
+ - request:
58
+ method: get
59
+ uri: https://tableau.lvh.me/api/2.6/sites
60
+ body:
61
+ encoding: US-ASCII
62
+ string: ''
63
+ headers:
64
+ Accept:
65
+ - application/json
66
+ Accept-Encoding:
67
+ - gzip, deflate
68
+ User-Agent:
69
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
70
+ Content-Type:
71
+ - application/json
72
+ X-Tableau-Auth:
73
+ - Emj3xWjxS3aN13wMRIOmKQ|eISOqH2dcXpw934F6bzqS4waGPsYtD4v
74
+ Host:
75
+ - tableau.lvh.me
76
+ response:
77
+ status:
78
+ code: 200
79
+ message: OK
80
+ headers:
81
+ Date:
82
+ - Mon, 26 Jun 2017 10:50:20 GMT
83
+ Server:
84
+ - Tableau
85
+ Content-Type:
86
+ - application/json;charset=utf-8
87
+ Vary:
88
+ - Accept-Encoding
89
+ Content-Encoding:
90
+ - gzip
91
+ P3p:
92
+ - CP="NON"
93
+ X-Ua-Compatible:
94
+ - IE=Edge
95
+ X-Content-Type-Options:
96
+ - nosniff
97
+ X-Xss-Protection:
98
+ - 1; mode=block
99
+ Content-Length:
100
+ - '521'
101
+ body:
102
+ encoding: ASCII-8BIT
103
+ string: !binary |-
104
+ H4sIAAAAAAAAA92VS2sbMRDHv0rYcwb0Wj1yM22hhz4OaeihlKDHyBHY67CS
105
+ A23wd++oCZjY8SmH4t52/n/NSPoxo30c7v2yTL6VzTRcPfYIv2zXAefhauDD
106
+ 5V/huvzGHjJGQts0v1o8+LLyYdVlO+wuh1oa1l6gfwxXPx6HknqK5yyPwQET
107
+ LoCSqMBrwcAYmbh2TEobqebk173Se8x+u2okxM3UcGo384pkin1al+nzJvVV
108
+ 7568xZRuKs6V3Np833RYxFYekIQZH0qlG30stW3mXx+mflQ6T5u3uHc/lXVp
109
+ lCbGXmMbapxLwK/tjqoepCy3WNsiRqx7J/tVJSv6eIff/bze3r9I2l0+M7DC
110
+ SAzKgDZRgRrFCJ55A6OMiRtnMaPZM/hGG10TQ3FIwXv/T0E8X/ctJLSVNqGK
111
+ gFlJUMEKcIxZUFp6HS1qpdUxCXlIgjqt1WdEZ82D5ei1zQo4z5k6w3CaDgqF
112
+ cNl46WhoXuGhT/HQ584jcO6iiCPEmCIoZyUElT1oDCJIF6RIYc9jcdGJlGl5
113
+ 0akcjctte3Jv65N71mTYGJNmHIFj0tQp0kCI0oIMMmiT2IjcveyUV6F0JP8J
114
+ D0QntQMv6GGlHtH0khgEpmLOIotAP5ljHqdwnDuNFBTnnJ7UrCwDpZwGO6oR
115
+ Riu7TkOF+YjGCRjnyuLnbvcHHjntMMwIAAA=
116
+ http_version:
117
+ recorded_at: Mon, 26 Jun 2017 10:50:22 GMT
118
+ - request:
119
+ method: post
120
+ uri: https://tableau.lvh.me/api/2.6/auth/signin
121
+ body:
122
+ encoding: UTF-8
123
+ string: '{"credentials":{"name":"<TABLEAU_USERNAME>","password":"<TABLEAU_PASSWORD>","site":{"contentUrl":""}}}'
124
+ headers:
125
+ Accept:
126
+ - application/json
127
+ Accept-Encoding:
128
+ - gzip, deflate
129
+ User-Agent:
130
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
131
+ Content-Type:
132
+ - application/json
133
+ X-Tableau-Auth:
134
+ - Emj3xWjxS3aN13wMRIOmKQ|eISOqH2dcXpw934F6bzqS4waGPsYtD4v
135
+ Content-Length:
136
+ - '94'
137
+ Host:
138
+ - tableau.lvh.me
139
+ response:
140
+ status:
141
+ code: 200
142
+ message: OK
143
+ headers:
144
+ Date:
145
+ - Mon, 26 Jun 2017 10:50:20 GMT
146
+ Server:
147
+ - Tableau
148
+ Content-Type:
149
+ - application/json;charset=utf-8
150
+ Vary:
151
+ - Accept-Encoding
152
+ Content-Encoding:
153
+ - gzip
154
+ P3p:
155
+ - CP="NON"
156
+ X-Ua-Compatible:
157
+ - IE=Edge
158
+ X-Content-Type-Options:
159
+ - nosniff
160
+ X-Xss-Protection:
161
+ - 1; mode=block
162
+ Content-Length:
163
+ - '190'
164
+ body:
165
+ encoding: ASCII-8BIT
166
+ string: !binary |-
167
+ H4sIAAAAAAAAAz2MywrCMBAA/2XPBjZJ02a9iXpREXyBeMsTi6Vqm1JB++/W
168
+ i6e5zMwbXBN8qFNpqhamb2jLFH4sPUyBG45RWWIoyLJMhoyZXCArCul5Tiil
169
+ djABd6/TuDg11djAMIGuDc1/IiznRIKYl1GxLKJmhhxnAtGFTMai0PYXpfst
170
+ 1KOfqI8qLeSx7R54Xe21fq27/nM873Y6idLPnvlGqv61rIzdHuaXraLQYAXD
171
+ 8AWPug+7zQAAAA==
172
+ http_version:
173
+ recorded_at: Mon, 26 Jun 2017 10:50:22 GMT
174
+ - request:
175
+ method: post
176
+ uri: https://tableau.lvh.me/api/2.6/sites/1a10f5b9-029b-43e4-a620-773d1690338c/users
177
+ body:
178
+ encoding: UTF-8
179
+ string: '{"user":{"name":"TestUser","siteRole":"Viewer"}}'
180
+ headers:
181
+ Accept:
182
+ - application/json
183
+ Accept-Encoding:
184
+ - gzip, deflate
185
+ User-Agent:
186
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
187
+ Content-Type:
188
+ - application/json
189
+ X-Tableau-Auth:
190
+ - t9wf5tD3Tsup0hJR88xKuw|TXQQ8t2idAq6L35wxElabNSCZN59er0l
191
+ Content-Length:
192
+ - '48'
193
+ Host:
194
+ - tableau.lvh.me
195
+ response:
196
+ status:
197
+ code: 201
198
+ message: Created
199
+ headers:
200
+ Date:
201
+ - Mon, 26 Jun 2017 10:50:20 GMT
202
+ Server:
203
+ - Tableau
204
+ Location:
205
+ - "/api/2.6/sites/1a10f5b9-029b-43e4-a620-773d1690338c/users/7c163939-32d1-4160-9ca8-bfaf568541ce"
206
+ Content-Type:
207
+ - application/json;charset=utf-8
208
+ Content-Length:
209
+ - '146'
210
+ P3p:
211
+ - CP="NON"
212
+ X-Ua-Compatible:
213
+ - IE=Edge
214
+ X-Content-Type-Options:
215
+ - nosniff
216
+ X-Xss-Protection:
217
+ - 1; mode=block
218
+ body:
219
+ encoding: UTF-8
220
+ string: '{"user":{"id":"7c163939-32d1-4160-9ca8-bfaf568541ce","name":"TestUser","siteRole":"Viewer","authSetting":"ServerDefault","externalAuthUserId":""}}'
221
+ http_version:
222
+ recorded_at: Mon, 26 Jun 2017 10:50:23 GMT
223
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,451 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://tableau.lvh.me/api/2.6/auth/signin
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"credentials":{"name":"<TABLEAU_USERNAME>","password":"<TABLEAU_PASSWORD>","site":{"contentUrl":""}}}'
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
16
+ Content-Type:
17
+ - application/json
18
+ Content-Length:
19
+ - '94'
20
+ Host:
21
+ - tableau.lvh.me
22
+ response:
23
+ status:
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ Date:
28
+ - Mon, 26 Jun 2017 10:49:53 GMT
29
+ Server:
30
+ - Tableau
31
+ Content-Type:
32
+ - application/json;charset=utf-8
33
+ Vary:
34
+ - Accept-Encoding
35
+ Content-Encoding:
36
+ - gzip
37
+ P3p:
38
+ - CP="NON"
39
+ X-Ua-Compatible:
40
+ - IE=Edge
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Content-Length:
46
+ - '194'
47
+ body:
48
+ encoding: ASCII-8BIT
49
+ string: !binary |-
50
+ H4sIAAAAAAAAAz2MOw+CMBgA/8s326QPoK2bL1Bw8RXFDUobiRWSghKD/Hdx
51
+ cbrl7npQThe6asvMNjDtoSlb/WNZwBRIRrDxc4kwlTnymPZQFlCMOGcFCSRm
52
+ TCiYgKqrdlycnB0bGCbwbLT7T2hOiJRUooIZH3kGC5RJRRDFWGmPGc5F/ova
53
+ +q6r0X/ZNAnN5n2cPdhtdcXPgzmL7rNmViSLyzYOorTbRvzh5vG+nvF0x6Pj
54
+ 8hDCMHwBJXal/s0AAAA=
55
+ http_version:
56
+ recorded_at: Mon, 26 Jun 2017 10:49:56 GMT
57
+ - request:
58
+ method: get
59
+ uri: https://tableau.lvh.me/api/2.6/sites
60
+ body:
61
+ encoding: US-ASCII
62
+ string: ''
63
+ headers:
64
+ Accept:
65
+ - application/json
66
+ Accept-Encoding:
67
+ - gzip, deflate
68
+ User-Agent:
69
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
70
+ Content-Type:
71
+ - application/json
72
+ X-Tableau-Auth:
73
+ - vlYKFfIyTAm3hEZ0uSfW8w|H3l8KCXLJ6GYwLG7mrBJRoA7YQ7GTDSF
74
+ Host:
75
+ - tableau.lvh.me
76
+ response:
77
+ status:
78
+ code: 200
79
+ message: OK
80
+ headers:
81
+ Date:
82
+ - Mon, 26 Jun 2017 10:49:53 GMT
83
+ Server:
84
+ - Tableau
85
+ Content-Type:
86
+ - application/json;charset=utf-8
87
+ Vary:
88
+ - Accept-Encoding
89
+ Content-Encoding:
90
+ - gzip
91
+ P3p:
92
+ - CP="NON"
93
+ X-Ua-Compatible:
94
+ - IE=Edge
95
+ X-Content-Type-Options:
96
+ - nosniff
97
+ X-Xss-Protection:
98
+ - 1; mode=block
99
+ Content-Length:
100
+ - '521'
101
+ body:
102
+ encoding: ASCII-8BIT
103
+ string: !binary |-
104
+ H4sIAAAAAAAAA92VS2sbMRDHv0rYcwb0Wj1yM22hhz4OaeihlKDHyBHY67CS
105
+ A23wd++oCZjY8SmH4t52/n/NSPoxo30c7v2yTL6VzTRcPfYIv2zXAefhauDD
106
+ 5V/huvzGHjJGQts0v1o8+LLyYdVlO+wuh1oa1l6gfwxXPx6HknqK5yyPwQET
107
+ LoCSqMBrwcAYmbh2TEobqebk173Se8x+u2okxM3UcGo384pkin1al+nzJvVV
108
+ 7568xZRuKs6V3Np833RYxFYekIQZH0qlG30stW3mXx+mflQ6T5u3uHc/lXVp
109
+ lCbGXmMbapxLwK/tjqoepCy3WNsiRqx7J/tVJSv6eIff/bze3r9I2l0+M7DC
110
+ SAzKgDZRgRrFCJ55A6OMiRtnMaPZM/hGG10TQ3FIwXv/T0E8X/ctJLSVNqGK
111
+ gFlJUMEKcIxZUFp6HS1qpdUxCXlIgjqt1WdEZ82D5ei1zQo4z5k6w3CaDgqF
112
+ cNl46WhoXuGhT/HQ584jcO6iiCPEmCIoZyUElT1oDCJIF6RIYc9jcdGJlGl5
113
+ 0akcjctte3Jv65N71mTYGJNmHIFj0tQp0kCI0oIMMmiT2IjcveyUV6F0JP8J
114
+ D0QntQMv6GGlHtH0khgEpmLOIotAP5ljHqdwnDuNFBTnnJ7UrCwDpZwGO6oR
115
+ Riu7TkOF+YjGCRjnyuLnbvcHHjntMMwIAAA=
116
+ http_version:
117
+ recorded_at: Mon, 26 Jun 2017 10:49:56 GMT
118
+ - request:
119
+ method: post
120
+ uri: https://tableau.lvh.me/api/2.6/auth/signin
121
+ body:
122
+ encoding: UTF-8
123
+ string: '{"credentials":{"name":"<TABLEAU_USERNAME>","password":"<TABLEAU_PASSWORD>","site":{"contentUrl":""}}}'
124
+ headers:
125
+ Accept:
126
+ - application/json
127
+ Accept-Encoding:
128
+ - gzip, deflate
129
+ User-Agent:
130
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
131
+ Content-Type:
132
+ - application/json
133
+ X-Tableau-Auth:
134
+ - vlYKFfIyTAm3hEZ0uSfW8w|H3l8KCXLJ6GYwLG7mrBJRoA7YQ7GTDSF
135
+ Content-Length:
136
+ - '94'
137
+ Host:
138
+ - tableau.lvh.me
139
+ response:
140
+ status:
141
+ code: 200
142
+ message: OK
143
+ headers:
144
+ Date:
145
+ - Mon, 26 Jun 2017 10:49:53 GMT
146
+ Server:
147
+ - Tableau
148
+ Content-Type:
149
+ - application/json;charset=utf-8
150
+ Vary:
151
+ - Accept-Encoding
152
+ Content-Encoding:
153
+ - gzip
154
+ P3p:
155
+ - CP="NON"
156
+ X-Ua-Compatible:
157
+ - IE=Edge
158
+ X-Content-Type-Options:
159
+ - nosniff
160
+ X-Xss-Protection:
161
+ - 1; mode=block
162
+ Content-Length:
163
+ - '192'
164
+ body:
165
+ encoding: ASCII-8BIT
166
+ string: !binary |-
167
+ H4sIAAAAAAAAAz2Muw6CMBRA/+XONOkDhTrK4iBRCGriYtpy0UYsoVQTH/y7
168
+ uDid5ZzzBuOxRhesagdYvGGwAX+0NSyAKUabmZaEcqlJLDAmas4pSRJRs7mk
169
+ QqQGIjCdC9Ni59upgTGC+4D+P+GaMSm5JLVoZiRuaEqUNIxwSg3GokmSVP+i
170
+ 0F3RTf7zUors5I6FOTz7bGP2lS9N8bkqW+Wvs+p19ehleKFb3dKiUCVu13SZ
171
+ KxjHL0vOwILNAAAA
172
+ http_version:
173
+ recorded_at: Mon, 26 Jun 2017 10:49:56 GMT
174
+ - request:
175
+ method: get
176
+ uri: https://tableau.lvh.me/api/2.6/sites/1a10f5b9-029b-43e4-a620-773d1690338c/groups
177
+ body:
178
+ encoding: US-ASCII
179
+ string: ''
180
+ headers:
181
+ Accept:
182
+ - application/json
183
+ Accept-Encoding:
184
+ - gzip, deflate
185
+ User-Agent:
186
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
187
+ Content-Type:
188
+ - application/json
189
+ X-Tableau-Auth:
190
+ - yhR3C_nZQcWyqCOcVTrRcQ|kaiTMzgaqbTvq9tzenHm8QQaRePL0BMa
191
+ Host:
192
+ - tableau.lvh.me
193
+ response:
194
+ status:
195
+ code: 200
196
+ message: OK
197
+ headers:
198
+ Date:
199
+ - Mon, 26 Jun 2017 10:49:53 GMT
200
+ Server:
201
+ - Tableau
202
+ Content-Type:
203
+ - application/json;charset=utf-8
204
+ Vary:
205
+ - Accept-Encoding
206
+ Content-Encoding:
207
+ - gzip
208
+ P3p:
209
+ - CP="NON"
210
+ X-Ua-Compatible:
211
+ - IE=Edge
212
+ X-Content-Type-Options:
213
+ - nosniff
214
+ X-Xss-Protection:
215
+ - 1; mode=block
216
+ Content-Length:
217
+ - '244'
218
+ body:
219
+ encoding: ASCII-8BIT
220
+ string: !binary |-
221
+ H4sIAAAAAAAAA42PO0/EMBCE/0rk+iz5GTvprjk6Ch4VoljbS2TJiU9JjoIo
222
+ /x07IEEH3cxo9hvtRq4wxAnWmCfSb9Xh/W10OJOecHI6gsf4gdUyVoI1r5DO
223
+ 7xATuFRjSfYTGeZ8uy6VcCjSv2wk5BHiQZ1grM2UPaTajqE4xXjrOSjaSm6o
224
+ clJQUEpRqSXKIIyRPJS979tzc1fBzSXPzRMua5yGQvpzRDrmRdCMqk56yjm2
225
+ FFpRlt7QdMaAtIL9GkmpeV5wXv6D1t4FazqkwnJBle0K1aClQlvXWmQKuP5B
226
+ P2AV4esLsr/u+ydRAVQPewEAAA==
227
+ http_version:
228
+ recorded_at: Mon, 26 Jun 2017 10:49:57 GMT
229
+ - request:
230
+ method: post
231
+ uri: https://tableau.lvh.me/api/2.6/auth/signin
232
+ body:
233
+ encoding: UTF-8
234
+ string: '{"credentials":{"name":"<TABLEAU_USERNAME>","password":"<TABLEAU_PASSWORD>","site":{"contentUrl":""}}}'
235
+ headers:
236
+ Accept:
237
+ - application/json
238
+ Accept-Encoding:
239
+ - gzip, deflate
240
+ User-Agent:
241
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
242
+ Content-Type:
243
+ - application/json
244
+ X-Tableau-Auth:
245
+ - yhR3C_nZQcWyqCOcVTrRcQ|kaiTMzgaqbTvq9tzenHm8QQaRePL0BMa
246
+ Content-Length:
247
+ - '94'
248
+ Host:
249
+ - tableau.lvh.me
250
+ response:
251
+ status:
252
+ code: 200
253
+ message: OK
254
+ headers:
255
+ Date:
256
+ - Mon, 26 Jun 2017 10:49:53 GMT
257
+ Server:
258
+ - Tableau
259
+ Content-Type:
260
+ - application/json;charset=utf-8
261
+ Vary:
262
+ - Accept-Encoding
263
+ Content-Encoding:
264
+ - gzip
265
+ P3p:
266
+ - CP="NON"
267
+ X-Ua-Compatible:
268
+ - IE=Edge
269
+ X-Content-Type-Options:
270
+ - nosniff
271
+ X-Xss-Protection:
272
+ - 1; mode=block
273
+ Content-Length:
274
+ - '192'
275
+ body:
276
+ encoding: ASCII-8BIT
277
+ string: !binary |-
278
+ H4sIAAAAAAAAAz2MyQ6CMBQA/+WdadKFrdwQ43bTuERvpX01RARSkKjIv4sX
279
+ T3OZmQG0Q4NVV6iyhWSAtujwx8JAAkwxaoNcEsplTnyBPlEhpySKhGGhpELE
280
+ GjzQddVNi4MrpwZGDx4tuv+E54xJySUxwgbEtzQmSmpGOKUafWGjKM5/UVff
281
+ sJr8vjpe+3p53x+zzeoSXpR+z136kduTMW6r02CNuzKlz/CxmPUv25xZdmqw
282
+ gXH8Aqzd8gvNAAAA
283
+ http_version:
284
+ recorded_at: Mon, 26 Jun 2017 10:49:57 GMT
285
+ - request:
286
+ method: get
287
+ uri: https://tableau.lvh.me/api/2.6/sites/1a10f5b9-029b-43e4-a620-773d1690338c/users
288
+ body:
289
+ encoding: US-ASCII
290
+ string: ''
291
+ headers:
292
+ Accept:
293
+ - application/json
294
+ Accept-Encoding:
295
+ - gzip, deflate
296
+ User-Agent:
297
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
298
+ Content-Type:
299
+ - application/json
300
+ X-Tableau-Auth:
301
+ - vnVgvoGmTVCJHZ6ZaczDrA|9QWddrQcA5IeRlA0x6uFBvyfpY1CWpep
302
+ Host:
303
+ - tableau.lvh.me
304
+ response:
305
+ status:
306
+ code: 200
307
+ message: OK
308
+ headers:
309
+ Date:
310
+ - Mon, 26 Jun 2017 10:49:54 GMT
311
+ Server:
312
+ - Tableau
313
+ Content-Type:
314
+ - application/json;charset=utf-8
315
+ Vary:
316
+ - Accept-Encoding
317
+ Content-Encoding:
318
+ - gzip
319
+ P3p:
320
+ - CP="NON"
321
+ X-Ua-Compatible:
322
+ - IE=Edge
323
+ X-Content-Type-Options:
324
+ - nosniff
325
+ X-Xss-Protection:
326
+ - 1; mode=block
327
+ Content-Length:
328
+ - '296'
329
+ body:
330
+ encoding: ASCII-8BIT
331
+ string: !binary |-
332
+ H4sIAAAAAAAAA43OTUtEIRQG4P/iegS96ui5uzZBEC2aalG0UO+xhPsR6kwf
333
+ w/z3dAiGoIHAhb4e3vPsyZt9ibMtcZlJv28vvNlODhPpCSerY7CJX9iejNWg
334
+ LMWOFzsbR+vGFgtyWJFtxpRbQbuQ/mlP4lD/Osc5QAd0EEFRGZihFjynHWMe
335
+ pQhaG1c7Zzu1JpszTm78rEmOBW+XY/8G0w7TxTDFOeaSbFlSHRhtLtdLpbct
336
+ jGvK1rRb33HWS+iVfKwj+FEwzRW7La/3lXXVRBX7YxPd2oPinMIwBCq9ctQw
337
+ 6ShoicoZBd7DydZKfrseIr7j3xR+pOi+nk78g8Kd9HoQjgZugEojFAUIQEGh
338
+ MgGD1CqcKJcJhzOUM3ueD4dvdzrbe+kBAAA=
339
+ http_version:
340
+ recorded_at: Mon, 26 Jun 2017 10:49:57 GMT
341
+ - request:
342
+ method: post
343
+ uri: https://tableau.lvh.me/api/2.6/auth/signin
344
+ body:
345
+ encoding: UTF-8
346
+ string: '{"credentials":{"name":"<TABLEAU_USERNAME>","password":"<TABLEAU_PASSWORD>","site":{"contentUrl":""}}}'
347
+ headers:
348
+ Accept:
349
+ - application/json
350
+ Accept-Encoding:
351
+ - gzip, deflate
352
+ User-Agent:
353
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
354
+ Content-Type:
355
+ - application/json
356
+ X-Tableau-Auth:
357
+ - vnVgvoGmTVCJHZ6ZaczDrA|9QWddrQcA5IeRlA0x6uFBvyfpY1CWpep
358
+ Content-Length:
359
+ - '94'
360
+ Host:
361
+ - tableau.lvh.me
362
+ response:
363
+ status:
364
+ code: 200
365
+ message: OK
366
+ headers:
367
+ Date:
368
+ - Mon, 26 Jun 2017 10:49:54 GMT
369
+ Server:
370
+ - Tableau
371
+ Content-Type:
372
+ - application/json;charset=utf-8
373
+ Vary:
374
+ - Accept-Encoding
375
+ Content-Encoding:
376
+ - gzip
377
+ P3p:
378
+ - CP="NON"
379
+ X-Ua-Compatible:
380
+ - IE=Edge
381
+ X-Content-Type-Options:
382
+ - nosniff
383
+ X-Xss-Protection:
384
+ - 1; mode=block
385
+ Content-Length:
386
+ - '190'
387
+ body:
388
+ encoding: ASCII-8BIT
389
+ string: !binary |-
390
+ H4sIAAAAAAAAAz2MsQ6CMBQA/+XNNGlfwVI2mEBlwOgH0NISUkQDNCEg/y4u
391
+ Trfc3QZ6NI0Z5q7uJ0g2mLrZ/Ng1kACrGbWRkoSiVCTkJiT1CSkRgjfsJCnn
392
+ sYYA9GuYj8Vj7I8G9gD8ZMb/BBVjUqIkDbcRCS2NSS01I0ipNiG3QsTqF80v
393
+ Z4bD988c/bUcKo9t9/DvTE0srz73y63Qrlgu8SosZqPLSuPaCpcyPZ9Tt8K+
394
+ fwEIf2IwzQAAAA==
395
+ http_version:
396
+ recorded_at: Mon, 26 Jun 2017 10:49:57 GMT
397
+ - request:
398
+ method: post
399
+ uri: https://tableau.lvh.me/api/2.6/sites/1a10f5b9-029b-43e4-a620-773d1690338c/groups/5cbd879e-2812-4892-a7e8-258b68e04a15/users
400
+ body:
401
+ encoding: UTF-8
402
+ string: '{"user":{"id":"1b4c7d3b-f189-4835-99f9-95e58fef475f"}}'
403
+ headers:
404
+ Accept:
405
+ - application/json
406
+ Accept-Encoding:
407
+ - gzip, deflate
408
+ User-Agent:
409
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.3.3p222
410
+ Content-Type:
411
+ - application/json
412
+ X-Tableau-Auth:
413
+ - umH2uLMnQu2giUupBbs1HQ|TKRIckIxK8z7f2BrkBMekgQ2xMAJJAkz
414
+ Content-Length:
415
+ - '54'
416
+ Host:
417
+ - tableau.lvh.me
418
+ response:
419
+ status:
420
+ code: 200
421
+ message: OK
422
+ headers:
423
+ Date:
424
+ - Mon, 26 Jun 2017 10:49:54 GMT
425
+ Server:
426
+ - Tableau
427
+ Content-Type:
428
+ - application/json;charset=utf-8
429
+ Vary:
430
+ - Accept-Encoding
431
+ Content-Encoding:
432
+ - gzip
433
+ P3p:
434
+ - CP="NON"
435
+ X-Ua-Compatible:
436
+ - IE=Edge
437
+ X-Content-Type-Options:
438
+ - nosniff
439
+ X-Xss-Protection:
440
+ - 1; mode=block
441
+ Content-Length:
442
+ - '123'
443
+ body:
444
+ encoding: ASCII-8BIT
445
+ string: !binary |-
446
+ H4sIAAAAAAAAAxWNwQqDMBQE/2XP5iAmmOetl0KvBXtXsw8D1kKMtCD+e+Nx
447
+ h2H2wL4xoTsQAzrUo53a0IxGay/G+sYZERUjjs4r1bZOUWEd3iz2PTGUtcXM
448
+ 52e5yCvyW3IV+MtM67Dc9jz35eFx1XGefwYmmBVwAAAA
449
+ http_version:
450
+ recorded_at: Mon, 26 Jun 2017 10:49:57 GMT
451
+ recorded_with: VCR 3.0.3