tableau_server_client 0.0.5 → 0.0.6

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
- SHA1:
3
- metadata.gz: e6ce1d25e6ffb58815264ba9d7125c32baebe660
4
- data.tar.gz: 732cb0edba74b33f5a451dd974d9c1a2a633b075
2
+ SHA256:
3
+ metadata.gz: 2b8a666b653ed10385210a2d5fafd96e14c80f0442841f998c30bd5d379cb671
4
+ data.tar.gz: f35e189ebd0f4e4b35022ce3f1ba9f2d17c6504320a2b24eed0d39737f78c407
5
5
  SHA512:
6
- metadata.gz: 0bb3c1ee409e558b2fae12c31aa9b5fd33d345e0503377f149f4e5b5728c6613b652328533ce98ad41cee4b742210a1a8fc5fc28bf4d4618ad11bc6e5707ec63
7
- data.tar.gz: a6f00ab07320e75aa87af5122dfe5f639b0d5500df544b77703f7a4d60e8f4fc568d43e9cfbc1e591fddeaaf47aac8521e676b6326aa82b9c61f3f88a734f0e4
6
+ metadata.gz: 66c31722e7302062da98b6d655b493b268b2ab3a33c7be6edef9d6e814eaa62ef639b2b4b8902661147103466cf2cd6acd766ba02f6d665c0c498717a6f4751e
7
+ data.tar.gz: f8c22234d123f2d1cb5f8e1dbe9d94dd66ac93fdc8e5768f9f2cbd0b0df5dcb517d9309ab2a402e465b6ac1031afca4ca61b16a5cfaa2ca2d5dd30592460d88f
@@ -39,7 +39,8 @@ module TableauServerClient
39
39
  def get(resource_location)
40
40
  req_url = request_url(resource_location.path)
41
41
  response = session.get req_url.to_s
42
- resource_location.klass.from_response(self, resource_location.path, Nokogiri::XML(response.body))
42
+ xml = Nokogiri::XML(response.body).xpath("//xmlns:tsResponse").children.first
43
+ resource_location.klass.from_response(self, resource_location.path, xml)
43
44
  end
44
45
 
45
46
  def create(resource)
@@ -7,14 +7,13 @@ module TableauServerClient
7
7
 
8
8
  class Datasource < Resource
9
9
 
10
- attr_reader :id, :name, :content_url, :type, :created_at, :updated_at, :is_certified, :project, :owner
10
+ attr_reader :id, :name, :content_url, :type, :created_at, :updated_at, :is_certified
11
+ attr_writer :owner
11
12
 
12
13
  def self.from_response(client, path, xml)
13
14
  attrs = extract_attributes(xml)
14
- project = xml.xpath("xmlns:project")[0]
15
- site_path = extract_site_path(path)
16
- project_path = "#{site_path}/projects/#{project['id']}"
17
- attrs['project'] = Project.from_response(client, project_path, project)
15
+ attrs['project_id'] = xml.xpath("xmlns:project")[0]['id']
16
+ attrs['owner_id'] = xml.xpath("xmlns:owner")[0]['id']
18
17
  #TODO add owner
19
18
  new(client, path, attrs)
20
19
  end
@@ -30,6 +29,27 @@ module TableauServerClient
30
29
  @client.get_collection Connection.location(path)
31
30
  end
32
31
 
32
+ def project
33
+ @project ||= @client.get_collection(Project.location(site_path)).find {|p| p.id == @project_id }
34
+ end
35
+
36
+ def owner
37
+ @owner ||= @client.get User.location(site_path, @owner_id)
38
+ end
39
+
40
+ def to_request
41
+ request = build_request {|b|
42
+ b.datasource {|w|
43
+ w.owner(id: owner.id)
44
+ }
45
+ }
46
+ end
47
+
48
+ def update!
49
+ @client.update self
50
+ end
51
+
52
+
33
53
  end
34
54
  end
35
55
  end
@@ -5,7 +5,7 @@ module TableauServerClient
5
5
 
6
6
  class Project < Resource
7
7
 
8
- attr_reader :id, :name, :description, :content_permissions
8
+ attr_reader :id, :name, :description, :parent_project_id
9
9
 
10
10
  def self.from_response(client, path, xml)
11
11
  attrs = extract_attributes(xml)
@@ -30,6 +30,44 @@ module TableauServerClient
30
30
  end
31
31
  end
32
32
 
33
+ def root_project?
34
+ self.parent_project_id.nil?
35
+ end
36
+
37
+ def root_project
38
+ parent_projects[0] || self
39
+ end
40
+
41
+ def parent_projects
42
+ return @parent_projects if @parent_projects
43
+ @parent_projects = []
44
+ curr_pj = self
45
+ pjs = @client.get_collection Project.location(site_path)
46
+ while ! curr_pj.root_project?
47
+ pjs.each do |pj|
48
+ if pj.id == curr_pj.parent_project_id
49
+ @parent_projects.unshift pj
50
+ curr_pj = pj
51
+ break
52
+ end
53
+ end
54
+ end
55
+ return @parent_projects
56
+ end
57
+
58
+ def hierarchy
59
+ (parent_projects << self).map {|p| p.name }.join('/')
60
+ end
61
+
62
+ def extract_values_in_description
63
+ @values_in_description ||=\
64
+ description.lines.map { |l|/^(.*):\s*(.*)$/.match(l) }.reject { |m| m.nil? }.map { |m| m[1,2] }.to_h
65
+ end
66
+
67
+ def extract_value_in_description(key)
68
+ extract_values_in_description[key]
69
+ end
70
+
33
71
  end
34
72
  end
35
73
  end
@@ -1,6 +1,7 @@
1
1
  require 'tableau_server_client/resources/resource'
2
2
  require 'tableau_server_client/resources/datasource'
3
3
  require 'tableau_server_client/resources/workbook'
4
+ require 'tableau_server_client/resources/user'
4
5
 
5
6
  module TableauServerClient
6
7
  module Resources
@@ -37,6 +38,22 @@ module TableauServerClient
37
38
  @client.get Workbook.location(path, id)
38
39
  end
39
40
 
41
+ def users(filter: [])
42
+ @client.get_collection User.location(path, filter: filter)
43
+ end
44
+
45
+ def user(id)
46
+ @client.get User.location(path, id)
47
+ end
48
+
49
+ def projects(filter: [])
50
+ @client.get_collection Project.location(path, filter: filter)
51
+ end
52
+
53
+ def project(id)
54
+ projects.find { |p| p.id == id }
55
+ end
56
+
40
57
  end
41
58
  end
42
59
  end
@@ -0,0 +1,44 @@
1
+ require 'tableau_server_client/resources/resource'
2
+
3
+ module TableauServerClient
4
+ module Resources
5
+
6
+ class User < Resource
7
+
8
+ attr_reader :id, :name, :site_role, :last_login, :external_auth_user_id, :full_name
9
+
10
+ def self.from_response(client, path, xml)
11
+ attrs = extract_attributes(xml)
12
+ new(client, path, attrs)
13
+ end
14
+
15
+ def self.from_collection_response(client, path, xml)
16
+ xml.xpath("//xmlns:users/xmlns:user").each do |s|
17
+ id = s['id']
18
+ yield from_response(client, "#{path}/#{id}", s)
19
+ end
20
+ end
21
+
22
+ def reload
23
+ @client.get User.location(site_path, id)
24
+ end
25
+
26
+ def full_name
27
+ @full_name ||= self.reload.full_name
28
+ end
29
+
30
+ def workbooks
31
+ @client.get_collection(Workbook.location(site_path, filter: ["ownerName:eq:#{full_name}"])).select do |w|
32
+ w.owner.id == id
33
+ end
34
+ end
35
+
36
+ def datasources
37
+ @client.get_collection(Datasource.location(site_path, filter: ["ownerName:eq:#{full_name}"])).select do |d|
38
+ d.owner.id == id
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -7,15 +7,13 @@ module TableauServerClient
7
7
 
8
8
  class Workbook < Resource
9
9
 
10
- attr_reader :id, :name, :content_url, :show_tabs, :size, :created_at, :updated_at, :project, :owner
10
+ attr_reader :id, :name, :content_url, :show_tabs, :size, :created_at, :updated_at
11
+ attr_writer :owner
11
12
 
12
13
  def self.from_response(client, path, xml)
13
14
  attrs = extract_attributes(xml)
14
- project = xml.xpath("xmlns:project")[0]
15
- site_path = extract_site_path(path)
16
- project_path = "#{site_path}/projects/#{project['id']}"
17
- attrs['project'] = Project.from_response(client, project_path, project)
18
- #TODO add owner
15
+ attrs['project_id'] = xml.xpath("xmlns:project")[0]['id']
16
+ attrs['owner_id'] = xml.xpath("xmlns:owner")[0]['id']
19
17
  new(client, path, attrs)
20
18
  end
21
19
 
@@ -30,6 +28,27 @@ module TableauServerClient
30
28
  @client.get_collection Connection.location(path)
31
29
  end
32
30
 
31
+ def project
32
+ @project ||= @client.get_collection(Project.location(site_path)).find {|p| p.id == @project_id }
33
+ end
34
+
35
+ def owner
36
+ @owner ||= @client.get User.location(site_path, @owner_id)
37
+ end
38
+
39
+ def to_request
40
+ request = build_request {|b|
41
+ b.workbook {|w|
42
+ w.owner(id: owner.id)
43
+ }
44
+ }
45
+ request
46
+ end
47
+
48
+ def update!
49
+ @client.update self
50
+ end
51
+
33
52
  end
34
53
  end
35
54
  end
@@ -1,3 +1,3 @@
1
1
  module TableauServerClient
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tableau_server_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - shimpeko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-12 00:00:00.000000000 Z
11
+ date: 2018-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -132,6 +132,7 @@ files:
132
132
  - lib/tableau_server_client/resources/resource.rb
133
133
  - lib/tableau_server_client/resources/schedule.rb
134
134
  - lib/tableau_server_client/resources/site.rb
135
+ - lib/tableau_server_client/resources/user.rb
135
136
  - lib/tableau_server_client/resources/workbook.rb
136
137
  - lib/tableau_server_client/server.rb
137
138
  - lib/tableau_server_client/token.rb
@@ -157,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
158
  version: '0'
158
159
  requirements: []
159
160
  rubyforge_project:
160
- rubygems_version: 2.6.8
161
+ rubygems_version: 2.7.6
161
162
  signing_key:
162
163
  specification_version: 4
163
164
  summary: Tableau Server REST API Client