freckle_io 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -5
  3. data/freckle-io.gemspec +3 -3
  4. data/lib/freckle_io/client/entries.rb +1 -26
  5. data/lib/freckle_io/client/project_groups.rb +0 -2
  6. data/lib/freckle_io/client/projects.rb +1 -13
  7. data/lib/freckle_io/client/tags.rb +1 -6
  8. data/lib/freckle_io/client/users.rb +1 -6
  9. data/lib/freckle_io/configuration.rb +5 -5
  10. data/lib/freckle_io/connection.rb +1 -3
  11. data/lib/freckle_io/params.rb +5 -10
  12. data/lib/freckle_io/request/multiple_pages.rb +3 -3
  13. data/lib/freckle_io/request/single_page.rb +2 -2
  14. data/lib/freckle_io/validator/base_contract.rb +16 -0
  15. data/lib/freckle_io/validator/entry.rb +26 -50
  16. data/lib/freckle_io/validator/project.rb +13 -39
  17. data/lib/freckle_io/validator/project_group.rb +5 -24
  18. data/lib/freckle_io/validator/tag.rb +5 -24
  19. data/lib/freckle_io/validator/user.rb +13 -37
  20. data/lib/freckle_io/validator/validation.yml +8 -13
  21. data/lib/freckle_io.rb +1 -1
  22. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +23 -18
  23. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/_all/returns_a_entry_for_each_response.yml +23 -18
  24. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/with_unknow_params/doesn_t_raise_a_invalid_params_error.yml +53 -0
  25. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/with_valid_params/params_should_be_valid.yml +22 -17
  26. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Entries/with_configuration/with_validator/call_entry_s_validator.yml +24 -19
  27. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +261 -35
  28. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/_all/returns_a_project_group_for_each_response.yml +262 -36
  29. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/with_unknow_params/doesn_t_raises_a_invalid_params_error.yml +325 -0
  30. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/with_valid_params/params_should_be_valid.yml +22 -17
  31. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_ProjectGroups/with_configuration/with_validator/call_project_group_s_validator.yml +261 -35
  32. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +501 -225
  33. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_all/returns_a_project_for_each_response.yml +501 -225
  34. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_show/get_a_spacific_project.yml +24 -19
  35. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/_show/raw_links_should_be_a_empty_array.yml +24 -19
  36. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/with_unknow_params/doesn_t_raises_a_invalid_params_error.yml +865 -0
  37. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/with_valid_params/params_should_be_valid.yml +22 -17
  38. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Projects/with_configuration/with_validator/call_project_s_validator.yml +502 -226
  39. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +23 -18
  40. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/_all/returns_a_tag_for_each_response.yml +23 -18
  41. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/with_unknow_params/doesn_t_raise_a_invalid_params_error.yml +53 -0
  42. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/with_valid_params/params_should_be_valid.yml +22 -17
  43. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Tags/with_configuration/with_validator/call_tag_s_validator.yml +23 -18
  44. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/_all/result_must_be_a_Request_MultiplePages.yml +45 -35
  45. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/_all/returns_a_user_for_each_response.yml +45 -35
  46. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/with_unknow_params/doesn_t_raise_a_invalid_params_error.yml +109 -0
  47. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/with_valid_params/params_should_be_valid.yml +22 -17
  48. data/spec/fixtures/vcr_cassettes/FreckleIO_Client_Users/with_configuration/with_validator/call_user_s_validator.yml +45 -35
  49. data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_a_valid_response/must_be_a_json_format.yml +23 -18
  50. data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_freckle_token_authentication/set_X-FreckleToken.yml +23 -18
  51. data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_header/set_user_agent.yml +23 -18
  52. data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_invalid_url/raises_a_resource_not_found_error_for_invalid_resource.yml +13 -16
  53. data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_page_param/response_must_be_success.yml +23 -18
  54. data/spec/fixtures/vcr_cassettes/FreckleIO_Connection/with_default_configuration/with_per_page_param/response_must_have_per_page_elements.yml +24 -19
  55. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_MultiplePages/with_configuration/_get/returns_an_array_of_faraday_response.yml +45 -35
  56. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_MultiplePages/with_configuration/_get/returns_freckle_default_per_page_elements.yml +45 -35
  57. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_MultiplePages/with_per_page/_get/return_per_page_number_elements.yml +74 -59
  58. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_first/next_page_should_be_a_SinglePage.yml +45 -35
  59. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_first/prev_page_should_be_nil.yml +23 -18
  60. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_first/when_get_last_page_from_the_first_page/next_should_be_nil.yml +45 -35
  61. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_get/returns_correct_raw_links_for_the_first_page.yml +23 -18
  62. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_last/next_page_should_be_nil.yml +45 -35
  63. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_last/returns_correct_raw_links_for_the_last_page.yml +45 -35
  64. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_last/when_get_prev_page_from_the_last_page/prev_should_be_nil.yml +67 -52
  65. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_next/previous_page_is_a_SinglePage.yml +67 -52
  66. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_next/previous_page_should_be_not_nil.yml +67 -52
  67. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_prev/next_page_is_a_SinglePage.yml +89 -69
  68. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_prev/when_get_prev_page_from_the_first_page/prev_should_be_nil.yml +67 -52
  69. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_total_page/with_first_page/returns_the_range_of_pages.yml +23 -18
  70. data/spec/fixtures/vcr_cassettes/FreckleIO_Request_SinglePage/with_configuration/_total_page/with_next_page/returns_an_empty_array.yml +45 -35
  71. data/spec/freckle_io/client/entries_spec.rb +23 -32
  72. data/spec/freckle_io/client/project_groups_spec.rb +11 -20
  73. data/spec/freckle_io/client/projects_spec.rb +15 -21
  74. data/spec/freckle_io/client/tags_spec.rb +10 -19
  75. data/spec/freckle_io/client/users_spec.rb +13 -21
  76. data/spec/freckle_io/configuration_spec.rb +7 -4
  77. data/spec/freckle_io/connection_spec.rb +1 -1
  78. data/spec/freckle_io/paginator_spec.rb +8 -8
  79. data/spec/freckle_io/params_spec.rb +1 -1
  80. data/spec/freckle_io/request/single_page_spec.rb +6 -6
  81. data/spec/spec_helper.rb +3 -3
  82. data/spec/support/anonymize/entries.rb +9 -8
  83. data/spec/support/anonymize/project_groups.rb +4 -3
  84. data/spec/support/anonymize/projects.rb +9 -8
  85. data/spec/support/anonymize/tags.rb +5 -4
  86. data/spec/support/anonymize/users.rb +13 -15
  87. data/spec/support/anonymize_interaction.rb +5 -5
  88. metadata +27 -22
  89. data/lib/freckle_io/validator/restricted_hash.rb +0 -11
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: http://foo.com/7
5
+ uri: http://foo.com/6
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -16,33 +16,38 @@ http_interactions:
16
16
  response:
17
17
  status:
18
18
  code: 200
19
- message: OK
19
+ message: ''
20
20
  headers:
21
21
  Server:
22
22
  - nginx
23
23
  Date:
24
- - Thu, 29 Aug 2019 08:07:24 GMT
24
+ - Wed, 19 Oct 2022 15:06:58 GMT
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
- Content-Length:
28
- - '2284'
29
- Connection:
30
- - keep-alive
31
- Status:
32
- - 200 OK
33
- Cache-Control:
34
- - private, max-age=0, must-revalidate
35
27
  X-Frame-Options:
36
28
  - SAMEORIGIN
29
+ X-Xss-Protection:
30
+ - '0'
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ X-Download-Options:
34
+ - noopen
35
+ X-Permitted-Cross-Domain-Policies:
36
+ - none
37
+ Referrer-Policy:
38
+ - strict-origin-when-cross-origin
39
+ Etag:
40
+ - W/"58eed19f9cd175d6241e523f9e2d6e81"
41
+ Cache-Control:
42
+ - max-age=0, private, must-revalidate
43
+ X-Request-Id:
44
+ - 8722dbed-f573-4cec-a67c-94493488ee9b
37
45
  X-Runtime:
38
- - '50'
46
+ - '0.094024'
39
47
  Vary:
40
48
  - Origin
41
- Strict-Transport-Security:
42
- - max-age=31536000; includeSubdomains
43
49
  body:
44
- encoding: UTF-8
45
- string: '{"id":0,"name":"name_0","description":"","billing_increment":5,"enabled":false,"billable":true,"color":"#13a480","created_at":"2018-07-16T08:32:45Z","updated_at":"2019-02-27T06:18:19Z","group":{"id":1,"name":"name_1","url":"http://foo.com/0"},"minutes":24670,"billable_minutes":22510,"unbillable_minutes":2160,"invoiced_minutes":0,"uninvoiced_minutes":22510,"remaining_minutes":-310,"budgeted_minutes":22200,"participants":[{"id":2,"email":"email_0@domain.com","first_name":"first_name_0","last_name":"last_name_0","profile_image_url":"http://foo.com/0","url":"http://foo.com/1"},{"id":3,"email":"email_1@domain.com","first_name":"first_name_1","last_name":"last_name_1","profile_image_url":"http://foo.com/1","url":"http://foo.com/2"},{"id":4,"email":"email_2@domain.com","first_name":"first_name_2","last_name":"last_name_2","profile_image_url":"http://foo.com/2","url":"http://foo.com/3"},{"id":5,"email":"email_3@domain.com","first_name":"first_name_3","last_name":"last_name_3","profile_image_url":"","url":"http://foo.com/4"},{"id":6,"email":"email_4@domain.com","first_name":"first_name_4","last_name":"last_name_4","profile_image_url":"http://foo.com/3","url":"http://foo.com/5"},{"id":7,"email":"email_5@domain.com","first_name":"first_name_5","last_name":"last_name_5","profile_image_url":"http://foo.com/4","url":"http://foo.com/6"}],"entries":102,"entries_url":"http://foo.com/7/entries","url":"http://foo.com/7","merge_url":"http://foo.com/7/merge","archive_url":"http://foo.com/7/archive","unarchive_url":"http://foo.com/7/unarchive"}'
46
- http_version:
47
- recorded_at: Thu, 29 Aug 2019 08:07:24 GMT
48
- recorded_with: VCR 4.0.0
50
+ encoding: ASCII-8BIT
51
+ string: '{"id":0,"name":"name_0","description":"","billing_increment":5,"enabled":true,"billable":true,"color":"#f6bed7","created_at":"2020-12-16T18:27:04Z","updated_at":"2022-08-07T21:24:00Z","group":{"id":1,"name":"name_1","url":"http://foo.com/0"},"minutes":3930,"billable_minutes":3495,"unbillable_minutes":435,"invoiced_minutes":0,"uninvoiced_minutes":3495,"remaining_minutes":null,"budgeted_minutes":null,"participants":[{"id":2,"email":"email_0@domain.com","first_name":"first_name_0","last_name":"last_name_0","profile_image_url":"http://foo.com/0","url":"http://foo.com/1"},{"id":3,"email":"email_1@domain.com","first_name":"first_name_1","last_name":"last_name_1","profile_image_url":"http://foo.com/1","url":"http://foo.com/2"},{"id":4,"email":"email_2@domain.com","first_name":"first_name_2","last_name":"last_name_2","profile_image_url":"http://foo.com/2","url":"http://foo.com/3"},{"id":5,"email":"email_3@domain.com","first_name":"first_name_3","last_name":"last_name_3","profile_image_url":"http://foo.com/3","url":"http://foo.com/4"},{"id":6,"email":"email_4@domain.com","first_name":"first_name_4","last_name":"last_name_4","profile_image_url":"http://foo.com/4","url":"http://foo.com/5"}],"entries":51,"entries_url":"http://foo.com/6/entries","url":"http://foo.com/6","merge_url":"http://foo.com/6/merge","archive_url":"http://foo.com/6/archive","unarchive_url":"http://foo.com/6/unarchive"}'
52
+ recorded_at: Wed, 19 Oct 2022 15:06:58 GMT
53
+ recorded_with: VCR 6.1.0
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: http://foo.com/7
5
+ uri: http://foo.com/6
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -16,33 +16,38 @@ http_interactions:
16
16
  response:
17
17
  status:
18
18
  code: 200
19
- message: OK
19
+ message: ''
20
20
  headers:
21
21
  Server:
22
22
  - nginx
23
23
  Date:
24
- - Thu, 29 Aug 2019 08:07:25 GMT
24
+ - Wed, 19 Oct 2022 15:06:58 GMT
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
- Content-Length:
28
- - '2284'
29
- Connection:
30
- - keep-alive
31
- Status:
32
- - 200 OK
33
- Cache-Control:
34
- - private, max-age=0, must-revalidate
35
27
  X-Frame-Options:
36
28
  - SAMEORIGIN
29
+ X-Xss-Protection:
30
+ - '0'
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ X-Download-Options:
34
+ - noopen
35
+ X-Permitted-Cross-Domain-Policies:
36
+ - none
37
+ Referrer-Policy:
38
+ - strict-origin-when-cross-origin
39
+ Etag:
40
+ - W/"58eed19f9cd175d6241e523f9e2d6e81"
41
+ Cache-Control:
42
+ - max-age=0, private, must-revalidate
43
+ X-Request-Id:
44
+ - '035185e7-9d28-41e5-b345-5d4bda4ab537'
37
45
  X-Runtime:
38
- - '57'
46
+ - '0.079669'
39
47
  Vary:
40
48
  - Origin
41
- Strict-Transport-Security:
42
- - max-age=31536000; includeSubdomains
43
49
  body:
44
- encoding: UTF-8
45
- string: '{"id":0,"name":"name_0","description":"","billing_increment":5,"enabled":false,"billable":true,"color":"#13a480","created_at":"2018-07-16T08:32:45Z","updated_at":"2019-02-27T06:18:19Z","group":{"id":1,"name":"name_1","url":"http://foo.com/0"},"minutes":24670,"billable_minutes":22510,"unbillable_minutes":2160,"invoiced_minutes":0,"uninvoiced_minutes":22510,"remaining_minutes":-310,"budgeted_minutes":22200,"participants":[{"id":2,"email":"email_0@domain.com","first_name":"first_name_0","last_name":"last_name_0","profile_image_url":"http://foo.com/0","url":"http://foo.com/1"},{"id":3,"email":"email_1@domain.com","first_name":"first_name_1","last_name":"last_name_1","profile_image_url":"http://foo.com/1","url":"http://foo.com/2"},{"id":4,"email":"email_2@domain.com","first_name":"first_name_2","last_name":"last_name_2","profile_image_url":"http://foo.com/2","url":"http://foo.com/3"},{"id":5,"email":"email_3@domain.com","first_name":"first_name_3","last_name":"last_name_3","profile_image_url":"","url":"http://foo.com/4"},{"id":6,"email":"email_4@domain.com","first_name":"first_name_4","last_name":"last_name_4","profile_image_url":"http://foo.com/3","url":"http://foo.com/5"},{"id":7,"email":"email_5@domain.com","first_name":"first_name_5","last_name":"last_name_5","profile_image_url":"http://foo.com/4","url":"http://foo.com/6"}],"entries":102,"entries_url":"http://foo.com/7/entries","url":"http://foo.com/7","merge_url":"http://foo.com/7/merge","archive_url":"http://foo.com/7/archive","unarchive_url":"http://foo.com/7/unarchive"}'
46
- http_version:
47
- recorded_at: Thu, 29 Aug 2019 08:07:25 GMT
48
- recorded_with: VCR 4.0.0
50
+ encoding: ASCII-8BIT
51
+ string: '{"id":0,"name":"name_0","description":"","billing_increment":5,"enabled":true,"billable":true,"color":"#f6bed7","created_at":"2020-12-16T18:27:04Z","updated_at":"2022-08-07T21:24:00Z","group":{"id":1,"name":"name_1","url":"http://foo.com/0"},"minutes":3930,"billable_minutes":3495,"unbillable_minutes":435,"invoiced_minutes":0,"uninvoiced_minutes":3495,"remaining_minutes":null,"budgeted_minutes":null,"participants":[{"id":2,"email":"email_0@domain.com","first_name":"first_name_0","last_name":"last_name_0","profile_image_url":"http://foo.com/0","url":"http://foo.com/1"},{"id":3,"email":"email_1@domain.com","first_name":"first_name_1","last_name":"last_name_1","profile_image_url":"http://foo.com/1","url":"http://foo.com/2"},{"id":4,"email":"email_2@domain.com","first_name":"first_name_2","last_name":"last_name_2","profile_image_url":"http://foo.com/2","url":"http://foo.com/3"},{"id":5,"email":"email_3@domain.com","first_name":"first_name_3","last_name":"last_name_3","profile_image_url":"http://foo.com/3","url":"http://foo.com/4"},{"id":6,"email":"email_4@domain.com","first_name":"first_name_4","last_name":"last_name_4","profile_image_url":"http://foo.com/4","url":"http://foo.com/5"}],"entries":51,"entries_url":"http://foo.com/6/entries","url":"http://foo.com/6","merge_url":"http://foo.com/6/merge","archive_url":"http://foo.com/6/archive","unarchive_url":"http://foo.com/6/unarchive"}'
52
+ recorded_at: Wed, 19 Oct 2022 15:06:58 GMT
53
+ recorded_with: VCR 6.1.0