Class: TableauApi::Resources::Workbooks
- Defined in:
- lib/tableau_api/resources/workbooks.rb
Constant Summary collapse
- CAPABILITIES =
rubocop:enable Metrics/ParameterLists
%w[ AddComment ChangeHierarchy ChangePermissions CreateRefreshMetrics Delete ExportData ExportImage ExportXml Filter Read RunExplainData ShareView ViewComments ViewUnderlyingData WebAuthoring Write ].freeze
- CAPABILITY_MODES =
%w[ALLOW DENY].freeze
Instance Method Summary collapse
-
#add_permissions(workbook_id:, user_id: nil, group_id: nil, capabilities:) ⇒ Object
capabilities is a hash of symbol keys to booleans { Read: true, ChangePermissions: false }.
- #delete_permissions(workbook_id:, user_id: nil, group_id: nil, capability:, capability_mode:) ⇒ Object
- #find(workbook_id) ⇒ Object
- #list ⇒ Object
- #permissions(workbook_id:) ⇒ Object
- #preview_image(workbook_id:) ⇒ Object
-
#publish(name:, project_id:, file:, overwrite: false, show_tabs: false, connection_username: nil, connection_password: nil, connection_embed: false) ⇒ Object
rubocop:disable Metrics/ParameterLists.
- #refresh(workbook_id:) ⇒ Object
- #update(workbook_id:, owner_user_id:) ⇒ Object
- #version(file) ⇒ Object
- #views(workbook_id) ⇒ Object
Methods inherited from Base
Constructor Details
This class inherits a constructor from TableauApi::Resources::Base
Instance Method Details
#add_permissions(workbook_id:, user_id: nil, group_id: nil, capabilities:) ⇒ Object
capabilities is a hash of symbol keys to booleans { Read: true, ChangePermissions: false }
86 87 88 89 90 91 92 93 |
# File 'lib/tableau_api/resources/workbooks.rb', line 86 def (workbook_id:, user_id: nil, group_id: nil, capabilities:) validate_user_group_exclusivity(user_id, group_id) request = (workbook_id, user_id, group_id, capabilities) res = @client.connection.api_put("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}/permissions", body: request) res.code == 200 end |
#delete_permissions(workbook_id:, user_id: nil, group_id: nil, capability:, capability_mode:) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/tableau_api/resources/workbooks.rb', line 95 def (workbook_id:, user_id: nil, group_id: nil, capability:, capability_mode:) validate_user_group_exclusivity(user_id, group_id) raise 'invalid capability' unless CAPABILITIES.include? capability.to_s raise 'invalid mode' unless CAPABILITY_MODES.include? capability_mode.to_s subpath = user_id ? "users/#{user_id}" : "groups/#{group_id}" subpath += "/#{capability}/#{capability_mode.capitalize}" res = @client.connection.api_delete("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}/permissions/#{subpath}") res.code == 204 end |
#find(workbook_id) ⇒ Object
130 131 132 133 |
# File 'lib/tableau_api/resources/workbooks.rb', line 130 def find(workbook_id) res = @client.connection.api_get("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}") res['tsResponse']['workbook'] if res.code == 200 end |
#list ⇒ Object
140 141 142 143 |
# File 'lib/tableau_api/resources/workbooks.rb', line 140 def list url = "sites/#{@client.auth.site_id}/users/#{@client.auth.user_id}/workbooks" @client.connection.api_get_collection(url, 'workbooks.workbook') end |
#permissions(workbook_id:) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/tableau_api/resources/workbooks.rb', line 58 def (workbook_id:) res = @client.connection.api_get("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}/permissions") raise TableauError, res if res.code != 200 = HTTParty::Parser.new(res.body, :xml).parse['tsResponse']['permissions']['granteeCapabilities'] return [] if .nil? = [] unless .is_a? Array .map do |p| grantee_type = p['group'].nil? ? 'user' : 'group' capabilities = {} capabilities_list = p['capabilities']['capability'] capabilities_list = [capabilities_list] unless capabilities_list.is_a? Array capabilities_list.each do |c| capabilities[c['name'].to_sym] = c['mode'] == 'Allow' end { grantee_type: grantee_type, grantee_id: p[grantee_type]['id'], capabilities: capabilities } end end |
#preview_image(workbook_id:) ⇒ Object
125 126 127 128 |
# File 'lib/tableau_api/resources/workbooks.rb', line 125 def preview_image(workbook_id:) res = @client.connection.api_get("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}/previewImage") res.body if res.code == 200 end |
#publish(name:, project_id:, file:, overwrite: false, show_tabs: false, connection_username: nil, connection_password: nil, connection_embed: false) ⇒ Object
rubocop:disable Metrics/ParameterLists
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/tableau_api/resources/workbooks.rb', line 20 def publish(name:, project_id:, file:, overwrite: false, show_tabs: false, connection_username: nil, connection_password: nil, connection_embed: false) request = Builder::XmlMarkup.new.tsRequest do |ts| ts.workbook(name: name, showTabs: show_tabs) do |wb| wb.project(id: project_id) wb.connectionCredentials(name: connection_username, password: connection_password, embed: ) if connection_username end end query = URI.encode_www_form([['overwrite', overwrite]]) path = "sites/#{@client.auth.site_id}/workbooks?#{query}" parts = { 'request_payload' => request, 'tableau_workbook' => UploadIO.new(file, 'application/octet-stream') } headers = { parts: { 'request_payload' => { 'Content-Type' => 'text/xml' }, 'tableau_workbook' => { 'Content-Type' => 'application/octet-string' } } } res = @client.connection.api_post_multipart(path, parts, headers) return HTTParty::Parser.new(res.body, :xml).parse['tsResponse']['workbook'] if res.code == '201' raise TableauError, res end |
#refresh(workbook_id:) ⇒ Object
119 120 121 122 123 |
# File 'lib/tableau_api/resources/workbooks.rb', line 119 def refresh(workbook_id:) request = Builder::XmlMarkup.new.tsRequest res = @client.connection.api_post("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}/refresh", body: request) res.code == 202 end |
#update(workbook_id:, owner_user_id:) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/tableau_api/resources/workbooks.rb', line 107 def update(workbook_id:, owner_user_id:) request = Builder::XmlMarkup.new.tsRequest do |ts| ts.workbook(id: workbook_id) do |w| w.owner(id: owner_user_id) end end res = @client.connection.api_put("sites/#{@client.auth.site_id}/workbooks/#{workbook_id}", body: request) res.code == 200 end |
#version(file) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/tableau_api/resources/workbooks.rb', line 6 def version(file) version = nil if File.exist?(file) && File.extname(file) == '.twbx' Zip::File.open(file) do |zip_file| entry = zip_file.glob('*.twb').first version = HTTParty::Parser.new(entry.get_input_stream.read, :xml).parse['workbook']['version'] end end version end |
#views(workbook_id) ⇒ Object
135 136 137 138 |
# File 'lib/tableau_api/resources/workbooks.rb', line 135 def views(workbook_id) url = "sites/#{@client.auth.site_id}/workbooks/#{workbook_id}/views" @client.connection.api_get_collection(url, 'views.view') end |