namely 0.0.1 → 0.1.0

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -24
  3. data/lib/namely.rb +2 -101
  4. data/lib/namely/authenticator.rb +61 -14
  5. data/lib/namely/collection.rb +78 -0
  6. data/lib/namely/connection.rb +90 -0
  7. data/lib/namely/exceptions.rb +0 -3
  8. data/lib/namely/model.rb +78 -0
  9. data/lib/namely/resource_gateway.rb +7 -2
  10. data/lib/namely/version.rb +1 -1
  11. data/spec/fixtures/vcr_cassettes/{country_head.yml → countries_head.yml} +4 -4
  12. data/spec/fixtures/vcr_cassettes/{country_head_missing.yml → countries_head_missing.yml} +4 -4
  13. data/spec/fixtures/vcr_cassettes/{country_index.yml → countries_index.yml} +6 -6
  14. data/spec/fixtures/vcr_cassettes/{country_show.yml → countries_show.yml} +4 -4
  15. data/spec/fixtures/vcr_cassettes/{country_show_missing.yml → countries_show_missing.yml} +7 -7
  16. data/spec/fixtures/vcr_cassettes/{currencytype_index.yml → currency_types_index.yml} +5 -5
  17. data/spec/fixtures/vcr_cassettes/current_user.yml +57 -0
  18. data/spec/fixtures/vcr_cassettes/{event_head.yml → events_head.yml} +4 -4
  19. data/spec/fixtures/vcr_cassettes/{event_head_missing.yml → events_head_missing.yml} +5 -5
  20. data/spec/fixtures/vcr_cassettes/events_index.yml +89 -0
  21. data/spec/fixtures/vcr_cassettes/{event_show.yml → events_show.yml} +5 -5
  22. data/spec/fixtures/vcr_cassettes/{event_show_missing.yml → events_show_missing.yml} +6 -6
  23. data/spec/fixtures/vcr_cassettes/fields_index.yml +48 -0
  24. data/spec/fixtures/vcr_cassettes/{jobtier_index.yml → job_tiers_index.yml} +5 -5
  25. data/spec/fixtures/vcr_cassettes/{field_index.yml → profiles/fields_index.yml} +5 -5
  26. data/spec/fixtures/vcr_cassettes/profiles_create.yml +85 -0
  27. data/spec/fixtures/vcr_cassettes/{profile_create_failed.yml → profiles_create_failed.yml} +9 -10
  28. data/spec/fixtures/vcr_cassettes/{profile_head.yml → profiles_head.yml} +4 -4
  29. data/spec/fixtures/vcr_cassettes/{profile_head_missing.yml → profiles_head_missing.yml} +4 -4
  30. data/spec/fixtures/vcr_cassettes/profiles_index.yml +981 -0
  31. data/spec/fixtures/vcr_cassettes/{profile_show.yml → profiles_show.yml} +4 -4
  32. data/spec/fixtures/vcr_cassettes/{profile_show_missing.yml → profiles_show_missing.yml} +7 -7
  33. data/spec/fixtures/vcr_cassettes/profiles_show_updated.yml +91 -0
  34. data/spec/fixtures/vcr_cassettes/profiles_update.yml +95 -0
  35. data/spec/fixtures/vcr_cassettes/profiles_update_revert.yml +95 -0
  36. data/spec/fixtures/vcr_cassettes/{report_head.yml → reports_head.yml} +4 -4
  37. data/spec/fixtures/vcr_cassettes/{report_head_missing.yml → reports_head_missing.yml} +5 -5
  38. data/spec/fixtures/vcr_cassettes/reports_show.yml +186 -0
  39. data/spec/fixtures/vcr_cassettes/{report_show_missing.yml → reports_show_missing.yml} +7 -7
  40. data/spec/fixtures/vcr_cassettes/token.yml +6 -6
  41. data/spec/namely/authenticator_spec.rb +36 -0
  42. data/spec/namely/connection_spec.rb +15 -0
  43. data/spec/namely/integration_spec.rb +94 -0
  44. data/spec/namely/resource_gateway_spec.rb +18 -10
  45. data/spec/shared_examples/a_resource_with_a_create_action.rb +24 -0
  46. data/spec/shared_examples/a_resource_with_a_show_action.rb +38 -0
  47. data/spec/shared_examples/a_resource_with_an_index_action.rb +15 -0
  48. data/spec/shared_examples/{a_model_with_an_update_action.rb → a_resource_with_an_update_action.rb} +10 -9
  49. data/spec/spec_helper.rb +0 -17
  50. metadata +75 -88
  51. data/lib/namely/country.rb +0 -9
  52. data/lib/namely/currency_type.rb +0 -9
  53. data/lib/namely/event.rb +0 -9
  54. data/lib/namely/field.rb +0 -9
  55. data/lib/namely/job_tier.rb +0 -9
  56. data/lib/namely/profile.rb +0 -13
  57. data/lib/namely/report.rb +0 -9
  58. data/lib/namely/restful_model.rb +0 -150
  59. data/spec/fixtures/vcr_cassettes/event_index.yml +0 -88
  60. data/spec/fixtures/vcr_cassettes/profile_create.yml +0 -85
  61. data/spec/fixtures/vcr_cassettes/profile_index.yml +0 -979
  62. data/spec/fixtures/vcr_cassettes/profile_show_updated.yml +0 -91
  63. data/spec/fixtures/vcr_cassettes/profile_update.yml +0 -95
  64. data/spec/fixtures/vcr_cassettes/profile_update_revert.yml +0 -95
  65. data/spec/fixtures/vcr_cassettes/report_show.yml +0 -185
  66. data/spec/namely/configuration_spec.rb +0 -33
  67. data/spec/namely/country_spec.rb +0 -11
  68. data/spec/namely/currency_type_spec.rb +0 -5
  69. data/spec/namely/event_spec.rb +0 -11
  70. data/spec/namely/field_spec.rb +0 -5
  71. data/spec/namely/job_tier_spec.rb +0 -5
  72. data/spec/namely/profile_spec.rb +0 -25
  73. data/spec/namely/report_spec.rb +0 -8
  74. data/spec/shared_examples/a_model_with_a_create_action.rb +0 -24
  75. data/spec/shared_examples/a_model_with_a_show_action.rb +0 -38
  76. data/spec/shared_examples/a_model_with_an_index_action.rb +0 -17
@@ -2,9 +2,6 @@ module Namely
2
2
  class Error < StandardError
3
3
  end
4
4
 
5
- class ImproperlyConfiguredError < Error
6
- end
7
-
8
5
  class NoSuchModelError < Error
9
6
  end
10
7
 
@@ -0,0 +1,78 @@
1
+ require "ostruct"
2
+
3
+ module Namely
4
+ class Model < OpenStruct
5
+ def initialize(resource_gateway, attributes)
6
+ @resource_gateway = resource_gateway
7
+ super(attributes)
8
+ end
9
+
10
+ # Try to persist the current object to the server by creating a
11
+ # new resource or updating an existing one. Raise an error if the
12
+ # object can't be saved.
13
+ #
14
+ # @raise [FailedRequestError] if the request failed for any reason.
15
+ #
16
+ # @return [Model] the model itself, if saving succeeded.
17
+ def save!
18
+ if persisted?
19
+ update(to_h)
20
+ else
21
+ self.id = resource_gateway.create(to_h)
22
+ end
23
+ self
24
+ rescue RestClient::Exception => e
25
+ raise_failed_request_error(e)
26
+ end
27
+
28
+ # Update the attributes of this model. Assign the attributes
29
+ # according to the hash, then persist those changes on the server.
30
+ #
31
+ # @param [Hash] attributes the attributes to be updated on the model.
32
+ #
33
+ # @example
34
+ # my_profile.update(
35
+ # middle_name: "Ludwig"
36
+ # )
37
+ #
38
+ # @raise [FailedRequestError] if the request failed for any reason.
39
+ #
40
+ # @return [Model] the updated model.
41
+ def update(attributes)
42
+ attributes.each do |key, value|
43
+ self[key] = value
44
+ end
45
+
46
+ begin
47
+ resource_gateway.update(id, attributes)
48
+ rescue RestClient::Exception => e
49
+ raise_failed_request_error(e)
50
+ end
51
+
52
+ self
53
+ end
54
+
55
+ # Return true if the model exists (in some state) on the server.
56
+ #
57
+ # @return [Boolean]
58
+ def persisted?
59
+ id != nil
60
+ end
61
+
62
+ private
63
+
64
+ def raise_failed_request_error(restclient_error)
65
+ errors = JSON.parse(restclient_error.response)["errors"]
66
+ if errors.nil?
67
+ raise FailedRequestError, restclient_error.message
68
+ else
69
+ raise(
70
+ FailedRequestError,
71
+ "#{restclient_error.message}: #{errors.join(", ")}"
72
+ )
73
+ end
74
+ end
75
+
76
+ attr_reader :resource_gateway
77
+ end
78
+ end
@@ -1,9 +1,10 @@
1
1
  module Namely
2
2
  class ResourceGateway
3
+ attr_reader :endpoint
4
+
3
5
  def initialize(options)
4
6
  @access_token = options.fetch(:access_token)
5
7
  @endpoint = options.fetch(:endpoint)
6
- @resource_name = options.fetch(:resource_name)
7
8
  @subdomain = options.fetch(:subdomain)
8
9
  end
9
10
 
@@ -33,7 +34,11 @@ module Namely
33
34
 
34
35
  private
35
36
 
36
- attr_reader :access_token, :endpoint, :resource_name, :subdomain
37
+ attr_reader :access_token, :subdomain
38
+
39
+ def resource_name
40
+ endpoint.split("/").last
41
+ end
37
42
 
38
43
  def url(path)
39
44
  "https://#{subdomain}.namely.com/api/v1#{path}"
@@ -1,3 +1,3 @@
1
1
  module Namely
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -25,7 +25,7 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:36 GMT
28
+ - Tue, 11 Nov 2014 16:00:42 GMT
29
29
  Server:
30
30
  - nginx/1.6.2
31
31
  Status:
@@ -38,14 +38,14 @@ http_interactions:
38
38
  X-Rack-Cache:
39
39
  - miss
40
40
  X-Request-Id:
41
- - 12b71052-a0c4-4776-86ee-417d8f3b87dd
41
+ - 56058573-765a-4468-82bf-b47c8122915f
42
42
  X-Runtime:
43
- - '0.021096'
43
+ - '0.019221'
44
44
  Connection:
45
45
  - keep-alive
46
46
  body:
47
47
  encoding: UTF-8
48
48
  string: ''
49
49
  http_version:
50
- recorded_at: Tue, 04 Nov 2014 16:34:36 GMT
50
+ recorded_at: Tue, 11 Nov 2014 16:00:42 GMT
51
51
  recorded_with: VCR 2.9.3
@@ -25,7 +25,7 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:36 GMT
28
+ - Tue, 11 Nov 2014 16:00:42 GMT
29
29
  Server:
30
30
  - nginx
31
31
  Status:
@@ -37,14 +37,14 @@ http_interactions:
37
37
  X-Rack-Cache:
38
38
  - miss
39
39
  X-Request-Id:
40
- - 15c2c8fd-5244-48b7-9f18-040318b7e9ac
40
+ - 726c72d5-785f-4b94-afb4-c0c93ee0c08e
41
41
  X-Runtime:
42
- - '0.026183'
42
+ - '0.015185'
43
43
  Connection:
44
44
  - keep-alive
45
45
  body:
46
46
  encoding: UTF-8
47
47
  string: ''
48
48
  http_version:
49
- recorded_at: Tue, 04 Nov 2014 16:34:36 GMT
49
+ recorded_at: Tue, 11 Nov 2014 16:00:42 GMT
50
50
  recorded_with: VCR 2.9.3
@@ -25,7 +25,7 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:36 GMT
28
+ - Tue, 11 Nov 2014 16:00:42 GMT
29
29
  Server:
30
30
  - nginx
31
31
  Status:
@@ -38,11 +38,11 @@ http_interactions:
38
38
  X-Rack-Cache:
39
39
  - miss
40
40
  X-Request-Id:
41
- - 26de93df-2dc4-4287-b249-08166d987cf8
41
+ - 59241483-c6c8-4c9a-b18d-642a332f34fe
42
42
  X-Runtime:
43
- - '0.033400'
44
- Content-Length:
45
- - '3021'
43
+ - '0.044369'
44
+ Transfer-Encoding:
45
+ - chunked
46
46
  Connection:
47
47
  - keep-alive
48
48
  body:
@@ -117,5 +117,5 @@ http_interactions:
117
117
  8oISBR3E+AT+/XThHWT7BJ4gmT+JYsu2r97Vwx1cIn37Dz7gvbjcf/3xP7Ix
118
118
  y4lUPAAA
119
119
  http_version:
120
- recorded_at: Tue, 04 Nov 2014 16:34:36 GMT
120
+ recorded_at: Tue, 11 Nov 2014 16:00:42 GMT
121
121
  recorded_with: VCR 2.9.3
@@ -25,7 +25,7 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:36 GMT
28
+ - Tue, 11 Nov 2014 16:00:42 GMT
29
29
  Server:
30
30
  - nginx/1.6.2
31
31
  Status:
@@ -38,9 +38,9 @@ http_interactions:
38
38
  X-Rack-Cache:
39
39
  - miss
40
40
  X-Request-Id:
41
- - 70197c57-c1a2-4a37-a6e2-47d5d48feef2
41
+ - 3819cee5-33b1-4629-8c93-db1cd93f1034
42
42
  X-Runtime:
43
- - '0.020128'
43
+ - '0.028427'
44
44
  Content-Length:
45
45
  - '637'
46
46
  Connection:
@@ -64,5 +64,5 @@ http_interactions:
64
64
  cKn3sIImFbkgyqNF9ypoU7Gp3V8ZI4aoVcLY6OugFSSuuqjBdYg/fn645w/t
65
65
  VlGudQcAAA==
66
66
  http_version:
67
- recorded_at: Tue, 04 Nov 2014 16:34:36 GMT
67
+ recorded_at: Tue, 11 Nov 2014 16:00:42 GMT
68
68
  recorded_with: VCR 2.9.3
@@ -25,9 +25,9 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:36 GMT
28
+ - Tue, 11 Nov 2014 16:00:42 GMT
29
29
  Server:
30
- - nginx/1.6.2
30
+ - nginx
31
31
  Status:
32
32
  - 404 Not Found
33
33
  Strict-Transport-Security:
@@ -37,18 +37,18 @@ http_interactions:
37
37
  X-Rack-Cache:
38
38
  - miss
39
39
  X-Request-Id:
40
- - adb44be3-d3ae-42e0-bf2d-792c57103543
40
+ - ddbdf14f-230d-4fe5-a2ea-a88bdb60283f
41
41
  X-Runtime:
42
- - '0.027114'
42
+ - '0.026943'
43
43
  Content-Length:
44
- - '63'
44
+ - '61'
45
45
  Connection:
46
46
  - keep-alive
47
47
  body:
48
48
  encoding: ASCII-8BIT
49
49
  string: !binary |-
50
50
  H4sIAAAAAAAAA6tWyk0tLk5MT1WyUnLOL80rKapUyMsvUUgDslOUdJRSi4ry
51
- i4qVrPJKc3JqAYc028QtAAAA
51
+ i4qVrKJjawHUSqfeKwAAAA==
52
52
  http_version:
53
- recorded_at: Tue, 04 Nov 2014 16:34:36 GMT
53
+ recorded_at: Tue, 11 Nov 2014 16:00:42 GMT
54
54
  recorded_with: VCR 2.9.3
@@ -25,9 +25,9 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:36 GMT
28
+ - Tue, 11 Nov 2014 15:48:48 GMT
29
29
  Server:
30
- - nginx/1.6.2
30
+ - nginx
31
31
  Status:
32
32
  - 200 OK
33
33
  Strict-Transport-Security:
@@ -38,9 +38,9 @@ http_interactions:
38
38
  X-Rack-Cache:
39
39
  - miss
40
40
  X-Request-Id:
41
- - 3e722eb4-b612-434f-a782-96a1ee4d78e0
41
+ - 287d7dd6-32e9-4bbb-b2d9-998bed84f8dc
42
42
  X-Runtime:
43
- - '0.032607'
43
+ - '0.034518'
44
44
  Content-Length:
45
45
  - '469'
46
46
  Connection:
@@ -60,5 +60,5 @@ http_interactions:
60
60
  BKpRpT8/fon4+bVQe1fiGqEG/7K8/H5ly8sBy7w/fqhLS+O+vkjpUiGE3hjn
61
61
  1JSBipEGXuuPd0+nZk3wagUAAA==
62
62
  http_version:
63
- recorded_at: Tue, 04 Nov 2014 16:34:37 GMT
63
+ recorded_at: Tue, 11 Nov 2014 15:48:48 GMT
64
64
  recorded_with: VCR 2.9.3
@@ -0,0 +1,57 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://<TEST_SUBDOMAIN>.namely.com/api/v1/profiles/me?access_token=<TEST_ACCESS_TOKEN>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - max-age=0, private, must-revalidate
23
+ Content-Encoding:
24
+ - gzip
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Date:
28
+ - Wed, 05 Nov 2014 20:49:10 GMT
29
+ Server:
30
+ - nginx
31
+ Status:
32
+ - 200 OK
33
+ Strict-Transport-Security:
34
+ - max-age=31536000
35
+ - max-age=31536000; includeSubDomains;
36
+ Vary:
37
+ - Accept-Encoding
38
+ X-Rack-Cache:
39
+ - miss
40
+ X-Request-Id:
41
+ - 6b7b7105-3c5e-4949-b489-15d7a7964d2e
42
+ X-Runtime:
43
+ - '0.025885'
44
+ Content-Length:
45
+ - '175'
46
+ Connection:
47
+ - keep-alive
48
+ body:
49
+ encoding: ASCII-8BIT
50
+ string: !binary |-
51
+ H4sIAAAAAAAAA2WO2wrCMBBE/2WfG4maXp/0O0TKNkltsEkk2QhS+u9GRRB8
52
+ G86cgVngFvxoZh2hOy1gFHQgyrYWjSpZxRvJhJKaDRJbJlrkVaXqca84FKAt
53
+ mjnrE4bwONDk02WiwdNGepvr0YRIvUOrs3NU1rgMZ/xnKerQR0JK+QOgJHPX
54
+ L9W4awbLup4LsJowZ5A+OYJuW8B3sON8/ZE/Uav38Ani9PPE3QAAAA==
55
+ http_version:
56
+ recorded_at: Wed, 05 Nov 2014 20:49:09 GMT
57
+ recorded_with: VCR 2.9.3
@@ -25,7 +25,7 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:37 GMT
28
+ - Tue, 11 Nov 2014 16:04:07 GMT
29
29
  Server:
30
30
  - nginx/1.6.2
31
31
  Status:
@@ -38,14 +38,14 @@ http_interactions:
38
38
  X-Rack-Cache:
39
39
  - miss
40
40
  X-Request-Id:
41
- - 179144f2-25c1-4764-ab0e-ad9e1c778f9a
41
+ - 93065bb3-2192-4dd4-aff0-298c5f0eadfe
42
42
  X-Runtime:
43
- - '0.051997'
43
+ - '0.056267'
44
44
  Connection:
45
45
  - keep-alive
46
46
  body:
47
47
  encoding: UTF-8
48
48
  string: ''
49
49
  http_version:
50
- recorded_at: Tue, 04 Nov 2014 16:34:37 GMT
50
+ recorded_at: Tue, 11 Nov 2014 16:04:08 GMT
51
51
  recorded_with: VCR 2.9.3
@@ -25,9 +25,9 @@ http_interactions:
25
25
  Content-Type:
26
26
  - application/json; charset=utf-8
27
27
  Date:
28
- - Tue, 04 Nov 2014 16:34:37 GMT
28
+ - Tue, 11 Nov 2014 16:04:07 GMT
29
29
  Server:
30
- - nginx
30
+ - nginx/1.6.2
31
31
  Status:
32
32
  - 404 Not Found
33
33
  Strict-Transport-Security:
@@ -37,14 +37,14 @@ http_interactions:
37
37
  X-Rack-Cache:
38
38
  - miss
39
39
  X-Request-Id:
40
- - a11317bb-9a5d-4a25-8169-a65ec3d3756a
40
+ - e367f203-6f21-4b9d-9a95-d8a6d03bf742
41
41
  X-Runtime:
42
- - '0.016797'
42
+ - '0.063614'
43
43
  Connection:
44
44
  - keep-alive
45
45
  body:
46
46
  encoding: UTF-8
47
47
  string: ''
48
48
  http_version:
49
- recorded_at: Tue, 04 Nov 2014 16:34:37 GMT
49
+ recorded_at: Tue, 11 Nov 2014 16:04:07 GMT
50
50
  recorded_with: VCR 2.9.3
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://<TEST_SUBDOMAIN>.namely.com/api/v1/events?access_token=<TEST_ACCESS_TOKEN>&limit=all
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - max-age=0, private, must-revalidate
23
+ Content-Encoding:
24
+ - gzip
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Date:
28
+ - Tue, 11 Nov 2014 16:04:08 GMT
29
+ Server:
30
+ - nginx/1.6.2
31
+ Status:
32
+ - 200 OK
33
+ Strict-Transport-Security:
34
+ - max-age=31536000
35
+ - max-age=31536000; includeSubDomains;
36
+ Vary:
37
+ - Accept-Encoding
38
+ X-Rack-Cache:
39
+ - miss
40
+ X-Request-Id:
41
+ - 34f90f20-201d-427b-8686-0d10ba902481
42
+ X-Runtime:
43
+ - '0.116558'
44
+ Content-Length:
45
+ - '1620'
46
+ Connection:
47
+ - keep-alive
48
+ body:
49
+ encoding: ASCII-8BIT
50
+ string: !binary |-
51
+ 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
87
+ http_version:
88
+ recorded_at: Tue, 11 Nov 2014 16:04:08 GMT
89
+ recorded_with: VCR 2.9.3