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 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,8 @@
1
+ require 'active_support/configurable'
2
+
3
+ module TableauTrustedInterface
4
+ include ActiveSupport::Configurable
5
+
6
+ config_accessor :default_tableau_user
7
+ config_accessor :default_server
8
+ end
@@ -0,0 +1,5 @@
1
+ module TableauTrustedInterface
2
+ class TicketDenied < StandardError; end
3
+ class ServerUnavailable < StandardError; end
4
+ class MissingConfiguration < StandardError; end
5
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module TableauTrustedInterface
2
+ VERSION = '0.9.0'
3
+ end
@@ -0,0 +1,3 @@
1
+ require 'tableau_trusted_interface/config'
2
+ require 'tableau_trusted_interface/errors'
3
+ require 'tableau_trusted_interface/report'
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: []