gooddata 0.6.26 → 0.6.27

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/gooddata.gemspec +3 -4
  3. data/lib/gooddata/cli/shared.rb +5 -0
  4. data/lib/gooddata/commands/project.rb +2 -4
  5. data/lib/gooddata/core/logging.rb +48 -29
  6. data/lib/gooddata/core/nil_logger.rb +6 -0
  7. data/lib/gooddata/helpers/global_helpers.rb +3 -3
  8. data/lib/gooddata/models/domain.rb +5 -4
  9. data/lib/gooddata/models/metadata.rb +2 -1
  10. data/lib/gooddata/models/metadata/report.rb +5 -1
  11. data/lib/gooddata/models/model.rb +1 -1
  12. data/lib/gooddata/models/process.rb +2 -0
  13. data/lib/gooddata/models/project.rb +30 -9
  14. data/lib/gooddata/models/project_metadata.rb +8 -2
  15. data/lib/gooddata/rest/connection.rb +19 -17
  16. data/lib/gooddata/version.rb +1 -1
  17. data/spec/environment/develop.rb +4 -4
  18. data/spec/environment/environment.rb +9 -2
  19. data/spec/integration/clients_spec.rb +5 -6
  20. data/spec/integration/full_process_schedule_spec.rb +1 -1
  21. data/spec/integration/project_spec.rb +3 -3
  22. data/spec/integration/schedule_spec.rb +2 -2
  23. data/spec/integration/user_filters_spec.rb +2 -1
  24. data/spec/integration/user_group_spec.rb +8 -8
  25. data/spec/integration/variables_spec.rb +2 -1
  26. data/spec/unit/core/logging_spec.rb +11 -3
  27. data/spec/unit/helpers_spec.rb +0 -1
  28. data/spec/unit/models/domain_spec.rb +0 -9
  29. data/spec/unit/models/from_wire_spec.rb +0 -4
  30. data/spec/unit/models/metric_spec.rb +0 -4
  31. data/spec/unit/models/profile_spec.rb +3 -2
  32. data/spec/unit/models/project_role_spec.rb +7 -8
  33. data/spec/unit/models/to_manifest_spec.rb +2 -4
  34. metadata +30 -81
  35. data/lib/gooddata/rest/connections/rest_client_connection.rb +0 -181
  36. data/spec/unit/cli/commands/cmd_api_spec.rb +0 -40
  37. data/spec/unit/cli/commands/cmd_domain_spec.rb +0 -112
  38. data/spec/unit/cli/commands/cmd_process_spec.rb +0 -47
  39. data/spec/unit/cli/commands/cmd_project_spec.rb +0 -85
  40. data/spec/unit/cli/commands/cmd_role_spec.rb +0 -59
  41. data/spec/unit/cli/commands/cmd_run_ruby_spec.rb +0 -17
  42. data/spec/unit/cli/commands/cmd_scaffold_spec.rb +0 -64
  43. data/spec/unit/cli/commands/cmd_user_spec.rb +0 -35
  44. data/spec/unit/commands/command_api_spec.rb +0 -18
  45. data/spec/unit/commands/command_auth_spec.rb +0 -171
  46. data/spec/unit/commands/command_dataset_spec.rb +0 -50
  47. data/spec/unit/commands/command_process_spec.rb +0 -97
  48. data/spec/unit/commands/command_scaffold_spec.rb +0 -67
  49. data/spec/unit/commands/command_user_spec.rb +0 -28
  50. data/spec/unit/data/guesser_spec.rb +0 -63
@@ -1,181 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require_relative '../connection'
8
-
9
- require 'multi_json'
10
- require 'rest-client'
11
-
12
- module GoodData
13
- module Rest
14
- module Connections
15
- # Implementation of GoodData::Rest::Connection using https://rubygems.org/gems/rest-client
16
- class RestClientConnection < GoodData::Rest::Connection
17
- def initialize(opts = {})
18
- super
19
-
20
- @headers = DEFAULT_HEADERS.dup
21
- @user = nil
22
- @server = nil
23
-
24
- @opts = opts
25
- headers = opts[:headers] || {}
26
- @headers.merge! headers
27
- end
28
-
29
- # Connect using username and password
30
- def connect(username, password, options = {})
31
- server = options[:server] || Helpers::AuthHelper.read_server
32
- @server = RestClient::Resource.new server, DEFAULT_LOGIN_PAYLOAD
33
-
34
- super
35
- end
36
-
37
- # HTTP DELETE
38
- #
39
- # @param uri [String] Target URI
40
- def delete(uri, options = {})
41
- GoodData.logger.debug "DELETE: #{@server.url}#{uri}"
42
- profile "DELETE #{uri}" do
43
- b = proc { @server[uri].delete cookies }
44
- process_response(options, &b)
45
- end
46
- end
47
-
48
- # HTTP GET
49
- #
50
- # @param uri [String] Target URI
51
- def get(uri, options = {})
52
- GoodData.logger.debug "GET: #{@server.url}#{uri}"
53
- profile "GET #{uri}" do
54
- b = proc { @server[uri].get cookies }
55
- process_response(options, &b)
56
- end
57
- end
58
-
59
- # HTTP PUT
60
- #
61
- # @param uri [String] Target URI
62
- def put(uri, data, options = {})
63
- payload = data.is_a?(Hash) ? data.to_json : data
64
- GoodData.logger.debug "PUT: #{@server.url}#{uri}, #{scrub_params(data, [:password, :login, :authorizationToken, :verifyPassword])}"
65
- profile "PUT #{uri}" do
66
- b = proc { @server[uri].put payload, cookies }
67
- process_response(options, &b)
68
- end
69
- end
70
-
71
- # HTTP POST
72
- #
73
- # @param uri [String] Target URI
74
- def post(uri, data, options = {})
75
- GoodData.logger.debug "POST: #{@server.url}#{uri}, #{scrub_params(data, [:password, :login, :authorizationToken, :verifyPassword])}"
76
- profile "POST #{uri}" do
77
- payload = data.is_a?(Hash) ? data.to_json : data
78
- b = proc { @server[uri].post payload, cookies }
79
- process_response(options, &b)
80
- end
81
- end
82
-
83
- # Uploads a file to GoodData server
84
- # /uploads/ resources are special in that they use a different
85
- # host and a basic authentication.
86
- def upload(file, options = {})
87
- dir = options[:directory] || ''
88
- staging_uri = options[:staging_url].to_s
89
- url = dir.empty? ? staging_uri : URI.join(staging_uri, "#{dir}/").to_s
90
-
91
- # Make a directory, if needed
92
- unless dir.empty?
93
- method = :get
94
- GoodData.logger.debug "#{method}: #{url}"
95
- begin
96
- # first check if it does exits
97
- raw = {
98
- :method => method,
99
- :url => url,
100
- # :timeout => @options[:timeout],
101
- :headers => @headers
102
- }.merge(cookies)
103
- RestClient::Request.execute(raw)
104
- rescue RestClient::Exception => e
105
- if e.http_code == 404
106
- method = :mkcol
107
- GoodData.logger.debug "#{method}: #{url}"
108
- raw = {
109
- :method => method,
110
- :url => url,
111
- # :timeout => @options[:timeout],
112
- :headers => @headers
113
- }.merge(cookies)
114
- RestClient::Request.execute(raw)
115
- end
116
- end
117
- end
118
-
119
- payload = options[:stream] ? 'file' : File.read(file)
120
- filename = options[:filename] || options[:stream] ? 'randome-filename.txt' : File.basename(file)
121
-
122
- # Upload the file
123
- # puts "uploading the file #{URI.join(url, filename).to_s}"
124
- raw = {
125
- :method => :put,
126
- :url => URI.join(url, filename).to_s,
127
- # :timeout => @options[:timeout],
128
- :headers => {
129
- :user_agent => GoodData.gem_version_string
130
- },
131
- :payload => payload,
132
- :raw_response => true,
133
- # :user => @username,
134
- # :password => @password
135
- }.merge(cookies)
136
- RestClient::Request.execute(raw)
137
- true
138
- end
139
-
140
- private
141
-
142
- def process_response(options = {}, &block)
143
- begin
144
- response = block.call
145
- rescue RestClient::Unauthorized
146
- raise $ERROR_INFO if options[:dont_reauth]
147
- refresh_token
148
- response = block.call
149
- end
150
-
151
- merge_cookies! response.cookies
152
- content_type = response.headers[:content_type]
153
- return response if options[:process] == false
154
-
155
- if content_type == 'application/json' || content_type == 'application/json;charset=UTF-8'
156
- result = response.to_str == '""' ? {} : MultiJson.load(response.to_str)
157
- GoodData.logger.debug "Response: #{result.inspect}"
158
- elsif ['text/plain;charset=UTF-8', 'text/plain; charset=UTF-8', 'text/plain'].include?(content_type)
159
- result = response
160
- GoodData.logger.debug "Response: plain text - #{result[0..99]}"
161
- elsif content_type == 'application/zip'
162
- result = response
163
- GoodData.logger.debug 'Response: a zipped stream'
164
- elsif response.headers[:content_length].to_s == '0'
165
- result = nil
166
- GoodData.logger.debug 'Response: Empty response possibly 204'
167
- elsif response.code == 204
168
- result = nil
169
- GoodData.logger.debug 'Response: 204 no content'
170
- else
171
- fail "Unsupported response content type '%s':\n%s" % [content_type, response.to_str[0..127]]
172
- end
173
- result
174
- rescue RestClient::Exception => e
175
- GoodData.logger.debug "Response: #{e.response}"
176
- raise $ERROR_INFO
177
- end
178
- end
179
- end
180
- end
181
- end
@@ -1,40 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require 'gooddata/cli/cli'
8
-
9
- describe 'GoodData::CLI - api', :broken => true do
10
- describe 'api' do
11
- it 'Complains when no subcommand specified' do
12
- args = %w(api)
13
-
14
- out = run_cli(args)
15
- out.should include("Command 'api' requires a subcommand info,get")
16
- end
17
- end
18
-
19
- describe 'api info' do
20
- it 'Can be called without arguments' do
21
- args = %w(api info)
22
-
23
- run_cli(args)
24
- end
25
- end
26
-
27
- describe 'api get' do
28
- it 'Can be called without arguments' do
29
- args = %w(api get)
30
-
31
- run_cli(args)
32
- end
33
-
34
- it 'Is able to get /gdc' do
35
- args = %w(api get /gdc)
36
-
37
- run_cli(args)
38
- end
39
- end
40
- end
@@ -1,112 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require 'gooddata/cli/cli'
8
-
9
- describe 'GoodData::CLI - domain', :broken => true do
10
- describe 'domain' do
11
- it 'Complains when no subcommand specified' do
12
- args = %w(domain)
13
-
14
- out = run_cli(args)
15
- out.should include "Command 'domain' requires a subcommand add_user,list_users"
16
- end
17
- end
18
-
19
- describe "domain add_user" do
20
- TEST_DOMAIN = 'gooddata'
21
- TEST_EMAIL = 'joe.doe@gooddata.com'
22
- TEST_PASSWORD = 'p4ssw0rth'
23
-
24
- it "Outputs 'Domain name has to be provided' if none specified" do
25
- args = [
26
- '-U',
27
- ConnectionHelper::DEFAULT_USERNAME,
28
- '-P',
29
- ConnectionHelper::DEFAULT_PASSWORD,
30
- 'domain',
31
- 'add_user'
32
- ]
33
-
34
- out = run_cli(args)
35
- out.should include 'Domain name has to be provided'
36
- end
37
-
38
- it "Outputs 'Email has to be provided' if none specified" do
39
- args = [
40
- '-U',
41
- ConnectionHelper::DEFAULT_USERNAME,
42
- '-P',
43
- ConnectionHelper::DEFAULT_PASSWORD,
44
- 'domain',
45
- 'add_user',
46
- TEST_DOMAIN
47
- ]
48
-
49
- out = run_cli(args)
50
- out.should include 'Email has to be provided'
51
- end
52
-
53
- it "Outputs 'Password has to be provided' if none specified" do
54
- args = [
55
- '-U',
56
- ConnectionHelper::DEFAULT_USERNAME,
57
- '-P',
58
- ConnectionHelper::DEFAULT_PASSWORD,
59
- 'domain',
60
- 'add_user',
61
- TEST_DOMAIN,
62
- TEST_EMAIL
63
- ]
64
-
65
- out = run_cli(args)
66
- out.should include 'Password has to be provided'
67
- end
68
-
69
- it 'Works' do
70
- args = [
71
- '-U',
72
- ConnectionHelper::DEFAULT_USERNAME,
73
- '-P',
74
- ConnectionHelper::DEFAULT_PASSWORD,
75
- 'domain',
76
- 'add_user',
77
- TEST_DOMAIN,
78
- TEST_EMAIL,
79
- TEST_PASSWORD
80
- ]
81
-
82
- out = run_cli(args)
83
- end
84
-
85
- end
86
-
87
- describe 'domain list_users' do
88
- it 'Complains when no parameters specified' do
89
- args = [
90
- '-U',
91
- ConnectionHelper::DEFAULT_USERNAME,
92
- '-P',
93
- ConnectionHelper::DEFAULT_PASSWORD,
94
- 'domain',
95
- 'list_users'
96
- ]
97
-
98
- out = run_cli(args)
99
- out.should include 'Domain name has to be provided'
100
- end
101
-
102
- it 'Works' do
103
- args = [
104
- 'domain',
105
- 'list_users',
106
- 'gooddata'
107
- ]
108
-
109
- out = run_cli(args)
110
- end
111
- end
112
- end
@@ -1,47 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require 'gooddata/cli/cli'
8
-
9
- describe 'GoodData::CLI - process', :broken => true do
10
- describe 'process' do
11
- it 'Complains when no subcommand specified' do
12
- args = %w(process)
13
-
14
- out = run_cli(args)
15
- out.should include "Command 'process' requires a subcommand list,show,deploy,delete,execute"
16
- end
17
- end
18
-
19
- describe 'process deploy' do
20
- it 'Can be called without arguments' do
21
- args = %w(process deploy)
22
-
23
- run_cli(args)
24
- end
25
- end
26
-
27
- describe 'process get' do
28
- it 'Can be called without arguments' do
29
- args = %w(process get)
30
-
31
- run_cli(args)
32
- end
33
- end
34
-
35
- describe 'process list' do
36
- it 'Lists processes when project ID specified' do
37
- args = [
38
- 'process',
39
- 'list',
40
- ProjectHelper::PROJECT_ID
41
- ]
42
-
43
- run_cli(args)
44
- end
45
- end
46
-
47
- end
@@ -1,85 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require 'gooddata/cli/cli'
8
-
9
- describe 'GoodData::CLI - project', :broken => true do
10
- describe 'project' do
11
- it 'Complains when no subcommand specified' do
12
- args = %w(project)
13
-
14
- out = run_cli(args)
15
- out.should include "Command 'project' requires a subcommand jack_in,create,delete,clone,invite,users,show,build,update,roles,validate"
16
- end
17
- end
18
-
19
- describe 'project build' do
20
- it 'Can be called without arguments' do
21
- args = %w(project build)
22
-
23
- run_cli(args)
24
- end
25
- end
26
-
27
- describe 'project clone' do
28
- it 'Can be called without arguments' do
29
- args = %w(project clone)
30
-
31
- run_cli(args)
32
- end
33
- end
34
-
35
- describe 'project create' do
36
- it 'Can be called without arguments' do
37
- args = %w(project create)
38
-
39
- # TODO: Pass all required args to prevent interaction
40
- # TODO: Investigate, fix and enable execution
41
- # run_cli(args)
42
- end
43
- end
44
-
45
- describe 'project delete' do
46
- it 'Can be called without arguments' do
47
- args = %w(project delete)
48
-
49
- run_cli(args)
50
- end
51
- end
52
-
53
- describe 'project jack_in' do
54
- it 'Can be called without arguments' do
55
- args = %w(project jack_in)
56
-
57
- run_cli(args)
58
- end
59
- end
60
-
61
- describe 'project list' do
62
- it 'Can be called without arguments' do
63
- args = %w(project list)
64
-
65
- run_cli(args)
66
- end
67
- end
68
-
69
- describe 'project show' do
70
- it 'Can be called without arguments' do
71
- args = %w(project show)
72
-
73
- run_cli(args)
74
- end
75
- end
76
-
77
- describe 'project update' do
78
- it 'Can be called without arguments' do
79
- args = %w(project update)
80
-
81
- run_cli(args)
82
- end
83
- end
84
-
85
- end