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,188 @@
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 "Variables implementation", :constraint => 'slow' do
10
+ before(:all) do
11
+ @spec = JSON.parse(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_names => true)
12
+ @client = ConnectionHelper::create_default_connection
13
+ blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
14
+ @project = @client.create_project_from_blueprint(blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
15
+ @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
16
+
17
+ @label = GoodData::Attribute.find_first_by_title('Dev', client: @client, project: @project).label_by_name('email')
18
+
19
+ commits_data = [
20
+ ["lines_changed","committed_on","dev_id","repo_id"],
21
+ [1,"01/01/2014",1,1],
22
+ [3,"01/02/2014",2,2],
23
+ [5,"05/02/2014",3,1]]
24
+ @project.upload(commits_data, blueprint, 'dataset.commits')
25
+
26
+ devs_data = [
27
+ ["dev_id", "email"],
28
+ [1, "tomas@gooddata.com"],
29
+ [2, "petr@gooddata.com"],
30
+ [3, "jirka@gooddata.com"]]
31
+ @project.upload(devs_data, blueprint, 'dataset.devs')
32
+
33
+ @variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save
34
+
35
+ end
36
+
37
+ after(:all) do
38
+ @project.delete if @project
39
+ end
40
+
41
+ after(:each) do
42
+ @variable.user_values.select {|x| x.level == :user}.pmap &:delete
43
+ end
44
+
45
+ it "should create a variable filter" do
46
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, 'tomas@gooddata.com', 'jirka@gooddata.com']]
47
+
48
+ metric = @project.create_metric("SELECT SUM(#\"Lines Changed\")", :title => 'x')
49
+
50
+ # [jirka@gooddata.com | petr@gooddata.com | tomas@gooddata.com]
51
+ # [5.0 | 3.0 | 1.0 ]
52
+ @project.add_variable_permissions(filters, @variable)
53
+ r = @project.compute_report(left: [metric], top: [@label.attribute], filters: [@variable])
54
+ r.include_column?(['tomas@gooddata.com', 1]).should == true
55
+ r.include_column?(['jirka@gooddata.com', 5]).should == true
56
+ r.include_column?(['petr@gooddata.com', 3]).should == false
57
+
58
+ r = @project.compute_report(left: [metric], top: [@label.attribute])
59
+ r.include_column?(['tomas@gooddata.com', 1]).should == true
60
+ r.include_column?(['jirka@gooddata.com', 5]).should == true
61
+ r.include_column?(['petr@gooddata.com', 3]).should == true
62
+ end
63
+
64
+ it "should fail when asked to set a user not in project. No filters should be set up." do
65
+ filters = [
66
+ ['nonexistent_user@gooddata.com', @label.uri, "tomas@gooddata.com"],
67
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]
68
+ ]
69
+ expect do
70
+ @project.add_variable_permissions(filters, @variable)
71
+ end.to raise_error
72
+ expect(@variable.user_values.count).to eq 0
73
+ end
74
+
75
+ it "should pass and set users that are in the projects" do
76
+ filters = [
77
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]
78
+ ]
79
+ @project.add_variable_permissions(filters, @variable)
80
+ expect(@variable.user_values.count).to eq 1
81
+ end
82
+
83
+ it "should pass and set only users that are in the projects if asked" do
84
+ filters = [
85
+ ['nonexistent_user@gooddata.com', @label.uri, 'tomas@gooddata.com'],
86
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, 'tomas@gooddata.com']
87
+ ]
88
+ @project.add_variable_permissions(filters, @variable, users_must_exist: false)
89
+ expect(@variable.user_values.count).to eq 1
90
+ end
91
+
92
+ it "should fail when asked to set a value not in the proejct" do
93
+ filters = [
94
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com'],
95
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, 'tomas@gooddata.com']]
96
+ expect do
97
+ @project.add_variable_permissions(filters, @variable)
98
+ end.to raise_error
99
+ expect(@variable.user_values.count).to eq 0
100
+ end
101
+
102
+ it "should add a filter with nonexistent values when asked" do
103
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'jirka@gooddata.com']]
104
+ @project.add_variable_permissions(filters, @variable, ignore_missing_values: true)
105
+
106
+ expect(@variable.user_values.pmap {|m| m.pretty_expression}).to eq ["[Dev] IN ([jirka@gooddata.com])"]
107
+ expect(@variable.user_values.count).to eq 1
108
+ end
109
+
110
+ it "should be able to print data permissions in a human readable form" do
111
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]]
112
+ @project.add_variable_permissions(filters, @variable)
113
+ perms = @variable.user_values
114
+ pretty = perms.pmap {|f| [f.related.login, f.pretty_expression]}
115
+ expect(perms.first.related).to eq @client.user
116
+ expect(pretty).to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
117
+ end
118
+
119
+ it "sets up mandatory users based on the state given as an end state by default." do
120
+ # first let's prepare some user filters
121
+ user_with_already_set_up_filter = @project.get_user(ConnectionHelper::DEFAULT_USERNAME)
122
+
123
+ filters = [
124
+ [user_with_already_set_up_filter.login, @label.uri, "tomas@gooddata.com"]
125
+ ]
126
+ @project.add_variable_permissions(filters, @variable)
127
+ expect(@variable.user_values.map {|f| [f.related.login, f.pretty_expression] })
128
+ .to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
129
+
130
+ # Now let's add user filter to a different user. If we do not explicitely state that
131
+ # user_with_already_set_up_filter should keep his filter it will be removed
132
+ another_user = @domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
133
+ @project.add_user(another_user, 'Admin', domain: @domain)
134
+ new_filters = [
135
+ [another_user.login, @label.uri, "tomas@gooddata.com"]
136
+ ]
137
+ @project.add_variable_permissions(new_filters, @variable)
138
+ expect(@variable.user_values.map {|f| [f.related.login, f.pretty_expression] })
139
+ .to eq [[another_user.login, "[Dev] IN ([tomas@gooddata.com])"]]
140
+ end
141
+
142
+ it "should set up false if all values are nonexistent" do
143
+ metric = GoodData::Fact.find_first_by_title('Lines Changed', client: @client, project: @project).create_metric
144
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "NONEXISTENT1", "NONEXISTENT2", "NONEXISTENT3"]]
145
+ @project.add_variable_permissions(filters, @variable, ignore_missing_values: true)
146
+ # expect(metric.execute).to eq 9
147
+ expect(@variable.user_values.map {|f| [f.related.login, f.pretty_expression] })
148
+ .to eq [[ConnectionHelper::DEFAULT_USERNAME, "TRUE"]]
149
+
150
+ @project.add_variable_permissions(filters, @variable, ignore_missing_values: true, restrict_if_missing_all_values: true)
151
+ # expect(metric.execute).to eq nil
152
+ expect(@variable.user_values.count).to eq 0
153
+ end
154
+
155
+ it "you can switch the updates. Whatever is not mentioned will not be touched" do
156
+ # first let's prepare some user filters
157
+ user_with_already_set_up_filter = @project.get_user(ConnectionHelper::DEFAULT_USERNAME)
158
+
159
+ filters = [
160
+ [user_with_already_set_up_filter.login, @label.uri, "tomas@gooddata.com"]
161
+ ]
162
+ @project.add_variable_permissions(filters, @variable)
163
+ expect(@variable.user_values.map {|f| [f.related.login, f.pretty_expression] })
164
+ .to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
165
+ # Now let's add user filter to a different user. If we do not explicitely state that
166
+ # user_with_already_set_up_filter should keep his filter it will be removed
167
+ another_user = @domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
168
+ @project.add_user(another_user, 'Admin', domain: @domain)
169
+ new_filters = [
170
+ [another_user.login, @label.uri, "tomas@gooddata.com"]
171
+ ]
172
+ @project.add_variable_permissions(new_filters, @variable, do_not_touch_filters_that_are_not_mentioned: true)
173
+ expect(@variable.user_values.map {|f| [f.related.login, f.pretty_expression] })
174
+ .to include([ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"],
175
+ [another_user.login, "[Dev] IN ([tomas@gooddata.com])"])
176
+ end
177
+
178
+ it "should be able to update the filter value in place" do
179
+ pending 'FIXME: We cannot swap filters yet'
180
+
181
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com", "jirka@gooddata.com"]]
182
+ @project.add_variable_permissions(filters, @variable)
183
+ perm = @variable.user_values.first
184
+ filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]]
185
+ @project.add_variable_permissions(filters, @variable)
186
+ expect(perm.reload!.pretty_expression).to eq '[Dev] IN ([tomas@gooddata.com, jirka@gooddata.com])'
187
+ end
188
+ end
@@ -0,0 +1,93 @@
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 'pry'
9
+
10
+ describe GoodData::Rest::Connection, :constraint => 'slow' do
11
+
12
+ it "should log in and disconnect" do
13
+ client = ConnectionHelper::create_default_connection
14
+ expect(client).to be_kind_of(GoodData::Rest::Client)
15
+
16
+ client.get("/gdc/md")
17
+
18
+ client.disconnect
19
+ end
20
+
21
+ it 'should be able to log in with user name and password as params' do
22
+ client = GoodData.connect(GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME, GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
23
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
24
+ verify_ssl: false)
25
+ client.disconnect
26
+ end
27
+
28
+ it 'should be able to log in with user name and password as hash' do
29
+ client = GoodData.connect(username: GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME,
30
+ password: GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
31
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
32
+ verify_ssl: false)
33
+ client.disconnect
34
+ end
35
+
36
+ it 'should be able to log in with login and password as hash' do
37
+ client = GoodData.connect(login: GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME,
38
+ password: GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
39
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
40
+ verify_ssl: false)
41
+ client.disconnect
42
+ end
43
+
44
+ it 'should be able to pass additional params in hash' do
45
+ client = GoodData.connect(login: GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME,
46
+ password: GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
47
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
48
+ webdav_server: 'https://some_random_server/',
49
+ verify_ssl: false)
50
+ expect(client.opts[:webdav_server]).to eq 'https://some_random_server/'
51
+ client.disconnect
52
+ end
53
+
54
+ it 'should be able to pass additional params in hash when used login/pass' do
55
+ client = GoodData.connect(GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME, GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
56
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
57
+ webdav_server: 'https://some_random_server/',
58
+ verify_ssl: false)
59
+ expect(client.opts[:webdav_server]).to eq 'https://some_random_server/'
60
+ client.disconnect
61
+ end
62
+
63
+ it "should log in and disconnect with SST" do
64
+ regular_client = ConnectionHelper::create_default_connection
65
+ sst = regular_client.connection.sst_token
66
+
67
+ sst_client = GoodData.connect(sst_token: sst, verify_ssl: false)
68
+ expect(sst_client.projects.count).to be > 0
69
+ sst_client.disconnect
70
+
71
+ regular_client.disconnect
72
+ end
73
+
74
+ it "should log in and disconnect with SST with additional params" do
75
+ regular_client = ConnectionHelper::create_default_connection
76
+ sst = regular_client.connection.sst_token
77
+
78
+ sst_client = GoodData.connect(sst_token: sst, verify_ssl: false, webdav_server: 'https://some_random_server/')
79
+ expect(sst_client.projects.count).to be > 0
80
+ expect(sst_client.opts[:webdav_server]).to eq 'https://some_random_server/'
81
+ sst_client.disconnect
82
+
83
+ regular_client.disconnect
84
+ end
85
+
86
+ it "should be able to regenerate TT" do
87
+ regular_client = ConnectionHelper::create_default_connection
88
+ projects = regular_client.projects
89
+ regular_client.connection.cookies[:cookies].delete('GDCAuthTT')
90
+ regular_client.get('/gdc/md')
91
+ expect(regular_client.connection.cookies[:cookies]).to have_key 'GDCAuthTT'
92
+ end
93
+ end
@@ -0,0 +1,95 @@
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 'simplecov'
8
+ require 'pmap'
9
+ require 'rspec'
10
+ require 'pathname'
11
+ require 'webmock/rspec'
12
+
13
+ WebMock.disable!
14
+
15
+ # Automagically include all helpers/*_helper.rb
16
+
17
+ require_relative 'environment/environment'
18
+
19
+ GoodData::Environment.load
20
+
21
+ base = Pathname(__FILE__).dirname.expand_path
22
+ Dir.glob(base + 'helpers/*_helper.rb').each do |file|
23
+ require file
24
+ end
25
+
26
+ include GoodData::Helpers
27
+
28
+ RSpec::Expectations.configuration.warn_about_potential_false_positives = false
29
+
30
+ RSpec.configure do |config|
31
+ config.deprecation_stream = File.open('deprecations.txt', 'w')
32
+
33
+ config.include BlueprintHelper
34
+ config.include CliHelper
35
+ config.include ConnectionHelper
36
+ config.include CryptoHelper
37
+ config.include CsvHelper
38
+ config.include ProcessHelper
39
+ config.include ProjectHelper
40
+ config.include ScheduleHelper
41
+ # config.include SchemaHelper
42
+
43
+ config.filter_run_excluding :broken => true
44
+
45
+ config.fail_fast = false
46
+
47
+ config.before(:all) do
48
+ # TODO: Move this to some method.
49
+ # TODO Make more intelligent so two test suites can run at the same time.
50
+ # ConnectionHelper.create_default_connection
51
+ # users = GoodData::Domain.users(ConnectionHelper::DEFAULT_DOMAIN)
52
+ # users.pmap do |user|
53
+ # user.delete if user.email != ConnectionHelper::DEFAULT_USERNAME
54
+ # end
55
+
56
+ # TODO: Fully setup global environment
57
+ # $stdout.sync=true
58
+ # $stderr.sync=true
59
+
60
+ GoodData.logging_off
61
+ GoodData.stats_off
62
+ end
63
+
64
+ config.after(:all) do
65
+ # TODO: Fully setup global environment
66
+ end
67
+
68
+ config.before(:suite) do
69
+ # TODO: Setup test project
70
+ GoodData.logging_off
71
+ end
72
+
73
+ config.after(:suite) do
74
+ # TODO: Delete test project
75
+ end
76
+ end
77
+
78
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
79
+ SimpleCov::Formatter::HTMLFormatter
80
+ ]
81
+
82
+ SimpleCov.start do
83
+ add_filter 'spec/'
84
+ add_filter 'test/'
85
+
86
+ add_group 'Bricks', 'lib/gooddata/bricks'
87
+ add_group 'Middleware', 'lib/gooddata/bricks/middleware'
88
+ add_group 'CLI', 'lib/gooddata/cli'
89
+ add_group 'Commands', 'lib/gooddata/commands'
90
+ add_group 'Core', 'lib/gooddata/core'
91
+ add_group 'Exceptions', 'lib/gooddata/exceptions'
92
+ add_group 'Extensions', 'lib/gooddata/extensions'
93
+ add_group 'Goodzilla', 'lib/gooddata/goodzilla'
94
+ add_group 'Models', 'lib/gooddata/models'
95
+ end
@@ -0,0 +1,35 @@
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/bricks/bricks'
8
+
9
+ describe GoodData::Bricks::Brick do
10
+ it "Has GoodData::Bricks::Brick class" do
11
+ GoodData::Bricks::Brick.should_not == nil
12
+ end
13
+
14
+ describe '#version' do
15
+ it 'Throws NotImplemented on base class' do
16
+ brick = GoodData::Bricks::Brick.new
17
+ expect do
18
+ brick.version
19
+ end.to raise_error(NotImplementedError)
20
+ end
21
+ end
22
+
23
+ it "should be possible to execute custom brick" do
24
+ class CustomBrick < GoodData::Bricks::Brick
25
+
26
+ def call(params)
27
+ puts 'hello'
28
+ end
29
+ end
30
+
31
+ p = GoodData::Bricks::Pipeline.prepare([CustomBrick])
32
+
33
+ p.call({})
34
+ end
35
+ end
@@ -0,0 +1,51 @@
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/bricks/brick'
8
+ require 'gooddata/bricks/bricks'
9
+ require 'gooddata/bricks/middleware/aws_middleware'
10
+
11
+ describe GoodData::Bricks::AWSMiddleware do
12
+ it 'should do nothing if the key "aws_client" is not there at all' do
13
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
14
+ middleware.call({})
15
+ end
16
+
17
+ it 'should fail gracefully if value aws_client param not present even though the key is' do
18
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
19
+ expect do
20
+ middleware.call('aws_client' => nil)
21
+ end.to raise_exception 'Unable to connect to AWS. Parameter "aws_client" seems to be empty'
22
+ end
23
+
24
+ it 'should fail gracefully if value secret_access_key is missing' do
25
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
26
+ expect do
27
+ middleware.call('aws_client' => {
28
+ 'access_key_id' => 'something'
29
+ })
30
+ end.to raise_exception 'Unable to connect to AWS. Parameter "secret_access_key" is missing'
31
+ end
32
+
33
+ it 'should fail gracefully if value access_key_id is missing' do
34
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
35
+ expect do
36
+ middleware.call('aws_client' => {
37
+ 'secret_access_key' => 'something'
38
+ })
39
+ end.to raise_exception 'Unable to connect to AWS. Parameter "access_key_id" is missing'
40
+ end
41
+
42
+ it "should preapre aws middleware for aws_client param" do
43
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda do |params|
44
+ expect(params['aws_client']['s3_client']).to be_kind_of(Aws::S3::Resource)
45
+ end)
46
+ middleware.call('aws_client' => {
47
+ 'secret_access_key' => 'something',
48
+ 'access_key_id' => 'something'
49
+ })
50
+ end
51
+ end