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,154 @@
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
+ module Model
9
+ module ToWire
10
+ # Converts anchor to wire format. There is difference between datsets that
11
+ # do not have anchor and those that do. Even if there is no acnhor you
12
+ # stil have to generate. If there is anchor it behaves exactly like am
13
+ # attribute
14
+ #
15
+ # @param project [Hash] Project blueprint hash represenation
16
+ # @param dataset [Hash] Dataset blueprint hash represenation
17
+ # @return [Hash] Manifest for a particular reference
18
+ def self.anchor_to_wire(_project, dataset)
19
+ attribute_to_wire(dataset, DatasetBlueprint.anchor(dataset))
20
+ end
21
+
22
+ # Converts atttribute to wire format.
23
+ #
24
+ # @param project [Hash] Project blueprint hash represenation
25
+ # @param dataset [Hash] Dataset blueprint hash represenation
26
+ # @return [Hash] Manifest for a particular reference
27
+ def self.attributes_to_wire(_project, dataset)
28
+ DatasetBlueprint.attributes(dataset).map do |a|
29
+ attribute_to_wire(dataset, a)
30
+ end
31
+ end
32
+
33
+ # Converts atttribute to wire format.
34
+ #
35
+ # @param dataset [Hash] Dataset blueprint hash represenation
36
+ # @param attribute [Hash] Attribute
37
+ # @return [Hash] Manifest for a particular reference
38
+ def self.attribute_to_wire(dataset, attribute)
39
+ ls = DatasetBlueprint.labels_for_attribute(dataset, attribute)
40
+ labels = ls.map do |l|
41
+ {
42
+ label: {
43
+ identifier: l[:id],
44
+ title: GoodData::Model.title(l),
45
+ type: l[:gd_type] || Model::DEFAULT_TYPE,
46
+ dataType: GoodData::Model.normalize_gd_data_type(l[:gd_data_type]) || Model::DEFAULT_ATTRIBUTE_DATATYPE
47
+ }
48
+ }
49
+ end
50
+ {}.tap do |a|
51
+ a[:attribute] = {}
52
+ a[:attribute][:identifier] = attribute[:id]
53
+ a[:attribute][:title] = Model.title(attribute)
54
+ a[:attribute][:folder] = attribute[:folder] || dataset[:folder] || GoodData::Model.title(dataset)
55
+ a[:attribute][:labels] = labels unless labels.empty?
56
+ a[:attribute][:description] = GoodData::Model.description(attribute) if GoodData::Model.description(attribute)
57
+ if attribute[:grain]
58
+ a[:attribute][:grain] = attribute[:grain].map do |g|
59
+ case g.keys.first
60
+ when :date
61
+ { dateDimension: g.values.first }
62
+ else
63
+ g
64
+ end
65
+ end
66
+ end
67
+ default = ls.find { |l| l[:default_label] }
68
+ a[:attribute][:defaultLabel] = (default && default[:id]) || ls.first[:id] unless ls.empty?
69
+ end
70
+ end
71
+
72
+ # Converts dataset to wire format.
73
+ #
74
+ # @param project [Hash] Project blueprint hash represenation
75
+ # @param dataset [Hash] Dataset blueprint hash represenation
76
+ # @return [Hash] Manifest for a particular reference
77
+ def self.dataset_to_wire(project, dataset)
78
+ {
79
+ dataset: {
80
+ identifier: dataset[:id],
81
+ title: GoodData::Model.title(dataset),
82
+ anchor: anchor_to_wire(project, dataset),
83
+ attributes: attributes_to_wire(project, dataset),
84
+ facts: DatasetBlueprint.facts(dataset).map { |f| fact_to_wire(dataset, f) },
85
+ references: references_to_wire(project, dataset)
86
+ }
87
+ }
88
+ end
89
+
90
+ # Converts date dimension to wire format.
91
+ #
92
+ # @param project [Hash] Project blueprint hash represenation
93
+ # @param dataset [Hash] Dataset blueprint hash represenation
94
+ # @return [Hash] Manifest for a particular reference
95
+ def self.date_dimension_to_wire(_project, dataset)
96
+ payload = {}.tap do |dd|
97
+ dd[:name] = dataset[:id]
98
+ dd[:urn] = dataset[:urn] if dataset[:urn]
99
+ dd[:title] = GoodData::Model.title(dataset)
100
+ end
101
+ { dateDimension: payload }
102
+ end
103
+
104
+ # Converts fact to wire format.
105
+ #
106
+ # @param dataset [Hash] Dataset blueprint hash represenation
107
+ # @param fact [Hash] Fact blueprint
108
+ # @return [Hash] Manifest for a particular reference
109
+ def self.fact_to_wire(dataset, fact)
110
+ payload = {
111
+ fact: {
112
+ identifier: fact[:id],
113
+ title: GoodData::Model.title(fact),
114
+ folder: fact[:folder] || dataset[:folder] || GoodData::Model.title(dataset),
115
+ dataType: GoodData::Model.normalize_gd_data_type(fact[:gd_data_type]) || DEFAULT_FACT_DATATYPE
116
+ }
117
+ }
118
+ payload.tap do |p|
119
+ p[:fact][:description] = GoodData::Model.description(fact) if GoodData::Model.description(fact)
120
+ end
121
+ end
122
+
123
+ # Converts references to wire format.
124
+ #
125
+ # @param fact [Hash] Project blueprint hash represenation
126
+ # @param dataset [Hash] Dataset blueprint hash represenation
127
+ # @return [Hash] Manifest for a particular reference
128
+ def self.references_to_wire(_project, dataset)
129
+ DatasetBlueprint.references(dataset).map do |r|
130
+ r[:dataset]
131
+ end
132
+ end
133
+
134
+ # Entry method. Converts ProjectBlueprint representation into wire format
135
+ # which is understood by the API
136
+ #
137
+ # @param fact [Hash] Project blueprint represenation
138
+ # @param dataset [Hash] Dataset blueprint hash represenation
139
+ # @return [Hash] Manifest for a particular reference
140
+ def self.to_wire(what)
141
+ {
142
+ diffRequest: {
143
+ targetModel: {
144
+ projectModel: {
145
+ datasets: (what[:datasets] || []).map { |d| dataset_to_wire(what, d) },
146
+ dateDimensions: (what[:date_dimensions] || []).map { |d| date_dimension_to_wire(what, d) }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,182 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
+ # This source code is licensed under the BSD-style license found in the
5
+ # LICENSE file in the root directory of this source tree.
6
+
7
+ require_relative '../rest/resource'
8
+
9
+ require_relative '../mixins/data_property_reader'
10
+ require_relative '../mixins/links'
11
+ require_relative '../mixins/rest_resource'
12
+ require_relative '../mixins/uri_getter'
13
+
14
+ module GoodData
15
+ class Client < Rest::Resource
16
+ data_property_reader 'id'
17
+
18
+ attr_accessor :domain
19
+
20
+ include Mixin::Links
21
+ include Mixin::UriGetter
22
+
23
+ CLIENT_TEMPLATE = {
24
+ client: {
25
+ id: nil,
26
+ segment: nil,
27
+ project: nil
28
+ }
29
+ }
30
+
31
+ class << self
32
+ def [](id, opts = {})
33
+ domain = opts[:domain]
34
+ segment = opts[:segment]
35
+ fail ArgumentError, 'No :domain specified' if domain.nil?
36
+ fail ArgumentError, 'No :segment specified' if domain.nil?
37
+
38
+ client = domain.client
39
+ fail ArgumentError, 'No client specified' if client.nil?
40
+
41
+ if id == :all
42
+ tenants_uri = domain.segments_uri + "/clients?segment=#{CGI.escape(segment.segment_id)}"
43
+ Enumerator.new do |y|
44
+ loop do
45
+ res = client.get tenants_uri
46
+ res['clients']['paging']['next']
47
+ res['clients']['items'].each do |i|
48
+ p = i['client']['project']
49
+ tenant = client.create(GoodData::Client, i.merge('domain' => domain))
50
+ tenant.project = p
51
+ y << tenant
52
+ end
53
+ url = res['clients']['paging']['next']
54
+ break unless url
55
+ end
56
+ end
57
+ else
58
+ id = id.respond_to?(:client_id) ? id.client_id : id
59
+ data = client.get(domain.segments_uri + "/clients/#{CGI.escape(id)}")
60
+ client.create(GoodData::Client, data.merge('domain' => domain))
61
+ end
62
+ end
63
+
64
+ # Creates new client from parameters passed
65
+ #
66
+ # @param options [Hash] Optional options
67
+ # @return [GoodData::Schedule] New GoodData::Schedule instance
68
+ def create(data = {}, options = {})
69
+ segment = options[:segment]
70
+ domain = segment.domain
71
+ tenant = client.create(GoodData::Client, GoodData::Helpers.deep_stringify_keys(CLIENT_TEMPLATE.merge(domain: domain)), domain: domain)
72
+ tenant.tap do |s|
73
+ s.project = data[:project]
74
+ s.client_id = data[:id]
75
+ s.segment = segment.uri
76
+ end
77
+ end
78
+ end
79
+
80
+ def initialize(data)
81
+ super(data)
82
+ @domain = data.delete('domain')
83
+ @json = data
84
+ end
85
+
86
+ # Segment id getter for the Segment. Called segment_id since id is a reserved word in ruby world
87
+ #
88
+ # @return [String] Segment id
89
+ def client_id
90
+ data['id']
91
+ end
92
+
93
+ def client_id=(a_name)
94
+ data['id'] = a_name
95
+ self
96
+ end
97
+
98
+ # Setter for the project this client has set
99
+ #
100
+ # @param a_project [String|GoodData::Project] Id or an instance of a project
101
+ # @return [GoodData::Cliet] Returns the instance of the client
102
+ def project=(a_project)
103
+ data['project'] = a_project.respond_to?(:uri) ? a_project.uri : a_project
104
+ self
105
+ end
106
+
107
+ # Project URI this client has set
108
+ #
109
+ # @return [String] Returns the URI of the project this client has set
110
+ def project_uri
111
+ data['project']
112
+ end
113
+
114
+ # Project this client has set
115
+ #
116
+ # @return [GoodData::Project] Returns the instance of the client's project
117
+ def project
118
+ client.projects(project_uri) if project?
119
+ end
120
+
121
+ # Returns boolean if client has a project provisioned
122
+ #
123
+ # @return [Boolean] Returns true if client has a project provisioned. False otherwise
124
+ def project?
125
+ project_uri != nil
126
+ end
127
+
128
+ # Reloads the client from the URI
129
+ #
130
+ # @return [GoodData::Client] Returns the updated client object
131
+ def reload!
132
+ res = client.get(uri)
133
+ @json = res
134
+ self
135
+ end
136
+
137
+ # Segment id setter which this client is connected to.
138
+ #
139
+ # @param a_segment [String] Id of the segment.
140
+ # @return [GoodData::Client] Returns the instance of the client
141
+ def segment=(a_segment)
142
+ data['segment'] = a_segment.respond_to?(:uri) ? a_segment.uri : a_segment
143
+ self
144
+ end
145
+
146
+ # Segment this client is connected to.
147
+ #
148
+ # @return [GoodData::Segment] Segment
149
+ def segment
150
+ segment_res = client.get(data['segment'])
151
+ client.create(GoodData::Segment, segment_res)
152
+ end
153
+
154
+ # Segment URI this client is connected to.
155
+ #
156
+ # @return [String] Segment URI
157
+ def segment_uri
158
+ data['segment']
159
+ end
160
+
161
+ # Creates or updates a client instance on the API.
162
+ #
163
+ # @return [GoodData::Client] Client instance
164
+ def save
165
+ if uri
166
+ client.put(uri, json)
167
+ else
168
+ res = client.post(domain.segments_uri + '/clients', json)
169
+ @json = res
170
+ end
171
+ self
172
+ end
173
+
174
+ # Deletes a client instance on the API.
175
+ #
176
+ # @return [GoodData::Client] Segment instance
177
+ def delete
178
+ project.delete if project && !project.deleted?
179
+ client.delete(uri) if uri
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
+ # This source code is licensed under the BSD-style license found in the
5
+ # LICENSE file in the root directory of this source tree.
6
+
7
+ require_relative './client_synchronization_result_details'
8
+
9
+ require_relative '../mixins/data_property_reader'
10
+ require_relative '../mixins/links'
11
+
12
+ require_relative '../rest/resource'
13
+
14
+ module GoodData
15
+ class ClientSynchronizationResult < Rest::Resource
16
+ include Mixin::Links
17
+
18
+ # Initializes object instance from raw wire JSON
19
+ #
20
+ # @param json Json used for initialization
21
+ def initialize(json, opts = {})
22
+ super(opts)
23
+ @json = json
24
+ end
25
+
26
+ def details
27
+ res = client.get(links['details'])
28
+ client.create(GoodData::ClientSynchronizationResultDetails, res) if res
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
+ # This source code is licensed under the BSD-style license found in the
5
+ # LICENSE file in the root directory of this source tree.
6
+
7
+ require_relative './client'
8
+
9
+ require_relative '../mixins/data_property_reader'
10
+ require_relative '../mixins/links'
11
+
12
+ require_relative '../rest/resource'
13
+
14
+ module GoodData
15
+ class ClientSynchronizationResultDetails < Rest::Resource
16
+ include Mixin::Links
17
+
18
+ attr_accessor :synchronization_result
19
+
20
+ # Initializes object instance from raw wire JSON
21
+ #
22
+ # @param json Json used for initialization
23
+ def initialize(json, opts = { :synchronization_result => nil })
24
+ super(opts)
25
+ @json = json
26
+ @synchronization_result = opts[:synchronization_result]
27
+ end
28
+
29
+ def items
30
+ data['items']
31
+ end
32
+
33
+ def next
34
+ paging && paging['next']
35
+ end
36
+
37
+ def paging
38
+ data['paging']
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,92 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
4
+ # This source code is licensed under the BSD-style license found in the
5
+ # LICENSE file in the root directory of this source tree.
6
+
7
+ require_relative '../rest/resource'
8
+
9
+ module GoodData
10
+ class DataWarehouse < Rest::Resource
11
+ class << self
12
+ CREATE_URL = '/gdc/datawarehouse/instances'
13
+
14
+ # Create a data warehouse from given attributes
15
+ # Expected keys:
16
+ # - :title (mandatory)
17
+ # - :auth_token (mandatory)
18
+ # - :summary
19
+ def create(opts)
20
+ GoodData.logger.info "Creating warehouse #{opts[:title]}"
21
+
22
+ c = client(opts)
23
+ fail ArgumentError, 'No :client specified' if c.nil?
24
+
25
+ opts = { :auth_token => Helpers::AuthHelper.read_token }.merge(opts)
26
+ auth_token = opts[:auth_token] || opts[:token]
27
+ fail ArgumentError, 'You have to provide your token for creating projects as :auth_token parameter' if auth_token.nil? || auth_token.empty?
28
+
29
+ title = opts[:title]
30
+ fail ArgumentError, 'You have to provide a title for creating warehouse as :title parameter' if title.nil? || title.empty?
31
+
32
+ json = {
33
+ 'instance' => {
34
+ 'title' => title,
35
+ 'description' => opts[:description] || opts[:summary] || 'No summary',
36
+ 'authorizationToken' => auth_token
37
+ }
38
+ }
39
+ # do the first post
40
+ res = c.post(CREATE_URL, json)
41
+
42
+ # wait until the instance is created
43
+ final_res = c.poll_on_response(res['asyncTask']['links']['poll'], opts.merge(sleep_interval: 3)) do |r|
44
+ r['asyncTask']['links']['instance'].nil?
45
+ end
46
+
47
+ # get the json of the created instance
48
+ final_json = c.get(final_res['asyncTask']['links']['instance'])
49
+
50
+ # create the public facing object
51
+ c.create(DataWarehouse, final_json)
52
+ end
53
+ end
54
+
55
+ def initialize(json)
56
+ super
57
+ @json = json
58
+ end
59
+
60
+ def title
61
+ json['instance']['title']
62
+ end
63
+
64
+ def summary
65
+ json['instance']['description']
66
+ end
67
+
68
+ def status
69
+ json['instance']['status']
70
+ end
71
+
72
+ def uri
73
+ json['instance']['links']['self']
74
+ end
75
+
76
+ def id
77
+ uri.split('/')[-1]
78
+ end
79
+
80
+ def delete
81
+ if state == 'DELETED'
82
+ fail "Warehouse '#{title}' with id #{uri} is already deleted"
83
+ end
84
+ client.delete(uri)
85
+ end
86
+
87
+ # alias methods to prevent confusion and support the same keys
88
+ # project has.
89
+ alias_method :state, :status
90
+ alias_method :description, :summary
91
+ end
92
+ end