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,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 'highline/import'
8
+ require 'multi_json'
9
+
10
+ require_relative '../core/core'
11
+
12
+ module GoodData
13
+ module Command
14
+ class User
15
+ class << self
16
+ def roles(pid)
17
+ roles_response = GoodData.get("/gdc/projects/#{pid}/roles")
18
+
19
+ roles = {}
20
+ roles_response['projectRoles']['roles'].each do |role_uri|
21
+ r = GoodData.get(role_uri)
22
+ identifier = r['projectRole']['meta']['identifier']
23
+ roles[identifier] = {
24
+ :user_uri => r['projectRole']['links']['roleUsers'],
25
+ :uri => role_uri
26
+ }
27
+ end
28
+ roles
29
+ end
30
+
31
+ def show(opts = { client: GoodData.connection })
32
+ client = opts[:client]
33
+ fail ArgumentError, 'No :client specified' if client.nil?
34
+ pp client.user.json
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,127 @@
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 'uri'
8
+
9
+ require_relative 'core/logging'
10
+
11
+ require_relative 'rest/rest'
12
+
13
+ module GoodData
14
+ class << self
15
+ DEFAULT_SSO_OPTIONS = {
16
+ :url => '/gdc/app/account/bootstrap',
17
+ :valid => 24 * 60 * 60
18
+ }
19
+
20
+ # Returns the active GoodData connection earlier initialized via GoodData.connect call
21
+ #
22
+ # @see GoodData.connect
23
+ def connection
24
+ # TODO: Remove this after successful rest-factory transition
25
+ Rest::Client.connection # || fail('Please authenticate with GoodData.connect first')
26
+ end
27
+
28
+ alias_method :client, :connection
29
+
30
+ # Connect to the GoodData API
31
+ #
32
+ # @param options
33
+ # @param second_options
34
+ # @param third_options
35
+ #
36
+ def connect(options = nil, second_options = nil, third_options = {})
37
+ Rest::Client.connect(options, second_options, third_options)
38
+ end
39
+
40
+ # Disconnect (logout) if logged in
41
+ def disconnect
42
+ Rest::Client.disconnect
43
+ end
44
+
45
+ def with_connection(options = nil, second_options = nil, third_options = {}, &bl)
46
+ connection = connect(options, second_options, third_options)
47
+ bl.call(connection)
48
+ rescue Exception => e # rubocop:disable RescueException
49
+ puts e.message
50
+ raise e
51
+ ensure
52
+ disconnect
53
+ end
54
+
55
+ # Generates SSO URL
56
+ #
57
+ # This SSO implementation is custom implementation provided by GoodData
58
+ # that allows your application to sign in an existing GoodData user.
59
+ # The authentication is done not by username and password but by generating a session
60
+ # specific token using pair of PGP keys.
61
+ #
62
+ # @see https://developer.gooddata.com/article/single-sign-on
63
+ #
64
+ # @param [String] login Email address used for logging into gooddata
65
+ # @param [String] provider Name of SSO provider
66
+ # @param [Hash] opts Additional options
67
+ # @option opts [Fixnum] :validity Validity in seconds from 'now'
68
+ # @return [String] URL which can be used for SSO logging in
69
+ def sso_url(login, provider, opts = DEFAULT_SSO_OPTIONS)
70
+ opts = DEFAULT_SSO_OPTIONS.merge(opts)
71
+
72
+ ts = DateTime.now.strftime('%s').to_i + opts[:valid]
73
+ obj = {
74
+ 'email' => login,
75
+ 'validity' => ts
76
+ }
77
+
78
+ json_data = JSON.pretty_generate(obj) + "\n"
79
+
80
+ file_json = Tempfile.new('gooddata-sso-json')
81
+ file_json.write(json_data)
82
+
83
+ file_json.rewind
84
+ file_signed = Tempfile.new('gooddata-sso-signed')
85
+
86
+ cmd = "gpg --no-tty --armor --yes -u #{login} --output #{file_signed.path} --sign #{file_json.path}"
87
+ res = system(cmd)
88
+ fail 'Unable to sign json' unless res
89
+
90
+ file_signed.rewind
91
+ file_final = Tempfile.new('gooddata-sso-final')
92
+
93
+ cmd = "gpg --yes --no-tty --trust-model always --armor --output #{file_final.path} --encrypt --recipient security@gooddata.com #{file_signed.path}"
94
+ res = system(cmd)
95
+ fail 'Unable to encrypt json' unless res
96
+
97
+ file_final.rewind
98
+ final = file_final.read
99
+
100
+ "#{GoodData::Helpers::AuthHelper.read_server}/gdc/account/customerlogin?sessionId=#{CGI.escape(final)}&serverURL=#{CGI.escape(provider)}&targetURL=#{CGI.escape(opts[:url])}"
101
+ end
102
+
103
+ # Connect to GoodData using SSO
104
+ #
105
+ # This SSO implementation is custom implementation provided by GoodData
106
+ # that allows your application to sign in an existing GoodData user.
107
+ # The authentication is done not by username and password but by generating a session
108
+ # specific token using pair of PGP keys.
109
+ #
110
+ # @see https://developer.gooddata.com/article/single-sign-on
111
+ #
112
+ # @param [String] login Email address used for logging into gooddata
113
+ # @param [String] provider Name of SSO provider
114
+ # @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']))
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,12 @@
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 'pathname'
8
+
9
+ base = Pathname(__FILE__).dirname.expand_path
10
+ Dir.glob(base + '*.rb').each do |file|
11
+ require file
12
+ end
@@ -0,0 +1,105 @@
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 'rest-client'
8
+
9
+ require_relative 'nil_logger'
10
+
11
+ module GoodData
12
+ DEFAULT_LOG_LEVEL = Logger::INFO
13
+ DEFAULT_LOG_OUTPUT = STDOUT
14
+ DEFAULT_LOGGER_CLASS = Logger
15
+
16
+ DEFAULT_RESTLOG_LEVEL = Logger::INFO
17
+ DEFAULT_RESTLOG_OUTPUT = STDOUT
18
+ DEFAULT_RESTLOGGER_CLASS = Logger
19
+
20
+ class << self
21
+ attr_accessor :logger, :rest_logger
22
+ attr_writer :stats
23
+
24
+ # Turn logging on
25
+ #
26
+ # ### Example
27
+ #
28
+ # # Turn of default logging
29
+ # GoodData.logging_on
30
+ #
31
+ # # Log only WARN and higher
32
+ # GoodData.logging_on(Logger::WARN)
33
+ #
34
+ # # Log DEBUG and above to file
35
+ # GoodData.logging_on(Logger::DEBUG, 'log.txt')
36
+ #
37
+ def logging_on(level = DEFAULT_LOG_LEVEL, output = DEFAULT_LOG_OUTPUT, klass = DEFAULT_LOGGER_CLASS)
38
+ @logger = klass.new(output)
39
+ @logger.level = level
40
+ @logger
41
+ end
42
+
43
+ # Turn logging on
44
+ #
45
+ # ### Example
46
+ #
47
+ # GoodData.logging_off
48
+ #
49
+ def logging_off
50
+ @logger = NilLogger.new
51
+ end
52
+
53
+ def logging_on?
54
+ !@logger.instance_of?(NilLogger)
55
+ end
56
+
57
+ # Turn logging on with HTTP included
58
+ #
59
+ # ### Example
60
+ #
61
+ # GoodData.logging_http_on
62
+ #
63
+ def logging_http_on(level = DEFAULT_RESTLOG_LEVEL, output = DEFAULT_RESTLOG_OUTPUT, klass = DEFAULT_RESTLOGGER_CLASS)
64
+ @logger = klass.new(output)
65
+ @logger.level = level
66
+ @logger
67
+ end
68
+
69
+ # Turn logging on
70
+ #
71
+ # ### Example
72
+ #
73
+ # GoodData.logging_http_off
74
+ #
75
+ def logging_http_off
76
+ @rest_client = NilLogger.new
77
+ end
78
+
79
+ def logging_http_on?
80
+ !@rest_client.instance_of?(NilLogger)
81
+ end
82
+
83
+ def stats_on
84
+ @stats = true
85
+ end
86
+
87
+ def stats_on?
88
+ @stats
89
+ end
90
+
91
+ def stats_off
92
+ @stats = false
93
+ end
94
+
95
+ # Initial setup of logger
96
+ GoodData.logger = GoodData.logging_on
97
+
98
+ # Initial setup of rest logger
99
+ GoodData.rest_logger = GoodData.logging_http_on(
100
+ nil,
101
+ DEFAULT_RESTLOG_OUTPUT,
102
+ NilLogger
103
+ )
104
+ end
105
+ end
@@ -0,0 +1,23 @@
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
+ module GoodData
8
+ # Dummy implementation of logger
9
+ class NilLogger
10
+ attr_accessor :level
11
+
12
+ def initialize(*_args)
13
+ @level = nil
14
+ end
15
+
16
+ def debug(*_args)
17
+ end
18
+
19
+ alias_method :info, :debug
20
+ alias_method :warn, :debug
21
+ alias_method :error, :debug
22
+ end
23
+ end
@@ -0,0 +1,74 @@
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
+ module GoodData
8
+ @project = nil
9
+
10
+ class << self
11
+ # Sets the active project
12
+ #
13
+ # @param project A project identifier
14
+ #
15
+ # ### Examples
16
+ #
17
+ # The following calls are equivalent
18
+ #
19
+ # # Assign project ID
20
+ # GoodData.project = 'afawtv356b6usdfsdf34vt'
21
+ #
22
+ # # Use project ID
23
+ # GoodData.use 'afawtv356b6usdfsdf34vt'
24
+ #
25
+ # # Use project URL
26
+ # GoodData.use '/gdc/projects/afawtv356b6usdfsdf34vt'
27
+ #
28
+ # # Select project using indexer on GoodData::Project class
29
+ # GoodData.project = Project['afawtv356b6usdfsdf34vt']
30
+ # Assigns global/default GoodData project
31
+ def project=(project, opts = { :client => GoodData.connection })
32
+ if project.is_a? Project
33
+ @project = project
34
+ elsif project.nil?
35
+ @project = nil
36
+ else
37
+ @project = Project[project, opts]
38
+ end
39
+ @project
40
+ end
41
+
42
+ alias_method :use, :project=
43
+
44
+ attr_reader :project
45
+
46
+ # Returns the active project
47
+ #
48
+ # def project
49
+ # threaded[:project]
50
+ # end
51
+
52
+ # Perform block in context of another project than currently set
53
+ #
54
+ # @param project Project to use
55
+ # @param bl Block to be performed
56
+ def with_project(project, opts = { :client => GoodData.connection }, &bl)
57
+ fail 'You have to specify a project when using with_project' if project.nil? || (project.is_a?(String) && project.empty?)
58
+ fail 'You have to specify block' unless bl
59
+ old_project = GoodData.project
60
+
61
+ begin
62
+ GoodData.use(project, opts)
63
+ res = bl.call(GoodData.project)
64
+ rescue RestClient::ResourceNotFound
65
+ GoodData.project = old_project
66
+ raise(GoodData::ProjectNotFound, 'Project was not found')
67
+ end
68
+
69
+ GoodData.project = old_project
70
+
71
+ res
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,149 @@
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
+ module GoodData
8
+ class << self
9
+ # Performs a HTTP GET request.
10
+ #
11
+ # Retuns the JSON response formatted as a Hash object.
12
+ #
13
+ # @param path The HTTP path on the GoodData server (must be prefixed with a forward slash)
14
+ #
15
+ # ### Examples
16
+ #
17
+ # GoodData.get '/gdc/projects'
18
+ #
19
+ def get(path, options = {})
20
+ connection.get(path, options)
21
+ end
22
+
23
+ # Performs a HTTP POST request.
24
+ #
25
+ # Retuns the JSON response formatted as a Hash object.
26
+ #
27
+ # @param path The HTTP path on the GoodData server (must be prefixed with a forward slash)
28
+ # @param data The payload data in the format of a Hash object
29
+ #
30
+ # ### Examples
31
+ #
32
+ # client.post '/gdc/projects', { ... }
33
+ #
34
+ def post(path, data = {}, options = {})
35
+ connection.post path, data, options
36
+ end
37
+
38
+ # Performs a HTTP PUT request.
39
+ #
40
+ # Retuns the JSON response formatted as a Hash object.
41
+ #
42
+ # ### Parameters
43
+ #
44
+ # @param path The HTTP path on the GoodData server (must be prefixed with a forward slash)
45
+ # @param data The payload data in the format of a Hash object
46
+ #
47
+ # ### Examples
48
+ #
49
+ # client.put '/gdc/projects', { ... }
50
+ #
51
+ def put(path, data, options = {})
52
+ connection.put path, data, options
53
+ end
54
+
55
+ # Performs a HTTP DELETE request.
56
+ #
57
+ # Retuns the JSON response formatted as a Hash object.
58
+ #
59
+ # @param path The HTTP path on the GoodData server (must be prefixed with a forward slash)
60
+ #
61
+ # ### Examples
62
+ #
63
+ # GoodData.delete '/gdc/project/1'
64
+ #
65
+ def delete(path, options = {})
66
+ connection.delete path, options
67
+ end
68
+
69
+ # Upload to user directory
70
+ # @return [String]
71
+ def upload_to_user_webdav(file, options = {})
72
+ url = user_webdav_path({ :client => GoodData.client }.merge(options))
73
+ connection.upload(file, options.merge(staging_url: url))
74
+ end
75
+
76
+ # Get WebDav directory for project data
77
+ # @return [String]
78
+ def project_webdav_path(options = {})
79
+ options = merge_options(options)
80
+ project = options[:project]
81
+ project.project_webdav_path
82
+ end
83
+
84
+ # Upload to project directory
85
+ def upload_to_project_webdav(file, options = {})
86
+ options = merge_options(options)
87
+ url = project_webdav_path(options)
88
+ connection.upload(file, options.merge(:staging_url => url))
89
+ end
90
+
91
+ # Download from project directory
92
+ def download_from_project_webdav(file, where, options = {})
93
+ options = merge_options(options)
94
+ url = project_webdav_path(options)
95
+ connection.download(file, where, options.merge(:staging_url => url))
96
+ end
97
+
98
+ # Get WebDav directory for user data
99
+ # @return [String]
100
+ def user_webdav_path(options = {})
101
+ client = GoodData::Rest::Object.client({ :client => GoodData.client }.merge(options))
102
+ client.user_webdav_path
103
+ end
104
+
105
+ # Download from user directory
106
+ def download_from_user_webdav(file, where, options = {})
107
+ url = user_webdav_path({ :client => GoodData.client }.merge(options))
108
+ connection.download(file, where, options.merge(:staging_url => url))
109
+ end
110
+
111
+ # Generalizaton of poller. Since we have quite a variation of how async proceses are handled
112
+ # this is a helper that should help you with resources where the information about "Are we done"
113
+ # is the http code of response. By default we repeat as long as the code == 202. You can
114
+ # change the code if necessary. It expects the URI as an input where it can poll. It returns the
115
+ # value of last poll. In majority of cases these are the data that you need.
116
+ #
117
+ # @param link [String] Link for polling
118
+ # @param options [Hash] Options
119
+ # @return [Hash] Result of polling
120
+ def poll_on_code(link, options = {})
121
+ client = options[:client]
122
+ fail ArgumentError, 'No :client specified' if client.nil?
123
+ client.poll_on_code(link, options)
124
+ end
125
+
126
+ # Generalizaton of poller. Since we have quite a variation of how async proceses are handled
127
+ # this is a helper that should help you with resources where the information about "Are we done"
128
+ # is inside the response. It expects the URI as an input where it can poll and a block that should
129
+ # return either false -> 'meaning we are done' or true -> meaning sleep and repeat. It returns the
130
+ # value of last poll. In majority of cases these are the data that you need
131
+ #
132
+ # @param link [String] Link for polling
133
+ # @param options [Hash] Options
134
+ # @return [Hash] Result of polling
135
+ def poll_on_response(link, options = {}, &bl)
136
+ client = options[:client]
137
+ fail ArgumentError, 'No :client specified' if client.nil?
138
+ client.poll_on_response(link, options, &bl)
139
+ end
140
+
141
+ private
142
+
143
+ def merge_options(opts)
144
+ {
145
+ :project => GoodData.project
146
+ }.merge(opts)
147
+ end
148
+ end
149
+ end