gooddata 1.0.2-java → 1.1.0-java

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 (149) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/CONTRIBUTING.md +12 -0
  4. data/README.md +5 -2
  5. data/Rakefile +0 -1
  6. data/dev-gooddata-sso.pub.encrypted +40 -0
  7. data/gooddata.gemspec +3 -3
  8. data/lib/gooddata/connection.rb +23 -13
  9. data/lib/gooddata/helpers/data_helper.rb +0 -1
  10. data/lib/gooddata/lcm/actions/apply_custom_maql.rb +8 -1
  11. data/lib/gooddata/lcm/actions/associate_clients.rb +8 -1
  12. data/lib/gooddata/lcm/actions/base_action.rb +10 -0
  13. data/lib/gooddata/lcm/actions/collect_ca_metrics.rb +7 -1
  14. data/lib/gooddata/lcm/actions/collect_client_projects.rb +3 -0
  15. data/lib/gooddata/lcm/actions/collect_clients.rb +3 -1
  16. data/lib/gooddata/lcm/actions/collect_data_product.rb +10 -2
  17. data/lib/gooddata/lcm/actions/collect_dynamic_schedule_params.rb +12 -1
  18. data/lib/gooddata/lcm/actions/collect_ldm_objects.rb +6 -2
  19. data/lib/gooddata/lcm/actions/collect_meta.rb +1 -1
  20. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +8 -1
  21. data/lib/gooddata/lcm/actions/collect_segments.rb +6 -5
  22. data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +1 -1
  23. data/lib/gooddata/lcm/actions/collect_users_brick_users.rb +10 -4
  24. data/lib/gooddata/lcm/actions/create_segment_masters.rb +12 -2
  25. data/lib/gooddata/lcm/actions/ensure_data_product.rb +10 -0
  26. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +5 -1
  27. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +3 -0
  28. data/lib/gooddata/lcm/actions/execute_schedules.rb +10 -0
  29. data/lib/gooddata/lcm/actions/import_object_collections.rb +1 -1
  30. data/lib/gooddata/lcm/actions/provision_clients.rb +12 -2
  31. data/lib/gooddata/lcm/actions/purge_clients.rb +2 -0
  32. data/lib/gooddata/lcm/actions/rename_existing_client_projects.rb +3 -0
  33. data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +4 -1
  34. data/lib/gooddata/lcm/actions/synchronize_cas.rb +7 -1
  35. data/lib/gooddata/lcm/actions/synchronize_clients.rb +11 -1
  36. data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +7 -1
  37. data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +12 -7
  38. data/lib/gooddata/lcm/actions/synchronize_label_types.rb +4 -1
  39. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +18 -7
  40. data/lib/gooddata/lcm/actions/synchronize_meta.rb +9 -0
  41. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +11 -1
  42. data/lib/gooddata/lcm/actions/synchronize_processes.rb +7 -1
  43. data/lib/gooddata/lcm/actions/synchronize_schedules.rb +4 -1
  44. data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +6 -0
  45. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +60 -15
  46. data/lib/gooddata/lcm/actions/synchronize_user_groups.rb +7 -1
  47. data/lib/gooddata/lcm/actions/synchronize_users.rb +106 -3
  48. data/lib/gooddata/lcm/actions/update_release_table.rb +19 -0
  49. data/lib/gooddata/lcm/helpers/check_helper.rb +21 -6
  50. data/lib/gooddata/lcm/lcm2.rb +35 -22
  51. data/lib/gooddata/lcm/types/class/gd_logger.rb +23 -0
  52. data/lib/gooddata/lcm/types/class/gd_product.rb +23 -0
  53. data/lib/gooddata/lcm/types/class/gd_project.rb +23 -0
  54. data/lib/gooddata/lcm/types/class/smart_hash.rb +23 -0
  55. data/lib/gooddata/lcm/types/complex/segment.rb +1 -1
  56. data/lib/gooddata/lcm/types/scalar/integer.rb +2 -2
  57. data/lib/gooddata/lcm/types/special/any.rb +18 -0
  58. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +1 -1
  59. data/lib/gooddata/models/blueprint/to_manifest.rb +1 -3
  60. data/lib/gooddata/models/blueprint/to_wire.rb +2 -1
  61. data/lib/gooddata/models/from_wire.rb +13 -1
  62. data/lib/gooddata/models/metadata/folder.rb +22 -0
  63. data/lib/gooddata/models/metadata/metric.rb +5 -8
  64. data/lib/gooddata/models/model.rb +1 -1
  65. data/lib/gooddata/models/process.rb +42 -32
  66. data/lib/gooddata/models/project.rb +19 -36
  67. data/lib/gooddata/models/project_creator.rb +3 -1
  68. data/lib/gooddata/models/project_role.rb +3 -4
  69. data/lib/gooddata/models/schedule.rb +0 -2
  70. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +9 -1
  71. data/lib/gooddata/models/user_filters/user_filter.rb +1 -2
  72. data/lib/gooddata/models/user_filters/user_filter_builder.rb +18 -6
  73. data/lib/gooddata/rest/client.rb +1 -2
  74. data/lib/gooddata/rest/connection.rb +12 -46
  75. data/lib/gooddata/rest/phmap.rb +101 -56
  76. data/lib/gooddata/version.rb +1 -1
  77. data/rubydev_public.gpg.encrypted +51 -0
  78. data/rubydev_secret_keys.gpg.encrypted +109 -0
  79. data/spec/data/user_filters.csv +2 -0
  80. data/spec/environment/default.rb +2 -2
  81. data/spec/environment/development.rb +1 -1
  82. data/spec/environment/staging.rb +2 -3
  83. data/spec/environment/testing.rb +4 -4
  84. data/spec/integration/connection_spec.rb +37 -0
  85. data/spec/integration/core/connection_spec.rb +1 -1
  86. data/spec/integration/core/logging_spec.rb +8 -6
  87. data/spec/integration/core/project_spec.rb +1 -1
  88. data/spec/integration/mandatory_user_filter_spec.rb +53 -0
  89. data/spec/integration/mixins/id_to_uri_spec.rb +17 -5
  90. data/spec/integration/models/label_spec.rb +9 -0
  91. data/spec/integration/models/metric_spec.rb +24 -0
  92. data/spec/integration/models/process_spec.rb +35 -0
  93. data/spec/integration/models/project_role_spec.rb +1 -1
  94. data/spec/integration/models/schedule_spec.rb +0 -8
  95. data/spec/integration/schedule_spec.rb +4 -6
  96. data/spec/integration/user_filters_spec.rb +20 -16
  97. data/spec/integration/user_group_spec.rb +1 -1
  98. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/can_assign_a_custom_logger.yml +2287 -0
  99. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/client_logs_when_given_custom_message.yml +2287 -0
  100. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/has_the_request_id_logged_when_I_passed_it.yml +2287 -0
  101. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logging_off/Disables_logging.yml +2287 -0
  102. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logging_on/Enables_logging.yml +2287 -0
  103. data/spec/integration/vcr_cassettes/GoodData_-_project/_project/Returns_project_assigned.yml +354 -0
  104. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_nil.yml +299 -0
  105. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_directly.yml +354 -0
  106. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_using_project_ID.yml +354 -0
  107. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_using_project_URL.yml +354 -0
  108. data/spec/integration/vcr_cassettes/GoodData_-_project/_with_project/Uses_project_specified.yml +354 -0
  109. data/spec/integration/vcr_cassettes/GoodData_Metric/all.yml +2065 -0
  110. data/spec/integration/vcr_cassettes/GoodData_Metric/should_be_able_to_update_folders.yml +119 -0
  111. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/all.yml +9812 -0
  112. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_get_json_containing_correct_id.yml +174 -0
  113. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_return_nil_for_unknown_id.yml +58 -0
  114. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_throw_BadRequest_for_-1.yml +63 -0
  115. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_connect/Connects_using_username_and_password.yml +299 -0
  116. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_disconnect/Connects_using_username_and_password.yml +299 -0
  117. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_generate_request_id/Generates_a_non-empty_string.yml +2287 -0
  118. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_/Should_list_user_groups_as_Array.yml +56 -0
  119. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_add_members/Should_add_member.yml +315 -0
  120. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_members/Should_return_members_as_array.yml +54 -0
  121. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_remove_members/Should_remove_existing_members.yml +258 -0
  122. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_save/updates_existing_group.yml +159 -0
  123. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_set_members/Should_set_new_members.yml +158 -0
  124. data/spec/integration/vcr_cassettes/GoodData_UserGroup/all.yml +809 -0
  125. data/spec/spec_helper.rb +46 -2
  126. data/spec/unit/actions/associate_clients_spec.rb +2 -1
  127. data/spec/unit/actions/collect_data_product_spec.rb +3 -1
  128. data/spec/unit/actions/collect_segment_clients_spec.rb +1 -0
  129. data/spec/unit/actions/create_segment_masters_spec.rb +1 -0
  130. data/spec/unit/actions/ensure_data_product_spec.rb +1 -0
  131. data/spec/unit/actions/ensure_technical_users_domain_spec.rb +2 -0
  132. data/spec/unit/actions/ensure_technical_users_project_spec.rb +4 -0
  133. data/spec/unit/actions/provision_clients_spec.rb +2 -1
  134. data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +0 -6
  135. data/spec/unit/actions/synchronize_ldm_spec.rb +20 -7
  136. data/spec/unit/actions/synchronize_user_filters_spec.rb +21 -0
  137. data/spec/unit/helpers/check_helper_production_spec.rb +34 -0
  138. data/spec/unit/helpers/check_helper_spec.rb +97 -9
  139. data/spec/unit/lcm/lcm2_spec.rb +67 -3
  140. data/spec/unit/models/blueprint/to_wire_spec.rb +1 -0
  141. data/spec/unit/models/dataset_blueprint.rb +14 -0
  142. data/spec/unit/models/from_wire_spec.rb +20 -0
  143. data/spec/unit/models/model_spec.rb +10 -0
  144. data/spec/unit/models/to_manifest_spec.rb +29 -0
  145. data/spec/unit/models/user_filters/user_filter_builder_spec.rb +44 -6
  146. data/spec/unit/rest/phmap_spec.rb +117 -0
  147. data/spec/vcr_configurer.rb +63 -0
  148. metadata +283 -24
  149. data/lib/gooddata/lcm/actions/ensure_segments.rb +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 1a64b525cdec4b089de164628c08eddb299f75875e156204215b530c110b45f2
4
- data.tar.gz: 492d0cd232b7f3d999c5d255ae98c794dec372217f6d100c20e63389aa3788db
2
+ SHA1:
3
+ metadata.gz: 6b6f4b4a04c7d9e3bc5b91238454502895c617d4
4
+ data.tar.gz: 47ad281d269a76cf4d254216eef35d68719611b1
5
5
  SHA512:
6
- metadata.gz: 62fa97168460a21cbe452dec16fc00976d97aed011e287028255ac5cc53a9e8b3ca18506f8b0369fde45bcb9b6b532a953ad9fae6959592742583110edd723e8
7
- data.tar.gz: 66a42280ad478127ea4da38033bf8d78421f9cc43b944e206053511c98dc6a21db2fd319809314e12e12b692c06828c09c387cfbc6c056ad02c3bcb8700f1b4d
6
+ metadata.gz: 69b134a11f9074c7c4899e9720707452b436880f8e35241b7b974059bc1dc319f0b4c7407e5fced4bd21321169bfd5ab79818d5ed4029ed58bce942fbbe77dca
7
+ data.tar.gz: 2e28148e264d290c1dc4c696e8242e3616857b6e12aaf3137a8196340b0a26640134fa656a7e5c7bbca6e58696bf7b87ea1b673d77e1cb4549ac7137d4303de7
data/.gitignore CHANGED
@@ -16,6 +16,7 @@ tmtags
16
16
 
17
17
  ## IDEA
18
18
  .idea/
19
+ *.iml
19
20
 
20
21
  ## PROJECT::GENERAL
21
22
  .bundle
data/CONTRIBUTING.md CHANGED
@@ -35,4 +35,16 @@ We use [Pronto](https://github.com/prontolabs/pronto) to detect code smells usin
35
35
  [license](/LICENSE).
36
36
  1. Use `GoodData.logger` for logging instead of `puts`.
37
37
 
38
+ ## Integration tests
39
+ [Integration tests](spec/integration) can be run against different GoodData [environments](spec/environment) or with
40
+ [VCR](https://relishapp.com/vcr/vcr/docs).
41
+
42
+ ### VCR test setup
43
+ When adding new integration test, always set `:vcr` metadata.
44
+ ```ruby
45
+ describe 'New integration test', :vcr
46
+ ```
47
+ The VCR `record` mode can be set via `VCR_RECORD_MODE` environment variable. Set it to `all` to make a new recording.
48
+ Please check the recorded payloads for possible sensitive data before submitting to github.
49
+
38
50
  _Based on [GitLab's contribution guide](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md)._
data/README.md CHANGED
@@ -59,11 +59,14 @@ Pavel Kolesnikov [ <mailto:pavel@gooddata.com> / [@koles](http://twitter.com/kol
59
59
 
60
60
  **Actively developed and maintained by**
61
61
 
62
- - [Tomas Korcak](https://github.com/korczis) [ <mailto:korczis@gmail.com> / [@korczis](http://twitter.com/korczis) ]
63
- - [Tomas Svarovsky](https://github.com/fluke777) [ <mailto:svarovsky.tomas@gmail.com> / [@fluke777](http://twitter.com/fluke777) ]
62
+ - [Jan Zdráhal](https://github.com/panjan) [ <mailto:jan.zdrahal@gooddata.com> ]
63
+ - [Jakub Mahnert](https://github.com/kubamahnert) [ <mailto:jakub.mahnert@gooddata.com> ]
64
+ - [Petr Gaďorek](https://github.com/Hahihula) [ <mailto:petr.gadorek@gooddata.com> ]
64
65
 
65
66
  **Contributors**
66
67
 
68
+ - [Tomas Korcak](https://github.com/korczis) [ <mailto:korczis@gmail.com> / [@korczis](http://twitter.com/korczis) ]
69
+ - [Tomas Svarovsky](https://github.com/fluke777) [ <mailto:svarovsky.tomas@gmail.com> / [@fluke777](http://twitter.com/fluke777) ]
67
70
  - [Patrick McConlogue](https://github.com/thnkr/)
68
71
  - [Petr Cvengros](https://github.com/cvengros)
69
72
 
data/Rakefile CHANGED
@@ -7,7 +7,6 @@ require 'bundler/cli'
7
7
  require 'bundler/gem_tasks'
8
8
 
9
9
  require 'rake/testtask'
10
- require 'rake/notes/rake_task'
11
10
  require 'rspec/core/rake_task'
12
11
 
13
12
  require 'yard'
@@ -0,0 +1,40 @@
1
+ 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
40
+ KF37CX0=
data/gooddata.gemspec CHANGED
@@ -31,7 +31,6 @@ Gem::Specification.new do |s|
31
31
  s.add_development_dependency 'bundler', "~> 1.14"
32
32
  s.add_development_dependency 'license_finder', '~> 2.0'
33
33
  s.add_development_dependency 'rake', '~> 11.1'
34
- s.add_development_dependency 'rake-notes', '~> 0.2'
35
34
  s.add_development_dependency 'redcarpet', '~> 3.1' if RUBY_PLATFORM != 'java'
36
35
  s.add_development_dependency 'rspec', '~> 3.5'
37
36
  s.add_development_dependency 'rspec-expectations', '~> 3.5'
@@ -39,16 +38,17 @@ Gem::Specification.new do |s|
39
38
  s.add_development_dependency 'rubocop', '< 0.48' # TODO: remove it after dealing with new rules introduced in 0.48 version
40
39
  s.add_development_dependency 'simplecov', '~> 0.12'
41
40
  s.add_development_dependency 'webmock', '~> 1.21'
42
- s.add_development_dependency 'yard', '~> 0.8'
41
+ s.add_development_dependency 'yard', '~> 0.9.11'
43
42
  s.add_development_dependency 'yard-rspec', '~> 0.1'
44
43
  s.add_development_dependency 'ZenTest', '~> 4.11'
45
44
  s.add_development_dependency 'pry'
46
- s.add_development_dependency 'activesupport', '~> 4.2.9'
47
45
  s.add_development_dependency 'pronto', '~> 0.9.5' if RUBY_PLATFORM != 'java'
48
46
  s.add_development_dependency 'pronto-rubocop', '~> 0.9.0' if RUBY_PLATFORM != 'java'
49
47
  s.add_development_dependency 'pronto-reek', '~> 0.9.0' if RUBY_PLATFORM != 'java'
50
48
  s.add_development_dependency 'pronto-flay', '~> 0.9.0' if RUBY_PLATFORM != 'java'
49
+ s.add_development_dependency 'vcr'
51
50
 
51
+ s.add_dependency 'activesupport', '~> 4.2.9'
52
52
  s.add_dependency 'aws-sdk', '~> 2.9', '>= 2.9.42'
53
53
  s.add_dependency 'docile', '~> 1.1'
54
54
  s.add_dependency 'erubis', '~> 2.7'
@@ -66,7 +66,7 @@ module GoodData
66
66
  # @param [Hash] opts Additional options
67
67
  # @option opts [Fixnum] :validity Validity in seconds from 'now'
68
68
  # @return [String] URL which can be used for SSO logging in
69
- def sso_url(login, provider, opts = DEFAULT_SSO_OPTIONS)
69
+ def sso_url(login, provider, url, opts = DEFAULT_SSO_OPTIONS)
70
70
  opts = DEFAULT_SSO_OPTIONS.merge(opts)
71
71
 
72
72
  ts = DateTime.now.strftime('%s').to_i + opts[:valid]
@@ -83,21 +83,27 @@ module GoodData
83
83
  file_json.rewind
84
84
  file_signed = Tempfile.new('gooddata-sso-signed')
85
85
 
86
- cmd = "gpg --no-tty --armor --yes -u #{login} --output #{file_signed.path} --sign #{file_json.path}"
86
+ cmd = "gpg --yes --no-tty --armor -u #{login} --output #{file_signed.path} --sign #{file_json.path}"
87
87
  res = system(cmd)
88
88
  fail 'Unable to sign json' unless res
89
89
 
90
90
  file_signed.rewind
91
91
  file_final = Tempfile.new('gooddata-sso-final')
92
92
 
93
- cmd = "gpg --yes --no-tty --trust-model always --armor --output #{file_final.path} --encrypt --recipient security@gooddata.com #{file_signed.path}"
93
+ recipient = url == GoodData::Rest::Connection::DEFAULT_URL ? 'secure@gooddata.com' : 'test@gooddata.com'
94
+ cmd = "gpg --yes --no-tty --trust-model always --armor --output #{file_final.path} --encrypt --recipient #{recipient} #{file_signed.path}"
94
95
  res = system(cmd)
95
96
  fail 'Unable to encrypt json' unless res
96
97
 
97
98
  file_final.rewind
98
99
  final = file_final.read
99
100
 
100
- "#{GoodData::Helpers::AuthHelper.read_server}/gdc/account/customerlogin?sessionId=#{CGI.escape(final)}&serverURL=#{CGI.escape(provider)}&targetURL=#{CGI.escape(opts[:url])}"
101
+ params = {
102
+ targetUrl: opts[:url],
103
+ ssoProvider: provider,
104
+ encryptedClaims: final
105
+ }
106
+ [url + '/gdc/account/customerlogin', params]
101
107
  end
102
108
 
103
109
  # Connect to GoodData using SSO
@@ -112,15 +118,19 @@ module GoodData
112
118
  # @param [String] login Email address used for logging into gooddata
113
119
  # @param [String] provider Name of SSO provider
114
120
  # @return [GoodData::Rest::Client] Instance of REST client
115
- def connect_sso(login, provider)
116
- url = sso_url(login, provider)
117
-
118
- params = {
119
- :x_gdc_request => "#{GoodData::Rest::Connection.generate_string}:#{GoodData::Rest::Connection.generate_string}"
120
- }
121
-
122
- RestClient.get url, params do |response, _request, _result|
123
- Rest::Client.connect_sso(:sst_token => URI.decode(response.cookies['GDCAuthSST']))
121
+ def connect_sso(login, provider, url = GoodData::Rest::Connection::DEFAULT_URL, opts = {})
122
+ url, params = sso_url(login, provider, url)
123
+
124
+ RestClient::Request.execute(opts.merge(method: :post, url: url, payload: params)) do |response, _request, _result|
125
+ return Rest::Client.connect_sso(
126
+ opts.merge(
127
+ headers:
128
+ {
129
+ x_gdc_authsst: response.cookies['GDCAuthSST'],
130
+ x_gdc_authtt: response.cookies['GDCAuthTT']
131
+ }
132
+ )
133
+ )
124
134
  end
125
135
  end
126
136
  end
@@ -102,7 +102,6 @@ module GoodData
102
102
  end
103
103
 
104
104
  def realize_s3(params)
105
- params = GoodData::Helpers.stringify_keys(params)
106
105
  s3_client = params['aws_client'] && params['aws_client']['s3_client']
107
106
  raise 'AWS client not present. Perhaps S3Middleware is missing in the brick definition?' if !s3_client || !s3_client.respond_to?(:bucket)
108
107
  bucket_name = @options[:bucket]
@@ -21,13 +21,19 @@ module GoodData
21
21
  param :gdc_gd_client, instance_of(Type::GdClientType), required: true
22
22
 
23
23
  description 'Organization Name'
24
- param :organization, instance_of(Type::StringType), required: true
24
+ param :organization, instance_of(Type::StringType), required: false
25
25
 
26
26
  description 'Segments to manage'
27
27
  param :segments, array_of(instance_of(Type::SegmentType)), required: true
28
28
 
29
29
  description 'Should be custom MAQL DDL Applied'
30
30
  param :apply_maql_ddl, instance_of(Type::BooleanType), required: false, default: false
31
+
32
+ description 'Domain'
33
+ param :domain, instance_of(Type::StringType), required: false
34
+
35
+ description 'DataProduct to manage'
36
+ param :data_product, instance_of(Type::GDDataProductType), required: false
31
37
  end
32
38
 
33
39
  RESULT_HEADER = [
@@ -43,6 +49,7 @@ module GoodData
43
49
  client = params.gdc_gd_client
44
50
 
45
51
  domain_name = params.organization || params.domain
52
+ fail "Either organisation or domain has to be specified in params" unless domain_name
46
53
  domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
47
54
  data_product = params.data_product
48
55
 
@@ -16,7 +16,10 @@ module GoodData
16
16
  param :gdc_gd_client, instance_of(Type::GdClientType), required: true
17
17
 
18
18
  description 'Organization Name'
19
- param :organization, instance_of(Type::StringType), required: true
19
+ param :organization, instance_of(Type::StringType), required: false
20
+
21
+ description 'Domain'
22
+ param :domain, instance_of(Type::StringType), required: false
20
23
 
21
24
  description 'Delete Extra Clients'
22
25
  param :delete_extra, instance_of(Type::BooleanType), required: false, default: false
@@ -29,6 +32,9 @@ module GoodData
29
32
 
30
33
  description 'Segments to provision'
31
34
  param :segments_filter, array_of(instance_of(Type::StringType)), required: false
35
+
36
+ description 'DataProduct'
37
+ param :data_product, instance_of(Type::GDDataProductType), required: false
32
38
  end
33
39
 
34
40
  RESULT_HEADER = [
@@ -44,6 +50,7 @@ module GoodData
44
50
  client = params.gdc_gd_client
45
51
 
46
52
  domain_name = params.organization || params.domain
53
+ fail "Either organisation or domain has to be specified in params" unless domain_name
47
54
  domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
48
55
  data_product = params.data_product
49
56
 
@@ -17,6 +17,16 @@ module GoodData
17
17
  def check_params(specification, params)
18
18
  Helpers.check_params(specification, params)
19
19
  end
20
+
21
+ # This method is used to enable the possibility to read keys of params object
22
+ # which are not specified in the specification constant
23
+ # typically in case when method access params dynamically based on user input
24
+ def without_check(specification, params)
25
+ params.clear_filters # disables params validation
26
+ result = yield
27
+ params.setup_filters(specification) # enables params validation
28
+ result
29
+ end
20
30
  end
21
31
  end
22
32
  end
@@ -13,7 +13,13 @@ module GoodData
13
13
 
14
14
  PARAMS = define_params(self) do
15
15
  description 'Client Used for Connecting to GD'
16
- param :gdc_gd_client, instance_of(Type::GdClientType), required: true
16
+ param :gdc_gd_client, instance_of(Type::GdClientType), required: false
17
+
18
+ description 'Client used to connecting to development domain'
19
+ param :development_client, instance_of(Type::GdClientType), required: true
20
+
21
+ description 'Synchronization Info'
22
+ param :synchronize, array_of(instance_of(Type::AnyType)), required: true, generated: true
17
23
  end
18
24
 
19
25
  class << self
@@ -21,6 +21,9 @@ module GoodData
21
21
 
22
22
  description 'Segments to manage'
23
23
  param :segments, array_of(instance_of(Type::SegmentType)), required: true
24
+
25
+ description 'DataProduct to manage'
26
+ param :data_product, instance_of(Type::GDDataProductType), required: false
24
27
  end
25
28
 
26
29
  RESULT_HEADER = [
@@ -77,7 +77,9 @@ module GoodData
77
77
  clients = []
78
78
  errors = []
79
79
  data_source = GoodData::Helpers::DataSource.new(params.input_source)
80
- input_data = File.open(data_source.realize(params), 'r:UTF-8')
80
+ input_data = without_check(PARAMS, params) do
81
+ File.open(data_source.realize(params), 'r:UTF-8')
82
+ end
81
83
  GoodData.logger.debug("Input data: #{input_data.read}")
82
84
  GoodData.logger.debug("Segment names: #{segment_names}")
83
85
  CSV.foreach(input_data, :headers => true, :return_headers => false, encoding: 'utf-8') do |row|
@@ -3,7 +3,6 @@
3
3
  # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
-
7
6
  require_relative 'base_action'
8
7
 
9
8
  module GoodData
@@ -17,6 +16,15 @@ module GoodData
17
16
 
18
17
  description 'DataProduct to manage'
19
18
  param :data_product, instance_of(Type::StringType), required: false
19
+
20
+ description 'Organization Name'
21
+ param :organization, instance_of(Type::StringType), required: false
22
+
23
+ description 'Domain'
24
+ param :domain, instance_of(Type::StringType), required: false
25
+
26
+ description 'Logger'
27
+ param :gdc_logger, instance_of(Type::GdLogger), required: true
20
28
  end
21
29
 
22
30
  RESULT_HEADER = [
@@ -28,6 +36,7 @@ module GoodData
28
36
  params = params.to_hash
29
37
  client = params.gdc_gd_client
30
38
  domain_name = params.organization || params.domain
39
+ fail "Either organisation or domain has to be specified in params" unless domain_name
31
40
  domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
32
41
 
33
42
  if params.key?(:data_product)
@@ -36,7 +45,6 @@ module GoodData
36
45
  params.gdc_logger.info "Using data product 'default' since none was specified in brick parameters"
37
46
  data_product_id = 'default'
38
47
  end
39
-
40
48
  data_product = domain.data_products(data_product_id)
41
49
  results = [
42
50
  {
@@ -17,6 +17,15 @@ module GoodData
17
17
 
18
18
  description 'Dynamic Params'
19
19
  param :dynamic_params, instance_of(Type::HashType), required: false
20
+
21
+ description 'Client Id Column'
22
+ param :client_id_column, instance_of(Type::StringType), required: false
23
+
24
+ description 'Name Column'
25
+ param :param_name_column, instance_of(Type::StringType), required: false
26
+
27
+ description 'Value Column'
28
+ param :param_value_column, instance_of(Type::StringType), required: false
20
29
  end
21
30
 
22
31
  class << self
@@ -31,7 +40,9 @@ module GoodData
31
40
 
32
41
  input_source = params.dynamic_params.input_source
33
42
  data_source = GoodData::Helpers::DataSource.new(input_source)
34
- input_data = File.open(data_source.realize(params), 'r:UTF-8')
43
+ input_data = without_check(PARAMS, params) do
44
+ File.open(data_source.realize(params), 'r:UTF-8')
45
+ end
35
46
  GoodData.logger.debug("Input data: #{input_data.read}")
36
47
 
37
48
  schedule_params = {}
@@ -12,7 +12,7 @@ module GoodData
12
12
  DESCRIPTION = "Collect all objects in LDM: attributes (include CAs), facts, datasets"
13
13
 
14
14
  PARAMS = define_params(self) do
15
- description 'Development Client Used for Connecting to GD'
15
+ description 'Client used to connecting to development domain'
16
16
  param :development_client, instance_of(Type::GdClientType), required: true
17
17
 
18
18
  description 'Synchronization Info'
@@ -28,7 +28,11 @@ module GoodData
28
28
  synchronize = params.synchronize.pmap do |info|
29
29
  from = info.from
30
30
  from_project = development_client.projects(from) || fail("Invalid 'from' project specified - '#{from}'")
31
- objects = (from_project.attributes.to_a + from_project.labels.to_a + from_project.datasets.to_a + from_project.facts.to_a).map(&:uri)
31
+ datasets = from_project.datasets.to_a
32
+ # TMA-836 - reading objects from datasets includes deprecated ones
33
+ attributes = datasets.map(&:attribute_uris).flatten
34
+ facts = datasets.map(&:fact_uris).flatten
35
+ objects = (from_project.labels.to_a + datasets).map(&:uri) + attributes + facts
32
36
 
33
37
  info[:transfer_uris] ||= []
34
38
  info[:transfer_uris] += objects
@@ -19,7 +19,7 @@ module GoodData
19
19
  description 'Production Tag Names'
20
20
  param :production_tag, instance_of(Type::StringType), required: false, deprecated: true, replacement: :production_tags
21
21
 
22
- description 'Development Client Used for Connecting to GD'
22
+ description 'Client used to connecting to development domain'
23
23
  param :development_client, instance_of(Type::GdClientType), required: true
24
24
 
25
25
  description 'Synchronization Info'
@@ -16,7 +16,10 @@ module GoodData
16
16
  param :gdc_gd_client, instance_of(Type::GdClientType), required: true
17
17
 
18
18
  description 'Organization Name'
19
- param :organization, instance_of(Type::StringType), required: true
19
+ param :organization, instance_of(Type::StringType), required: false
20
+
21
+ description 'Domain'
22
+ param :domain, instance_of(Type::StringType), required: false
20
23
 
21
24
  description 'ADS Client'
22
25
  param :ads_client, instance_of(Type::AdsClientType), required: true
@@ -26,6 +29,9 @@ module GoodData
26
29
 
27
30
  description 'Table Name'
28
31
  param :release_table_name, instance_of(Type::StringType), required: false
32
+
33
+ description 'DataProduct'
34
+ param :data_product, instance_of(Type::GDDataProductType), required: false
29
35
  end
30
36
 
31
37
  RESULT_HEADER = [
@@ -42,6 +48,7 @@ module GoodData
42
48
  client = params.gdc_gd_client
43
49
 
44
50
  domain_name = params.organization || params.domain
51
+ fail "Either organisation or domain has to be specified in params" unless domain_name
45
52
  domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
46
53
  data_product = params.data_product
47
54
  domain_segments = domain.segments(:all, data_product)