tableau_trusted_interface 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +50 -0
- data/lib/tableau_trusted_interface/config.rb +8 -0
- data/lib/tableau_trusted_interface/errors.rb +5 -0
- data/lib/tableau_trusted_interface/report.rb +53 -0
- data/lib/tableau_trusted_interface/version.rb +3 -0
- data/lib/tableau_trusted_interface.rb +3 -0
- metadata +133 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5467bb2e8e072b64e254eb22bbfc0a22de0225cb
|
4
|
+
data.tar.gz: 562c0a1ea10ee21c050ad01f3bf6ef81916ecc61
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6f94eac10f739571ce49d90eea266afe956e83a36e4e4db84933da887fd30b7b600c5fccf492f613dd42429e76154a86360a58f7f3b2a7f3e8678d739963ba90
|
7
|
+
data.tar.gz: 3f5118366a095ed348bb9f4ec5e97954941cded77d0f09fd626fbd01641f2cdb32c33254ba296bbd7a97950d6d2ae7a765ccd3633b733c712aa0d2dd0ea5276b
|
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# Tableau Trusted Interface for Ruby
|
2
|
+
|
3
|
+
Wrapper for embedding Tableau workbooks using the [Tableau trusted interface](http://onlinehelp.tableau.com/current/server/en-us/help.htm#trusted_auth_how.htm).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add to your `Gemfile`:
|
8
|
+
|
9
|
+
``` ruby
|
10
|
+
gem 'tableau_trusted_interface'
|
11
|
+
```
|
12
|
+
|
13
|
+
You have the option of specifying a default server address and user:
|
14
|
+
|
15
|
+
``` ruby
|
16
|
+
TableauTrustedInterface.configure do |config|
|
17
|
+
config.default_tableau_user = 'foobar'
|
18
|
+
config.default_tableau_server = 'http://example.com'
|
19
|
+
end
|
20
|
+
```
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Instantiate the interface by specifying which workbook you want and the embed params you wish to use:
|
25
|
+
|
26
|
+
``` ruby
|
27
|
+
@report = TableauTrustedInterface::Report.new(
|
28
|
+
path: 'project/workbook',
|
29
|
+
embed_params: { embed: 'yes', toolbar: 'no' }
|
30
|
+
)
|
31
|
+
```
|
32
|
+
|
33
|
+
You can optionally pass `user:` and `server:` options here too if you don’t want to use the configured defaults.
|
34
|
+
|
35
|
+
This would typically be put in a Rails controller. Then in your view you have two public methods:
|
36
|
+
|
37
|
+
- `@report.report_url`
|
38
|
+
- `@report.report_embed_url`
|
39
|
+
|
40
|
+
For convenience, this is how you embed the report in a responsive Bootstrap 3 iframe:
|
41
|
+
|
42
|
+
``` erb
|
43
|
+
<div class="embed-responsive embed-responsive-16by9">
|
44
|
+
<iframe class="embed-responsive-item" src="<%= @report.report_embed_url %>"></iframe>
|
45
|
+
</div>
|
46
|
+
```
|
47
|
+
|
48
|
+
## License
|
49
|
+
|
50
|
+
See the [LICENSE](LICENSE) file for license rights and limitations (MIT).
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'addressable/template'
|
2
|
+
require 'rest-client'
|
3
|
+
|
4
|
+
module TableauTrustedInterface
|
5
|
+
class Report
|
6
|
+
attr_reader :server, :ticket, :user
|
7
|
+
attr_accessor :embed_params, :path
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
@path = options.fetch(:path, nil)
|
11
|
+
@embed_params = parse_embed_params(options.fetch(:embed_params, []))
|
12
|
+
@user = options.fetch(:user, TableauTrustedInterface.config.default_tableau_user)
|
13
|
+
@server = options.fetch(:server, TableauTrustedInterface.config.default_tableau_server)
|
14
|
+
|
15
|
+
@ticket = generate_ticket
|
16
|
+
raise TicketDenied, 'Check Tableau IP white-listing or user access' if @ticket == '-1'
|
17
|
+
end
|
18
|
+
|
19
|
+
def report_url
|
20
|
+
report.expand(query: nil).to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def report_embed_url
|
24
|
+
report.expand(query: embed_params).to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def parse_embed_params(params)
|
30
|
+
Hash[params.map { |key, value| [":#{key}", value] }]
|
31
|
+
end
|
32
|
+
|
33
|
+
def generate_ticket
|
34
|
+
raise MissingConfiguration unless user && server
|
35
|
+
RestClient.post(URI.join(server, 'trusted').to_s, username: user)
|
36
|
+
rescue SocketError, RestClient::RequestTimeout
|
37
|
+
raise ServerUnavailable, server
|
38
|
+
end
|
39
|
+
|
40
|
+
def report
|
41
|
+
address.partial_expand(
|
42
|
+
scheme: URI.parse(server).scheme,
|
43
|
+
host: URI.parse(server).host,
|
44
|
+
segments: ['trusted', ticket, 'views'],
|
45
|
+
report_path: path
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def address
|
50
|
+
Addressable::Template.new('{scheme}://{host}{/segments*}/{+report_path}{?query*}')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tableau_trusted_interface
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hugh Evans
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.4'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: vcr
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: webmock
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.22'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.22'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: addressable
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.3'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rest-client
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.6'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.6'
|
97
|
+
description: Wrapper for embedding Tableau workbooks using the Tableau trusted interface.
|
98
|
+
email: hugh@hughevans.net
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- README.md
|
104
|
+
- lib/tableau_trusted_interface.rb
|
105
|
+
- lib/tableau_trusted_interface/config.rb
|
106
|
+
- lib/tableau_trusted_interface/errors.rb
|
107
|
+
- lib/tableau_trusted_interface/report.rb
|
108
|
+
- lib/tableau_trusted_interface/version.rb
|
109
|
+
homepage: http://github.com/hughevans/tableau_trusted_interface
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.2.2
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: Wrapper for embedding Tableau workbooks using the Tableau trusted interface.
|
133
|
+
test_files: []
|