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,449 @@
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 'schema_builder'
8
+ require_relative 'schema_blueprint'
9
+
10
+ module GoodData
11
+ module Model
12
+ class DatasetBlueprint < SchemaBlueprint
13
+ # Checks if a dataset has an anchor.
14
+ #
15
+ # @param dataset [Hash] Dataset blueprint
16
+ # @return [Boolean] returns true if dataset has an anchor
17
+ def self.anchor?(dataset)
18
+ columns(dataset).any? { |c| c[:type].to_s == 'anchor' }
19
+ end
20
+
21
+ # Returns anchor of a dataset
22
+ #
23
+ # @param dataset [Hash] Dataset blueprint
24
+ # @return [Hash] returns the anchor or nil
25
+ def self.anchor(dataset)
26
+ find_column_by_type(dataset, :anchor)
27
+ end
28
+
29
+ # Returns attributes of a dataset
30
+ #
31
+ # @param dataset [Hash] Dataset blueprint
32
+ # @return [Array<Hash>] returns the attribute or an empty array
33
+ def self.attributes(dataset)
34
+ find_columns_by_type(dataset, :attribute, :all)
35
+ end
36
+
37
+ # Returns attributes and anchor defined on a dataset
38
+ #
39
+ # @param dataset [Hash] Dataset blueprint
40
+ # @return [Array<Hash>] returns the attributes
41
+ def self.attributes_and_anchors(dataset)
42
+ [anchor(dataset)] + attributes(dataset)
43
+ end
44
+
45
+ # Returns all labels that is referenced by a label
46
+ #
47
+ # @param dataset [Hash] Dataset blueprint
48
+ # @return [Array<Hash>] returns the labels or an empty array
49
+ def self.attribute_for_label(dataset, label)
50
+ find_columns_by_type(dataset, :attribute, :anchor).find { |a| label[:reference] == a[:id] }
51
+ end
52
+
53
+ # Returns all the fields of a dataset. This means facts, attributes, references
54
+ #
55
+ # @param ds [Hash] Dataset blueprint
56
+ # @return [Boolean]
57
+ def self.columns(ds)
58
+ (ds.to_hash[:columns] || [])
59
+ end
60
+ singleton_class.send(:alias_method, :fields, :columns)
61
+
62
+ # Tells you if the object is a dataset. It consumes both Hash represenation
63
+ # or the GoodData::Model::DatasetBlueprint
64
+ #
65
+ # @param ds [Object] Value to be tested
66
+ # @return [Boolean]
67
+ def self.dataset_blueprint?(ds)
68
+ if ds.is_a?(DatasetBlueprint)
69
+ true
70
+ elsif ds.respond_to?(:[]) && ds.is_a?(Hash) && ds[:type].to_sym == :dataset
71
+ true
72
+ else
73
+ false
74
+ end
75
+ end
76
+
77
+ # Returns date facts of a dataset
78
+ #
79
+ # @param dataset [Hash] Dataset blueprint
80
+ # @return [Array<Hash>] returns the attribute or an empty array
81
+ def self.date_facts(dataset)
82
+ find_column_by_type(dataset, :date_fact)
83
+ end
84
+
85
+ # Returns label that is marked as default for a particular attribtue.
86
+ # This does not necessarily need to be the first one. This is a default label
87
+ # in terms of what is displayed on the UI
88
+ #
89
+ # @param dataset [Hash] Dataset blueprint
90
+ # @return [Array<Hash>] returns the labels or an empty array
91
+ def self.default_label_for_attribute(dataset, attribute)
92
+ default_label = labels_for_attribute(dataset, attribute).find { |l| l[:default_label] == true }
93
+ default_label
94
+ end
95
+
96
+ # Returns facts of a dataset
97
+ #
98
+ # @param dataset [Hash] Dataset blueprint
99
+ # @return [Array<Hash>] returns the attribute or an empty array
100
+ def self.facts(dataset)
101
+ find_columns_by_type(dataset, :fact, :date_fact)
102
+ end
103
+
104
+ # Finds a specific column given a name
105
+ #
106
+ # @param dataset [Hash] Dataset blueprint
107
+ # @param name [String] Name of a field
108
+ # @param all [Symbol] if :all is passed all mathching objects are returned
109
+ # Otherwise only the first one is
110
+ # @return [Array<Hash>] matching fields
111
+ def self.find_column_by_id(dataset, name, all = nil)
112
+ if all == :all
113
+ columns(dataset).select { |c| c[:id].to_s == name }
114
+ else
115
+ columns(dataset).find { |c| c[:id].to_s == name }
116
+ end
117
+ end
118
+
119
+ # Returns first field of a specified type.
120
+ #
121
+ # @param dataset [Hash | GoodData::Model::ProjectBlueprint] Dataset blueprint
122
+ # @param types [String | Symbol | Array[Symbol] | Array[String]] Type or types you would like to get
123
+ # as third parameter it return all object otherwise it returns the first one
124
+ # @return [Array<Hash>] matching fields
125
+ def self.find_column_by_type(dataset, *types)
126
+ columns(dataset).find { |c| types.any? { |t| t.to_s == c[:type].to_s } }
127
+ end
128
+
129
+ # Returns all the fields of a specified type. You can specify more types
130
+ # if you need more than one type.
131
+ #
132
+ # @param dataset [Hash | GoodData::Model::ProjectBlueprint] Dataset blueprint
133
+ # @param types [String | Symbol | Array[Symmbol] | Array[String]] Type or types you would like to get
134
+ # @return [Array<Hash>] matching fields
135
+ def self.find_columns_by_type(dataset, *types)
136
+ columns(dataset).select { |c| types.any? { |t| t.to_s == c[:type].to_s } }
137
+ end
138
+
139
+ # Returns labels facts of a dataset
140
+ #
141
+ # @param dataset [Hash] Dataset blueprint
142
+ # @return [Array<Hash>] returns the label or an empty array
143
+ def self.labels(dataset)
144
+ find_columns_by_type(dataset, :label)
145
+ end
146
+
147
+ # Returns labels for a particular attribute
148
+ #
149
+ # @param dataset [Hash] Dataset blueprint
150
+ # @param attribute [Hash] Attribute
151
+ # @return [Array<Hash>] returns the labels or an empty array
152
+ def self.labels_for_attribute(dataset, attribute)
153
+ labels(dataset).select { |l| l[:reference] == attribute[:id] }
154
+ end
155
+
156
+ # Returns references of a dataset
157
+ #
158
+ # @param dataset [Hash] Dataset blueprint
159
+ # @return [Array<Hash>] returns the references or an empty array
160
+ def self.references(dataset)
161
+ find_columns_by_type(dataset, :reference, :date)
162
+ end
163
+
164
+ # Returns anchor of a dataset
165
+ #
166
+ # @return [Hash] returns the anchor or nil
167
+ def anchor
168
+ find_column_by_type(:anchor)
169
+ end
170
+
171
+ # Checks if a dataset has an anchor.
172
+ #
173
+ # @return [Boolean] returns true if dataset has an anchor
174
+ def anchor?
175
+ columns.any? { |c| c.type == :anchor }
176
+ end
177
+
178
+ # Returns attributes of a dataset
179
+ #
180
+ # @return [Array<Hash>] returns the attribute or an empty array
181
+ def attributes(id = :all)
182
+ return id if id.is_a?(AttributeBlueprintField)
183
+ ats = find_columns_by_type(:attribute)
184
+ id == :all ? ats : ats.find { |a| a.id == id }
185
+ end
186
+
187
+ # Returns attributes and anchor defined on a dataset
188
+ #
189
+ # @return [Array<GoodData::Model::DatasetBlueprint>] returns the attributes
190
+ def attributes_and_anchors
191
+ attributes + [anchor]
192
+ end
193
+
194
+ # Changes the dataset through a builder. You provide a block and an istance of
195
+ # GoodData::Model::SchemaBuilder is passed in as the only parameter
196
+ #
197
+ # @return [GoodData::Model::SchemaBlueprint] returns changed dataset blueprint
198
+ def change(&block)
199
+ builder = SchemaBuilder.create_from_data(self)
200
+ block.call(builder)
201
+ @data = builder.to_hash
202
+ self
203
+ end
204
+
205
+ # Returns all the fields of a dataset. This means anchor, facts, attributes, references
206
+ # This method will cast them to correct types
207
+ #
208
+ # @return [Boolean]
209
+ def columns
210
+ DatasetBlueprint.columns(to_hash).map do |c|
211
+ case c[:type].to_sym
212
+ when :anchor
213
+ GoodData::Model::AnchorBlueprintField.new(c, self)
214
+ when :attribute
215
+ GoodData::Model::AttributeBlueprintField.new(c, self)
216
+ when :fact
217
+ GoodData::Model::FactBlueprintField.new(c, self)
218
+ when :label
219
+ GoodData::Model::LabelBlueprintField.new(c, self)
220
+ when :reference
221
+ GoodData::Model::ReferenceBlueprintField.new(c, self)
222
+ when :date
223
+ GoodData::Model::ReferenceBlueprintField.new(c, self)
224
+ else
225
+ GoodData::Model::BlueprintField.new(c, self)
226
+ end
227
+ end
228
+ end
229
+ alias_method :fields, :columns
230
+
231
+ # Creates a metric which counts numnber of lines in dataset. Works for both
232
+ # datasets with or without anchor
233
+ #
234
+ # @return [Boolean]
235
+ def count(project)
236
+ anchor.in_project(project).create_metric.execute
237
+ end
238
+
239
+ # Returns date facts of a dataset
240
+ #
241
+ # @return [Array<Hash>] returns the attribute or an empty array
242
+ def date_facts
243
+ find_columns_by_type(:date_fact)
244
+ end
245
+
246
+ # Duplicates the DatasetBlueprint. It is done as a deep duplicate
247
+ #
248
+ # @return [GoodData::Model::DatasetBlueprint] matching fields
249
+ def dup
250
+ DatasetBlueprint.new(GoodData::Helpers.deep_dup(data), project_blueprint)
251
+ end
252
+
253
+ # Returns facts of a dataset
254
+ #
255
+ # @return [Array<Hash>] returns the attribute or an empty array
256
+ def facts(id = :all)
257
+ return id if id.is_a?(FactBlueprintField)
258
+ fs = find_columns_by_type(:fact)
259
+ id == :all ? fs : fs.find { |a| a.id == id }
260
+ end
261
+
262
+ # Finds a specific column given a col
263
+ #
264
+ # @param col [GoodData::Model::BlueprintField | Hash] Field
265
+ # @return [GoodData::Model::BlueprintField] matching fields
266
+ def find_column(col)
267
+ columns.find { |c| c == col }
268
+ end
269
+
270
+ # Finds a specific column given an id
271
+ #
272
+ # @param id [String] Id of a field
273
+ # @param all [Symbol] if :all is passed all mathching objects are returned
274
+ # Otherwise only the first one is
275
+ # @return [Array<Hash>] matching fields
276
+ def find_column_by_id(id)
277
+ id = id.respond_to?(:id) ? id.id : id
278
+ columns.find { |c| c.id == id }
279
+ end
280
+
281
+ # Returns first field of a specified type.
282
+ #
283
+ # @param type [String | Symbol | Array[Symmbol] | Array[String]] Type or types you would like to get
284
+ # @return [GoodData::Model::BlueprintField] returns matching field
285
+ def find_column_by_type(*types)
286
+ columns.find { |c| types.any? { |t| t.downcase.to_sym == c.type } }
287
+ end
288
+
289
+ # Returns all the fields of a specified type. You can specify more types
290
+ # as an array if you need more than one type.
291
+ #
292
+ # @param type [String | Symbol | Array[Symmbol] | Array[String]] Type or types you would like to get
293
+ # as third parameter it return all object otherwise it returns the first one
294
+ # @return [Array<GoodData::Model::BlueprintField>] matching fields
295
+ def find_columns_by_type(*types)
296
+ columns.select { |c| types.any? { |t| t.downcase.to_sym == c.type } }
297
+ end
298
+
299
+ # Creates a DatasetBlueprint
300
+ #
301
+ # @param dataset [Hash] Dataset blueprint
302
+ # @return [DatasetBlueprint] returns the labels or an empty array
303
+ def initialize(init_data, blueprint)
304
+ super
305
+ @data[:type] = @data.key?('type') ? @data['type'].to_sym : @data[:type]
306
+ @data[:columns].each do |c|
307
+ c[:type] = c[:type].to_sym
308
+ end
309
+ end
310
+
311
+ # Returns labels facts of a dataset
312
+ #
313
+ # @param dataset [Hash] Dataset blueprint
314
+ # @return [Array<Hash>] returns the label or an empty array
315
+ def labels(id = :all)
316
+ return id if id.is_a?(LabelBlueprintField)
317
+ labs = find_columns_by_type(:label)
318
+ id == :all ? labs : labs.find { |l| l.id == id }
319
+ end
320
+
321
+ def attribute_for_label(label)
322
+ l = labels(label)
323
+ attributes_and_anchors.find { |a| a.id == l.reference }
324
+ end
325
+
326
+ def labels_for_attribute(attribute)
327
+ a = attributes(attribute)
328
+ labels.select { |l| l.reference == a.id }
329
+ end
330
+
331
+ # Merges two schemas together. This method changes the blueprint
332
+ # in place. If you would prefer the method that generates a new blueprint
333
+ # use merge method
334
+ #
335
+ # @param a_blueprint [GoodData::Model::DatasetBlueprint] Dataset blueprint to be merged
336
+ # @return [GoodData::Model::DatasetBlueprint] returns itself changed
337
+ def merge!(a_blueprint)
338
+ new_blueprint = GoodData::Model.merge_dataset_columns(self, a_blueprint)
339
+ @data = new_blueprint
340
+ self
341
+ end
342
+
343
+ # Returns references of a dataset
344
+ #
345
+ # @return [Array<Hash>] returns the references or an empty array
346
+ def references
347
+ find_columns_by_type(:reference, :date)
348
+ end
349
+
350
+ # Removes column from from the blueprint
351
+ #
352
+ # @param id [String] Id of the column to be removed
353
+ # @return [GoodData::Model::ProjectBlueprint] Returns changed blueprint
354
+ def remove_column!(id)
355
+ @project_blueprint.remove_column!(self, id)
356
+ end
357
+
358
+ # Removes all the labels from the anchor. This is a typical operation that people want to perform
359
+ #
360
+ # @return [GoodData::Model::ProjectBlueprint] Returns changed blueprint
361
+ def strip_anchor!
362
+ @project_blueprint.strip_anchor!(self)
363
+ end
364
+
365
+ # Method for suggest a couple of metrics that might get you started
366
+ # Idea is that we will provide couple of strategies. Currently the metrics
367
+ # are created in the random way but they should work.
368
+ #
369
+ # @return [Array<GoodData::Metric>] matching fields
370
+ def suggest_metrics
371
+ identifiers = facts.map { |f| identifier_for(f) }
372
+ identifiers.zip(facts).map do |id, fact|
373
+ Metric.xcreate(
374
+ :title => GoodData::Helpers.titleize(fact[:name]),
375
+ :expression => "SELECT SUM(![#{id}])")
376
+ end
377
+ end
378
+
379
+ alias_method :suggest_measures, :suggest_metrics
380
+
381
+ def to_blueprint
382
+ GoodData::Model::ProjectBlueprint.new(datasets: [to_hash])
383
+ end
384
+
385
+ # Validate the blueprint return array of errors that are found.
386
+ #
387
+ # @return [Array] array of errors
388
+ def validate
389
+ errors = []
390
+ errors.concat(validate_more_anchors)
391
+ errors.concat(validate_some_anchors)
392
+ errors.concat(validate_label_references)
393
+ errors.concat(validate_gd_data_type_errors)
394
+ errors.concat(fields.flat_map(&:validate))
395
+ errors.concat(validate_attribute_has_one_label)
396
+ errors
397
+ end
398
+
399
+ # Validate if the dataset has more than zero anchors defined.
400
+ #
401
+ # @return [Array] array of errors
402
+ def validate_some_anchors
403
+ find_columns_by_type(:anchor).count == 0 ? [{ type: :no_anchor, dataset: id }] : []
404
+ end
405
+
406
+ # Validate if the dataset does not have more than one anchor defined.
407
+ #
408
+ # @return [Array] array of errors
409
+ def validate_more_anchors
410
+ find_columns_by_type(:anchor).count > 1 ? [{ type: :more_than_on_anchor, dataset: id }] : []
411
+ end
412
+
413
+ # Validate if the attribute does have at least one label
414
+ #
415
+ # @return [Array] array of errors
416
+ def validate_attribute_has_one_label
417
+ find_columns_by_type(:attribute)
418
+ .select { |a| a.labels.empty? }
419
+ .map { |e| { type: :attribute_without_label, attribute: e.id } }
420
+ end
421
+
422
+ # Validate the that any labels are pointing to the existing attribute. If not returns the list of errors. Currently just violating labels.
423
+ #
424
+ # @return [Array] array of errors
425
+ def validate_label_references
426
+ labels.select { |r| r.attribute.nil? }
427
+ .map { |er_ref| { type: :wrong_label_reference, label: er_ref.id, wrong_reference: er_ref.data[:reference] } }
428
+ end
429
+
430
+ # Validate the the used gd_data_types are one of the allowed types. The data types are checked on lables and facts.
431
+ #
432
+ # @return [Array] array of errors
433
+ def validate_gd_data_type_errors
434
+ (labels + facts)
435
+ .select { |x| x.gd_data_type && !GoodData::Model.check_gd_data_type(x.gd_data_type) }
436
+ .map { |e| { :error => :invalid_gd_data_type_specified, :column => e.id } }
437
+ end
438
+
439
+ # Helper methods to decide wheather the dataset is considered wide.
440
+ # Currently the wider datasets have both performance and usability
441
+ # penalty
442
+ #
443
+ # @return [Boolean] matching fields
444
+ def wide?
445
+ fields.count > 32
446
+ end
447
+ end
448
+ end
449
+ end
@@ -0,0 +1,14 @@
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 'schema_blueprint'
8
+
9
+ module GoodData
10
+ module Model
11
+ class DateDimension < GoodData::Model::SchemaBlueprint
12
+ end
13
+ end
14
+ end