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,15 @@
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
+ class FalseClass
8
+ # +false+ is not duplicable:
9
+ #
10
+ # false.duplicable? # => false
11
+ # false.dup # => TypeError: can't dup FalseClass
12
+ def duplicable?
13
+ false
14
+ end
15
+ end
@@ -0,0 +1,38 @@
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
+ class Hash
8
+ # Return a hash that includes everything but the given keys. This is useful for
9
+ # limiting a set of parameters to everything but a few known toggles:
10
+ #
11
+ # @person.update_attributes(params[:person].except(:admin))
12
+ #
13
+ # If the receiver responds to +convert_key+, the method is called on each of the
14
+ # arguments. This allows +except+ to play nice with hashes with indifferent access
15
+ # for instance:
16
+ #
17
+ # {:a => 1}.with_indifferent_access.except(:a) # => {}
18
+ # {:a => 1}.with_indifferent_access.except("a") # => {}
19
+ #
20
+ def except(*keys)
21
+ dup.except!(*keys)
22
+ end
23
+
24
+ # Replaces the hash without the given keys.
25
+ def except!(*keys)
26
+ keys.each { |key| delete(key) }
27
+ self
28
+ end
29
+
30
+ def slice(*keys)
31
+ keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
32
+ keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if key?(k) }
33
+ end
34
+
35
+ def compact
36
+ select { |_, value| !value.nil? }
37
+ end
38
+ end
@@ -0,0 +1,15 @@
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
+ class NilClass
8
+ # +nil+ is not duplicable:
9
+ #
10
+ # nil.duplicable? # => false
11
+ # nil.dup # => TypeError: can't dup NilClass
12
+ def duplicable?
13
+ false
14
+ end
15
+ end
@@ -0,0 +1,15 @@
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
+ class Numeric
8
+ # Numbers are not duplicable:
9
+ #
10
+ # 3.duplicable? # => false
11
+ # 3.dup # => TypeError: can't dup Fixnum
12
+ def duplicable?
13
+ false
14
+ end
15
+ end
@@ -0,0 +1,27 @@
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
+ class Object
8
+ class << self
9
+ def set_const(name, val)
10
+ send(:remove_const, name) if const_defined?(name)
11
+ send(:const_set, name, val)
12
+ end
13
+ end
14
+
15
+ def blank?
16
+ respond_to?(:empty?) ? empty? : !self
17
+ end
18
+
19
+ def duplicable?
20
+ true
21
+ end
22
+
23
+ def set_const(name, val)
24
+ send(:remove_const, name) if const_defined?(name)
25
+ send(:const_set, name, val)
26
+ end
27
+ end
@@ -0,0 +1,15 @@
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
+ class Symbol
8
+ # Symbols are not duplicable:
9
+ #
10
+ # :my_symbol.duplicable? # => false
11
+ # :my_symbol.dup # => TypeError: can't dup Symbol
12
+ def duplicable?
13
+ false
14
+ end
15
+ end
@@ -0,0 +1,15 @@
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
+ class TrueClass
8
+ # +true+ is not duplicable:
9
+ #
10
+ # true.duplicable? # => false
11
+ # true.dup # => TypeError: can't dup TrueClass
12
+ def duplicable?
13
+ false
14
+ end
15
+ end
@@ -0,0 +1,21 @@
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 'csv'
8
+
9
+ module GoodData
10
+ module Extract
11
+ class CsvFile
12
+ def initialize(file)
13
+ @file = file
14
+ end
15
+
16
+ def read(&block)
17
+ CSV.open @file, 'r', &block
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,159 @@
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 SmallGoodZilla
9
+ class << self
10
+ # Scans the provided MAQL and returns Array pairs of [attribute, element] pairs for each element that is found in the definition
11
+ # @param maql Input MAQL string
12
+ # @return [Array<Array>] Pairs [attribute, attribute_element]
13
+ def extract_element_uri_pairs(maql)
14
+ arr = maql.scan(%r{\[([^\[\]]*)\/elements\?id=(\d+)\]}).flatten
15
+ evens = arr.select.each_with_index { |_, i| i.even? }
16
+ odds = arr.select.each_with_index { |_, i| i.odd? }.map(&:to_i)
17
+ evens.zip(odds)
18
+ end
19
+
20
+ # Scans the provided MAQL and returns Array of all the URIs included in the MAQL. This basically return anything that is enclosed in aquare brackets []
21
+ # @param maql Input MAQL string
22
+ # @return [Array<String>] Pairs of URIs
23
+ def get_uris(a_maql_string)
24
+ a_maql_string.scan(/\[([^\"\]]+)\]/).flatten.uniq
25
+ end
26
+
27
+ # Get IDs from extendedMAQL string
28
+ # @param a_maql_string Input MAQL string
29
+ # @return [Array<String>] List of IDS
30
+ def get_ids(a_maql_string)
31
+ a_maql_string.scan(/!\[([^\"\]]+)\]/).flatten.uniq
32
+ end
33
+
34
+ # Get Facts from extendedMAQL string
35
+ # @param a_maql_string Input MAQL string
36
+ # @return [Array<String>] List of Facts
37
+ def get_facts(a_maql_string)
38
+ a_maql_string.scan(/#\"([^\"]+)\"/).flatten
39
+ end
40
+
41
+ # Get Attributes from extendedMAQL string
42
+ # @param a_maql_string Input MAQL string
43
+ # @return [Array<String>] List of Attributes
44
+ def get_attributes(a_maql_string)
45
+ a_maql_string.scan(/@\"([^\"]+)\"/).flatten
46
+ end
47
+
48
+ # Get Metrics from extendedMAQL string
49
+ # @param a_maql_string Input MAQL string
50
+ # @return [Array<String>] List of Metrics
51
+ def get_metrics(a_maql_string)
52
+ a_maql_string.scan(/\?"([^\"]+)\"/).flatten
53
+ end
54
+
55
+ alias_method :get_measures, :get_metrics
56
+
57
+ # Method takes a specification of the attribute filter (category filter) and returns it representation that is
58
+ # suitable for posting on the API. The spec is expected to be an array. First object can be an attribute (id, obj_id or
59
+ # directly an object). Alternativel it can be an attribute (again any representation should work). In case of attribute
60
+ # primary label is taken. The rest of the array are expected to be String represenation of values of particular label.
61
+ #
62
+ # For example it could look like
63
+ # ['label.states.name', 'California', 'New Jersey', 'Kansas']
64
+ #
65
+ # @param spec [Array<Object>] Input MAQL string
66
+ # @return [Array<Hash>] List of Metrics
67
+ def create_category_filter(spec, project)
68
+ item = project.objects(spec.first)
69
+ label = item.is_a?(GoodData::Attribute) ? item.primary_label : item
70
+ col = spec[1..-1].flat_map do |v|
71
+ case v
72
+ when Range
73
+ v.to_a
74
+ when Symbol
75
+ [v]
76
+ else
77
+ [v.to_s]
78
+ end
79
+ end
80
+ if col.first == :not
81
+ values = col[1..-1].map { |v| label.find_value_uri(v) }
82
+ elements = values.map { |v| "[#{v}]" }.join(', ')
83
+ { expression: "[#{label.attribute.uri}] NOT IN (#{elements})" }
84
+ else
85
+ values = col.map { |v| label.find_value_uri(v) }
86
+ elements = values.map { |v| "[#{v}]" }.join(', ')
87
+ { expression: "[#{label.attribute.uri}] IN (#{elements})" }
88
+ end
89
+ end
90
+
91
+ # Pretty prints the MAQL expression. This basically means it finds out names of objects and elements and print their values instead of URIs
92
+ # @param expression [String] Expression to be beautified
93
+ # @return [String] Pretty printed MAQL expression
94
+ def pretty_print(expression, opts = { client: GoodData.connection, project: GoodData.project })
95
+ temp = expression.dup
96
+ pairs = get_uris(expression).pmap do |uri|
97
+ if uri =~ /elements/
98
+ begin
99
+ [uri, Attribute.find_element_value(uri, opts)]
100
+ rescue AttributeElementNotFound
101
+ [uri, '(empty value)']
102
+ end
103
+ else
104
+ [uri, GoodData::MdObject[uri, opts].title]
105
+ end
106
+ end
107
+ pairs.each do |el|
108
+ uri = el[0]
109
+ obj = el[1]
110
+ temp.sub!(uri, obj)
111
+ end
112
+ temp
113
+ end
114
+
115
+ def interpolate(values, dictionaries)
116
+ {
117
+ :facts => interpolate_values(values[:facts], dictionaries[:facts]),
118
+ :attributes => interpolate_values(values[:attributes], dictionaries[:attributes]),
119
+ :metrics => interpolate_values(values[:metrics], dictionaries[:metrics])
120
+ }
121
+ end
122
+
123
+ def interpolate_ids(options, *ids)
124
+ ids = ids.flatten
125
+ if ids.empty?
126
+ []
127
+ else
128
+ res = GoodData::MdObject.identifier_to_uri(options, *ids)
129
+ fail 'Not all of the identifiers were resolved' if Array(res).size != ids.size
130
+ res
131
+ end
132
+ end
133
+
134
+ def interpolate_values(keys, values)
135
+ x = values.values_at(*keys)
136
+ keys.zip(x)
137
+ end
138
+
139
+ def interpolate_metric(metric, dictionary, options = { :client => GoodData.connection, :project => GoodData.project })
140
+ interpolated = interpolate({
141
+ :facts => GoodData::SmallGoodZilla.get_facts(metric),
142
+ :attributes => GoodData::SmallGoodZilla.get_attributes(metric),
143
+ :metrics => GoodData::SmallGoodZilla.get_metrics(metric)
144
+ }, dictionary)
145
+
146
+ ids = GoodData::SmallGoodZilla.get_ids(metric)
147
+ interpolated_ids = ids.zip(Array(interpolate_ids(options, ids)))
148
+
149
+ metric = interpolated[:facts].reduce(metric) { |a, e| a.sub("#\"#{e[0]}\"", "[#{e[1]}]") }
150
+ metric = interpolated[:attributes].reduce(metric) { |a, e| a.sub("@\"#{e[0]}\"", "[#{e[1]}]") }
151
+ metric = interpolated[:metrics].reduce(metric) { |a, e| a.sub("?\"#{e[0]}\"", "[#{e[1]}]") }
152
+ metric = interpolated_ids.reduce(metric) { |a, e| a.gsub("![#{e[0]}]", "[#{e[1]}]") }
153
+ metric
154
+ end
155
+
156
+ alias_method :interpolate_measure, :interpolate_metric
157
+ end
158
+ end
159
+ 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 'fileutils'
8
+ require 'json'
9
+
10
+ require_relative 'global_helpers'
11
+
12
+ module GoodData
13
+ module Helpers
14
+ module AuthHelper
15
+ class << self
16
+ # Get path of .gooddata config
17
+ def credentials_file
18
+ "#{Helpers.home_directory}/.gooddata"
19
+ end
20
+
21
+ # Read credentials
22
+ def read_credentials(credentials_file_path = credentials_file)
23
+ if File.exist?(credentials_file_path)
24
+ config = File.read(credentials_file_path)
25
+ MultiJson.load(config, :symbolize_keys => true)
26
+ else
27
+ {}
28
+ end
29
+ end
30
+
31
+ # Try read environemnt
32
+ #
33
+ # Tries to read it from ~/.gooddata file or from environment variable GD_SERVER
34
+ # @param [String] credentials_file_path (credentials_file) Path to .gooddata file
35
+ # @return [String] server token from environment variable, .gooddata or nil
36
+ def read_environment(credentials_file_path = credentials_file)
37
+ goodfile = read_credentials(credentials_file_path)
38
+ [ENV['GD_ENVIRONMENT'], goodfile[:environment], GoodData::Project::DEFAULT_ENVIRONMENT].find { |x| !x.nil? && !x.empty? }
39
+ end
40
+
41
+ # Try read server
42
+ #
43
+ # Tries to read it from ~/.gooddata file or from environment variable GD_SERVER
44
+ # @param [String] credentials_file_path (credentials_file) Path to .gooddata file
45
+ # @return [String] server token from environment variable, .gooddata or DEFAULT_URL
46
+ def read_server(credentials_file_path = credentials_file)
47
+ goodfile = read_credentials(credentials_file_path)
48
+ [ENV['GD_SERVER'], goodfile[:server], GoodData::Rest::Connection::DEFAULT_URL].find { |x| !x.nil? && !x.empty? }
49
+ end
50
+
51
+ # Try read token
52
+ #
53
+ # Tries to read it from ~/.gooddata file or from environment variable GD_PROJECT_TOKEN
54
+ # @param [String] credentials_file_path (credentials_file) Path to .gooddata file
55
+ # @return [String] auth token from environment variable, .gooddata or nil
56
+ def read_token(credentials_file_path = credentials_file)
57
+ goodfile = read_credentials(credentials_file_path)
58
+ [ENV['GD_PROJECT_TOKEN'], goodfile[:auth_token], goodfile[:token]].find { |x| !x.nil? && !x.empty? }
59
+ end
60
+
61
+ # Writes credentials
62
+ def write_credentials(credentials, credentials_file_path = credentials_file)
63
+ File.open(credentials_file_path, 'w', 0600) do |f|
64
+ f.puts JSON.pretty_generate(credentials)
65
+ end
66
+ credentials
67
+ end
68
+
69
+ def remove_credentials_file(credentials_file_path = credentials_file)
70
+ FileUtils.rm_f(credentials_file_path)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,61 @@
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 'csv'
8
+
9
+ module GoodData
10
+ module Helpers
11
+ class Csv
12
+ class << self
13
+ # Read data from CSV
14
+ #
15
+ # @param [Hash] opts
16
+ # @option opts [String] :path File to read data from
17
+ # @option opts [Boolean] :header File to read data from
18
+ # @return Array of rows with loaded data
19
+ def read(opts)
20
+ path = opts[:path]
21
+ res = []
22
+
23
+ line = 0
24
+
25
+ CSV.foreach(path) do |row|
26
+ line += 1
27
+ next if opts[:header] && line == 1
28
+
29
+ if block_given?
30
+ data = yield row
31
+ else
32
+ data = row
33
+ end
34
+
35
+ res << data if data
36
+ end
37
+
38
+ res
39
+ end
40
+
41
+ # Write data to CSV
42
+ # @option opts [String] :path File to write data to
43
+ # @option opts [Array] :data Mandatory array of data to write
44
+ # @option opts [String] :header Optional Header row
45
+ def write(opts, &_block)
46
+ path = opts[:path]
47
+ header = opts[:header]
48
+ data = opts[:data]
49
+
50
+ CSV.open(path, 'w') do |csv|
51
+ csv << header unless header.nil?
52
+ data.each do |entry|
53
+ res = yield entry
54
+ csv << res if res
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end