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,57 @@
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 'gli'
8
+ require 'pp'
9
+
10
+ require_relative '../helpers/auth_helpers'
11
+
12
+ GoodData::CLI.module_eval do
13
+ pre do |global, _command, _options, _args|
14
+ require 'logger'
15
+ GoodData.logger = Logger.new(STDOUT) if global[:l]
16
+ username = global[:username]
17
+ password = global[:password]
18
+ token = global[:token]
19
+
20
+ creds = GoodData::Helpers::AuthHelper.read_credentials
21
+
22
+ username = creds[:username] if username.nil?
23
+ password = creds[:password] if password.nil?
24
+ token = creds[:auth_token] || creds[:token] if token.nil?
25
+
26
+ global[:token] = token if global[:token].nil?
27
+ if global[:login].nil?
28
+ global[:login] = username
29
+ global['login'] = username
30
+ end
31
+ if global[:password].nil?
32
+ global[:password] = password
33
+ global['password'] = password
34
+ end
35
+ # Pre logic here
36
+ # Return true to proceed; false to abort and not call the
37
+ # chosen command
38
+ # Use skips_pre before a command to skip this block
39
+ # on that command only
40
+ true
41
+ end
42
+
43
+ post do |_global, _command, _options, _args|
44
+ # Post logic here
45
+ # Use skips_post before a command to skip this
46
+ # block on that command only
47
+ end
48
+
49
+ on_error do |_exception|
50
+ # Error logic here
51
+ # return false to skip default error handling
52
+ # binding.pry
53
+ # pp exception.backtrace
54
+ # pp exception
55
+ true
56
+ end
57
+ 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 'gli'
8
+
9
+ require_relative '../version'
10
+ require_relative '../core/core'
11
+ require_relative '../extensions/extensions'
12
+ require_relative '../exceptions/exceptions'
13
+ require_relative '../helpers/auth_helpers'
14
+
15
+ module GoodData
16
+ module CLI
17
+ extend GLI::App
18
+
19
+ program_desc 'GoodData Ruby gem - a wrapper over GoodData API and several useful abstractions to make your everyday usage of GoodData easier.'
20
+
21
+ version GoodData::VERSION
22
+
23
+ desc 'GoodData user name'
24
+ default_value nil
25
+ arg_name 'gooddata-login'
26
+ flag [:U, :username, :login]
27
+
28
+ desc 'GoodData password'
29
+ default_value nil
30
+ arg_name 'gooddata-password'
31
+ flag [:P, :password]
32
+
33
+ desc 'Project pid'
34
+ default_value nil
35
+ arg_name 'project-id'
36
+ flag [:p, :project_id]
37
+
38
+ desc 'Server'
39
+ default_value GoodData::Helpers::AuthHelper.read_server
40
+ arg_name 'server'
41
+ flag [:s, :server]
42
+
43
+ desc 'WEBDAV Server. Used for uploads of files'
44
+ default_value nil
45
+ arg_name 'web dav server'
46
+ flag [:w, :webdav_server]
47
+
48
+ desc 'Token for project creation'
49
+ default_value nil
50
+ arg_name 'token'
51
+ flag [:t, :token]
52
+
53
+ desc 'Verbose mode'
54
+ arg_name 'verbose'
55
+ switch [:v, :verbose]
56
+
57
+ desc 'Http logger on stdout'
58
+ arg_name 'logger'
59
+ switch [:l, :logger]
60
+ end
61
+ end
@@ -0,0 +1,20 @@
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 'highline'
8
+
9
+ # Define GoodData::CLI as GLI Wrapper
10
+ module GoodData
11
+ module CLI
12
+ DEFAULT_TERMINAL = HighLine.new unless const_defined?(:DEFAULT_TERMINAL)
13
+
14
+ class << self
15
+ def terminal
16
+ DEFAULT_TERMINAL
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,67 @@
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
+ require_relative 'version'
10
+ require_relative 'connection'
11
+ require_relative 'helpers/helpers'
12
+
13
+ # # GoodData API wrapper
14
+ #
15
+ # A convenient Ruby wrapper around the GoodData RESTful API.
16
+ #
17
+ # The best documentation for the API can be found using these resources:
18
+ #
19
+ # * http://developer.gooddata.com/api
20
+ # * https://secure.gooddata.com/gdc
21
+ #
22
+ # ## Usage
23
+ #
24
+ # To communicate with the API you first need a personal GoodData account.
25
+ # [Sign up here](https://secure.gooddata.com/registration.html) if you havent already.
26
+ #
27
+ # Now it is just a matter of initializing the GoodData connection via the connect method:
28
+ #
29
+ # GoodData.connect 'gooddata_user', 'gooddata_password'
30
+ #
31
+ # This GoodData object can now be utalized to retrieve your GoodData profile, the available
32
+ # projects etc.
33
+ #
34
+ # ## Logging
35
+ #
36
+ # GoodData.logger = Logger.new(STDOUT)
37
+ #
38
+ # For details about the logger options and methods, see the
39
+ # (Logger module documentation)[http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc].
40
+
41
+ require_relative 'core/core'
42
+
43
+ module GoodData
44
+ class << self
45
+ RELEASE_INFO_PATH = '/gdc/releaseInfo'
46
+
47
+ # Initializes required dynamically loaded classes
48
+ def init_module
49
+ # Metadata packages, such as report.rb, require this to be loaded first
50
+ require_relative 'models/metadata.rb'
51
+
52
+ # Load models from models folder
53
+ Dir[File.dirname(__FILE__) + '/models/*.rb'].each { |file| require file }
54
+
55
+ # Load collections
56
+ Dir[File.dirname(__FILE__) + '/collections/*.rb'].each { |file| require file }
57
+ end
58
+
59
+ # Returns information about the GoodData API as a Hash (e.g. version, release time etc.)
60
+ def release_info
61
+ @release_info ||= @connection.get(RELEASE_INFO_PATH)['release']
62
+ end
63
+ end
64
+ end
65
+
66
+ # Init requires
67
+ GoodData.init_module
@@ -0,0 +1,64 @@
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 '../exceptions/command_failed'
8
+
9
+ module GoodData
10
+ module Command
11
+ # Low level access to GoodData API
12
+ class Api
13
+ class << self
14
+ def info
15
+ json = {
16
+ 'releaseName' => 'N/A',
17
+ 'releaseDate' => 'N/A',
18
+ 'releaseNotesUri' => 'N/A'
19
+ }
20
+
21
+ puts 'GoodData API'
22
+ puts " Version: #{json['releaseName']}"
23
+ puts " Released: #{json['releaseDate']}"
24
+ puts " For more info see #{json['releaseNotesUri']}"
25
+ end
26
+
27
+ alias_method :index, :info
28
+
29
+ # Test of login
30
+ def test
31
+ if GoodData.test_login
32
+ puts "Succesfully logged in as #{GoodData.profile.user}"
33
+ else
34
+ puts 'Unable to log in to GoodData server!'
35
+ end
36
+ end
37
+
38
+ # Get resource
39
+ # @param path Resource path
40
+ def get(path)
41
+ fail(GoodData::CommandFailed, 'Specify the path you want to GET.') if path.nil?
42
+ result = GoodData.get path
43
+ begin
44
+ result
45
+ rescue
46
+ puts result
47
+ end
48
+ end
49
+
50
+ # Delete resource
51
+ # @param path Resource path
52
+ def delete(path)
53
+ fail(GoodData::CommandFailed, 'Specify the path you want to DELETE.') if path.nil?
54
+ result = GoodData.delete path
55
+ begin
56
+ result
57
+ rescue
58
+ puts result
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,107 @@
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 'highline/import'
8
+
9
+ require_relative '../cli/terminal'
10
+ require_relative '../helpers/helpers'
11
+
12
+ module GoodData
13
+ module Command
14
+ class Auth
15
+ class << self
16
+ # Ask for credentials
17
+ # @param [String] credentials_file_path (credentials_file) Path to .gooddata file
18
+ # @return [Hash]
19
+ # * :username [String] Username (email address)
20
+ # * :password [String] Password
21
+ # * :auth_token [String] Authorization token
22
+ # * :environment [String] Environment - DEVELOPMENT, TEST, PRODUCTION
23
+ # * :server => [String] Server - https://secure.gooddata.com
24
+ def ask_for_credentials(credentials_file_path = Helpers::AuthHelper.credentials_file)
25
+ puts 'Enter your GoodData credentials.'
26
+
27
+ old_credentials = Helpers::AuthHelper.read_credentials(credentials_file_path)
28
+
29
+ # Ask for user email
30
+ user = GoodData::CLI.terminal.ask('Email') do |q|
31
+ set_default_value(q, old_credentials[:username])
32
+ end
33
+
34
+ # Ask for password
35
+ password = GoodData::CLI.terminal.ask('Password') do |q|
36
+ # set_default_value(q, old_credentials[:password])
37
+ q.echo = '*'
38
+ end
39
+
40
+ # Ask for token
41
+ auth_token = GoodData::CLI.terminal.ask('Authorization Token') do |q|
42
+ set_default_value(q, old_credentials[:auth_token])
43
+ end
44
+
45
+ # Read environment
46
+ environment = GoodData::CLI.terminal.ask('Environment') do |q|
47
+ set_default_value(q, old_credentials[:environment], GoodData::Project::DEFAULT_ENVIRONMENT)
48
+ end
49
+
50
+ # Read server
51
+ server = GoodData::CLI.terminal.ask('Server') do |q|
52
+ set_default_value(q, old_credentials[:server], 'https://secure.gooddata.com')
53
+ end
54
+
55
+ # Return as struct
56
+ {
57
+ :username => user,
58
+ :password => password,
59
+ :auth_token => auth_token,
60
+ :environment => environment,
61
+ :server => server
62
+ }
63
+ end
64
+
65
+ # Ask for credentials and store them
66
+ def store(credentials_file_path = Helpers::AuthHelper.credentials_file)
67
+ puts 'This will store credntials to GoodData in an enencrypted form to your harddrive to file ~/.gooddata.'
68
+ overwrite = GoodData::CLI.terminal.ask('Do you want to continue? (y/n)')
69
+ return if overwrite != 'y'
70
+
71
+ credentials = ask_for_credentials
72
+
73
+ ovewrite = if File.exist?(credentials_file_path)
74
+ GoodData::CLI.terminal.ask('Overwrite existing stored credentials (y/n)')
75
+ else
76
+ 'y'
77
+ end
78
+
79
+ if ovewrite == 'y'
80
+ Helpers::AuthHelper.write_credentials(credentials, credentials_file_path)
81
+ else
82
+ puts 'Aborting...'
83
+ end
84
+ end
85
+
86
+ # Delete stored credentials
87
+ def unstore(credentials_file_path = Helpers::AuthHelper.credentials_file)
88
+ Helpers::AuthHelper.remove_credentials_file(credentials_file_path)
89
+ end
90
+
91
+ # Conditionally sets default value for prompt.
92
+ # Default value is set to 'value' or 'default'
93
+ #
94
+ # @param [Highline] q Highline instance used
95
+ # @param [String] value Value used for ask default if not nil and not empty
96
+ # @param [String] default Value used for ask default iv 'value' is nil or empty
97
+ def set_default_value(q, value, default = nil)
98
+ if !value.nil? && !value.empty?
99
+ q.default = value
100
+ elsif default
101
+ q.default = default
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,12 @@
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 Command
9
+ class Base
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
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 'pathname'
8
+
9
+ base = Pathname(__FILE__).dirname.expand_path
10
+ Dir.glob(base + '*.rb').each do |file|
11
+ require file
12
+ end
@@ -0,0 +1,148 @@
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 'date'
8
+
9
+ require_relative '../data/guesser'
10
+ require_relative '../extract'
11
+ require_relative '../exceptions/command_failed'
12
+
13
+ module GoodData
14
+ module Command
15
+ class Datasets
16
+ # List all data sets present in the project specified by the --project option
17
+ #
18
+ # ## Usage
19
+ #
20
+ # gooddata datasets --project <projectid>
21
+ # gooddata datasets:list --project <projectid>
22
+ #
23
+ # * `--project` - GoodData project identifier
24
+ #
25
+ def index
26
+ # TODO: Review following connect replacement/reimplementation
27
+ # connect
28
+ with_project do |project_id|
29
+ Project[project_id].datasets.each do |ds|
30
+ puts "#{ds.uri}\t#{ds.identifier}\t#{ds.title}"
31
+ end
32
+ end
33
+ end
34
+
35
+ # Describe a data set. Currently, only a CSV data set is supported.
36
+ #
37
+ # The command prescans the data set, picks possible LDM types for it's
38
+ # fields and asks user for confirmation.
39
+ #
40
+ # ## Usage
41
+ #
42
+ # gooddata datasets:describe --file-csv <path> --name <name> --output <output path>
43
+ #
44
+ # * `--file-csv` - path to the CSV file (required)
45
+ # * `--name` - name of the data set (user will be prompted unless provided)
46
+ # * `--output` - name of the output JSON file with the model description (user will be prompted unless provided)
47
+ #
48
+ def describe
49
+ columns = ask_for_fields
50
+ name = extract_option('--name') || ask('Enter the dataset name')
51
+ output = extract_option('--output') || ask('Enter path to the file where to save the model description', :default => "#{name}.json")
52
+ open output, 'w' do |f|
53
+ f << JSON.pretty_generate(:title => name, :columns => columns) + "\n"
54
+ f.flush
55
+ end
56
+ end
57
+
58
+ # Creates a server-side model based on local model description. The model description
59
+ # is read from a JSON file that can be generated using the +datasets:describe+ command
60
+ #
61
+ # ## Usage
62
+ #
63
+ # gooddata datasets:apply --project <projectid> <data set config>
64
+ #
65
+ # * `--project`- GoodData project identifier
66
+ # * `data set config` - JSON file with the model description (possibly generated by the <tt>datasets:describe</tt> command)
67
+ #
68
+ def apply
69
+ # TODO: Review following connect replacement/reimplementation
70
+ # connect
71
+ with_project do |project_id|
72
+ begin
73
+ cfg_file = args.shift
74
+ rescue
75
+ raise(CommandFailed, 'Invalid arguments')
76
+ end
77
+
78
+ fail(CommandFailed, "Usage: #{$PROGRAM_NAME} <dataset config>") unless cfg_file
79
+ config = begin
80
+ JSON.load open(cfg_file)
81
+ rescue
82
+ raise(CommandFailed, "Error reading dataset config file '#{cfg_file}'")
83
+ end
84
+ objects = Project[project_id].add_dataset config['title'], config['columns']
85
+ puts "Dataset #{config['title']} added to the project, #{objects['uris'].length} metadata objects affected"
86
+ end
87
+ end
88
+
89
+ # Loads a CSV file into an existing server-side data set
90
+ #
91
+ # ## Usage
92
+ #
93
+ # gooddata datasets:load --project <projectid> <file> <dataset config><
94
+ #
95
+ # * `--project` - GoodData project identifier
96
+ # * `file` - CSV file to load
97
+ # * `data set config` - JSON file with the model description (possibly generated by the <tt>datasets:describe</tt> command)
98
+ #
99
+ def load
100
+ # TODO: Review following connect replacement/reimplementation
101
+ # connect
102
+ with_project do |project_id|
103
+ file, cfg_file = args
104
+ fail(CommandFailed, "Usage: #{$PROGRAM_NAME} datasets:load <file> <dataset config>") unless cfg_file
105
+ begin
106
+ config = JSON.load open(cfg_file)
107
+ rescue
108
+ raise(CommandFailed, "Error reading dataset config file '#{cfg_file}'")
109
+ end
110
+ schema = Model::Schema.new config
111
+ Project[project_id].upload file, schema
112
+ end
113
+ end
114
+
115
+ private
116
+
117
+ def with_project
118
+ unless @project_id
119
+ @project_id = extract_option('--project')
120
+ fail(CommandFailed, 'Project not specified, use the --project switch') unless @project_id
121
+ end
122
+ yield @project_id
123
+ end
124
+
125
+ def ask_for_fields
126
+ guesser = GoodData::Data::Guesser.new create_dataset.read
127
+ guess = guesser.guess(1000)
128
+ model = []
129
+ connection_point_set = false
130
+ question_fmt = 'Select data type of column #%i (%s)'
131
+ guesser.headers.each_with_index do |header, i|
132
+ options = guess[header].map(&:to_s)
133
+ options = options.select { |t| t != :connection_point.to_s } if connection_point_set
134
+ type = ask((question_fmt % [i + 1, header]), :answers => options)
135
+ model.push :title => header, :name => header, :type => type.upcase
136
+ connection_point_set = true if type == :connection_point.to_s
137
+ end
138
+ model
139
+ end
140
+
141
+ def create_dataset
142
+ file = extract_option('--file-csv')
143
+ return Extract::CsvFile.new(file) if file
144
+ fail(CommandFailed, 'Unknown data set. Please specify a data set using --file-csv option (more supported data sources to come!)')
145
+ end
146
+ end
147
+ end
148
+ end