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,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
+ module GoodData
8
+ module Command
9
+ # Also known as ADS and DSS
10
+ class DataWarehouse
11
+ class << self
12
+ # Create new project based on options supplied
13
+ def create(options = { client: GoodData.connection })
14
+ description = options[:summary] || options[:description]
15
+ GoodData::DataWarehouse.create(options.merge(:description => description))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,40 @@
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
+ require_relative '../models/domain'
9
+
10
+ module GoodData
11
+ module Command
12
+ # Low level access to GoodData API
13
+ class Domain
14
+ attr_reader :name
15
+
16
+ class << self
17
+ def add_user(domain, login, password, opts = { :client => GoodData.connection })
18
+ data = {
19
+ :domain => domain,
20
+ :login => login,
21
+ :password => password
22
+ }
23
+ GoodData::Domain.add_user(data.merge(opts))
24
+ end
25
+
26
+ def list_users(domain_name, options = { :client => GoodData.connection })
27
+ client = GoodData.connect(options)
28
+ domain = client.domain(domain_name)
29
+
30
+ rows = domain.users.to_a.map do |user|
31
+ [user.email, user.full_name]
32
+ end
33
+
34
+ table = Terminal::Table.new :headings => ['Email', 'Full Name'], :rows => rows
35
+ puts table
36
+ end
37
+ end
38
+ end
39
+ end
40
+ 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 'pathname'
8
+
9
+ require_relative '../core/core'
10
+
11
+ module GoodData
12
+ module Command
13
+ class Process
14
+ class << self
15
+ def list(options = { :client => GoodData.connection, :project => GoodData.project })
16
+ GoodData::Process[:all, options]
17
+ end
18
+
19
+ def get(options = {})
20
+ pid = options[:project_id]
21
+ fail ArgumentError, 'None or invalid project_id specified' if pid.nil? || pid.empty?
22
+
23
+ id = options[:process_id]
24
+ fail ArgumentError, 'None or invalid process_id' if id.nil? || id.empty?
25
+ c = options[:client]
26
+ c.with_project(pid) do |project|
27
+ project.processes(id)
28
+ end
29
+ end
30
+
31
+ def delete(process_id, options = { :client => GoodData.connection, :project => GoodData.project })
32
+ c = options[:client]
33
+ pid = options[:project_id]
34
+ process = c.with_project(pid) do |project|
35
+ project.processes(process_id)
36
+ end
37
+ process.delete
38
+ end
39
+
40
+ # TODO: check files_to_exclude param. Does it do anything? It should check that in case of using CLI, it makes sure the files are not deployed
41
+ def deploy(dir, options = { :client => GoodData.connection, :project => GoodData.project })
42
+ params = options[:params].nil? ? [] : [options[:params]]
43
+ c = options[:client]
44
+ pid = options[:project_id]
45
+ c.with_project(pid) do |project|
46
+ project.deploy_process(dir, options.merge(:files_to_exclude => params))
47
+ end
48
+ end
49
+
50
+ def execute_process(process_id, executable, options = { :client => GoodData.connection, :project => GoodData.project })
51
+ process = GoodData::Process[process_id, options]
52
+ process.execute_process(executable, options)
53
+ end
54
+
55
+ def run(dir, executable, options = { :client => GoodData.connection, :project => GoodData.project })
56
+ verbose = options[:v]
57
+ dir = Pathname(dir)
58
+ name = options[:name] || "Temporary deploy[#{dir}][#{options[:project_name]}]"
59
+ GoodData::Process.with_deploy(dir, options.merge(:name => name, :project_id => ProjectHelper::PROJECT_ID)) do |process|
60
+ puts HighLine.color('Executing', HighLine::BOLD) if verbose
61
+ process.execute(executable, options)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,175 @@
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
+ require 'terminal-table'
9
+
10
+ require_relative '../connection'
11
+
12
+ module GoodData
13
+ module Command
14
+ class Project
15
+ class << self
16
+ # Create new project based on options supplied
17
+ def create(options = { client: GoodData.connection })
18
+ title = options[:title]
19
+ summary = options[:summary]
20
+ template = options[:template]
21
+ token = options[:token]
22
+ client = options[:client]
23
+ driver = options[:driver] || 'Pg'
24
+ GoodData::Project.create(:title => title, :summary => summary, :template => template, :auth_token => token, :client => client, :driver => driver)
25
+ end
26
+
27
+ # Show existing project
28
+ def show(id, options = { client: GoodData.connection })
29
+ client = options[:client]
30
+ client.projects(id)
31
+ end
32
+
33
+ def invite(project_id, email, role, msg = GoodData::Project::DEFAULT_INVITE_MESSAGE, options = {})
34
+ client = options[:client]
35
+ project = client.projects(project_id)
36
+ fail "Invalid project id '#{project_id}' specified" if project.nil?
37
+
38
+ project.invite(email, role, msg)
39
+ end
40
+
41
+ # Clone existing project
42
+ #
43
+ # @param project_id [String | GoodData::Project] Project id or project instance to delete
44
+ # @option options [String] :data Clone including all the data (default true)
45
+ # @option options [String] :users Clone including all the users (default false)
46
+ # @option options [String] :title Name of the cloned project (default "Clone of {old_project_title}")
47
+ # @option options [Boolean] :verbose (false) Switch on verbose mode for detailed logging
48
+ def clone(project_id, options = { client: GoodData.connection })
49
+ client = options[:client]
50
+ client.with_project(project_id) do |project|
51
+ project.clone(options)
52
+ end
53
+ end
54
+
55
+ # Deletes existing project
56
+ #
57
+ # @param project_id [String | GoodData::Project] Project id or project instance to delete
58
+ def delete(project_id, options = { client: GoodData.connection })
59
+ client = options[:client]
60
+ p = client.projects(project_id)
61
+ p.delete
62
+ end
63
+
64
+ # Get Spec and ID (of project)
65
+ def get_spec_and_project_id(base_path)
66
+ goodfile_path = GoodData::Helpers.find_goodfile(Pathname(base_path))
67
+ fail 'Goodfile could not be located in any parent directory. Please make sure you are inside a gooddata project folder.' if goodfile_path.nil?
68
+ goodfile = JSON.parse(File.read(goodfile_path), :symbolize_names => true)
69
+ spec_path = goodfile[:model] || fail('You need to specify the path of the build spec')
70
+ fail "Model path provided in Goodfile \"#{spec_path}\" does not exist" unless File.exist?(spec_path) && !File.directory?(spec_path)
71
+
72
+ spec_path = Pathname(spec_path)
73
+
74
+ content = File.read(spec_path)
75
+ spec = if spec_path.extname == '.rb'
76
+ eval(content)
77
+ elsif spec_path.extname == '.json'
78
+ JSON.parse(spec_path, :symbolize_names => true)
79
+ end
80
+ [spec, goodfile[:project_id]]
81
+ end
82
+
83
+ # Update project
84
+ def update(opts = { client: GoodData.connection })
85
+ client, project = GoodData.get_client_and_project(opts)
86
+ GoodData::Model::ProjectCreator.migrate(:spec => opts[:spec], :client => client, :project => project)
87
+ end
88
+
89
+ # Build project
90
+ def build(opts = { client: GoodData.connection })
91
+ client = opts[:client]
92
+ fail ArgumentError, 'No :client specified' if client.nil?
93
+
94
+ GoodData::Model::ProjectCreator.migrate(opts.merge(:client => client))
95
+ end
96
+
97
+ # Performs project validation
98
+ #
99
+ # @param project_id [String | GoodData::Project] Project id or project instance to validate
100
+ # @return [Object] Report of found problems
101
+ def validate(project_id, options = { client: GoodData.connection })
102
+ client = options[:client]
103
+ client.with_project(project_id, &:validate)
104
+ end
105
+
106
+ def jack_in(options)
107
+ goodfile_path = GoodData::Helpers.find_goodfile(Pathname('.'))
108
+
109
+ spin_session = proc do |goodfile, _blueprint|
110
+ project_id = options[:project_id] || goodfile[:project_id]
111
+
112
+ begin
113
+ require 'gooddata'
114
+ client = GoodData.connect(options)
115
+ project = client.projects(project_id) if project_id
116
+ puts "Use 'exit' to quit the live session. Use 'q' to jump out of displaying a large output."
117
+ binding.pry(:quiet => true, # rubocop:disable Lint/Debugger
118
+ :prompt => [proc do |_target_self, _nest_level, _pry|
119
+ 'project_live_session: '
120
+ end])
121
+ rescue GoodData::ProjectNotFound
122
+ puts "Project with id \"#{project_id}\" could not be found. Make sure that the id you provided is correct."
123
+ end
124
+ end
125
+
126
+ if goodfile_path
127
+ goodfile = MultiJson.load(File.read(goodfile_path), :symbolize_keys => true)
128
+ model_key = goodfile[:model]
129
+ blueprint = GoodData::Model::ProjectBlueprint.new(eval(File.read(model_key)).to_hash) if File.exist?(model_key) && !File.directory?(model_key)
130
+ FileUtils.cd(goodfile_path.dirname) do
131
+ spin_session.call(goodfile, blueprint)
132
+ end
133
+ else
134
+ spin_session.call({}, nil)
135
+ end
136
+ end
137
+
138
+ # Lists roles in a project
139
+ #
140
+ # @param project_id [String | GoodData::Project] Project id or project instance to list the users in
141
+ # @return [Array <GoodData::Role>] List of project roles
142
+ def roles(project_id, options = { client: GoodData.connection })
143
+ client = options[:client]
144
+ client.with_project(project_id, &:roles)
145
+ end
146
+
147
+ # Lists users in a project
148
+ #
149
+ # @param project_id [String | GoodData::Project] Project id or project instance to list the users in
150
+ # @return [Array <GoodData::Membership>] List of project users
151
+ def users(project_id, options = { client: GoodData.connection })
152
+ client = options[:client] || GoodData.connect(options)
153
+ client.with_project(project_id, &:users)
154
+ end
155
+
156
+ # Lists users in a project
157
+ #
158
+ # @param options [Hash] List of users
159
+ #
160
+ # TODO: Review and refactor #users & #list_users
161
+ def list_users(options = { client: GoodData.connection })
162
+ client = GoodData.connect(options)
163
+ project = client.projects(options[:project_id])
164
+
165
+ rows = project.users.to_a.map do |user|
166
+ [user.email, user.full_name, user.role.title, user.user_groups.join(', ')]
167
+ end
168
+
169
+ table = Terminal::Table.new :headings => ['Email', 'Full Name', 'Role', 'Groups'], :rows => rows
170
+ puts table
171
+ end
172
+ end
173
+ end
174
+ end
175
+ 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 'pathname'
8
+
9
+ module GoodData
10
+ module Command
11
+ class Projects
12
+ class << self
13
+ def list(options = { client: GoodData.connection })
14
+ client = options[:client]
15
+ client.projects
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,36 @@
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 '../core/core'
8
+
9
+ module GoodData
10
+ module Command
11
+ class Role
12
+ class << self
13
+ def list(_pid, opts = { :client => GoodData.connection, :project => GoodData.project })
14
+ p = opts[:project]
15
+ fail ArgumentError, 'No :project specified' if p.nil?
16
+
17
+ project = GoodData::Project[p, opts]
18
+ fail ArgumentError, 'Wrong :project specified' if project.nil?
19
+
20
+ roles_response = client.get("/gdc/projects/#{project.pid}/roles")
21
+
22
+ roles = {}
23
+ roles_response['projectRoles']['roles'].each do |role_uri|
24
+ r = client.get(role_uri)
25
+ identifier = r['projectRole']['meta']['identifier']
26
+ roles[identifier] = {
27
+ :user_uri => r['projectRole']['links']['roleUsers'],
28
+ :uri => role_uri
29
+ }
30
+ end
31
+ roles
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,47 @@
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
+ module GoodData
10
+ module Command
11
+ class Runners
12
+ def self.run_ruby_locally(brick_dir, options = {})
13
+ pid = options[:project_id]
14
+ fail 'You have to specify a project ID' if pid.nil?
15
+ fail 'You have to specify directory of the brick run' if brick_dir.nil?
16
+ fail 'You specified file as a birck run directory. You have to specify directory.' if File.exist?(brick_dir) && !File.directory?(brick_dir)
17
+
18
+ params = options[:expanded_params] || {}
19
+
20
+ client = GoodData.connect(options[:username], options[:password])
21
+ sst = client.connection.sst_token
22
+ pwd = Pathname.new(Dir.pwd)
23
+
24
+ server_uri = URI(options[:server]) unless options[:server].nil?
25
+ scheme = server_uri.nil? ? '' : server_uri.scheme
26
+ hostname = server_uri.nil? ? '' : server_uri.host
27
+
28
+ script_body = <<-script_body
29
+ require 'fileutils'
30
+ FileUtils::cd(\"#{pwd + brick_dir}\") do\
31
+
32
+ $SCRIPT_PARAMS = {
33
+ "GDC_SST" => \"#{sst}\",
34
+ "GDC_PROJECT_ID" => \"#{pid}\",
35
+ "GDC_PROTOCOL" => \"#{scheme}\",
36
+ "GDC_HOSTNAME" => \"#{hostname}\",
37
+ "GDC_LOGGER_FILE" => STDOUT,
38
+ "GDC_ENV_LOCAL" => true
39
+ }.merge(#{params})
40
+ require './main.rb'
41
+ end
42
+ script_body
43
+ system('ruby', '-e', script_body)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,69 @@
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 'erubis'
8
+ require 'fileutils'
9
+ require 'pathname'
10
+
11
+ module GoodData
12
+ module Command
13
+ class Scaffold
14
+ TEMPLATES_PATH = Pathname(__FILE__) + '../../../templates'
15
+
16
+ class << self
17
+ # Scaffolds new project
18
+ # TODO: Add option for custom output dir
19
+ def project(name)
20
+ fail ArgumentError, 'No name specified' if name.nil?
21
+
22
+ FileUtils.mkdir(name)
23
+ FileUtils.cd(name) do
24
+ FileUtils.mkdir('model')
25
+ FileUtils.cd('model') do
26
+ input = File.read(TEMPLATES_PATH + 'project/model/model.rb.erb')
27
+ eruby = Erubis::Eruby.new(input)
28
+ File.open('model.rb', 'w') do |f|
29
+ f.write(eruby.result(:name => name))
30
+ end
31
+ end
32
+
33
+ FileUtils.mkdir('data')
34
+ FileUtils.cd('data') do
35
+ FileUtils.cp(Dir.glob(TEMPLATES_PATH + 'project/data/*.csv'), '.')
36
+ end
37
+
38
+ input = File.read(TEMPLATES_PATH + 'project/Goodfile.erb')
39
+ eruby = Erubis::Eruby.new(input)
40
+ File.open('Goodfile', 'w') do |f|
41
+ f.write(eruby.result)
42
+ end
43
+ end
44
+ end
45
+
46
+ # Scaffolds new brick
47
+ # TODO: Add option for custom output dir
48
+ def brick(name)
49
+ fail ArgumentError, 'No name specified' if name.nil?
50
+
51
+ FileUtils.mkdir(name)
52
+ FileUtils.cd(name) do
53
+ input = File.read(TEMPLATES_PATH + 'bricks/brick.rb.erb')
54
+ eruby = Erubis::Eruby.new(input)
55
+ File.open('brick.rb', 'w') do |f|
56
+ f.write(eruby.result)
57
+ end
58
+
59
+ input = File.read(TEMPLATES_PATH + 'bricks/main.rb.erb')
60
+ eruby = Erubis::Eruby.new(input)
61
+ File.open('main.rb', 'w') do |f|
62
+ f.write(eruby.result)
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end