vhx-ruby 0.0.2

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 +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +2 -0
  5. data/README.md +59 -0
  6. data/Rakefile +1 -0
  7. data/lib/vhx.rb +66 -0
  8. data/lib/vhx/client.rb +86 -0
  9. data/lib/vhx/error.rb +24 -0
  10. data/lib/vhx/middleware/error_response.rb +32 -0
  11. data/lib/vhx/middleware/oauth2.rb +22 -0
  12. data/lib/vhx/oauth_token.rb +11 -0
  13. data/lib/vhx/objects/authorization.rb +5 -0
  14. data/lib/vhx/objects/collection.rb +8 -0
  15. data/lib/vhx/objects/collection_item.rb +4 -0
  16. data/lib/vhx/objects/customer.rb +8 -0
  17. data/lib/vhx/objects/product.rb +6 -0
  18. data/lib/vhx/objects/site.rb +4 -0
  19. data/lib/vhx/objects/user.rb +10 -0
  20. data/lib/vhx/objects/video.rb +7 -0
  21. data/lib/vhx/objects/video_file.rb +4 -0
  22. data/lib/vhx/utilities/api_operations/create.rb +22 -0
  23. data/lib/vhx/utilities/api_operations/delete.rb +16 -0
  24. data/lib/vhx/utilities/api_operations/list.rb +21 -0
  25. data/lib/vhx/utilities/api_operations/request.rb +17 -0
  26. data/lib/vhx/utilities/api_operations/update.rb +15 -0
  27. data/lib/vhx/utilities/vhx_helper.rb +20 -0
  28. data/lib/vhx/utilities/vhx_list_object.rb +44 -0
  29. data/lib/vhx/utilities/vhx_object.rb +106 -0
  30. data/lib/vhx/version.rb +3 -0
  31. data/spec/client_spec.rb +69 -0
  32. data/spec/fixtures/sample_array_list.json +15 -0
  33. data/spec/fixtures/sample_file_response.json +18 -0
  34. data/spec/fixtures/sample_hash_list.json +23 -0
  35. data/spec/fixtures/sample_package_response.json +185 -0
  36. data/spec/fixtures/sample_site_response.json +26 -0
  37. data/spec/fixtures/sample_user_response.json +21 -0
  38. data/spec/fixtures/sample_video_response.json +51 -0
  39. data/spec/middleware/error_response_spec.rb +11 -0
  40. data/spec/middleware/oauth2_spec.rb +14 -0
  41. data/spec/objects/file_spec.rb +29 -0
  42. data/spec/objects/package_spec.rb +74 -0
  43. data/spec/objects/site_spec.rb +44 -0
  44. data/spec/objects/user_spec.rb +51 -0
  45. data/spec/objects/video_spec.rb +36 -0
  46. data/spec/spec_helper.rb +18 -0
  47. data/spec/test_data.rb +55 -0
  48. data/spec/utilities/vhx_collection_spec.rb +27 -0
  49. data/spec/utilities/vhx_helper_spec.rb +47 -0
  50. data/spec/utilities/vhx_object_spec.rb +53 -0
  51. data/spec/vcr/Vhx_Client/application_user/_refresh_access_token/access_token_changed.yml +57 -0
  52. data/spec/vcr/Vhx_Client/application_user/_refresh_access_token/oauth_token_refreshed.yml +57 -0
  53. data/spec/vcr/Vhx_File/associations/are_present.yml +409 -0
  54. data/spec/vcr/Vhx_Middleware_ErrorResponse/unauthorized_user_credentials.yml +122 -0
  55. data/spec/vcr/Vhx_Middleware_OAuth2/access_token_refresh.yml +797 -0
  56. data/spec/vcr/Vhx_Package/_add_video/with_hypermedia/returns_package_object.yml +51 -0
  57. data/spec/vcr/Vhx_Package/_add_video/with_id/returns_package_object.yml +51 -0
  58. data/spec/vcr/Vhx_Package/_create/returns_package_object.yml +140 -0
  59. data/spec/vcr/Vhx_Package/_find/with_hypermedia.yml +243 -0
  60. data/spec/vcr/Vhx_Package/_find/with_id.yml +243 -0
  61. data/spec/vcr/Vhx_Package/_remove_video/with_hypermedia/returns_success.yml +51 -0
  62. data/spec/vcr/Vhx_Package/_remove_video/with_id/returns_success.yml +51 -0
  63. data/spec/vcr/Vhx_Package/associations/are_present.yml +195 -0
  64. data/spec/vcr/Vhx_Site/_create/returns_site_object.yml +91 -0
  65. data/spec/vcr/Vhx_Site/_find/with_hypermedia.yml +195 -0
  66. data/spec/vcr/Vhx_Site/_find/with_id.yml +195 -0
  67. data/spec/vcr/Vhx_User/_find/with_hypermedia.yml +81 -0
  68. data/spec/vcr/Vhx_User/_find/with_id.yml +81 -0
  69. data/spec/vcr/Vhx_User/_me/returns_user_object.yml +720 -0
  70. data/spec/vcr/Vhx_User/_update/returns_user_object.yml +212 -0
  71. data/spec/vcr/Vhx_VhxObject/associations/cache/retreive_if_available.yml +195 -0
  72. data/spec/vcr/Vhx_VhxObject/associations/falls_back_to_links.yml +310 -0
  73. data/spec/vcr/Vhx_Video/_create/returns_video_object.yml +125 -0
  74. data/spec/vcr/Vhx_Video/associations/are_present.yml +294 -0
  75. data/vhx.gemspec +27 -0
  76. metadata +204 -0
@@ -0,0 +1,91 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://api.crystal.dev/sites
6
+ body:
7
+ encoding: UTF-8
8
+ string: description=For+testing+gem&title=Gem+New+Site
9
+ headers:
10
+ Authorization:
11
+ - Bearer 41d2ed8ead125347d38cf13dd7da8df0a32e9c9e839a9ea1b39c0d4f8b9caa92
12
+ User-Agent:
13
+ - Faraday v0.9.1
14
+ Content-Type:
15
+ - application/x-www-form-urlencoded
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 201
23
+ message: Created
24
+ headers:
25
+ Date:
26
+ - Mon, 04 May 2015 19:42:35 GMT
27
+ Status:
28
+ - 201 Created
29
+ Connection:
30
+ - close
31
+ Cache-Control:
32
+ - private, no-cache, max-age=0, must-revalidate
33
+ Surrogate-Control:
34
+ - no-cache
35
+ Content-Type:
36
+ - application/json; charset=utf-8
37
+ Vary:
38
+ - Accept-Encoding
39
+ X-Ua-Compatible:
40
+ - IE=Edge
41
+ Set-Cookie:
42
+ - _session=BAh7CEkiD3Nlc3Npb25faWQGOgZFVEkiJWM5NDg5YWIyNWM3MjZkNTk2MTMxNjJhYjU4YzIxZDQ2BjsAVEkiGGN1cnJlbnRfYXBwbGljYXRpb24GOwBGSSIKc2FnYXIGOwBUSSIRY3VycmVudF91c2VyBjsARkkiEXNhZ2FyQHZoeC50dgY7AFQ%3D--450649d96553800bb2754a3186bb6ef10b931c2a;
43
+ domain=.crystal.dev; path=/; expires=Wed, 04-May-2016 19:42:35 GMT; HttpOnly
44
+ X-Meta-Request-Version:
45
+ - 0.3.4
46
+ X-Request-Id:
47
+ - c1a4ad6581fce77a5a48ddcca939ca19
48
+ X-Runtime:
49
+ - '0.633497'
50
+ Transfer-Encoding:
51
+ - chunked
52
+ body:
53
+ encoding: UTF-8
54
+ string: |
55
+ {
56
+ "_links": {
57
+ "self": {
58
+ "href": "http://api.crystal.dev/sites/11439"
59
+ },
60
+ "home_page": {
61
+ "href": "http://gemnewsite.crystal.dev"
62
+ },
63
+ "followers": {
64
+ "href": "http://api.crystal.dev/sites/11439/followers"
65
+ }
66
+ },
67
+ "_embedded": {
68
+ "subscription": null,
69
+ "packages": [
70
+
71
+ ]
72
+ },
73
+ "id": 11439,
74
+ "title": "Gem New Site",
75
+ "description": "For testing gem",
76
+ "domain": "gemnewsite.crystal.dev",
77
+ "subdomain": "gemnewsite",
78
+ "key": "gemnewsite",
79
+ "color": "#22B9B0",
80
+ "facebook_url": null,
81
+ "twitter_name": null,
82
+ "google_analytics_id": null,
83
+ "packages_count": 0,
84
+ "videos_count": 0,
85
+ "followers_count": 0,
86
+ "created_at": "2015-05-04T19:42:34Z",
87
+ "updated_at": "2015-05-04T19:42:34Z"
88
+ }
89
+ http_version:
90
+ recorded_at: Mon, 04 May 2015 19:42:35 GMT
91
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,195 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.crystal.dev/sites/1900
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Authorization:
11
+ - Bearer 41d2ed8ead125347d38cf13dd7da8df0a32e9c9e839a9ea1b39c0d4f8b9caa92
12
+ User-Agent:
13
+ - Faraday v0.9.1
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Mon, 04 May 2015 19:41:17 GMT
25
+ Status:
26
+ - 200 OK
27
+ Connection:
28
+ - close
29
+ Cache-Control:
30
+ - public, no-cache, must-revalidate
31
+ Surrogate-Control:
32
+ - max-age=3600
33
+ Surrogate-Key:
34
+ - sites/1900
35
+ Etag:
36
+ - '"a4c59eb7508fb0ebf5f7d71af2ab6e57"'
37
+ Last-Modified:
38
+ - Mon, 04 May 2015 19:37:32 GMT
39
+ Content-Type:
40
+ - application/json; charset=utf-8
41
+ Vary:
42
+ - Accept-Encoding
43
+ X-Ua-Compatible:
44
+ - IE=Edge
45
+ X-Meta-Request-Version:
46
+ - 0.3.4
47
+ X-Request-Id:
48
+ - 23ecc8b8ded977c0398c1677433163f1
49
+ X-Runtime:
50
+ - '0.146038'
51
+ Transfer-Encoding:
52
+ - chunked
53
+ body:
54
+ encoding: UTF-8
55
+ string: |
56
+ {
57
+ "_links": {
58
+ "self": {
59
+ "href": "http://api.crystal.dev/sites/1900"
60
+ },
61
+ "home_page": {
62
+ "href": "http://sagartestmovie.crystal.dev"
63
+ },
64
+ "followers": {
65
+ "href": "http://api.crystal.dev/sites/1900/followers"
66
+ }
67
+ },
68
+ "_embedded": {
69
+ "subscription": null,
70
+ "packages": [
71
+ {
72
+ "_links": {
73
+ "self": {
74
+ "href": "http://api.crystal.dev/packages/2780"
75
+ },
76
+ "site": {
77
+ "href": "http://api.crystal.dev/sites/1900"
78
+ },
79
+ "videos": {
80
+ "href": "http://api.crystal.dev/packages/2780/videos"
81
+ },
82
+ "buy_page": {
83
+ "href": "http://sagartestmovie.crystal.dev/buy/pwyw-1"
84
+ },
85
+ "home_page": {
86
+ "href": "http://sagartestmovie.crystal.dev/packages/pwyw-1"
87
+ }
88
+ },
89
+ "_embedded": {
90
+ "trailer": null
91
+ },
92
+ "id": 2780,
93
+ "title": "pwyw",
94
+ "description": "",
95
+ "sku": "pwyw-1",
96
+ "price": {
97
+ "cents": 500,
98
+ "currency": "USD",
99
+ "formatted": "$5",
100
+ "US": {
101
+ "cents": 500,
102
+ "currency": "USD",
103
+ "formatted": "$5"
104
+ }
105
+ },
106
+ "rental": null,
107
+ "trailer_url": null,
108
+ "trailer_embed_code": "<iframe src=\"http://embed.crystal.dev/packages/2780\" width=\"640\" height=\"360\" frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>",
109
+ "thumbnail": {
110
+ "small": "http://cdn.crystal.dev/assets/thumbnails/default-small.png",
111
+ "medium": "http://cdn.crystal.dev/assets/thumbnails/default-medium.png",
112
+ "large": "http://cdn.crystal.dev/assets/thumbnails/default-large.png",
113
+ "blurred": null
114
+ },
115
+ "is_active": true,
116
+ "is_preorder": false,
117
+ "release_date": null,
118
+ "videos_count": 0,
119
+ "extras_count": 0,
120
+ "created_at": "2014-07-15T18:15:36Z",
121
+ "updated_at": "2014-08-26T14:48:52Z"
122
+ },
123
+ {
124
+ "_links": {
125
+ "self": {
126
+ "href": "http://api.crystal.dev/packages/7381"
127
+ },
128
+ "site": {
129
+ "href": "http://api.crystal.dev/sites/1900"
130
+ },
131
+ "videos": {
132
+ "href": "http://api.crystal.dev/packages/7381/videos"
133
+ },
134
+ "buy_page": {
135
+ "href": "http://sagartestmovie.crystal.dev/buy/test-package-2"
136
+ },
137
+ "home_page": {
138
+ "href": "http://sagartestmovie.crystal.dev/packages/test-package-2"
139
+ }
140
+ },
141
+ "_embedded": {
142
+ "trailer": null
143
+ },
144
+ "id": 7381,
145
+ "title": "test package",
146
+ "description": "test description",
147
+ "sku": "test-package-2",
148
+ "price": {
149
+ "cents": 1000,
150
+ "currency": "USD",
151
+ "formatted": "$10",
152
+ "US": {
153
+ "cents": 1000,
154
+ "currency": "USD",
155
+ "formatted": "$10"
156
+ }
157
+ },
158
+ "rental": null,
159
+ "trailer_url": null,
160
+ "trailer_embed_code": "<iframe src=\"http://embed.crystal.dev/packages/7381\" width=\"640\" height=\"360\" frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>",
161
+ "thumbnail": {
162
+ "small": "http://cdn.crystal.dev/assets/thumbnails/default-small.png",
163
+ "medium": "http://cdn.crystal.dev/assets/thumbnails/default-medium.png",
164
+ "large": "http://cdn.crystal.dev/assets/thumbnails/default-large.png",
165
+ "blurred": null
166
+ },
167
+ "is_active": true,
168
+ "is_preorder": false,
169
+ "release_date": null,
170
+ "videos_count": 0,
171
+ "extras_count": 0,
172
+ "created_at": "2015-05-04T19:15:09Z",
173
+ "updated_at": "2015-05-04T19:15:09Z"
174
+ }
175
+ ]
176
+ },
177
+ "id": 1900,
178
+ "title": "SagarTestMovie",
179
+ "description": "This is my test movie. ",
180
+ "domain": "sagartestmovie.crystal.dev",
181
+ "subdomain": "sagartestmovie",
182
+ "key": "sagartestmovie",
183
+ "color": "#28DBF7",
184
+ "facebook_url": null,
185
+ "twitter_name": null,
186
+ "google_analytics_id": "",
187
+ "packages_count": 2,
188
+ "videos_count": 3,
189
+ "followers_count": 30,
190
+ "created_at": "2013-12-27T00:20:28Z",
191
+ "updated_at": "2015-05-04T19:37:32Z"
192
+ }
193
+ http_version:
194
+ recorded_at: Mon, 04 May 2015 19:41:17 GMT
195
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,195 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.crystal.dev/sites/1900
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Authorization:
11
+ - Bearer 41d2ed8ead125347d38cf13dd7da8df0a32e9c9e839a9ea1b39c0d4f8b9caa92
12
+ User-Agent:
13
+ - Faraday v0.9.1
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Mon, 04 May 2015 19:41:17 GMT
25
+ Status:
26
+ - 200 OK
27
+ Connection:
28
+ - close
29
+ Cache-Control:
30
+ - public, no-cache, must-revalidate
31
+ Surrogate-Control:
32
+ - max-age=3600
33
+ Surrogate-Key:
34
+ - sites/1900
35
+ Etag:
36
+ - '"a4c59eb7508fb0ebf5f7d71af2ab6e57"'
37
+ Last-Modified:
38
+ - Mon, 04 May 2015 19:37:32 GMT
39
+ Content-Type:
40
+ - application/json; charset=utf-8
41
+ Vary:
42
+ - Accept-Encoding
43
+ X-Ua-Compatible:
44
+ - IE=Edge
45
+ X-Meta-Request-Version:
46
+ - 0.3.4
47
+ X-Request-Id:
48
+ - 0ac5270abdd8b424c912bf46a39aaf12
49
+ X-Runtime:
50
+ - '0.137099'
51
+ Transfer-Encoding:
52
+ - chunked
53
+ body:
54
+ encoding: UTF-8
55
+ string: |
56
+ {
57
+ "_links": {
58
+ "self": {
59
+ "href": "http://api.crystal.dev/sites/1900"
60
+ },
61
+ "home_page": {
62
+ "href": "http://sagartestmovie.crystal.dev"
63
+ },
64
+ "followers": {
65
+ "href": "http://api.crystal.dev/sites/1900/followers"
66
+ }
67
+ },
68
+ "_embedded": {
69
+ "subscription": null,
70
+ "packages": [
71
+ {
72
+ "_links": {
73
+ "self": {
74
+ "href": "http://api.crystal.dev/packages/2780"
75
+ },
76
+ "site": {
77
+ "href": "http://api.crystal.dev/sites/1900"
78
+ },
79
+ "videos": {
80
+ "href": "http://api.crystal.dev/packages/2780/videos"
81
+ },
82
+ "buy_page": {
83
+ "href": "http://sagartestmovie.crystal.dev/buy/pwyw-1"
84
+ },
85
+ "home_page": {
86
+ "href": "http://sagartestmovie.crystal.dev/packages/pwyw-1"
87
+ }
88
+ },
89
+ "_embedded": {
90
+ "trailer": null
91
+ },
92
+ "id": 2780,
93
+ "title": "pwyw",
94
+ "description": "",
95
+ "sku": "pwyw-1",
96
+ "price": {
97
+ "cents": 500,
98
+ "currency": "USD",
99
+ "formatted": "$5",
100
+ "US": {
101
+ "cents": 500,
102
+ "currency": "USD",
103
+ "formatted": "$5"
104
+ }
105
+ },
106
+ "rental": null,
107
+ "trailer_url": null,
108
+ "trailer_embed_code": "<iframe src=\"http://embed.crystal.dev/packages/2780\" width=\"640\" height=\"360\" frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>",
109
+ "thumbnail": {
110
+ "small": "http://cdn.crystal.dev/assets/thumbnails/default-small.png",
111
+ "medium": "http://cdn.crystal.dev/assets/thumbnails/default-medium.png",
112
+ "large": "http://cdn.crystal.dev/assets/thumbnails/default-large.png",
113
+ "blurred": null
114
+ },
115
+ "is_active": true,
116
+ "is_preorder": false,
117
+ "release_date": null,
118
+ "videos_count": 0,
119
+ "extras_count": 0,
120
+ "created_at": "2014-07-15T18:15:36Z",
121
+ "updated_at": "2014-08-26T14:48:52Z"
122
+ },
123
+ {
124
+ "_links": {
125
+ "self": {
126
+ "href": "http://api.crystal.dev/packages/7381"
127
+ },
128
+ "site": {
129
+ "href": "http://api.crystal.dev/sites/1900"
130
+ },
131
+ "videos": {
132
+ "href": "http://api.crystal.dev/packages/7381/videos"
133
+ },
134
+ "buy_page": {
135
+ "href": "http://sagartestmovie.crystal.dev/buy/test-package-2"
136
+ },
137
+ "home_page": {
138
+ "href": "http://sagartestmovie.crystal.dev/packages/test-package-2"
139
+ }
140
+ },
141
+ "_embedded": {
142
+ "trailer": null
143
+ },
144
+ "id": 7381,
145
+ "title": "test package",
146
+ "description": "test description",
147
+ "sku": "test-package-2",
148
+ "price": {
149
+ "cents": 1000,
150
+ "currency": "USD",
151
+ "formatted": "$10",
152
+ "US": {
153
+ "cents": 1000,
154
+ "currency": "USD",
155
+ "formatted": "$10"
156
+ }
157
+ },
158
+ "rental": null,
159
+ "trailer_url": null,
160
+ "trailer_embed_code": "<iframe src=\"http://embed.crystal.dev/packages/7381\" width=\"640\" height=\"360\" frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>",
161
+ "thumbnail": {
162
+ "small": "http://cdn.crystal.dev/assets/thumbnails/default-small.png",
163
+ "medium": "http://cdn.crystal.dev/assets/thumbnails/default-medium.png",
164
+ "large": "http://cdn.crystal.dev/assets/thumbnails/default-large.png",
165
+ "blurred": null
166
+ },
167
+ "is_active": true,
168
+ "is_preorder": false,
169
+ "release_date": null,
170
+ "videos_count": 0,
171
+ "extras_count": 0,
172
+ "created_at": "2015-05-04T19:15:09Z",
173
+ "updated_at": "2015-05-04T19:15:09Z"
174
+ }
175
+ ]
176
+ },
177
+ "id": 1900,
178
+ "title": "SagarTestMovie",
179
+ "description": "This is my test movie. ",
180
+ "domain": "sagartestmovie.crystal.dev",
181
+ "subdomain": "sagartestmovie",
182
+ "key": "sagartestmovie",
183
+ "color": "#28DBF7",
184
+ "facebook_url": null,
185
+ "twitter_name": null,
186
+ "google_analytics_id": "",
187
+ "packages_count": 2,
188
+ "videos_count": 3,
189
+ "followers_count": 30,
190
+ "created_at": "2013-12-27T00:20:28Z",
191
+ "updated_at": "2015-05-04T19:37:32Z"
192
+ }
193
+ http_version:
194
+ recorded_at: Mon, 04 May 2015 19:41:17 GMT
195
+ recorded_with: VCR 2.9.3