gooddata-edge 0.6.27.edge

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 (364) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +36 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +89 -0
  6. data/.yardopts +22 -0
  7. data/CHANGELOG.md +196 -0
  8. data/CLI.md +439 -0
  9. data/DEPENDENCIES.md +817 -0
  10. data/Gemfile +4 -0
  11. data/Guardfile +5 -0
  12. data/LICENSE +22 -0
  13. data/LICENSE.rb +5 -0
  14. data/README.md +75 -0
  15. data/Rakefile +179 -0
  16. data/TODO.md +32 -0
  17. data/authors.sh +4 -0
  18. data/bin/gooddata +7 -0
  19. data/dependency_decisions.yml +104 -0
  20. data/gooddata +9 -0
  21. data/gooddata.gemspec +63 -0
  22. data/lib/gooddata.rb +31 -0
  23. data/lib/gooddata/app/app.rb +16 -0
  24. data/lib/gooddata/bricks/base_downloader.rb +86 -0
  25. data/lib/gooddata/bricks/brick.rb +38 -0
  26. data/lib/gooddata/bricks/bricks.rb +15 -0
  27. data/lib/gooddata/bricks/middleware/aws_middleware.rb +29 -0
  28. data/lib/gooddata/bricks/middleware/base_middleware.rb +56 -0
  29. data/lib/gooddata/bricks/middleware/bench_middleware.rb +24 -0
  30. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +37 -0
  31. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +20 -0
  32. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +48 -0
  33. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +36 -0
  34. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +39 -0
  35. data/lib/gooddata/bricks/middleware/logger_middleware.rb +29 -0
  36. data/lib/gooddata/bricks/middleware/middleware.rb +12 -0
  37. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +61 -0
  38. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +23 -0
  39. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +29 -0
  40. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +37 -0
  41. data/lib/gooddata/bricks/pipeline.rb +32 -0
  42. data/lib/gooddata/bricks/utils.rb +18 -0
  43. data/lib/gooddata/cli/cli.rb +27 -0
  44. data/lib/gooddata/cli/commands/auth_cmd.rb +29 -0
  45. data/lib/gooddata/cli/commands/domain_cmd.rb +28 -0
  46. data/lib/gooddata/cli/commands/project_cmd.rb +45 -0
  47. data/lib/gooddata/cli/hooks.rb +57 -0
  48. data/lib/gooddata/cli/shared.rb +61 -0
  49. data/lib/gooddata/cli/terminal.rb +20 -0
  50. data/lib/gooddata/client.rb +67 -0
  51. data/lib/gooddata/commands/api.rb +64 -0
  52. data/lib/gooddata/commands/auth.rb +107 -0
  53. data/lib/gooddata/commands/base.rb +12 -0
  54. data/lib/gooddata/commands/commands.rb +12 -0
  55. data/lib/gooddata/commands/datasets.rb +148 -0
  56. data/lib/gooddata/commands/datawarehouse.rb +20 -0
  57. data/lib/gooddata/commands/domain.rb +40 -0
  58. data/lib/gooddata/commands/process.rb +67 -0
  59. data/lib/gooddata/commands/project.rb +175 -0
  60. data/lib/gooddata/commands/projects.rb +20 -0
  61. data/lib/gooddata/commands/role.rb +36 -0
  62. data/lib/gooddata/commands/runners.rb +47 -0
  63. data/lib/gooddata/commands/scaffold.rb +69 -0
  64. data/lib/gooddata/commands/user.rb +39 -0
  65. data/lib/gooddata/connection.rb +127 -0
  66. data/lib/gooddata/core/core.rb +12 -0
  67. data/lib/gooddata/core/logging.rb +105 -0
  68. data/lib/gooddata/core/nil_logger.rb +23 -0
  69. data/lib/gooddata/core/project.rb +74 -0
  70. data/lib/gooddata/core/rest.rb +149 -0
  71. data/lib/gooddata/core/user.rb +20 -0
  72. data/lib/gooddata/data/data.rb +12 -0
  73. data/lib/gooddata/data/guesser.rb +122 -0
  74. data/lib/gooddata/exceptions/attr_element_not_found.rb +16 -0
  75. data/lib/gooddata/exceptions/command_failed.rb +11 -0
  76. data/lib/gooddata/exceptions/exceptions.rb +12 -0
  77. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +13 -0
  78. data/lib/gooddata/exceptions/filter_maqlization.rb +16 -0
  79. data/lib/gooddata/exceptions/malformed_user.rb +15 -0
  80. data/lib/gooddata/exceptions/no_project_error.rb +15 -0
  81. data/lib/gooddata/exceptions/object_migration.rb +32 -0
  82. data/lib/gooddata/exceptions/project_not_found.rb +13 -0
  83. data/lib/gooddata/exceptions/segment_not_empty.rb +18 -0
  84. data/lib/gooddata/exceptions/uncomputable_report.rb +13 -0
  85. data/lib/gooddata/exceptions/user_in_different_domain.rb +15 -0
  86. data/lib/gooddata/exceptions/validation_error.rb +16 -0
  87. data/lib/gooddata/extensions/big_decimal.rb +17 -0
  88. data/lib/gooddata/extensions/enumerable.rb +39 -0
  89. data/lib/gooddata/extensions/extensions.rb +10 -0
  90. data/lib/gooddata/extensions/false.rb +15 -0
  91. data/lib/gooddata/extensions/hash.rb +38 -0
  92. data/lib/gooddata/extensions/nil.rb +15 -0
  93. data/lib/gooddata/extensions/numeric.rb +15 -0
  94. data/lib/gooddata/extensions/object.rb +27 -0
  95. data/lib/gooddata/extensions/symbol.rb +15 -0
  96. data/lib/gooddata/extensions/true.rb +15 -0
  97. data/lib/gooddata/extract.rb +21 -0
  98. data/lib/gooddata/goodzilla/goodzilla.rb +159 -0
  99. data/lib/gooddata/helpers/auth_helpers.rb +75 -0
  100. data/lib/gooddata/helpers/csv_helper.rb +61 -0
  101. data/lib/gooddata/helpers/data_helper.rb +116 -0
  102. data/lib/gooddata/helpers/global_helpers.rb +331 -0
  103. data/lib/gooddata/helpers/global_helpers_params.rb +172 -0
  104. data/lib/gooddata/helpers/helpers.rb +10 -0
  105. data/lib/gooddata/mixins/author.rb +26 -0
  106. data/lib/gooddata/mixins/content_getter.rb +15 -0
  107. data/lib/gooddata/mixins/content_property_reader.rb +17 -0
  108. data/lib/gooddata/mixins/content_property_writer.rb +17 -0
  109. data/lib/gooddata/mixins/contributor.rb +20 -0
  110. data/lib/gooddata/mixins/data_getter.rb +15 -0
  111. data/lib/gooddata/mixins/data_property_reader.rb +19 -0
  112. data/lib/gooddata/mixins/data_property_writer.rb +19 -0
  113. data/lib/gooddata/mixins/inspector.rb +53 -0
  114. data/lib/gooddata/mixins/is_attribute.rb +17 -0
  115. data/lib/gooddata/mixins/is_dimension.rb +17 -0
  116. data/lib/gooddata/mixins/is_fact.rb +17 -0
  117. data/lib/gooddata/mixins/is_label.rb +19 -0
  118. data/lib/gooddata/mixins/links.rb +15 -0
  119. data/lib/gooddata/mixins/md_finders.rb +77 -0
  120. data/lib/gooddata/mixins/md_grantees.rb +42 -0
  121. data/lib/gooddata/mixins/md_id_to_uri.rb +34 -0
  122. data/lib/gooddata/mixins/md_json.rb +15 -0
  123. data/lib/gooddata/mixins/md_lock.rb +87 -0
  124. data/lib/gooddata/mixins/md_object_id.rb +15 -0
  125. data/lib/gooddata/mixins/md_object_indexer.rb +64 -0
  126. data/lib/gooddata/mixins/md_object_query.rb +128 -0
  127. data/lib/gooddata/mixins/md_relations.rb +43 -0
  128. data/lib/gooddata/mixins/meta_getter.rb +17 -0
  129. data/lib/gooddata/mixins/meta_property_reader.rb +19 -0
  130. data/lib/gooddata/mixins/meta_property_writer.rb +19 -0
  131. data/lib/gooddata/mixins/mixins.rb +19 -0
  132. data/lib/gooddata/mixins/not_attribute.rb +17 -0
  133. data/lib/gooddata/mixins/not_exportable.rb +15 -0
  134. data/lib/gooddata/mixins/not_fact.rb +17 -0
  135. data/lib/gooddata/mixins/not_group.rb +17 -0
  136. data/lib/gooddata/mixins/not_label.rb +19 -0
  137. data/lib/gooddata/mixins/not_metric.rb +19 -0
  138. data/lib/gooddata/mixins/obj_id.rb +15 -0
  139. data/lib/gooddata/mixins/rest_getters.rb +17 -0
  140. data/lib/gooddata/mixins/rest_resource.rb +47 -0
  141. data/lib/gooddata/mixins/root_key_getter.rb +15 -0
  142. data/lib/gooddata/mixins/root_key_setter.rb +15 -0
  143. data/lib/gooddata/mixins/timestamps.rb +19 -0
  144. data/lib/gooddata/mixins/to_json.rb +11 -0
  145. data/lib/gooddata/mixins/uri_getter.rb +9 -0
  146. data/lib/gooddata/models/blueprint/anchor_field.rb +64 -0
  147. data/lib/gooddata/models/blueprint/attribute_field.rb +29 -0
  148. data/lib/gooddata/models/blueprint/blueprint.rb +11 -0
  149. data/lib/gooddata/models/blueprint/blueprint_field.rb +70 -0
  150. data/lib/gooddata/models/blueprint/dashboard_builder.rb +30 -0
  151. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +449 -0
  152. data/lib/gooddata/models/blueprint/date_dimension.rb +14 -0
  153. data/lib/gooddata/models/blueprint/fact_field.rb +20 -0
  154. data/lib/gooddata/models/blueprint/label_field.rb +43 -0
  155. data/lib/gooddata/models/blueprint/project_blueprint.rb +746 -0
  156. data/lib/gooddata/models/blueprint/project_builder.rb +83 -0
  157. data/lib/gooddata/models/blueprint/reference_field.rb +43 -0
  158. data/lib/gooddata/models/blueprint/schema_blueprint.rb +160 -0
  159. data/lib/gooddata/models/blueprint/schema_builder.rb +89 -0
  160. data/lib/gooddata/models/blueprint/to_manifest.rb +181 -0
  161. data/lib/gooddata/models/blueprint/to_wire.rb +154 -0
  162. data/lib/gooddata/models/client.rb +182 -0
  163. data/lib/gooddata/models/client_synchronization_result.rb +31 -0
  164. data/lib/gooddata/models/client_synchronization_result_details.rb +41 -0
  165. data/lib/gooddata/models/datawarehouse.rb +92 -0
  166. data/lib/gooddata/models/domain.rb +479 -0
  167. data/lib/gooddata/models/execution.rb +115 -0
  168. data/lib/gooddata/models/execution_detail.rb +81 -0
  169. data/lib/gooddata/models/from_wire.rb +160 -0
  170. data/lib/gooddata/models/invitation.rb +75 -0
  171. data/lib/gooddata/models/links.rb +50 -0
  172. data/lib/gooddata/models/membership.rb +441 -0
  173. data/lib/gooddata/models/metadata.rb +272 -0
  174. data/lib/gooddata/models/metadata/attribute.rb +134 -0
  175. data/lib/gooddata/models/metadata/dashboard.rb +108 -0
  176. data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +76 -0
  177. data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +37 -0
  178. data/lib/gooddata/models/metadata/dashboard/filter_item.rb +64 -0
  179. data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +56 -0
  180. data/lib/gooddata/models/metadata/dashboard/headline_item.rb +56 -0
  181. data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +46 -0
  182. data/lib/gooddata/models/metadata/dashboard/report_item.rb +92 -0
  183. data/lib/gooddata/models/metadata/dashboard/text_item.rb +55 -0
  184. data/lib/gooddata/models/metadata/dashboard_tab.rb +141 -0
  185. data/lib/gooddata/models/metadata/dataset.rb +64 -0
  186. data/lib/gooddata/models/metadata/dimension.rb +54 -0
  187. data/lib/gooddata/models/metadata/fact.rb +44 -0
  188. data/lib/gooddata/models/metadata/label.rb +128 -0
  189. data/lib/gooddata/models/metadata/metadata.rb +12 -0
  190. data/lib/gooddata/models/metadata/metric.rb +198 -0
  191. data/lib/gooddata/models/metadata/report.rb +247 -0
  192. data/lib/gooddata/models/metadata/report_definition.rb +264 -0
  193. data/lib/gooddata/models/metadata/scheduled_mail.rb +274 -0
  194. data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +62 -0
  195. data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +64 -0
  196. data/lib/gooddata/models/metadata/variable.rb +91 -0
  197. data/lib/gooddata/models/model.rb +282 -0
  198. data/lib/gooddata/models/models.rb +12 -0
  199. data/lib/gooddata/models/module_constants.rb +31 -0
  200. data/lib/gooddata/models/process.rb +316 -0
  201. data/lib/gooddata/models/profile.rb +426 -0
  202. data/lib/gooddata/models/project.rb +1514 -0
  203. data/lib/gooddata/models/project_creator.rb +126 -0
  204. data/lib/gooddata/models/project_metadata.rb +67 -0
  205. data/lib/gooddata/models/project_role.rb +79 -0
  206. data/lib/gooddata/models/report_data_result.rb +266 -0
  207. data/lib/gooddata/models/schedule.rb +518 -0
  208. data/lib/gooddata/models/segment.rb +201 -0
  209. data/lib/gooddata/models/tab_builder.rb +27 -0
  210. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +76 -0
  211. data/lib/gooddata/models/user_filters/user_filter.rb +100 -0
  212. data/lib/gooddata/models/user_filters/user_filter_builder.rb +512 -0
  213. data/lib/gooddata/models/user_filters/user_filters.rb +13 -0
  214. data/lib/gooddata/models/user_filters/variable_user_filter.rb +31 -0
  215. data/lib/gooddata/models/user_group.rb +241 -0
  216. data/lib/gooddata/rest/README.md +37 -0
  217. data/lib/gooddata/rest/client.rb +389 -0
  218. data/lib/gooddata/rest/connection.rb +765 -0
  219. data/lib/gooddata/rest/object.rb +69 -0
  220. data/lib/gooddata/rest/object_factory.rb +76 -0
  221. data/lib/gooddata/rest/resource.rb +27 -0
  222. data/lib/gooddata/rest/rest.rb +24 -0
  223. data/lib/gooddata/version.rb +23 -0
  224. data/lib/templates/bricks/brick.rb.erb +7 -0
  225. data/lib/templates/bricks/main.rb.erb +5 -0
  226. data/lib/templates/project/Goodfile.erb +4 -0
  227. data/lib/templates/project/data/commits.csv +4 -0
  228. data/lib/templates/project/data/devs.csv +4 -0
  229. data/lib/templates/project/data/repos.csv +3 -0
  230. data/lib/templates/project/model/model.rb.erb +20 -0
  231. data/spec/bricks/bricks_spec.rb +112 -0
  232. data/spec/bricks/default-config.json +8 -0
  233. data/spec/data/.gooddata +4 -0
  234. data/spec/data/blueprints/additional_dataset_module.json +32 -0
  235. data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
  236. data/spec/data/blueprints/invalid_blueprint.json +103 -0
  237. data/spec/data/blueprints/m_n_model.json +104 -0
  238. data/spec/data/blueprints/model_module.json +25 -0
  239. data/spec/data/blueprints/test_blueprint.json +38 -0
  240. data/spec/data/blueprints/test_project_model_spec.json +106 -0
  241. data/spec/data/cc/data/source/commits.csv +4 -0
  242. data/spec/data/cc/data/source/devs.csv +4 -0
  243. data/spec/data/cc/data/source/repos.csv +3 -0
  244. data/spec/data/cc/devel.prm +0 -0
  245. data/spec/data/cc/graph/graph.grf +11 -0
  246. data/spec/data/cc/workspace.prm +19 -0
  247. data/spec/data/column_based_permissions.csv +7 -0
  248. data/spec/data/column_based_permissions2.csv +6 -0
  249. data/spec/data/gd_gse_data_blueprint.json +1371 -0
  250. data/spec/data/gd_gse_data_manifest.json +1424 -0
  251. data/spec/data/gd_gse_data_model.json +1772 -0
  252. data/spec/data/gooddata_version_process/gooddata_version.rb +9 -0
  253. data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
  254. data/spec/data/hello_world_process/hello_world.rb +9 -0
  255. data/spec/data/hello_world_process/hello_world.zip +0 -0
  256. data/spec/data/line_based_permissions.csv +3 -0
  257. data/spec/data/manifests/test_blueprint.json +32 -0
  258. data/spec/data/manifests/test_project.json +107 -0
  259. data/spec/data/reports/left_attr_report.json +108 -0
  260. data/spec/data/reports/metric_only_one_line.json +83 -0
  261. data/spec/data/reports/report_1.json +197 -0
  262. data/spec/data/reports/top_attr_report.json +108 -0
  263. data/spec/data/ruby_params_process/ruby_params.rb +9 -0
  264. data/spec/data/ruby_process/deep_files/deep_stuff.txt +1 -0
  265. data/spec/data/ruby_process/process.rb +8 -0
  266. data/spec/data/ruby_process/stuff.txt +1 -0
  267. data/spec/data/superfluous_titles_view.json +81 -0
  268. data/spec/data/test-ci-data.csv +2 -0
  269. data/spec/data/users.csv +12 -0
  270. data/spec/data/wire_models/model_view.json +1775 -0
  271. data/spec/data/wire_models/nu_model.json +3046 -0
  272. data/spec/data/wire_models/test_blueprint.json +63 -0
  273. data/spec/data/wire_test_project.json +150 -0
  274. data/spec/environment/default.rb +41 -0
  275. data/spec/environment/develop.rb +31 -0
  276. data/spec/environment/environment.rb +18 -0
  277. data/spec/environment/hotfix.rb +21 -0
  278. data/spec/environment/production.rb +35 -0
  279. data/spec/environment/release.rb +21 -0
  280. data/spec/environment/staging.rb +30 -0
  281. data/spec/environment/staging_3.rb +36 -0
  282. data/spec/helpers/blueprint_helper.rb +26 -0
  283. data/spec/helpers/cli_helper.rb +36 -0
  284. data/spec/helpers/connection_helper.rb +41 -0
  285. data/spec/helpers/crypto_helper.rb +17 -0
  286. data/spec/helpers/csv_helper.rb +18 -0
  287. data/spec/helpers/process_helper.rb +33 -0
  288. data/spec/helpers/project_helper.rb +59 -0
  289. data/spec/helpers/schedule_helper.rb +31 -0
  290. data/spec/helpers/spec_helper.rb +15 -0
  291. data/spec/integration/blueprint_updates_spec.rb +101 -0
  292. data/spec/integration/blueprint_with_grain_spec.rb +72 -0
  293. data/spec/integration/clients_spec.rb +134 -0
  294. data/spec/integration/command_datawarehouse_spec.rb +39 -0
  295. data/spec/integration/command_projects_spec.rb +32 -0
  296. data/spec/integration/create_from_template_spec.rb +22 -0
  297. data/spec/integration/create_project_spec.rb +24 -0
  298. data/spec/integration/date_dim_switch_spec.rb +142 -0
  299. data/spec/integration/deprecated_load_spec.rb +58 -0
  300. data/spec/integration/full_process_schedule_spec.rb +298 -0
  301. data/spec/integration/full_project_spec.rb +569 -0
  302. data/spec/integration/over_to_user_filters_spec.rb +94 -0
  303. data/spec/integration/partial_md_export_import_spec.rb +42 -0
  304. data/spec/integration/project_spec.rb +264 -0
  305. data/spec/integration/rest_spec.rb +213 -0
  306. data/spec/integration/schedule_spec.rb +626 -0
  307. data/spec/integration/segments_spec.rb +141 -0
  308. data/spec/integration/user_filters_spec.rb +290 -0
  309. data/spec/integration/user_group_spec.rb +127 -0
  310. data/spec/integration/variables_spec.rb +188 -0
  311. data/spec/logging_in_logging_out_spec.rb +93 -0
  312. data/spec/spec_helper.rb +95 -0
  313. data/spec/unit/bricks/bricks_spec.rb +35 -0
  314. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +51 -0
  315. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +15 -0
  316. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +15 -0
  317. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +15 -0
  318. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +15 -0
  319. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +15 -0
  320. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +15 -0
  321. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +15 -0
  322. data/spec/unit/cli/cli_spec.rb +17 -0
  323. data/spec/unit/cli/commands/cmd_auth_spec.rb +17 -0
  324. data/spec/unit/commands/command_projects_spec.rb +22 -0
  325. data/spec/unit/core/connection_spec.rb +57 -0
  326. data/spec/unit/core/logging_spec.rb +133 -0
  327. data/spec/unit/core/nil_logger_spec.rb +13 -0
  328. data/spec/unit/core/project_spec.rb +54 -0
  329. data/spec/unit/extensions/hash_spec.rb +23 -0
  330. data/spec/unit/godzilla/goodzilla_spec.rb +78 -0
  331. data/spec/unit/helpers/csv_helper_spec.rb +22 -0
  332. data/spec/unit/helpers/data_helper_spec.rb +61 -0
  333. data/spec/unit/helpers/global_helpers_spec.rb +111 -0
  334. data/spec/unit/helpers_spec.rb +86 -0
  335. data/spec/unit/models/blueprint/attributes_spec.rb +29 -0
  336. data/spec/unit/models/blueprint/dataset_spec.rb +121 -0
  337. data/spec/unit/models/blueprint/labels_spec.rb +44 -0
  338. data/spec/unit/models/blueprint/project_blueprint_spec.rb +648 -0
  339. data/spec/unit/models/blueprint/reference_spec.rb +29 -0
  340. data/spec/unit/models/blueprint/schema_builder_spec.rb +38 -0
  341. data/spec/unit/models/blueprint/to_wire_spec.rb +174 -0
  342. data/spec/unit/models/domain_spec.rb +144 -0
  343. data/spec/unit/models/execution_spec.rb +108 -0
  344. data/spec/unit/models/from_wire_spec.rb +296 -0
  345. data/spec/unit/models/invitation_spec.rb +17 -0
  346. data/spec/unit/models/membership_spec.rb +132 -0
  347. data/spec/unit/models/metadata_spec.rb +104 -0
  348. data/spec/unit/models/metric_spec.rb +117 -0
  349. data/spec/unit/models/model_spec.rb +82 -0
  350. data/spec/unit/models/params_spec.rb +118 -0
  351. data/spec/unit/models/profile_spec.rb +215 -0
  352. data/spec/unit/models/project_creator_spec.rb +127 -0
  353. data/spec/unit/models/project_role_spec.rb +94 -0
  354. data/spec/unit/models/project_spec.rb +162 -0
  355. data/spec/unit/models/report_result_data_spec.rb +199 -0
  356. data/spec/unit/models/schedule_spec.rb +418 -0
  357. data/spec/unit/models/to_manifest_spec.rb +63 -0
  358. data/spec/unit/models/unit_project_spec.rb +125 -0
  359. data/spec/unit/models/user_filters_spec.rb +95 -0
  360. data/spec/unit/models/variable_spec.rb +265 -0
  361. data/spec/unit/rest/polling_spec.rb +89 -0
  362. data/spec/unit/rest/resource_spec.rb +10 -0
  363. data/yard-server.sh +3 -0
  364. metadata +1125 -0
@@ -0,0 +1,134 @@
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/models/segment'
8
+ require 'securerandom'
9
+
10
+ describe GoodData::Client do
11
+ TOKEN = 'mustangs'
12
+
13
+ before(:all) do
14
+ @client = GoodData.connect('mustang@gooddata.com', 'jindrisska', server: 'https://mustangs.intgdc.com', verify_ssl: false )
15
+ @domain = @client.domain('mustangs')
16
+ @master_project = @client.create_project(title: 'Test project', auth_token: TOKEN)
17
+ @segment_name = "segment-#{SecureRandom.uuid}"
18
+ @segment = @domain.create_segment(segment_id: @segment_name, master_project: @master_project)
19
+ end
20
+
21
+ after(:all) do
22
+ @segment && @segment.delete
23
+ @master_project && @master_project.delete
24
+ @client.disconnect
25
+ end
26
+
27
+ describe '#[]' do
28
+ before(:all) do
29
+ client_id = SecureRandom.uuid
30
+ @client_project = @client.create_project(title: "client_#{client_id} project", auth_token: TOKEN)
31
+ @segment_client = @segment.create_client(id: "tenant_#{client_id}", project: @client_project)
32
+ end
33
+
34
+ it 'Returns all clients of a segment' do
35
+ clients = @segment.clients
36
+ expect(clients.to_a).to be_an_instance_of(Array)
37
+ expect(clients.to_a.count).to eq 1
38
+ end
39
+
40
+ it 'Returns specific tenant when schedule ID passed' do
41
+ client = @segment.clients(@segment_client)
42
+ expect(client).to be_an_instance_of(GoodData::Client)
43
+ expect(client.uri).to eq @segment_client.uri
44
+ end
45
+
46
+ after(:all) do
47
+ @segment_client && @segment_client.delete
48
+ @client_project && @client_project.delete
49
+ end
50
+
51
+ end
52
+
53
+ describe '#delete' do
54
+ before(:all) do
55
+ client_id = SecureRandom.uuid
56
+ @segment_client = @segment.create_client(id: "tenant_#{client_id}")
57
+ end
58
+
59
+ it 'Deletes particular client' do
60
+ expect(@segment.clients.count).to eq 1
61
+ s = @segment.clients(@segment_client)
62
+ s.delete
63
+ expect(@segment.clients.count).to eq 0
64
+ @segment_client = nil
65
+ end
66
+
67
+ after(:all) do
68
+ @segment_client && @segment_client.delete
69
+ end
70
+ end
71
+
72
+ describe '#delete' do
73
+ before(:all) do
74
+ client_id = SecureRandom.uuid
75
+ @client_project = @client.create_project(title: 'client_1 project', auth_token: TOKEN)
76
+ @segment_client = @segment.create_client(id: "tenant_#{client_id}", project: @client_project)
77
+ end
78
+
79
+ it 'Deletes particular client. Project is cleaned up as well' do
80
+ expect(@segment.clients.count).to eq 1
81
+ s = @segment.clients(@segment_client)
82
+ s.delete
83
+ expect(@segment.clients.count).to eq 0
84
+ expect(@client_project.reload!.state).to eq :deleted
85
+ @segment_client = nil
86
+ end
87
+
88
+ after(:all) do
89
+ @segment_client && @segment_client.delete
90
+ end
91
+ end
92
+
93
+ describe '#save' do
94
+ before(:all) do
95
+ @client_id = SecureRandom.uuid
96
+ @client_project = @client.create_project(title: 'client_1 project', auth_token: TOKEN)
97
+ @segment_client = @segment.create_client(id: "tenant_#{@client_id}", project: @client_project)
98
+ end
99
+
100
+ it 'can update project id' do
101
+ begin
102
+ other_client_project = @client.create_project(title: "client_#{@client_id} other project", auth_token: TOKEN)
103
+ @segment_client.project = other_client_project
104
+ @segment_client.save
105
+ expect(@segment.clients(@segment_client).project_uri).to eq other_client_project.uri
106
+ ensure
107
+ other_client_project && other_client_project.delete
108
+ end
109
+ end
110
+
111
+ it 'throws error when trying to update tenants segment id' do
112
+ second_segment_name = "segment-#{SecureRandom.uuid}"
113
+ second_master_project = @client.create_project(title: 'Test project', auth_token: TOKEN)
114
+ second_segment = @domain.create_segment(segment_id: second_segment_name, master_project: second_master_project)
115
+ @segment_client.segment = second_segment
116
+
117
+ expect {
118
+ @segment_client.save
119
+ }.to raise_error(RestClient::BadRequest)
120
+ end
121
+
122
+ it 'cannot update a client id' do
123
+ @segment_client.client_id = 'different_id'
124
+ expect {
125
+ @segment_client.save
126
+ }.to raise_error RestClient::BadRequest
127
+ end
128
+
129
+ after(:all) do
130
+ @segment_client && @segment_client.delete
131
+ @client_project && @client_project.delete
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,39 @@
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/commands/datawarehouse'
8
+
9
+ describe GoodData::Command::DataWarehouse do
10
+ before(:each) do
11
+ @client = ConnectionHelper.create_default_connection
12
+ end
13
+
14
+ after(:each) do
15
+ @client.disconnect
16
+ end
17
+
18
+ it "Is Possible to create GoodData::Command::DataWarehouse instance" do
19
+ cmd = GoodData::Command::DataWarehouse.new()
20
+ cmd.should be_a(GoodData::Command::DataWarehouse)
21
+ end
22
+
23
+ it "Can create a data warehouse" do
24
+ title = 'my warehouse'
25
+ summary = 'hahahaha'
26
+ dwh = nil
27
+
28
+ begin
29
+ dwh = GoodData::Command::DataWarehouse.create(title: title, summary: summary, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT, client: @client)
30
+
31
+ expect(dwh.title).to eq(title)
32
+ expect(dwh.summary).to eq(summary)
33
+ expect(dwh.id).not_to be_nil
34
+ expect(dwh.status).to eq('ENABLED')
35
+ ensure
36
+ dwh.delete if dwh
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,32 @@
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'
8
+ require 'gooddata/commands/project'
9
+
10
+ describe GoodData::Command::Project, :constraint => 'slow' do
11
+ before(:all) do
12
+ @client = ConnectionHelper.create_default_connection
13
+
14
+ @blueprint = GoodData::Model::ProjectBlueprint.from_json("./spec/data/blueprints/test_project_model_spec.json")
15
+ @module_blueprint = GoodData::Model::ProjectBlueprint.from_json("./spec/data/blueprints/additional_dataset_module.json")
16
+ @project = GoodData::Command::Project.build({:spec => @blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT, :client => @client})
17
+ end
18
+
19
+ after(:all) do
20
+ @project.delete unless @project.nil?
21
+ @client.disconnect
22
+ end
23
+
24
+ it "should update the project" do
25
+ @blueprint.merge!(@module_blueprint)
26
+ @project.blueprint.datasets.count.should == 3
27
+ @project.blueprint.datasets(:all, :include_date_dimensions => true).count.should == 4
28
+ @project.update_from_blueprint(@blueprint)
29
+ @project.blueprint.datasets.count.should == 4
30
+ @project.blueprint.datasets(:all, :include_date_dimensions => true).count.should == 5
31
+ end
32
+ end
@@ -0,0 +1,22 @@
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'
8
+
9
+ describe "Spin a project from template", :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper.create_default_connection
12
+ end
13
+
14
+ after(:all) do
15
+ @client.disconnect
16
+ end
17
+
18
+ it "should spin a project from a template that does not exist. It should throw an error" do
19
+ expect{GoodData::Project.create(:title => "Test project", :template => "/some/nonexisting/template/uri", :auth_token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT, :client => @client)}.to raise_error
20
+ end
21
+
22
+ end
@@ -0,0 +1,24 @@
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'
8
+
9
+ describe 'Create project using GoodData client', :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper.create_default_connection
12
+ end
13
+
14
+ after(:all) do
15
+ @client.disconnect
16
+ end
17
+
18
+ it 'Should create project using GoodData::Rest::Client#create_project' do
19
+ project_title = 'Test #create_project'
20
+ project = @client.create_project(:title => project_title, :auth_token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
21
+ expect(project.title).to eq(project_title)
22
+ project.delete
23
+ end
24
+ end
@@ -0,0 +1,142 @@
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'
8
+
9
+ describe "Swapping a date dimension and exchanging all attributes/elements", :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper::create_default_connection
12
+ @blueprint = GoodData::Model::ProjectBlueprint.build("My project from blueprint") do |p|
13
+ p.add_date_dimension('created_on')
14
+ p.add_date_dimension('created_on_2')
15
+
16
+ p.add_dataset('dataset.users') do |d|
17
+ d.add_anchor('attr.users.id')
18
+ d.add_label('label.users.id', reference: 'attr.users.id')
19
+ d.add_date('created_on')
20
+ d.add_fact('fact.users.some_number')
21
+ end
22
+ end
23
+
24
+ # Create a project
25
+ @project = @client.create_project_from_blueprint(@blueprint, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
26
+
27
+ # Load data
28
+ users_data = [
29
+ ["label.users.id", "created_on", "fact.users.some_number"],
30
+ [1,"01/01/2014",1],
31
+ [2,"10/15/2014",2],
32
+ [3,"05/02/2014",3]
33
+ ]
34
+ @project.upload(users_data, @blueprint, 'dataset.users')
35
+
36
+ end
37
+
38
+ after(:all) do
39
+ @project.delete unless @project.nil?
40
+
41
+ @client.disconnect
42
+ end
43
+
44
+ it "should swap the dimension, exhcange all stuff and not break anything" do
45
+
46
+ # WE have 2 date dims
47
+ expect(@blueprint.date_dimensions.map(&:id)).to eq ["created_on", "created_on_2"]
48
+ # One is connected
49
+ expect(@blueprint.datasets.flat_map(&:references).map(&:reference).include?('created_on')).to be_truthy
50
+ # The other is disconnected
51
+ expect(@blueprint.datasets.flat_map(&:references).map(&:reference).include?('created_on_2')).to be_falsey
52
+
53
+
54
+ # Create a metric
55
+ @metric_1 = @project.attributes('created_on.date').create_metric(title: 'Count of days in DD')
56
+ @metric_1.save
57
+
58
+ # Create a report
59
+ @report = @project.create_report(left: @metric_1, top: ['created_on.date'], title: 'Beautiful report')
60
+ @report.save
61
+
62
+ def suggest_mapping(label_a, label_b, project)
63
+ as = project.attributes
64
+ a1 = as.select {|a| a.identifier.include?("#{label_a}.")}.pmapcat { |a| [a] + a.labels }
65
+ a2 = as.select {|a| a.identifier.include?("#{label_b}.")}.pmapcat { |a| [a] + a.labels }
66
+ a1.reduce({}) do |a, e|
67
+ match = a2.find { |l| l.identifier.gsub(/^#{label_b}/, '') == e.identifier.gsub(/^#{label_a}/, '') }
68
+ a[e.identifier] = match && match.identifier
69
+ a
70
+ end
71
+ end
72
+
73
+ # Create definition with report specific metric
74
+ @metric_2 = @project.attributes('created_on.date').create_metric(title: 'Count of days in DD Secret')
75
+ @metric_2.deprecated = true
76
+ @metric_2.save
77
+ @report_with_private = @project.create_report({
78
+ left: @metric_2,
79
+ top: ['created_on.day.in.week'],
80
+ title: 'Beautiful report with private'
81
+ })
82
+ @report_with_private.save
83
+
84
+ # Create a definition with a filter value
85
+ @report = @project.create_report({
86
+ left: @metric_2,
87
+ top: ['created_on.quarter'],
88
+ filters: [['created_on.year', 2015, 2016]],
89
+ title: 'Beautiful report with filters'
90
+ })
91
+ @report.save
92
+
93
+ @label = @project.labels('created_on.year').primary_label
94
+ @variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save
95
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, '2015', '2016']]
96
+ @project.add_variable_permissions(filters, @variable)
97
+
98
+ as = @project.attributes.select {|a| a.identifier.include?('created_on_2.')}
99
+ expect(as.pmapcat {|a| a.usedby('report')}).to be_empty
100
+ expect(as.pmapcat {|a| a.usedby('metric')}).to be_empty
101
+ expect(as.pmapcat {|a| a.usedby('dashboard')}).to be_empty
102
+
103
+ # replace values
104
+ mapping = GoodData::Helpers.prepare_mapping(suggest_mapping('created_on', 'created_on_2', @project), project: @project)
105
+ @project.replace_from_mapping(mapping)
106
+
107
+ # Check if any of the attributes is used by any of the objects. All should be empty
108
+ as = @project.attributes.select {|a| a.identifier.include?('created_on.')}
109
+ expect(as.pmapcat {|a| a.usedby('report')}).to be_empty
110
+ expect(as.pmapcat {|a| a.usedby('metric')}).to be_empty
111
+ expect(as.pmapcat {|a| a.usedby('dashboard')}).to be_empty
112
+
113
+ # Reload stuff
114
+ @metric_2.reload!
115
+ @report.reload!
116
+ @report_with_private.reload!
117
+
118
+ # Stuff should be still computable
119
+ @metric_2.execute
120
+ @report.execute
121
+ @report_with_private.execute
122
+
123
+ # Labels
124
+ GoodData::SmallGoodZilla.get_uris(@metric_2.expression)
125
+ expect(@report.definition.attributes.map(&:identifier)).to eq ["created_on_2.quarter"]
126
+ ids = GoodData::SmallGoodZilla.get_uris(@report.definition.filters.first).map { |x| x.split('/')[-2..-1].join('/') }
127
+ expect(ids).to eq ["obj/2286", "2286/elements?id=2015", "2286/elements?id=2016"]
128
+
129
+ ids = GoodData::SmallGoodZilla.get_uris(@report.definition.filters.first).map { |x| x.split('/')[-2..-1].join('/') }
130
+ expect(ids).to eq ["obj/2286", "2286/elements?id=2015", "2286/elements?id=2016"]
131
+
132
+ ids = GoodData::SmallGoodZilla.get_uris(@variable.values.first.expression).map {|v| v.split('/')[-2..-1].join('/')}
133
+ expect(ids).to eq ["obj/2286", "2286/elements?id=2015", "2286/elements?id=2016"]
134
+
135
+ # Swap the dims
136
+ bp = @project.blueprint
137
+ bp.swap_date_dimension!('created_on', 'created_on_2')
138
+ @project.update_from_blueprint(bp)
139
+ expect(bp.datasets.flat_map(&:references).map(&:reference).include?('created_on')).to be_falsey
140
+ expect(bp.datasets.flat_map(&:references).map(&:reference).include?('created_on_2')).to be_truthy
141
+ end
142
+ end
@@ -0,0 +1,58 @@
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'
8
+
9
+ describe "Full project implementation", :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper::create_default_connection
12
+ @blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
13
+ p.add_dataset("dataset.repos") do |d|
14
+ d.add_anchor("attr.repository")
15
+ d.add_label('label.repository.name', reference: 'attr.repository')
16
+ d.add_attribute("attr.attribute1", title: 'Some attribute')
17
+ d.add_label('label.attribute1.name', reference: 'attr.attribute1')
18
+ d.add_fact('some_numbers', gd_data_type: 'INT')
19
+ end
20
+ end
21
+
22
+ @project = @client.create_project_from_blueprint(@blueprint, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
23
+ end
24
+
25
+ after(:all) do
26
+ @project.delete unless @project.nil?
27
+ @client.disconnect
28
+ end
29
+
30
+ it 'should upload data using local blueprint' do
31
+ devs_data = [
32
+ ["label.repository.name", "label.attribute1.name", "some_numbers"],
33
+ [1, "tomas@gooddata.com", 10],
34
+ [2, "petr@gooddata.com", 20],
35
+ [3, "jirka@gooddata.com", 30]]
36
+ @project.upload(devs_data, @blueprint, 'dataset.repos')
37
+ vals = @project.labels('label.repository.name').values.to_a.map {|l| l[:value]}
38
+ expect(vals).to eq ["1", "2", "3"]
39
+ end
40
+
41
+ it 'should upload the data when you deprecate attribute with remote blueprint' do
42
+ l = @project.labels('label.repository.name')
43
+ l.deprecated = true
44
+ l.save
45
+ b = @project.labels(l.identifier)
46
+ expect(b.deprecated?).to be_truthy
47
+
48
+ devs_data = [
49
+ ["label.repository.name", "label.attribute1.name", "some_numbers"],
50
+ [1, "tomas@gooddata.com", 10],
51
+ [2, "petr@gooddata.com", 20],
52
+ [3, "jirka@gooddata.com", 30],
53
+ [4, "jindrich@gooddata.com", 40]]
54
+ @project.upload(devs_data, @project.blueprint, 'dataset.repos')
55
+ vals = @project.labels('label.repository.name').values.to_a.map {|l| l[:value]}
56
+ expect(vals).to eq ["1", "2", "3", "4"]
57
+ end
58
+ end