gooddata-edge 0.6.27.edge

Sign up to get free protection for your applications and to get access to all the features.
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