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,115 @@
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
+ require_relative '../extensions/hash'
9
+
10
+ module GoodData
11
+ class Execution < Rest::Resource
12
+ attr_reader :dirty, :json
13
+
14
+ alias_method :data, :json
15
+
16
+ # Initializes object instance from raw wire JSON
17
+ #
18
+ # @param json Json used for initialization
19
+ def initialize(json)
20
+ super
21
+ @json = json
22
+ end
23
+
24
+ # Timestamp when execution was created
25
+ def created
26
+ Time.parse(json['execution']['createdTime'])
27
+ end
28
+
29
+ # Data for execution
30
+ def data
31
+ @client.get(json['execution']['data'])
32
+ end
33
+
34
+ # Has execution failed?
35
+ def error?
36
+ status == :error
37
+ end
38
+
39
+ # Timestamp when execution was finished
40
+ def finished
41
+ json['execution']['endTime'] && Time.parse(json['execution']['endTime'])
42
+ end
43
+
44
+ # Log for execution
45
+ def log
46
+ @client.get(json['execution']['log'])
47
+ end
48
+
49
+ # Is execution ok?
50
+ def ok?
51
+ status == :ok
52
+ end
53
+
54
+ # Returns schedule URL
55
+ #
56
+ # @return [String] Schedule URL
57
+ def schedule_uri
58
+ uri = @json['execution']['links']['self'] if @json && @json['execution'] && @json['execution']['links']
59
+ uri.split('/')[0..-3].join('/')
60
+ end
61
+
62
+ # Is execution running?
63
+ def running?
64
+ status == :running
65
+ end
66
+
67
+ # Returns schedule
68
+ #
69
+ # @return [String] Schedule URL
70
+ def schedule
71
+ schedule_uri && project.schedules(schedule_uri)
72
+ end
73
+
74
+ # Timestamp when execution was started
75
+ def started
76
+ Time.parse(json['execution']['startTime'])
77
+ end
78
+
79
+ # Status of execution
80
+ def status
81
+ json['execution']['status'].downcase.to_sym
82
+ end
83
+
84
+ # Returns URL
85
+ #
86
+ # @return [String] Schedule URL
87
+ def uri
88
+ @json['execution']['links']['self'] if @json && @json['execution'] && @json['execution']['links']
89
+ end
90
+
91
+ # Wait for execution result, status different than RUNNING or SCHEDULED
92
+ #
93
+ # @return [GoodData::Execution] Execution result
94
+ def wait_for_result(options = {})
95
+ res = client.poll_on_response(uri, options) do |body|
96
+ body['execution'] && (body['execution']['status'] == 'RUNNING' || body['execution']['status'] == 'SCHEDULED')
97
+ end
98
+ @json = res
99
+ self
100
+ end
101
+
102
+ def duration
103
+ if running?
104
+ Time.now - started
105
+ else
106
+ finished && finished - started
107
+ end
108
+ end
109
+
110
+ # Compares two executions - based on their URI
111
+ def ==(other)
112
+ other.respond_to?(:uri) && other.uri == uri && other.respond_to?(:to_hash) && other.to_hash == to_hash
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,81 @@
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
+ require_relative '../extensions/hash'
9
+
10
+ module GoodData
11
+ class ExecutionDetail < Rest::Resource
12
+ attr_reader :dirty, :json
13
+
14
+ alias_method :data, :json
15
+
16
+ # Initializes object instance from raw wire JSON
17
+ #
18
+ # @param json Json used for initialization
19
+ def initialize(json)
20
+ super
21
+ @json = json
22
+ end
23
+
24
+ # Timestamp when execution was created
25
+ def created
26
+ Time.parse(json['executionDetail']['created'])
27
+ end
28
+
29
+ # Has execution failed?
30
+ def error?
31
+ status == :error
32
+ end
33
+
34
+ # Timestamp when execution was finished
35
+ def finished
36
+ Time.parse(json['executionDetail']['finished'])
37
+ end
38
+
39
+ # Log for execution
40
+ def log
41
+ @client.get(json['executionDetail']['links']['log'])
42
+ end
43
+
44
+ # Filename of log
45
+ def log_filename
46
+ @client.get(json['executionDetail']['logFileName'])
47
+ end
48
+
49
+ # Is execution ok?
50
+ def ok?
51
+ status == :ok
52
+ end
53
+
54
+ # Timestamp when execution was started
55
+ def started
56
+ Time.parse(json['executionDetail']['started'])
57
+ end
58
+
59
+ # Status of execution
60
+ def status
61
+ json['executionDetail']['status'].downcase.to_sym
62
+ end
63
+
64
+ # Timestamp when execution was updated
65
+ def updated
66
+ Time.parse(json['executionDetail']['updated'])
67
+ end
68
+
69
+ # Returns URL
70
+ #
71
+ # @return [String] Schedule URL
72
+ def uri
73
+ @json['executionDetail']['links']['self'] if @json && @json['executionDetail'] && @json['executionDetail']['links']
74
+ end
75
+
76
+ # Compares two executions - based on their URI
77
+ def ==(other)
78
+ other.respond_to?(:uri) && other.uri == uri && other.respond_to?(:to_hash) && other.to_hash == to_hash
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,160 @@
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 FromWire
10
+ # Converts dataset from wire format into an internal blueprint representation
11
+ #
12
+ # @param dataset [Hash] Whatever comes from wire
13
+ # @return [Hash] Manifest for a particular reference
14
+ def self.dataset_from_wire(dataset)
15
+ {}.tap do |d|
16
+ id = dataset['dataset']['identifier']
17
+
18
+ d[:type] = :dataset
19
+ d[:title] = dataset['dataset']['title']
20
+ d[:id] = id
21
+ d[:columns] = (parse_anchor(dataset) + parse_attributes(dataset) + parse_facts(dataset) + parse_references(dataset))
22
+ end
23
+ end
24
+
25
+ # Entry method for converting information about project mode from wire
26
+ # format into an internal blueprint representation
27
+ #
28
+ # @param wire_model [Hash] Whatever comes from wire
29
+ # @return [GoodData::Model::ProjectBlueprint] Manifest for a particular reference
30
+ def self.from_wire(wire_model)
31
+ model = wire_model['projectModelView']['model']['projectModel']
32
+ datasets = model['datasets'] || []
33
+ dims = model['dateDimensions'] || []
34
+
35
+ ProjectBlueprint.new(
36
+ datasets: datasets.map { |ds| dataset_from_wire(ds) },
37
+ date_dimensions: dims.map { |dd| parse_date_dimensions(dd) }
38
+ )
39
+ end
40
+
41
+ # Converts attrbutes from wire format into an internal blueprint representation
42
+ #
43
+ # @param stuff [Hash] Whatever comes from wire
44
+ # @return [Hash] Manifest for a particular reference
45
+ def self.parse_attributes(stuff)
46
+ dataset = stuff['dataset']
47
+ attributes = dataset['attributes'] || []
48
+ attributes.mapcat do |a|
49
+ parse_attribute(a['attribute'])
50
+ end
51
+ end
52
+
53
+ # Converts anchor from wire format into an internal blueprint representation
54
+ #
55
+ # @param stuff [Hash] Whatever comes from wire
56
+ # @return [Hash] Manifest for a particular reference
57
+ def self.parse_anchor(stuff)
58
+ anchor = stuff['dataset']['anchor']['attribute']
59
+ parse_attribute(anchor, :anchor)
60
+ end
61
+
62
+ def self.parse_attribute(attribute, type = :attribute)
63
+ labels = attribute['labels'] || []
64
+ default_label_id = attribute['defaultLabel']
65
+ default_label = labels.find { |l| l['label']['identifier'] == default_label_id } || labels.first
66
+ regular_labels = labels - [default_label]
67
+ pl = default_label.nil? ? [] : [parse_label(attribute, default_label, :default_label)]
68
+ rl = regular_labels.map do |label|
69
+ parse_label(attribute, label, :label)
70
+ end
71
+ attribute = {}.tap do |a|
72
+ a[:type] = type
73
+ a[:id] = attribute['identifier']
74
+ a[:title] = attribute['title']
75
+ a[:description] = attribute['description']
76
+ a[:folder] = attribute['folder']
77
+ if attribute['grain']
78
+ a[:grain] = attribute['grain'].map do |g|
79
+ case g.keys.first.to_sym
80
+ when :dateDimension
81
+ { date: g.values.first }
82
+ else
83
+ Helpers.symbolize_keys(g)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ [attribute] + pl + rl
89
+ end
90
+
91
+ # Converts date dimensions from wire format into an internal blueprint representation
92
+ #
93
+ # @param stuff [Hash] Whatever comes from wire
94
+ # @return [Hash] Manifest for a particular reference
95
+ def self.parse_date_dimensions(date_dim)
96
+ {}.tap do |d|
97
+ d[:type] = :date_dimension
98
+ d[:id] = date_dim['dateDimension']['name']
99
+ d[:title] = date_dim['dateDimension']['title']
100
+ end
101
+ end
102
+
103
+ # Converts facts from wire format into an internal blueprint representation
104
+ #
105
+ # @param stuff [Hash] Whatever comes from wire
106
+ # @return [Hash] Manifest for a particular reference
107
+ def self.parse_facts(stuff)
108
+ facts = stuff['dataset']['facts'] || []
109
+ facts.map do |fact|
110
+ {}.tap do |f|
111
+ f[:type] = fact['fact']['identifier'] =~ /^dt\./ ? :date_fact : :fact
112
+ f[:id] = fact['fact']['identifier']
113
+ f[:title] = fact['fact']['title']
114
+ f[:description] = fact['fact']['description'] if fact['fact']['description']
115
+ f[:folder] = fact['fact']['folder']
116
+ f[:gd_data_type] = fact['fact']['dataType'] || GoodData::Model::DEFAULT_FACT_DATATYPE
117
+ end
118
+ end
119
+ end
120
+
121
+ # Converts label from wire format into an internal blueprint representation
122
+ #
123
+ # @param stuff [Hash] Whatever comes from wire
124
+ # @return [Hash] Manifest for a particular reference
125
+ def self.parse_label(attribute, label, type)
126
+ {}.tap do |l|
127
+ l[:type] = :label
128
+ l[:id] = label['label']['identifier']
129
+ l[:reference] = attribute['identifier']
130
+ l[:title] = label['label']['title']
131
+ l[:gd_data_type] = label['label']['dataType'] || GoodData::Model::DEFAULT_ATTRIBUTE_DATATYPE
132
+ l[:gd_type] = label['label']['type'] || GoodData::Model::DEFAULT_TYPE
133
+ l[:default_label] = true if type == :default_label
134
+ end
135
+ end
136
+
137
+ # Converts label from wire format into an internal blueprint representation
138
+ #
139
+ # @param dataset [Hash] Whatever comes from wire
140
+ # @param anchor_hash [Hash] dataset id -> anchor id hash
141
+ # @return [Hash] Manifest for a particular reference
142
+ def self.parse_references(dataset)
143
+ references = dataset['dataset']['references'] || []
144
+ references.map do |ref|
145
+ if ref =~ /^dataset\./
146
+ {
147
+ :type => :reference,
148
+ :dataset => ref
149
+ }
150
+ else
151
+ {
152
+ :type => :date,
153
+ :dataset => ref
154
+ }
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,75 @@
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/rest'
8
+
9
+ module GoodData
10
+ class Invitation < Rest::Resource
11
+ def initialize(json)
12
+ @json = json
13
+ end
14
+
15
+ def contributor
16
+ data = client.get @json['invitation']['meta']['contributor']
17
+ client.create GoodData::AccountSettings, data
18
+ end
19
+
20
+ def created
21
+ DateTime.parse(@json['invitation']['meta']['created'])
22
+ end
23
+
24
+ def email
25
+ @json['invitation']['content']['email']
26
+ end
27
+
28
+ def first_name
29
+ @json['invitation']['content']['firstname']
30
+ end
31
+
32
+ def phone
33
+ @json['invitation']['content']['phone']
34
+ end
35
+
36
+ def profile
37
+ data = client.get @json['invitation']['links']['profile']
38
+ client.create GoodData::AccountSettings, data
39
+ end
40
+
41
+ def project
42
+ data = client.get @json['invitation']['links']['project']
43
+ client.create GoodData::Project, data
44
+ end
45
+
46
+ def project_name
47
+ @json['invitation']['content']['projectname']
48
+ end
49
+
50
+ def role
51
+ # TODO: Return object instead
52
+ @json['invitation']['content']['role']
53
+ end
54
+
55
+ def status
56
+ @json['invitation']['content']['status']
57
+ end
58
+
59
+ def summary
60
+ @json['invitation']['content']['summary']
61
+ end
62
+
63
+ def title
64
+ @json['invitation']['content']['title']
65
+ end
66
+
67
+ def updated
68
+ DateTime.parse(@json['invitation']['meta']['updated'])
69
+ end
70
+
71
+ def uri
72
+ @json['invitation']['links']['self']
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,50 @@
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/object'
8
+
9
+ module GoodData
10
+ class Links < Rest::Resource
11
+ attr_reader :data
12
+
13
+ def initialize(items)
14
+ @data = {}
15
+ items.values[0]['links'].each do |item|
16
+ category = item['category']
17
+ if @data[category]
18
+ if @data[category]['category'] == category
19
+ @data[category] = { @data[category]['identifier'] => @data[category] }
20
+ end
21
+ @data[category][item['identifier']] = item
22
+ else
23
+ @data[category] = item
24
+ end
25
+ end
26
+ end
27
+
28
+ def links(category, identifier = nil)
29
+ return Links.new(client.get(self[category])) unless identifier
30
+ Links.new client.get(get(category, identifier))
31
+ end
32
+
33
+ def [](category)
34
+ return @data[category]['link'] if @data[category] && @data[category]['link']
35
+ @data[category]
36
+ end
37
+
38
+ def unique?(category)
39
+ @data[category]['link'].is_a? String
40
+ end
41
+
42
+ def ambiguous?(category)
43
+ !unique?(category)
44
+ end
45
+
46
+ def get(category, identifier)
47
+ self[category][identifier]
48
+ end
49
+ end
50
+ end