gooddata 0.6.49 → 0.6.50

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 (390) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -4
  3. data/CLI.md +0 -4
  4. data/DEPENDENCIES.md +0 -8
  5. data/Dockerfile.jruby +19 -0
  6. data/Dockerfile.ruby +19 -0
  7. data/LICENSE +2 -2
  8. data/LICENSE.rb +1 -1
  9. data/Rakefile +1 -1
  10. data/gooddata.gemspec +29 -28
  11. data/lib/gooddata.rb +2 -1
  12. data/lib/gooddata/app/app.rb +1 -1
  13. data/lib/gooddata/bricks/base_downloader.rb +1 -1
  14. data/lib/gooddata/bricks/brick.rb +3 -4
  15. data/lib/gooddata/bricks/bricks.rb +3 -1
  16. data/lib/gooddata/bricks/middleware/aws_middleware.rb +6 -8
  17. data/lib/gooddata/bricks/middleware/base_middleware.rb +2 -1
  18. data/lib/gooddata/bricks/middleware/bench_middleware.rb +2 -1
  19. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +3 -3
  20. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +3 -2
  21. data/lib/gooddata/bricks/middleware/dwh_middleware.rb +28 -0
  22. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +2 -2
  23. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +2 -2
  24. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +84 -21
  25. data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
  26. data/lib/gooddata/bricks/middleware/middleware.rb +1 -1
  27. data/lib/gooddata/bricks/middleware/params_inspect_middleware.rb +21 -0
  28. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +26 -26
  29. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +1 -1
  30. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +1 -1
  31. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +1 -1
  32. data/lib/gooddata/bricks/pipeline.rb +6 -13
  33. data/lib/gooddata/bricks/utils.rb +3 -3
  34. data/lib/gooddata/cli/cli.rb +1 -1
  35. data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
  36. data/lib/gooddata/cli/commands/domain_cmd.rb +1 -1
  37. data/lib/gooddata/cli/commands/project_cmd.rb +1 -18
  38. data/lib/gooddata/cli/hooks.rb +1 -2
  39. data/lib/gooddata/cli/shared.rb +1 -1
  40. data/lib/gooddata/cli/terminal.rb +1 -1
  41. data/lib/gooddata/client.rb +1 -1
  42. data/lib/gooddata/commands/api.rb +1 -1
  43. data/lib/gooddata/commands/auth.rb +1 -1
  44. data/lib/gooddata/commands/base.rb +1 -1
  45. data/lib/gooddata/commands/commands.rb +1 -1
  46. data/lib/gooddata/commands/datasets.rb +1 -1
  47. data/lib/gooddata/commands/datawarehouse.rb +1 -1
  48. data/lib/gooddata/commands/domain.rb +1 -1
  49. data/lib/gooddata/commands/process.rb +1 -1
  50. data/lib/gooddata/commands/project.rb +2 -31
  51. data/lib/gooddata/commands/projects.rb +1 -1
  52. data/lib/gooddata/commands/role.rb +1 -1
  53. data/lib/gooddata/commands/runners.rb +1 -1
  54. data/lib/gooddata/commands/scaffold.rb +1 -1
  55. data/lib/gooddata/commands/user.rb +1 -1
  56. data/lib/gooddata/connection.rb +1 -1
  57. data/lib/gooddata/core/core.rb +1 -1
  58. data/lib/gooddata/core/logging.rb +1 -1
  59. data/lib/gooddata/core/nil_logger.rb +1 -1
  60. data/lib/gooddata/core/project.rb +1 -1
  61. data/lib/gooddata/core/rest.rb +1 -1
  62. data/lib/gooddata/core/user.rb +1 -1
  63. data/lib/gooddata/data/data.rb +1 -1
  64. data/lib/gooddata/data/guesser.rb +1 -1
  65. data/lib/gooddata/exceptions/attr_element_not_found.rb +1 -1
  66. data/lib/gooddata/exceptions/command_failed.rb +1 -1
  67. data/lib/gooddata/exceptions/exceptions.rb +1 -1
  68. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +1 -1
  69. data/lib/gooddata/exceptions/export_clone.rb +4 -0
  70. data/lib/gooddata/exceptions/filter_maqlization.rb +1 -1
  71. data/lib/gooddata/exceptions/import_clone.rb +4 -0
  72. data/lib/gooddata/exceptions/malformed_user.rb +1 -1
  73. data/lib/gooddata/exceptions/maql_execution.rb +1 -1
  74. data/lib/gooddata/exceptions/no_project_error.rb +1 -1
  75. data/lib/gooddata/exceptions/object_migration.rb +1 -1
  76. data/lib/gooddata/exceptions/project_not_found.rb +1 -1
  77. data/lib/gooddata/exceptions/segment_not_empty.rb +1 -1
  78. data/lib/gooddata/exceptions/uncomputable_report.rb +1 -1
  79. data/lib/gooddata/exceptions/user_in_different_domain.rb +1 -1
  80. data/lib/gooddata/exceptions/validation_error.rb +1 -1
  81. data/lib/gooddata/extensions/big_decimal.rb +1 -1
  82. data/lib/gooddata/extensions/class.rb +11 -0
  83. data/lib/gooddata/extensions/enumerable.rb +1 -1
  84. data/lib/gooddata/extensions/extensions.rb +1 -1
  85. data/lib/gooddata/extensions/false.rb +9 -1
  86. data/lib/gooddata/extensions/hash.rb +12 -1
  87. data/lib/gooddata/extensions/integer.rb +5 -0
  88. data/lib/gooddata/extensions/nil.rb +5 -1
  89. data/lib/gooddata/extensions/numeric.rb +1 -1
  90. data/lib/gooddata/extensions/object.rb +5 -1
  91. data/lib/gooddata/extensions/symbol.rb +1 -1
  92. data/lib/gooddata/extensions/true.rb +9 -1
  93. data/lib/gooddata/extract.rb +1 -1
  94. data/lib/gooddata/goodzilla/goodzilla.rb +1 -1
  95. data/lib/gooddata/helpers/auth_helpers.rb +1 -1
  96. data/lib/gooddata/helpers/csv_helper.rb +1 -1
  97. data/lib/gooddata/helpers/data_helper.rb +19 -10
  98. data/lib/gooddata/helpers/erb_helper.rb +23 -0
  99. data/lib/gooddata/helpers/global_helpers.rb +5 -73
  100. data/lib/gooddata/helpers/global_helpers_params.rb +73 -7
  101. data/lib/gooddata/helpers/helpers.rb +1 -1
  102. data/lib/gooddata/lcm/actions/actions.rb +12 -0
  103. data/lib/gooddata/lcm/actions/associate_clients.rb +46 -0
  104. data/lib/gooddata/lcm/actions/base_action.rb +23 -0
  105. data/lib/gooddata/lcm/actions/collect_clients.rb +89 -0
  106. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +103 -0
  107. data/lib/gooddata/lcm/actions/collect_segments.rb +59 -0
  108. data/lib/gooddata/lcm/actions/create_segment_masters.rb +167 -0
  109. data/lib/gooddata/lcm/actions/ensure_release_table.rb +56 -0
  110. data/lib/gooddata/lcm/actions/ensure_segments.rb +35 -0
  111. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +66 -0
  112. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +68 -0
  113. data/lib/gooddata/lcm/actions/ensure_titles.rb +54 -0
  114. data/lib/gooddata/lcm/actions/hello_world.rb +44 -0
  115. data/lib/gooddata/lcm/actions/print_actions.rb +61 -0
  116. data/lib/gooddata/lcm/actions/print_modes.rb +72 -0
  117. data/lib/gooddata/lcm/actions/print_types.rb +55 -0
  118. data/lib/gooddata/lcm/actions/provision_clients.rb +80 -0
  119. data/lib/gooddata/lcm/actions/purge_clients.rb +78 -0
  120. data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
  121. data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +60 -0
  122. data/lib/gooddata/lcm/actions/synchronize_clients.rb +87 -0
  123. data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +59 -0
  124. data/lib/gooddata/lcm/actions/synchronize_label_types.rb +61 -0
  125. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +64 -0
  126. data/lib/gooddata/lcm/actions/synchronize_meta.rb +55 -0
  127. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +55 -0
  128. data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
  129. data/lib/gooddata/lcm/actions/synchronize_schedules.rb +81 -0
  130. data/lib/gooddata/lcm/actions/update_release_table.rb +80 -0
  131. data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +5 -0
  132. data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
  133. data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
  134. data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
  135. data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
  136. data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
  137. data/lib/gooddata/lcm/dsl/type_dsl.rb +61 -0
  138. data/lib/gooddata/lcm/helpers/check_helper.rb +37 -0
  139. data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
  140. data/lib/gooddata/lcm/lcm.rb +161 -20
  141. data/lib/gooddata/lcm/lcm2.rb +260 -0
  142. data/lib/gooddata/lcm/types/base_type.rb +29 -0
  143. data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
  144. data/lib/gooddata/lcm/types/class/class.rb +21 -0
  145. data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
  146. data/lib/gooddata/lcm/types/class/types.rb +12 -0
  147. data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
  148. data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
  149. data/lib/gooddata/lcm/types/complex/segment.rb +37 -0
  150. data/lib/gooddata/lcm/types/complex/synchronization_info.rb +32 -0
  151. data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
  152. data/lib/gooddata/lcm/types/complex/types.rb +12 -0
  153. data/lib/gooddata/lcm/types/complex/update_preference.rb +32 -0
  154. data/lib/gooddata/lcm/types/param.rb +16 -0
  155. data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
  156. data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
  157. data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
  158. data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
  159. data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
  160. data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
  161. data/lib/gooddata/lcm/types/special/array.rb +35 -0
  162. data/lib/gooddata/lcm/types/special/enum.rb +17 -0
  163. data/lib/gooddata/lcm/types/special/types.rb +12 -0
  164. data/lib/gooddata/lcm/types/types.rb +12 -0
  165. data/lib/gooddata/mixins/author.rb +1 -1
  166. data/lib/gooddata/mixins/content_getter.rb +1 -1
  167. data/lib/gooddata/mixins/content_property_reader.rb +1 -1
  168. data/lib/gooddata/mixins/content_property_writer.rb +1 -1
  169. data/lib/gooddata/mixins/contributor.rb +1 -1
  170. data/lib/gooddata/mixins/data_getter.rb +1 -1
  171. data/lib/gooddata/mixins/data_property_reader.rb +1 -1
  172. data/lib/gooddata/mixins/data_property_writer.rb +1 -1
  173. data/lib/gooddata/mixins/inspector.rb +1 -1
  174. data/lib/gooddata/mixins/is_attribute.rb +1 -1
  175. data/lib/gooddata/mixins/is_dimension.rb +1 -1
  176. data/lib/gooddata/mixins/is_fact.rb +1 -1
  177. data/lib/gooddata/mixins/is_label.rb +1 -1
  178. data/lib/gooddata/mixins/links.rb +1 -1
  179. data/lib/gooddata/mixins/md_finders.rb +1 -1
  180. data/lib/gooddata/mixins/md_grantees.rb +1 -1
  181. data/lib/gooddata/mixins/md_id_to_uri.rb +9 -3
  182. data/lib/gooddata/mixins/md_json.rb +1 -1
  183. data/lib/gooddata/mixins/md_lock.rb +1 -1
  184. data/lib/gooddata/mixins/md_object_id.rb +1 -1
  185. data/lib/gooddata/mixins/md_object_indexer.rb +1 -1
  186. data/lib/gooddata/mixins/md_object_query.rb +1 -1
  187. data/lib/gooddata/mixins/md_relations.rb +1 -1
  188. data/lib/gooddata/mixins/meta_getter.rb +1 -1
  189. data/lib/gooddata/mixins/meta_property_reader.rb +1 -1
  190. data/lib/gooddata/mixins/meta_property_writer.rb +1 -1
  191. data/lib/gooddata/mixins/mixins.rb +1 -1
  192. data/lib/gooddata/mixins/not_attribute.rb +1 -1
  193. data/lib/gooddata/mixins/not_exportable.rb +1 -1
  194. data/lib/gooddata/mixins/not_fact.rb +1 -1
  195. data/lib/gooddata/mixins/not_group.rb +1 -1
  196. data/lib/gooddata/mixins/not_label.rb +1 -1
  197. data/lib/gooddata/mixins/not_metric.rb +1 -1
  198. data/lib/gooddata/mixins/obj_id.rb +1 -1
  199. data/lib/gooddata/mixins/rest_getters.rb +1 -1
  200. data/lib/gooddata/mixins/rest_resource.rb +1 -1
  201. data/lib/gooddata/mixins/root_key_getter.rb +1 -1
  202. data/lib/gooddata/mixins/root_key_setter.rb +1 -1
  203. data/lib/gooddata/mixins/timestamps.rb +1 -1
  204. data/lib/gooddata/models/ads_output_stage.rb +85 -0
  205. data/lib/gooddata/models/automated_data_distribution.rb +36 -0
  206. data/lib/gooddata/models/blueprint/anchor_field.rb +4 -3
  207. data/lib/gooddata/models/blueprint/attribute_field.rb +18 -2
  208. data/lib/gooddata/models/blueprint/blueprint.rb +1 -1
  209. data/lib/gooddata/models/blueprint/blueprint_field.rb +1 -1
  210. data/lib/gooddata/models/blueprint/dashboard_builder.rb +1 -1
  211. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +6 -1
  212. data/lib/gooddata/models/blueprint/date_dimension.rb +1 -1
  213. data/lib/gooddata/models/blueprint/fact_field.rb +1 -1
  214. data/lib/gooddata/models/blueprint/label_field.rb +5 -1
  215. data/lib/gooddata/models/blueprint/project_blueprint.rb +1 -1
  216. data/lib/gooddata/models/blueprint/project_builder.rb +1 -1
  217. data/lib/gooddata/models/blueprint/reference_field.rb +1 -1
  218. data/lib/gooddata/models/blueprint/schema_blueprint.rb +1 -1
  219. data/lib/gooddata/models/blueprint/schema_builder.rb +1 -1
  220. data/lib/gooddata/models/blueprint/to_manifest.rb +7 -3
  221. data/lib/gooddata/models/blueprint/to_wire.rb +12 -1
  222. data/lib/gooddata/models/channel_configuration.rb +112 -0
  223. data/lib/gooddata/models/client.rb +42 -6
  224. data/lib/gooddata/models/client_synchronization_result.rb +1 -1
  225. data/lib/gooddata/models/client_synchronization_result_details.rb +1 -1
  226. data/lib/gooddata/models/datawarehouse.rb +25 -3
  227. data/lib/gooddata/models/domain.rb +29 -4
  228. data/lib/gooddata/models/execution.rb +1 -1
  229. data/lib/gooddata/models/execution_detail.rb +1 -1
  230. data/lib/gooddata/models/from_wire.rb +8 -1
  231. data/lib/gooddata/models/invitation.rb +1 -1
  232. data/lib/gooddata/models/links.rb +1 -1
  233. data/lib/gooddata/models/membership.rb +1 -1
  234. data/lib/gooddata/models/metadata.rb +3 -2
  235. data/lib/gooddata/models/metadata/attribute.rb +7 -1
  236. data/lib/gooddata/models/metadata/dashboard.rb +3 -3
  237. data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +1 -1
  238. data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +2 -2
  239. data/lib/gooddata/models/metadata/dashboard/filter_item.rb +2 -2
  240. data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +2 -2
  241. data/lib/gooddata/models/metadata/dashboard/headline_item.rb +2 -2
  242. data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +2 -2
  243. data/lib/gooddata/models/metadata/dashboard/report_item.rb +2 -2
  244. data/lib/gooddata/models/metadata/dashboard/text_item.rb +2 -2
  245. data/lib/gooddata/models/metadata/dashboard_tab.rb +2 -2
  246. data/lib/gooddata/models/metadata/dataset.rb +1 -1
  247. data/lib/gooddata/models/metadata/dimension.rb +1 -1
  248. data/lib/gooddata/models/metadata/fact.rb +1 -1
  249. data/lib/gooddata/models/metadata/folder.rb +1 -1
  250. data/lib/gooddata/models/metadata/label.rb +1 -1
  251. data/lib/gooddata/models/metadata/metadata.rb +1 -1
  252. data/lib/gooddata/models/metadata/metric.rb +1 -1
  253. data/lib/gooddata/models/metadata/report.rb +1 -1
  254. data/lib/gooddata/models/metadata/report_definition.rb +1 -1
  255. data/lib/gooddata/models/metadata/scheduled_mail.rb +2 -2
  256. data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +1 -1
  257. data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +1 -1
  258. data/lib/gooddata/models/metadata/variable.rb +1 -1
  259. data/lib/gooddata/models/model.rb +1 -1
  260. data/lib/gooddata/models/models.rb +1 -1
  261. data/lib/gooddata/models/module_constants.rb +1 -1
  262. data/lib/gooddata/models/notification_rule.rb +113 -0
  263. data/lib/gooddata/models/process.rb +10 -3
  264. data/lib/gooddata/models/profile.rb +9 -1
  265. data/lib/gooddata/models/project.rb +248 -50
  266. data/lib/gooddata/models/project_creator.rb +2 -2
  267. data/lib/gooddata/models/project_metadata.rb +1 -1
  268. data/lib/gooddata/models/project_role.rb +1 -1
  269. data/lib/gooddata/models/report_data_result.rb +1 -1
  270. data/lib/gooddata/models/schedule.rb +49 -13
  271. data/lib/gooddata/models/segment.rb +3 -3
  272. data/lib/gooddata/models/style_setting.rb +71 -0
  273. data/lib/gooddata/models/subscription.rb +181 -0
  274. data/lib/gooddata/models/tab_builder.rb +1 -1
  275. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +1 -1
  276. data/lib/gooddata/models/user_filters/user_filter.rb +1 -1
  277. data/lib/gooddata/models/user_filters/user_filter_builder.rb +11 -5
  278. data/lib/gooddata/models/user_filters/user_filters.rb +1 -1
  279. data/lib/gooddata/models/user_filters/variable_user_filter.rb +1 -1
  280. data/lib/gooddata/models/user_group.rb +19 -12
  281. data/lib/gooddata/rest/client.rb +9 -1
  282. data/lib/gooddata/rest/connection.rb +18 -9
  283. data/lib/gooddata/rest/object.rb +1 -1
  284. data/lib/gooddata/rest/object_factory.rb +1 -1
  285. data/lib/gooddata/rest/resource.rb +1 -1
  286. data/lib/gooddata/rest/rest.rb +1 -1
  287. data/lib/gooddata/version.rb +2 -2
  288. data/spec/.rubocop.yml +16 -0
  289. data/spec/bricks/bricks_spec.rb +13 -15
  290. data/spec/data/blueprints/attribute_sort_order_blueprint.json +72 -0
  291. data/spec/data/gooddata_version_process/gooddata_version.rb +1 -1
  292. data/spec/data/hello_world_process/hello_world.rb +2 -2
  293. data/spec/data/ruby_params_process/ruby_params.rb +1 -1
  294. data/spec/data/ruby_process/process.rb +2 -2
  295. data/spec/data/wire_models/attribute_sort_by_model.json +73 -0
  296. data/spec/environment/default.rb +14 -13
  297. data/spec/environment/develop.rb +26 -11
  298. data/spec/environment/environment.rb +2 -1
  299. data/spec/environment/hotfix.rb +15 -7
  300. data/spec/environment/production.rb +6 -14
  301. data/spec/environment/staging.rb +9 -10
  302. data/spec/helpers/blueprint_helper.rb +11 -10
  303. data/spec/helpers/cli_helper.rb +26 -24
  304. data/spec/helpers/connection_helper.rb +28 -26
  305. data/spec/helpers/crypto_helper.rb +8 -6
  306. data/spec/helpers/csv_helper.rb +7 -5
  307. data/spec/helpers/process_helper.rb +13 -11
  308. data/spec/helpers/project_helper.rb +36 -34
  309. data/spec/helpers/schedule_helper.rb +13 -11
  310. data/spec/helpers/spec_helper.rb +8 -6
  311. data/spec/integration/ads_output_stage_spec.rb +55 -0
  312. data/spec/integration/blueprint_updates_spec.rb +22 -16
  313. data/spec/integration/blueprint_with_grain_spec.rb +5 -3
  314. data/spec/integration/channel_configuration_spec.rb +67 -0
  315. data/spec/integration/clients_spec.rb +31 -22
  316. data/spec/integration/command_datawarehouse_spec.rb +4 -4
  317. data/spec/integration/command_projects_spec.rb +6 -6
  318. data/spec/integration/create_from_template_spec.rb +4 -3
  319. data/spec/integration/create_project_spec.rb +7 -4
  320. data/spec/integration/date_dim_switch_spec.rb +25 -28
  321. data/spec/integration/deprecated_load_spec.rb +11 -9
  322. data/spec/integration/full_process_schedule_spec.rb +82 -13
  323. data/spec/integration/full_project_spec.rb +67 -45
  324. data/spec/integration/lcm_spec.rb +41 -0
  325. data/spec/integration/over_to_user_filters_spec.rb +14 -10
  326. data/spec/integration/partial_md_export_import_spec.rb +3 -4
  327. data/spec/integration/project_spec.rb +101 -42
  328. data/spec/integration/rest_spec.rb +5 -4
  329. data/spec/integration/schedule_spec.rb +28 -39
  330. data/spec/integration/segments_spec.rb +42 -31
  331. data/spec/integration/subscription_spec.rb +63 -0
  332. data/spec/integration/user_filters_spec.rb +49 -39
  333. data/spec/integration/user_group_spec.rb +25 -5
  334. data/spec/integration/variables_spec.rb +34 -32
  335. data/spec/logging_in_logging_out_spec.rb +6 -8
  336. data/spec/spec_helper.rb +3 -3
  337. data/spec/unit/bricks/bricks_spec.rb +3 -4
  338. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +8 -15
  339. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +2 -2
  340. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +2 -2
  341. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +2 -2
  342. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +2 -2
  343. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +3 -3
  344. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +3 -3
  345. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +3 -3
  346. data/spec/unit/cli/cli_spec.rb +3 -3
  347. data/spec/unit/cli/commands/cmd_auth_spec.rb +2 -2
  348. data/spec/unit/commands/command_projects_spec.rb +3 -3
  349. data/spec/unit/core/connection_spec.rb +3 -4
  350. data/spec/unit/core/logging_spec.rb +2 -5
  351. data/spec/unit/core/nil_logger_spec.rb +2 -2
  352. data/spec/unit/core/project_spec.rb +4 -4
  353. data/spec/unit/extensions/hash_spec.rb +3 -4
  354. data/spec/unit/godzilla/goodzilla_spec.rb +22 -26
  355. data/spec/unit/helpers/csv_helper_spec.rb +3 -3
  356. data/spec/unit/helpers/data_helper_spec.rb +6 -18
  357. data/spec/unit/helpers/global_helpers_spec.rb +112 -28
  358. data/spec/unit/helpers_spec.rb +139 -2
  359. data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
  360. data/spec/unit/models/blueprint/attributes_spec.rb +1 -2
  361. data/spec/unit/models/blueprint/dataset_spec.rb +2 -3
  362. data/spec/unit/models/blueprint/labels_spec.rb +1 -2
  363. data/spec/unit/models/blueprint/project_blueprint_spec.rb +34 -35
  364. data/spec/unit/models/blueprint/reference_spec.rb +1 -2
  365. data/spec/unit/models/blueprint/schema_builder_spec.rb +5 -7
  366. data/spec/unit/models/blueprint/to_wire_spec.rb +76 -55
  367. data/spec/unit/models/domain_spec.rb +4 -5
  368. data/spec/unit/models/execution_spec.rb +16 -15
  369. data/spec/unit/models/from_wire_spec.rb +24 -19
  370. data/spec/unit/models/invitation_spec.rb +1 -1
  371. data/spec/unit/models/membership_spec.rb +36 -41
  372. data/spec/unit/models/metadata_spec.rb +20 -18
  373. data/spec/unit/models/metric_spec.rb +67 -55
  374. data/spec/unit/models/model_spec.rb +32 -37
  375. data/spec/unit/models/params_spec.rb +1 -1
  376. data/spec/unit/models/profile_spec.rb +40 -45
  377. data/spec/unit/models/project_creator_spec.rb +27 -29
  378. data/spec/unit/models/project_role_spec.rb +1 -1
  379. data/spec/unit/models/project_spec.rb +65 -2
  380. data/spec/unit/models/report_result_data_spec.rb +7 -12
  381. data/spec/unit/models/schedule_spec.rb +71 -35
  382. data/spec/unit/models/to_manifest_spec.rb +69 -4
  383. data/spec/unit/models/unit_project_spec.rb +12 -12
  384. data/spec/unit/models/user_filters_spec.rb +40 -40
  385. data/spec/unit/models/variable_spec.rb +108 -93
  386. data/spec/unit/rest/polling_spec.rb +7 -7
  387. data/spec/unit/rest/resource_spec.rb +2 -2
  388. metadata +145 -228
  389. data/spec/environment/release.rb +0 -21
  390. data/spec/environment/staging_3.rb +0 -36
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
@@ -9,7 +9,6 @@ require 'gooddata'
9
9
  include GoodData::Model
10
10
 
11
11
  describe GoodData::Model::ToManifest do
12
-
13
12
  before(:each) do
14
13
  @spec = JSON.parse(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_names => true)
15
14
  @result = JSON.parse(File.read("./spec/data/manifests/test_project.json"))
@@ -29,7 +28,7 @@ describe GoodData::Model::ToManifest do
29
28
  d.add_date('opportunity_comitted', dataset: 'committed_on')
30
29
  end
31
30
  end
32
- expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'][0]['constraints']).to eq ({ "date" => GoodData::Model::DEFAULT_DATE_FORMAT })
31
+ expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'][0]['constraints']).to eq("date" => GoodData::Model::DEFAULT_DATE_FORMAT)
33
32
  end
34
33
 
35
34
  it 'blueprint can be set with date reference and default format is set' do
@@ -42,7 +41,7 @@ describe GoodData::Model::ToManifest do
42
41
  d.add_date('opportunity_comitted', dataset: 'committed_on', format: 'yyyy/MM/dd')
43
42
  end
44
43
  end
45
- expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'][0]['constraints']).to eq ({ "date" => "yyyy/MM/dd" })
44
+ expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'][0]['constraints']).to eq("date" => "yyyy/MM/dd")
46
45
  end
47
46
 
48
47
  it 'blueprint can handle date fact during creation of manifest' do
@@ -60,4 +59,70 @@ describe GoodData::Model::ToManifest do
60
59
  end
61
60
  expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'].count).to eq 4
62
61
  end
62
+
63
+ it 'blueprint can be specified to have a reference key. The manifest respects it. If not it takes the first key.' do
64
+ blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
65
+ p.add_date_dimension("committed_on")
66
+
67
+ p.add_dataset("repos") do |d|
68
+ d.add_anchor("repo_id")
69
+ d.add_label("repo_label_1", reference: "repo_id")
70
+ d.add_label("repo_label_2", reference: "repo_id")
71
+ d.add_attribute("name")
72
+ d.add_label("name_label", reference: "name")
73
+
74
+ d.add_date('opportunity_comitted', dataset: 'committed_on', format: 'yyyy/MM/dd')
75
+ d.add_column(type: :date_fact, id: 'dt.date_fact')
76
+ end
77
+ end
78
+ expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts']).to include("referenceKey" => 1, "populates" => ["repo_label_1"], "mode" => "FULL", "columnName" => "repo_label_1")
79
+
80
+ blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
81
+ p.add_date_dimension("committed_on")
82
+
83
+ p.add_dataset("repos") do |d|
84
+ d.add_anchor("repo_id")
85
+ d.add_label("repo_label_1", reference: "repo_id")
86
+ d.add_label("repo_label_2", reference: "repo_id", reference_label: true)
87
+ d.add_attribute("name")
88
+ d.add_label("name_label", reference: "name")
89
+
90
+ d.add_date('opportunity_comitted', dataset: 'committed_on', format: 'yyyy/MM/dd')
91
+ end
92
+
93
+ p.add_dataset("commits") do |d|
94
+ d.add_anchor("commits_id")
95
+ d.add_fact('lines')
96
+ d.add_reference('repos')
97
+ end
98
+ end
99
+
100
+ expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts']).to include("referenceKey" => 1, "populates" => ["repo_label_2"], "mode" => "FULL", "columnName" => "repo_label_2")
101
+ expect(blueprint.to_manifest[1]['dataSetSLIManifest']['parts']).to include("populates" => ["repo_label_2"], "mode" => "FULL", "columnName" => "repos", "referenceKey" => 1)
102
+ end
103
+
104
+ it 'blueprint cannot have more than one reference key.' do
105
+ blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
106
+ p.add_date_dimension("committed_on")
107
+
108
+ p.add_dataset("repos") do |d|
109
+ d.add_anchor("repo_id")
110
+ d.add_label("repo_label_1", reference: "repo_id", reference_label: true)
111
+ d.add_label("repo_label_2", reference: "repo_id", reference_label: true)
112
+ d.add_attribute("name")
113
+ d.add_label("name_label", reference: "name")
114
+
115
+ d.add_date('opportunity_comitted', dataset: 'committed_on', format: 'yyyy/MM/dd')
116
+ d.add_column(type: :date_fact, id: 'dt.date_fact')
117
+ end
118
+ end
119
+
120
+ expect(blueprint.valid?).to be false
121
+ expect(blueprint.validate).to eq [
122
+ {
123
+ type: :error,
124
+ message: "Anchor \"repo_id\" can have only one label with reference_label field set to true"
125
+ }
126
+ ]
127
+ end
63
128
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
@@ -8,7 +8,7 @@ require 'gooddata'
8
8
 
9
9
  describe GoodData::Project do
10
10
  before(:all) do
11
- @client = ConnectionHelper::create_default_connection
11
+ @client = ConnectionHelper.create_default_connection
12
12
  @p = GoodData::Project.create_object(title: 'a', client: @client)
13
13
  @domain = @client.domain('dummy_domain')
14
14
  @roles = [
@@ -29,7 +29,7 @@ describe GoodData::Project do
29
29
  })
30
30
  ]
31
31
  @domain_members = [
32
- GoodData::Profile.create_object(login: 'john.doe+in_domain@gooddata.com', uri: '/uri/john_domain'),
32
+ GoodData::Profile.create_object(login: 'john.doe+in_domain@gooddata.com', uri: '/uri/john_domain')
33
33
  ]
34
34
  @members = [
35
35
  GoodData::Membership.create(login: 'john.doe@goodadta.com', uri: '/uri/john'),
@@ -37,42 +37,42 @@ describe GoodData::Project do
37
37
  ]
38
38
  end
39
39
 
40
- describe 'resolve_roles' do
40
+ describe 'resolve_roles' do
41
41
  it 'Can handle case with user login when user is in the project' do
42
42
  # we have to provide users from project to be able to do this by login
43
43
  a, b = @p.resolve_roles('john.doe@goodadta.com', 'test_role', project_users: @members, roles: @roles)
44
44
  expect(a).to eq "/gdc/account/profile/john.doe@goodadta.com"
45
45
  expect(b).to eq ["/roles/1"]
46
46
  end
47
-
47
+
48
48
  it 'Can handle case with user uri when user is in the project' do
49
49
  # we have to provide users from project to be able to do this by login
50
50
  a, b = @p.resolve_roles('/uri/john', 'test_role', project_users: @members, roles: @roles)
51
51
  expect(a).to eq "/uri/john"
52
52
  expect(b).to eq ["/roles/1"]
53
53
  end
54
-
54
+
55
55
  it 'can handle case with info with uri when user is in the project' do
56
56
  # we have to provide users from project to be able to do this by login
57
- a, b = @p.resolve_roles({uri: '/uri/john', first_name: 'John'}, 'test_role', project_users: @members, roles: @roles)
57
+ a, b = @p.resolve_roles({ uri: '/uri/john', first_name: 'John' }, 'test_role', project_users: @members, roles: @roles)
58
58
  expect(a).to eq "/uri/john"
59
59
  expect(b).to eq ["/roles/1"]
60
60
  end
61
-
61
+
62
62
  it 'can handle case with info with login when he is in the project' do
63
63
  # we have to provide users from project to be able to do this by login
64
64
  a, b = @p.resolve_roles({ login: 'john.doe@goodadta.com', first_name: 'John' }, 'test_role', project_users: @members, roles: @roles)
65
65
  expect(a).to eq "/gdc/account/profile/john.doe@goodadta.com"
66
66
  expect(b).to eq ["/roles/1"]
67
67
  end
68
-
68
+
69
69
  it 'can handle case with member when he is in the project' do
70
70
  # we have to provide users from project to be able to do this by login
71
71
  a, b = @p.resolve_roles(@members.first, 'test_role_2', project_users: @members, roles: @roles)
72
72
  expect(a).to eq "/uri/john"
73
73
  expect(b).to eq ["/roles/2"]
74
74
  end
75
-
75
+
76
76
  it 'can handle case with profile when the user is in the project' do
77
77
  # we have to provide users from project to be able to do this by login
78
78
  a, b = @p.resolve_roles(@domain_members.first, 'test_role_2', project_users: @members, roles: @roles)
@@ -96,7 +96,7 @@ describe GoodData::Project do
96
96
 
97
97
  it 'can handle case with info with uri when user is in the domain' do
98
98
  # we have to provide users from project to be able to do this by login
99
- a, b = @p.resolve_roles({uri: '/uri/john_domain', first_name: 'John'}, 'test_role', project_users: [], domain_users: @domain_members, roles: @roles, domain: @domain)
99
+ a, b = @p.resolve_roles({ uri: '/uri/john_domain', first_name: 'John' }, 'test_role', project_users: [], domain_users: @domain_members, roles: @roles, domain: @domain)
100
100
  expect(a).to eq "/uri/john_domain"
101
101
  expect(b).to eq ["/roles/1"]
102
102
  end
@@ -121,5 +121,5 @@ describe GoodData::Project do
121
121
  expect(a).to eq "/uri/john_domain"
122
122
  expect(b).to eq ["/roles/2"]
123
123
  end
124
- end
124
+ end
125
125
  end
@@ -1,74 +1,74 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
7
7
  require 'gooddata'
8
8
 
9
9
  def check_filters(filters)
10
- filters.count.should == 2
10
+ filters.count.should eq(2)
11
11
  filter = filters.first
12
- filter[:login].should == "john.doe@example.com"
13
- filter[:filters].count.should == 1
14
- filter[:filters].first[:values].count.should == 4
15
- filter[:filters].first[:values].should == ["USA", "Czech Republic", "Uganda", "Slovakia"]
12
+ filter[:login].should eq("john.doe@example.com")
13
+ filter[:filters].count.should eq(1)
14
+ filter[:filters].first[:values].count.should eq(4)
15
+ filter[:filters].first[:values].should eq(["USA", "Czech Republic", "Uganda", "Slovakia"])
16
16
  filter = filters.last
17
- filter[:login].should == "jane.doe@example.com"
18
- filter[:filters].count.should == 1
19
- filter[:filters].first[:values].count.should == 1
17
+ filter[:login].should eq("jane.doe@example.com")
18
+ filter[:filters].count.should eq(1)
19
+ filter[:filters].first[:values].count.should eq(1)
20
20
  end
21
21
 
22
22
  describe 'User filters implementation' do
23
-
24
23
  it "should create user filters from a file using row based approach" do
25
- filters = GoodData::UserFilterBuilder::get_filters('./spec/data/line_based_permissions.csv', {
26
- :labels => [
27
- {:label => "/gdc/md/lu292gm1077gtv7i383hjl149sva7o1e/obj/2719"},
28
- ]
29
- });
24
+ filters = GoodData::UserFilterBuilder.get_filters(
25
+ './spec/data/line_based_permissions.csv',
26
+ :labels => [{ :label => "/gdc/md/lu292gm1077gtv7i383hjl149sva7o1e/obj/2719" }]
27
+ )
30
28
  check_filters(filters)
31
29
  end
32
30
 
33
31
  it "should create user filters from a file using column based approach" do
34
- filters = GoodData::UserFilterBuilder::get_filters('./spec/data/column_based_permissions.csv', {
35
- :labels => [
36
- {:label => "/gdc/md/lu292gm1077gtv7i383hjl149sva7o1e/obj/2719", :column => 'region'},
37
- ]
38
- });
32
+ filters = GoodData::UserFilterBuilder.get_filters(
33
+ './spec/data/column_based_permissions.csv',
34
+ :labels => [{ :label => "/gdc/md/lu292gm1077gtv7i383hjl149sva7o1e/obj/2719", :column => 'region' }]
35
+ )
39
36
  check_filters(filters)
40
37
  end
41
38
 
42
39
  it "should treat empty like nil, empty value has to be enclosed in quotes" do
43
- filters = GoodData::UserFilterBuilder::get_filters('./spec/data/column_based_permissions.csv', {
44
- :labels => [
45
- {:label => "some_label", :column => 'region'},
46
- {:label => "other_label", :column => 'department'}
47
- ]
48
- });
49
- filters.first[:filters].last[:values].count.should == 3
40
+ filters = GoodData::UserFilterBuilder.get_filters(
41
+ './spec/data/column_based_permissions.csv',
42
+ :labels => [
43
+ { :label => "some_label", :column => 'region' },
44
+ { :label => "other_label", :column => 'department' }
45
+ ]
46
+ )
47
+ filters.first[:filters].last[:values].count.should eq(3)
50
48
  end
51
49
 
52
50
  it "should be able to specify columns by number" do
53
- filters = GoodData::UserFilterBuilder::get_filters('./spec/data/column_based_permissions2.csv', {
51
+ filters = GoodData::UserFilterBuilder.get_filters(
52
+ './spec/data/column_based_permissions2.csv',
54
53
  :user_column => 2,
55
54
  :labels => [
56
- {:label => "some_label", :column => 0},
57
- {:label => "other_label", :column => 1}
55
+ { :label => "some_label", :column => 0 },
56
+ { :label => "other_label", :column => 1 }
58
57
  ]
59
- });
60
- filters.first[:filters].last[:values].count.should == 2
58
+ )
59
+ filters.first[:filters].last[:values].count.should eq(2)
61
60
  end
62
61
 
63
62
  it "should be able to specify columns by name" do
64
- filters = GoodData::UserFilterBuilder::get_filters('./spec/data/column_based_permissions2.csv', {
63
+ filters = GoodData::UserFilterBuilder.get_filters(
64
+ './spec/data/column_based_permissions2.csv',
65
65
  :user_column => 'login',
66
66
  :labels => [
67
- {:label => 'some_label', :column => 'region'},
68
- {:label => 'other_label', :column => 'department'}
67
+ { :label => 'some_label', :column => 'region' },
68
+ { :label => 'other_label', :column => 'department' }
69
69
  ]
70
- });
71
- filters.first[:filters].last[:values].count.should == 2
70
+ )
71
+ filters.first[:filters].last[:values].count.should eq(2)
72
72
  end
73
73
 
74
74
  it "should normalize simplified filters" do
@@ -80,9 +80,9 @@ describe 'User filters implementation' do
80
80
  "jirka@gooddata.com"
81
81
  ]
82
82
  ]
83
- GoodData::UserFilterBuilder.normalize_filters(filters).should == [
83
+ GoodData::UserFilterBuilder.normalize_filters(filters).should eq([
84
84
  {
85
- :login =>"svarovsky+gem_tester@gooddata.com",
85
+ :login => "svarovsky+gem_tester@gooddata.com",
86
86
  :filters => [
87
87
  {
88
88
  :label => "/gdc/md/zndbmx87kh69vk8liods10mwxesaxn3k/obj/213",
@@ -90,6 +90,6 @@ describe 'User filters implementation' do
90
90
  }
91
91
  ]
92
92
  }
93
- ]
93
+ ])
94
94
  end
95
95
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
@@ -9,7 +9,7 @@ require 'gooddata'
9
9
  ROW_BASED_DATA = [
10
10
  ['tomas@gooddata.com', 'US', 'CZ', 'KZ'],
11
11
  ['petr@gooddata.com', 'US'],
12
- ['petr@gooddata.com','KZ']
12
+ ['petr@gooddata.com', 'KZ']
13
13
  ]
14
14
  COLUMN_BASED_DATA_WITH_HEADERS = [
15
15
  {
@@ -67,121 +67,127 @@ COLUMN_BASED_DATA_WITH_HEADERS_AND_EMPTY_VAL = [
67
67
 
68
68
  describe "DSL" do
69
69
  it "should pick the values from row based file" do
70
- results = GoodData::UserFilterBuilder::get_values(ROW_BASED_DATA, {
71
- :labels => [{:label => "label/34"}]
72
- })
70
+ results = GoodData::UserFilterBuilder.get_values(ROW_BASED_DATA, :labels => [{ :label => "label/34" }])
73
71
  results.should == {
74
- "tomas@gooddata.com"=>[
75
- {:label=> "label/34", :values=>["US", "CZ", "KZ"], :over => nil, :to => nil}
72
+ "tomas@gooddata.com" => [
73
+ { :label => "label/34", :values => %w(US CZ KZ), :over => nil, :to => nil }
76
74
  ],
77
- "petr@gooddata.com"=> [
78
- {:label=> "label/34", :values=>["US"], :over => nil, :to => nil},
79
- {:label=> "label/34", :values=>["KZ"], :over => nil, :to => nil}
75
+ "petr@gooddata.com" => [
76
+ { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
77
+ { :label => "label/34", :values => ["KZ"], :over => nil, :to => nil }
80
78
  ]
81
79
  }
82
80
  end
83
81
 
84
82
  it "should pick the values from column based file" do
85
- results = GoodData::UserFilterBuilder::get_values(COLUMN_BASED_DATA_WITH_HEADERS, {
83
+ results = GoodData::UserFilterBuilder.get_values(
84
+ COLUMN_BASED_DATA_WITH_HEADERS,
86
85
  :type => :filter,
87
86
  :user_column => :login,
88
- :labels => [{:label => "label/34", :column => :country}]
89
- })
87
+ :labels => [{ :label => "label/34", :column => :country }]
88
+ )
90
89
  results.should == {
91
- "tomas@gooddata.com"=>[
92
- {:label => "label/34", :values=>["US"], :over => nil, :to => nil}
90
+ "tomas@gooddata.com" => [
91
+ { :label => "label/34", :values => ["US"], :over => nil, :to => nil }
93
92
  ],
94
- "petr@gooddata.com"=> [
95
- {:label=> "label/34", :values=>["US"], :over => nil, :to => nil},
96
- {:label=> "label/34", :values=>["KZ"], :over => nil, :to => nil}
93
+ "petr@gooddata.com" => [
94
+ { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
95
+ { :label => "label/34", :values => ["KZ"], :over => nil, :to => nil }
97
96
  ]
98
97
  }
99
98
  end
100
99
 
101
100
  it "should pick the values from column based file with multiple columns" do
102
- results = GoodData::UserFilterBuilder::get_values(COLUMN_BASED_DATA_WITH_HEADERS, {
101
+ results = GoodData::UserFilterBuilder.get_values(
102
+ COLUMN_BASED_DATA_WITH_HEADERS,
103
103
  :type => :filter,
104
104
  :user_column => :login,
105
- :labels => [{:label => "label/34", :column => :country}, {:label => "label/99", :column => :age}]
106
- })
105
+ :labels => [{ :label => "label/34", :column => :country }, { :label => "label/99", :column => :age }]
106
+ )
107
107
  results.should == {
108
- "tomas@gooddata.com"=>[
109
- {:label=> "label/34", :values=>["US"], :over => nil, :to => nil},
110
- {:label=> "label/99", :values=>[14], :over => nil, :to => nil}
108
+ "tomas@gooddata.com" => [
109
+ { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
110
+ { :label => "label/99", :values => [14], :over => nil, :to => nil }
111
111
  ],
112
- "petr@gooddata.com"=> [
113
- {:label=>"label/34", :values=>["US"], :over => nil, :to => nil},
114
- {:label=>"label/99", :values=>[19], :over => nil, :to => nil},
115
- {:label=>"label/34", :values=>["KZ"], :over => nil, :to => nil},
116
- {:label=>"label/99", :values=>[30], :over => nil, :to => nil}
112
+ "petr@gooddata.com" => [
113
+ { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
114
+ { :label => "label/99", :values => [19], :over => nil, :to => nil },
115
+ { :label => "label/34", :values => ["KZ"], :over => nil, :to => nil },
116
+ { :label => "label/99", :values => [30], :over => nil, :to => nil }
117
117
  ]
118
118
  }
119
119
  end
120
120
 
121
121
  it "should process end to end" do
122
- result = GoodData::UserFilterBuilder::get_filters(COLUMN_BASED_DATA_WITH_HEADERS, {
122
+ result = GoodData::UserFilterBuilder.get_filters(
123
+ COLUMN_BASED_DATA_WITH_HEADERS,
123
124
  :user_column => :login,
124
- :labels => [{:label => {:uri => "label/34"}, :column => :country}, {:label => {:uri => "label/99"}, :column => :age}]
125
- })
125
+ :labels => [{ :label => { :uri => "label/34" }, :column => :country }, { :label => { :uri => "label/99" }, :column => :age }]
126
+ )
126
127
  result.should == [
127
128
  {
128
- :login=>"tomas@gooddata.com",
129
- :filters=> [
130
- {:label=>{:uri=>"label/34"}, :values=>["US"], :over => nil, :to => nil},
131
- {:label=>{:uri=>"label/99"}, :values=>[14], :over => nil, :to => nil}
129
+ :login => "tomas@gooddata.com",
130
+ :filters => [
131
+ { :label => { :uri => "label/34" }, :values => ["US"], :over => nil, :to => nil },
132
+ { :label => { :uri => "label/99" }, :values => [14], :over => nil, :to => nil }
132
133
  ]
133
134
  },
134
135
  {
135
- :login=>"petr@gooddata.com",
136
+ :login => "petr@gooddata.com",
136
137
  :filters => [
137
- {:label=>{:uri=>"label/34"}, :values=>["US", "KZ"], :over => nil, :to => nil},
138
- {:label=>{:uri=>"label/99"}, :values=>[19, 30], :over => nil, :to => nil}
138
+ { :label => { :uri => "label/34" }, :values => %w(US KZ), :over => nil, :to => nil },
139
+ { :label => { :uri => "label/99" }, :values => [19, 30], :over => nil, :to => nil }
139
140
  ]
140
141
  }
141
142
  ]
142
143
  end
143
144
 
144
145
  it "should process end to end nil value should be ignored" do
145
- result = GoodData::UserFilterBuilder::get_filters(COLUMN_BASED_DATA_WITH_HEADERS_AND_NIL_VAL, {
146
+ result = GoodData::UserFilterBuilder.get_filters(
147
+ COLUMN_BASED_DATA_WITH_HEADERS_AND_NIL_VAL,
146
148
  :user_column => :login,
147
- :labels => [{:label => {:uri => "label/34"}, :column => :country}, {:label => {:uri => "label/99"}, :column => :age}]
148
- })
149
+ :labels => [{ :label => { :uri => "label/34" }, :column => :country }, { :label => { :uri => "label/99" }, :column => :age }]
150
+ )
149
151
  result.should == [
150
152
  {
151
- :login=>"tomas@gooddata.com",
152
- :filters=> [
153
- {:label=>{:uri=>"label/34"}, :values=>["US"], :over => nil, :to => nil},
154
- {:label=>{:uri=>"label/99"}, :values=>[14], :over => nil, :to => nil}
153
+ :login => "tomas@gooddata.com",
154
+ :filters => [
155
+ { :label => { :uri => "label/34" }, :values => ["US"], :over => nil, :to => nil },
156
+ { :label => { :uri => "label/99" }, :values => [14], :over => nil, :to => nil }
155
157
  ]
156
158
  },
157
159
  {
158
- :login=>"petr@gooddata.com",
160
+ :login => "petr@gooddata.com",
159
161
  :filters => [
160
- {:label=>{:uri=>"label/34"}, :values=>["US", "KZ"], :over => nil, :to => nil},
161
- {:label=>{:uri=>"label/99"}, :values=>[19], :over => nil, :to => nil}
162
+ { :label => { :uri => "label/34" }, :values => %w(US KZ), :over => nil, :to => nil },
163
+ { :label => { :uri => "label/99" }, :values => [19], :over => nil, :to => nil }
162
164
  ]
163
165
  }
164
166
  ]
165
167
  end
166
168
 
167
169
  it "should process end to end nil value should be ignored" do
168
- result = GoodData::UserFilterBuilder::get_filters(COLUMN_BASED_DATA_WITH_HEADERS_AND_EMPTY_VAL, {
170
+ result = GoodData::UserFilterBuilder.get_filters(
171
+ COLUMN_BASED_DATA_WITH_HEADERS_AND_EMPTY_VAL,
169
172
  :user_column => :login,
170
- :labels => [{:label => {:uri => "label/34"}, :column => :country}, {:label => {:uri => "label/99"}, :column => :age}]
171
- })
173
+ :labels => [
174
+ { :label => { :uri => "label/34" }, :column => :country },
175
+ { :label => { :uri => "label/99" }, :column => :age }
176
+ ]
177
+ )
172
178
  result.should == [
173
179
  {
174
- :login=>"tomas@gooddata.com",
175
- :filters=> [
176
- {:label=>{:uri=>"label/34"}, :values=>["US"], :over => nil, :to => nil},
177
- {:label=>{:uri=>"label/99"}, :values=>[14], :over => nil, :to => nil}
180
+ :login => "tomas@gooddata.com",
181
+ :filters => [
182
+ { :label => { :uri => "label/34" }, :values => ["US"], :over => nil, :to => nil },
183
+ { :label => { :uri => "label/99" }, :values => [14], :over => nil, :to => nil }
178
184
  ]
179
185
  },
180
186
  {
181
- :login=>"petr@gooddata.com",
187
+ :login => "petr@gooddata.com",
182
188
  :filters => [
183
- {:label=>{:uri=>"label/34"}, :values=>["US", "KZ"], :over => nil, :to => nil},
184
- {:label=>{:uri=>"label/99"}, :values=>[19, ""], :over => nil, :to => nil}
189
+ { :label => { :uri => "label/34" }, :values => %w(US KZ), :over => nil, :to => nil },
190
+ { :label => { :uri => "label/99" }, :values => [19, ""], :over => nil, :to => nil }
185
191
  ]
186
192
  }
187
193
  ]
@@ -190,64 +196,73 @@ describe "DSL" do
190
196
  it "should collect values for every user" do
191
197
  data = {
192
198
  "tomas" => [
193
- {:label=>"label/34", :values=>["US"]},
194
- {:label=>"label/34", :values=>["KZ"]},
195
- {:label=>"label/99", :values=>[18]},
196
- {:label=>"label/99", :values=>[20]}
199
+ { :label => "label/34", :values => ["US"] },
200
+ { :label => "label/34", :values => ["KZ"] },
201
+ { :label => "label/99", :values => [18] },
202
+ { :label => "label/99", :values => [20] }
197
203
  ],
198
204
  "petr" => [
199
- {:label=>"label/34", :values=>["US"]},
200
- {:label=>"label/99", :values=>[2]},
201
- {:label=>"label/99", :values=>[1]}
205
+ { :label => "label/34", :values => ["US"] },
206
+ { :label => "label/99", :values => [2] },
207
+ { :label => "label/99", :values => [1] }
202
208
  ]
203
209
  }
204
210
  result = GoodData::UserFilterBuilder.reduce_results(data)
205
- result.should == [{:login=>"tomas",
206
- :filters=>
207
- [{:label=>"label/34", :values=>["US", "KZ"], :over => nil, :to => nil},
208
- {:label=>"label/99", :values=>[18, 20], :over => nil, :to => nil}]},
209
- {:login=>"petr",
210
- :filters =>
211
- [{:label=>"label/34", :values=>["US"], :over => nil, :to => nil},
212
- {:label=>"label/99", :values=>[2, 1], :over => nil, :to => nil}]}]
211
+ result.should == [
212
+ {
213
+ :login => "tomas",
214
+ :filters => [
215
+ { :label => "label/34", :values => %w(US KZ), :over => nil, :to => nil },
216
+ { :label => "label/99", :values => [18, 20], :over => nil, :to => nil }
217
+ ]
218
+ },
219
+ {
220
+ :login => "petr",
221
+ :filters => [
222
+ { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
223
+ { :label => "label/99", :values => [2, 1], :over => nil, :to => nil }
224
+ ]
225
+ }
226
+ ]
213
227
  end
214
228
 
215
229
  it "should collect values for every label" do
216
230
  data = [
217
- {:label=>"label/34", :values=>["US"]},
218
- {:label=>"label/34", :values=>["KZ"]},
219
- {:label=>"label/99", :values=>[18]},
220
- {:label=>"label/99", :values=>[20]}
231
+ { :label => "label/34", :values => ["US"] },
232
+ { :label => "label/34", :values => ["KZ"] },
233
+ { :label => "label/99", :values => [18] },
234
+ { :label => "label/99", :values => [20] }
221
235
  ]
222
236
  result = GoodData::UserFilterBuilder.collect_labels(data)
223
- result.should == [{:label=>"label/34", :values=>["US", "KZ"], :over => nil, :to => nil},
224
- {:label=>"label/99", :values=>[18, 20], :over => nil, :to => nil}]
225
-
237
+ result.should == [
238
+ { :label => "label/34", :values => %w(US KZ), :over => nil, :to => nil },
239
+ { :label => "label/99", :values => [18, 20], :over => nil, :to => nil }
240
+ ]
226
241
  end
227
242
 
228
243
  it "should collect values" do
229
244
  data = [
230
- {:label=>"label/34", :values=>["US"]},
231
- {:label=>"label/34", :values=>["KZ"]}
245
+ { :label => "label/34", :values => ["US"] },
246
+ { :label => "label/34", :values => ["KZ"] }
232
247
  ]
233
248
  results = GoodData::UserFilterBuilder.collect_values(data)
234
- results.should == ["US", "KZ"]
249
+ results.should == %w(US KZ)
235
250
  end
236
251
 
237
252
  it "should translate filters into MAQL filters" do
238
253
  data = [
239
254
  {
240
- :login=>"tomas@gooddata.com",
241
- :filters=> [
242
- {:label => "label/34", :values=>["US"]},
243
- {:label => "label/99", :values=>[14]}
255
+ :login => "tomas@gooddata.com",
256
+ :filters => [
257
+ { :label => "label/34", :values => ["US"] },
258
+ { :label => "label/99", :values => [14] }
244
259
  ]
245
260
  },
246
261
  {
247
- :login=>"petr@gooddata.com",
262
+ :login => "petr@gooddata.com",
248
263
  :filters => [
249
- {:label => "label/34", :values=>["US", "KZ"]},
250
- {:label=> "label/99", :values=>[19]}
264
+ { :label => "label/34", :values => %w(US KZ) },
265
+ { :label => "label/99", :values => [19] }
251
266
  ]
252
267
  }
253
268
  ]
@@ -258,8 +273,8 @@ describe "DSL" do
258
273
  }
259
274
  end
260
275
  results.should == [
261
- {:login=>"tomas@gooddata.com", :maql_filter=>"[label/34] IN (US) AND [label/99] IN (14)"},
262
- {:login=>"petr@gooddata.com", :maql_filter=>"[label/34] IN (US, KZ) AND [label/99] IN (19)"}
276
+ { :login => "tomas@gooddata.com", :maql_filter => "[label/34] IN (US) AND [label/99] IN (14)" },
277
+ { :login => "petr@gooddata.com", :maql_filter => "[label/34] IN (US, KZ) AND [label/99] IN (19)" }
263
278
  ]
264
279
  end
265
280
  end