namely 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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