leadlight 0.0.5 → 0.0.6
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.
- data/Gemfile.lock +20 -18
- data/default.gems +1 -1
- data/leadlight.gemspec +24 -4
- data/lib/leadlight.rb +4 -5
- data/lib/leadlight/connection_builder.rb +29 -0
- data/lib/leadlight/errors.rb +11 -5
- data/lib/leadlight/hyperlinkable.rb +31 -10
- data/lib/leadlight/lib_ext.rb +3 -0
- data/lib/leadlight/lib_ext/faraday/README +6 -0
- data/lib/leadlight/lib_ext/faraday/adapter.rb +7 -0
- data/lib/leadlight/lib_ext/faraday/builder.rb +47 -0
- data/lib/leadlight/lib_ext/faraday/connection.rb +40 -0
- data/lib/leadlight/lib_ext/faraday/middleware.rb +7 -0
- data/lib/leadlight/link.rb +91 -4
- data/lib/leadlight/link_template.rb +13 -5
- data/lib/leadlight/null_link.rb +21 -0
- data/lib/leadlight/param_hash.rb +42 -0
- data/lib/leadlight/representation.rb +23 -3
- data/lib/leadlight/request.rb +42 -10
- data/lib/leadlight/service.rb +11 -9
- data/lib/leadlight/service_class_methods.rb +11 -3
- data/lib/leadlight/tint_helper.rb +32 -2
- data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/has_the_expected_content.yml +72 -54
- data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/indicates_the_expected_oath_scopes.yml +73 -55
- data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members.yml +353 -265
- data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_teams.yml +75 -175
- data/spec/cassettes/Leadlight/authorized_GitHub_example/team_list/should_have_a_link_back_to_the_org.yml +196 -0
- data/spec/cassettes/Leadlight/authorized_GitHub_example/test_team/.yml +152 -108
- data/spec/cassettes/Leadlight/authorized_GitHub_example/test_team/has_a_root_link.yml +197 -0
- data/spec/cassettes/Leadlight/basic_GitHub_example/_root/.yml +15 -43
- data/spec/cassettes/Leadlight/basic_GitHub_example/_root/__location__/.yml +15 -43
- data/spec/cassettes/Leadlight/basic_GitHub_example/_root/should_be_a_204_no_content.yml +15 -43
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/.yml +15 -43
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/__location__/.yml +15 -43
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/should_be_a_204_no_content.yml +15 -43
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_user/has_the_expected_content.yml +35 -90
- data/spec/cassettes/Leadlight/tinted_GitHub_example/bad_links/enables_custom_error_matching.yml +25 -17
- data/spec/cassettes/Leadlight/tinted_GitHub_example/bad_links/should_raise_ResourceNotFound.yml +26 -90
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/.yml +57 -140
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_able_to_follow_next_link.yml +79 -192
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable.yml +279 -350
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable_over_page_boundaries.yml +98 -243
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_have_next_and_last_links.yml +59 -142
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/exists.yml +15 -43
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/links_to_the_expected_URL.yml +15 -43
- data/spec/leadlight/hyperlinkable_spec.rb +50 -4
- data/spec/leadlight/link_spec.rb +70 -10
- data/spec/leadlight/link_template_spec.rb +20 -4
- data/spec/leadlight/null_link_spec.rb +14 -0
- data/spec/leadlight/param_hash_spec.rb +26 -0
- data/spec/leadlight/representation_spec.rb +36 -4
- data/spec/leadlight/request_spec.rb +39 -22
- data/spec/leadlight/service_spec.rb +14 -13
- data/spec/leadlight/tint_helper_spec.rb +36 -2
- data/spec/leadlight_spec.rb +31 -17
- data/spec/support/link_matchers.rb +59 -0
- data/spec/support/misc.rb +9 -0
- metadata +49 -34
@@ -3,7 +3,9 @@ http_interactions:
|
|
3
3
|
- request:
|
4
4
|
method: get
|
5
5
|
uri: https://api.github.com/
|
6
|
-
body:
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
7
9
|
headers:
|
8
10
|
Accept:
|
9
11
|
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
@@ -11,64 +13,33 @@ http_interactions:
|
|
11
13
|
response:
|
12
14
|
status:
|
13
15
|
code: 204
|
14
|
-
message:
|
16
|
+
message:
|
15
17
|
headers:
|
16
18
|
server:
|
17
|
-
- nginx/1.0.
|
19
|
+
- nginx/1.0.13
|
18
20
|
date:
|
19
|
-
-
|
21
|
+
- Wed, 01 Aug 2012 19:38:44 GMT
|
20
22
|
connection:
|
21
23
|
- close
|
22
24
|
status:
|
23
25
|
- 204 No Content
|
24
|
-
|
25
|
-
- '
|
26
|
-
etag:
|
27
|
-
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
26
|
+
cache-control:
|
27
|
+
- ''
|
28
28
|
x-ratelimit-remaining:
|
29
|
-
- '
|
30
|
-
body: ''
|
31
|
-
http_version: !!null
|
32
|
-
recorded_at: Sun, 15 Jan 2012 19:38:36 GMT
|
33
|
-
- request:
|
34
|
-
method: get
|
35
|
-
uri: https://api.github.com/users/avdi
|
36
|
-
body: ''
|
37
|
-
headers:
|
38
|
-
Accept:
|
39
|
-
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
40
|
-
text/plain
|
41
|
-
response:
|
42
|
-
status:
|
43
|
-
code: 200
|
44
|
-
message: !!null
|
45
|
-
headers:
|
46
|
-
server:
|
47
|
-
- nginx/1.0.4
|
48
|
-
date:
|
49
|
-
- Sun, 15 Jan 2012 19:38:36 GMT
|
50
|
-
content-type:
|
51
|
-
- application/json; charset=utf-8
|
52
|
-
transfer-encoding:
|
53
|
-
- chunked
|
54
|
-
connection:
|
55
|
-
- close
|
56
|
-
status:
|
57
|
-
- 200 OK
|
29
|
+
- '4981'
|
58
30
|
x-ratelimit-limit:
|
59
31
|
- '5000'
|
60
|
-
|
61
|
-
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
Grimm","location":"Pennsylvania, USA","id":982,"public_repos":61,"company":"ShipRise","blog":"http://avdi.org/devblog/","hireable":false,"gravatar_id":"4dea430d31b993abaf41cd9b54f8128d"}'
|
66
|
-
http_version: !!null
|
67
|
-
recorded_at: Sun, 15 Jan 2012 19:38:36 GMT
|
32
|
+
body:
|
33
|
+
encoding: US-ASCII
|
34
|
+
string: ''
|
35
|
+
http_version:
|
36
|
+
recorded_at: Wed, 01 Aug 2012 19:38:34 GMT
|
68
37
|
- request:
|
69
38
|
method: get
|
70
|
-
uri: https://api.github.com/users/avdi
|
71
|
-
body:
|
39
|
+
uri: https://api.github.com/users/avdi
|
40
|
+
body:
|
41
|
+
encoding: US-ASCII
|
42
|
+
string: ''
|
72
43
|
headers:
|
73
44
|
Accept:
|
74
45
|
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
@@ -76,12 +47,12 @@ http_interactions:
|
|
76
47
|
response:
|
77
48
|
status:
|
78
49
|
code: 200
|
79
|
-
message:
|
50
|
+
message:
|
80
51
|
headers:
|
81
52
|
server:
|
82
|
-
- nginx/1.0.
|
53
|
+
- nginx/1.0.13
|
83
54
|
date:
|
84
|
-
-
|
55
|
+
- Wed, 01 Aug 2012 19:38:46 GMT
|
85
56
|
content-type:
|
86
57
|
- application/json; charset=utf-8
|
87
58
|
transfer-encoding:
|
@@ -90,106 +61,44 @@ http_interactions:
|
|
90
61
|
- close
|
91
62
|
status:
|
92
63
|
- 200 OK
|
93
|
-
x-ratelimit-limit:
|
94
|
-
- '5000'
|
95
|
-
etag:
|
96
|
-
- ! '"eb01c45aa06961b3a983448c80d7ddfe"'
|
97
|
-
link:
|
98
|
-
- <https://api.github.com/users/avdi/followers?page=2>; rel="next", <https://api.github.com/users/avdi/followers?page=7>;
|
99
|
-
rel="last"
|
100
|
-
x-ratelimit-remaining:
|
101
|
-
- '4984'
|
102
|
-
body: ! '[{"url":"https://api.github.com/users/cypher","login":"cypher","gravatar_id":"0176d9564601b43d75aff59f2cceed88","id":978,"avatar_url":"https://secure.gravatar.com/avatar/0176d9564601b43d75aff59f2cceed88?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/tim","login":"tim","gravatar_id":"515a6f36db0157b7cf83f3b0368e9941","id":2856,"avatar_url":"https://secure.gravatar.com/avatar/515a6f36db0157b7cf83f3b0368e9941?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/SebastianRose","login":"SebastianRose","gravatar_id":"75bcdfe5499e68879fda2957572170ad","id":23090,"avatar_url":"https://secure.gravatar.com/avatar/75bcdfe5499e68879fda2957572170ad?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/cola-zero","login":"cola-zero","gravatar_id":"e46e70d2689dfa229dac7ba0dc9f34e4","id":9118,"avatar_url":"https://secure.gravatar.com/avatar/e46e70d2689dfa229dac7ba0dc9f34e4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/janfri","login":"janfri","gravatar_id":"4c2cadf461b9c15ebf5726577b51e611","id":854,"avatar_url":"https://secure.gravatar.com/avatar/4c2cadf461b9c15ebf5726577b51e611?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/nevans","login":"nevans","gravatar_id":"dfaba90dcff3238dc9770e270232b4a1","id":6142,"avatar_url":"https://secure.gravatar.com/avatar/dfaba90dcff3238dc9770e270232b4a1?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/TreyE","login":"TreyE","gravatar_id":"2b405e0fc139db9b768cfab467955e04","id":38384,"avatar_url":"https://secure.gravatar.com/avatar/2b405e0fc139db9b768cfab467955e04?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/aaalex","login":"aaalex","gravatar_id":"aad77082a3f5b51259532217aadf450a","id":11762,"avatar_url":"https://secure.gravatar.com/avatar/aad77082a3f5b51259532217aadf450a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/beppu","login":"beppu","gravatar_id":"32093c41c663ea62b17d66dab11b789f","id":4425,"avatar_url":"https://secure.gravatar.com/avatar/32093c41c663ea62b17d66dab11b789f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/jdallien","login":"jdallien","gravatar_id":"490dc3575b1c341a84e89cba6305faf9","id":17927,"avatar_url":"https://secure.gravatar.com/avatar/490dc3575b1c341a84e89cba6305faf9?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/arn","login":"arn","gravatar_id":"17faa52c4ce95a86ac34b4d3010ea56d","id":6053,"avatar_url":"https://secure.gravatar.com/avatar/17faa52c4ce95a86ac34b4d3010ea56d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/llimllib","login":"llimllib","gravatar_id":"aa7c1350d93036592f58f165318044db","id":7150,"avatar_url":"https://secure.gravatar.com/avatar/aa7c1350d93036592f58f165318044db?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/jtrupiano","login":"jtrupiano","gravatar_id":"63d809dbf4d44297f73caad307972ec5","id":12331,"avatar_url":"https://secure.gravatar.com/avatar/63d809dbf4d44297f73caad307972ec5?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/lmarburger","login":"lmarburger","gravatar_id":"f027637a680a05254c6f721f8ab57392","id":23582,"avatar_url":"https://secure.gravatar.com/avatar/f027637a680a05254c6f721f8ab57392?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/lfaren","login":"lfaren","gravatar_id":"5f76cc23c75e77aa30ff1ac1fbf1ec54","id":142776,"avatar_url":"https://secure.gravatar.com/avatar/5f76cc23c75e77aa30ff1ac1fbf1ec54?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/slaney","login":"slaney","gravatar_id":"3f4de376ba800ba092d9e1e332ede421","id":5012,"avatar_url":"https://secure.gravatar.com/avatar/3f4de376ba800ba092d9e1e332ede421?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/stevenhaddox","login":"stevenhaddox","gravatar_id":"1fdf54b0ccb88bb46f99b6d9352302dc","id":58004,"avatar_url":"https://secure.gravatar.com/avatar/1fdf54b0ccb88bb46f99b6d9352302dc?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/stonegao","login":"stonegao","gravatar_id":"dca772bde69d5a9f39a62ee79b122f0b","id":42081,"avatar_url":"https://secure.gravatar.com/avatar/dca772bde69d5a9f39a62ee79b122f0b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/riethmayer","login":"riethmayer","gravatar_id":"788dec4942d6108c2cfb3ff2a9fb37ca","id":67637,"avatar_url":"https://secure.gravatar.com/avatar/788dec4942d6108c2cfb3ff2a9fb37ca?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/natebunnyfield","login":"natebunnyfield","gravatar_id":"ed5c8e9a67490816384ff83e9d0e0a42","id":94285,"avatar_url":"https://secure.gravatar.com/avatar/ed5c8e9a67490816384ff83e9d0e0a42?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/nerdEd","login":"nerdEd","gravatar_id":"cf491f57897e7f31122ca6d03d6a49e4","id":1726,"avatar_url":"https://secure.gravatar.com/avatar/cf491f57897e7f31122ca6d03d6a49e4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/jamesdaniels","login":"jamesdaniels","gravatar_id":"3538353e7f9c08efddaabff15c9c6480","id":44975,"avatar_url":"https://secure.gravatar.com/avatar/3538353e7f9c08efddaabff15c9c6480?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/jkamenik","login":"jkamenik","gravatar_id":"d5cdad8cf459a2f3660d374e72eccf4b","id":165914,"avatar_url":"https://secure.gravatar.com/avatar/d5cdad8cf459a2f3660d374e72eccf4b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/mnelson","login":"mnelson","gravatar_id":"58dac781cb69c3342f0a73c8936cf48b","id":51276,"avatar_url":"https://secure.gravatar.com/avatar/58dac781cb69c3342f0a73c8936cf48b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/devreq","login":"devreq","gravatar_id":"7ea1a46afc3c483ef7ae7b6503b41793","id":230532,"avatar_url":"https://secure.gravatar.com/avatar/7ea1a46afc3c483ef7ae7b6503b41793?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/flipsasser","login":"flipsasser","gravatar_id":"ffca7d80230ae1f99914b74853bf06bb","id":8594,"avatar_url":"https://secure.gravatar.com/avatar/ffca7d80230ae1f99914b74853bf06bb?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/abachman","login":"abachman","gravatar_id":"939848268c73b4049f90ee0703df7c68","id":13002,"avatar_url":"https://secure.gravatar.com/avatar/939848268c73b4049f90ee0703df7c68?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/pjb3","login":"pjb3","gravatar_id":"6661ef9d747db3af8896cd94959d717d","id":726,"avatar_url":"https://secure.gravatar.com/avatar/6661ef9d747db3af8896cd94959d717d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/arcterex","login":"arcterex","gravatar_id":"5bc3ee98b5a5bd0cd936554de2bdc232","id":70160,"avatar_url":"https://secure.gravatar.com/avatar/5bc3ee98b5a5bd0cd936554de2bdc232?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},{"url":"https://api.github.com/users/atmos","login":"atmos","gravatar_id":"a86224d72ce21cd9f5bee6784d4b06c7","id":38,"avatar_url":"https://secure.gravatar.com/avatar/a86224d72ce21cd9f5bee6784d4b06c7?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"}]'
|
103
|
-
http_version: !!null
|
104
|
-
recorded_at: Sun, 15 Jan 2012 19:38:37 GMT
|
105
|
-
- request:
|
106
|
-
method: get
|
107
|
-
uri: https://api.github.com/
|
108
|
-
body: 'null'
|
109
|
-
headers:
|
110
|
-
Content-Type:
|
111
|
-
- application/json
|
112
|
-
Accept:
|
113
|
-
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
114
|
-
text/plain
|
115
|
-
response:
|
116
|
-
status:
|
117
|
-
code: 204
|
118
|
-
message: !!null
|
119
|
-
headers:
|
120
|
-
server:
|
121
|
-
- nginx/1.0.4
|
122
|
-
date:
|
123
|
-
- Mon, 16 Jan 2012 02:45:56 GMT
|
124
|
-
connection:
|
125
|
-
- close
|
126
|
-
status:
|
127
|
-
- 204 No Content
|
128
|
-
x-ratelimit-limit:
|
129
|
-
- '5000'
|
130
64
|
etag:
|
131
|
-
- ! '"
|
65
|
+
- ! '"8e1218a0c822681eb4f83e8835693f4d"'
|
132
66
|
x-ratelimit-remaining:
|
133
|
-
- '
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
-
|
138
|
-
|
139
|
-
|
140
|
-
body: 'null'
|
141
|
-
headers:
|
142
|
-
Content-Type:
|
143
|
-
- application/json
|
144
|
-
Accept:
|
145
|
-
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
146
|
-
text/plain
|
147
|
-
response:
|
148
|
-
status:
|
149
|
-
code: 200
|
150
|
-
message: !!null
|
151
|
-
headers:
|
152
|
-
server:
|
153
|
-
- nginx/1.0.4
|
154
|
-
date:
|
155
|
-
- Mon, 16 Jan 2012 02:45:57 GMT
|
156
|
-
content-type:
|
157
|
-
- application/json; charset=utf-8
|
158
|
-
transfer-encoding:
|
159
|
-
- chunked
|
160
|
-
connection:
|
161
|
-
- close
|
162
|
-
status:
|
163
|
-
- 200 OK
|
67
|
+
- '4980'
|
68
|
+
last-modified:
|
69
|
+
- Tue, 31 Jul 2012 06:09:16 GMT
|
70
|
+
cache-control:
|
71
|
+
- public, max-age=60
|
72
|
+
vary:
|
73
|
+
- Accept
|
164
74
|
x-ratelimit-limit:
|
165
75
|
- '5000'
|
166
|
-
|
167
|
-
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
recorded_at: Mon, 16 Jan 2012 02:45:57 GMT
|
76
|
+
body:
|
77
|
+
encoding: ASCII-8BIT
|
78
|
+
string: ! '{"public_repos":71,"type":"User","gravatar_id":"4dea430d31b993abaf41cd9b54f8128d","login":"avdi","following":34,"location":"Pennsylvania,
|
79
|
+
USA","email":"avdi@avdi.org","created_at":"2008-02-26T19:54:34Z","hireable":false,"avatar_url":"https://secure.gravatar.com/avatar/4dea430d31b993abaf41cd9b54f8128d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","blog":"http://avdi.org/devblog/","bio":null,"html_url":"https://github.com/avdi","company":"ShipRise","followers":302,"name":"Avdi
|
80
|
+
Grimm","url":"https://api.github.com/users/avdi","id":982,"public_gists":86}'
|
81
|
+
http_version:
|
82
|
+
recorded_at: Wed, 01 Aug 2012 19:38:35 GMT
|
174
83
|
- request:
|
175
84
|
method: get
|
176
85
|
uri: https://api.github.com/users/avdi/followers
|
177
|
-
body:
|
86
|
+
body:
|
87
|
+
encoding: US-ASCII
|
88
|
+
string: ''
|
178
89
|
headers:
|
179
|
-
Content-Type:
|
180
|
-
- application/json
|
181
90
|
Accept:
|
182
91
|
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
183
92
|
text/plain
|
184
93
|
response:
|
185
94
|
status:
|
186
95
|
code: 200
|
187
|
-
message:
|
96
|
+
message:
|
188
97
|
headers:
|
189
98
|
server:
|
190
|
-
- nginx/1.0.
|
99
|
+
- nginx/1.0.13
|
191
100
|
date:
|
192
|
-
-
|
101
|
+
- Wed, 01 Aug 2012 19:38:46 GMT
|
193
102
|
content-type:
|
194
103
|
- application/json; charset=utf-8
|
195
104
|
transfer-encoding:
|
@@ -198,16 +107,24 @@ http_interactions:
|
|
198
107
|
- close
|
199
108
|
status:
|
200
109
|
- 200 OK
|
201
|
-
x-ratelimit-limit:
|
202
|
-
- '5000'
|
203
110
|
etag:
|
204
|
-
- ! '"
|
111
|
+
- ! '"78b3435d5ac6b1eda8613e65d9768ae9"'
|
205
112
|
link:
|
206
|
-
- <https://api.github.com/users/avdi/followers?page=2>; rel="next", <https://api.github.com/users/avdi/followers?page=
|
113
|
+
- <https://api.github.com/users/avdi/followers?page=2>; rel="next", <https://api.github.com/users/avdi/followers?page=11>;
|
207
114
|
rel="last"
|
115
|
+
vary:
|
116
|
+
- Accept
|
117
|
+
x-ratelimit-limit:
|
118
|
+
- '5000'
|
119
|
+
last-modified:
|
120
|
+
- Wed, 01 Aug 2012 15:34:30 GMT
|
208
121
|
x-ratelimit-remaining:
|
209
|
-
- '
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
122
|
+
- '4979'
|
123
|
+
cache-control:
|
124
|
+
- public, max-age=60
|
125
|
+
body:
|
126
|
+
encoding: ASCII-8BIT
|
127
|
+
string: ! '[{"gravatar_id":"4c64dd1fc1e50d91b712f73cfb77a7aa","login":"einarj","url":"https://api.github.com/users/einarj","avatar_url":"https://secure.gravatar.com/avatar/4c64dd1fc1e50d91b712f73cfb77a7aa?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":906081},{"gravatar_id":"e0f56d398f0757186fbdea7140457c55","login":"wolcanus","url":"https://api.github.com/users/wolcanus","avatar_url":"https://secure.gravatar.com/avatar/e0f56d398f0757186fbdea7140457c55?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":645452},{"gravatar_id":"0176d9564601b43d75aff59f2cceed88","login":"cypher","url":"https://api.github.com/users/cypher","avatar_url":"https://secure.gravatar.com/avatar/0176d9564601b43d75aff59f2cceed88?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":978},{"gravatar_id":"515a6f36db0157b7cf83f3b0368e9941","login":"tim","url":"https://api.github.com/users/tim","avatar_url":"https://secure.gravatar.com/avatar/515a6f36db0157b7cf83f3b0368e9941?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":2856},{"gravatar_id":"75bcdfe5499e68879fda2957572170ad","login":"SebastianRose","url":"https://api.github.com/users/SebastianRose","avatar_url":"https://secure.gravatar.com/avatar/75bcdfe5499e68879fda2957572170ad?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":23090},{"gravatar_id":"e46e70d2689dfa229dac7ba0dc9f34e4","login":"cola-zero","url":"https://api.github.com/users/cola-zero","avatar_url":"https://secure.gravatar.com/avatar/e46e70d2689dfa229dac7ba0dc9f34e4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":9118},{"gravatar_id":"b32a1911d783e0a95e0b062fd5d0b64b","login":"janfri","url":"https://api.github.com/users/janfri","avatar_url":"https://secure.gravatar.com/avatar/b32a1911d783e0a95e0b062fd5d0b64b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":854},{"gravatar_id":"dfaba90dcff3238dc9770e270232b4a1","login":"nevans","url":"https://api.github.com/users/nevans","avatar_url":"https://secure.gravatar.com/avatar/dfaba90dcff3238dc9770e270232b4a1?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":6142},{"gravatar_id":"2b405e0fc139db9b768cfab467955e04","login":"TreyE","url":"https://api.github.com/users/TreyE","avatar_url":"https://secure.gravatar.com/avatar/2b405e0fc139db9b768cfab467955e04?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":38384},{"gravatar_id":"aad77082a3f5b51259532217aadf450a","login":"aaalex","url":"https://api.github.com/users/aaalex","avatar_url":"https://secure.gravatar.com/avatar/aad77082a3f5b51259532217aadf450a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":11762},{"gravatar_id":"32093c41c663ea62b17d66dab11b789f","login":"beppu","url":"https://api.github.com/users/beppu","avatar_url":"https://secure.gravatar.com/avatar/32093c41c663ea62b17d66dab11b789f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":4425},{"gravatar_id":"490dc3575b1c341a84e89cba6305faf9","login":"jdallien","url":"https://api.github.com/users/jdallien","avatar_url":"https://secure.gravatar.com/avatar/490dc3575b1c341a84e89cba6305faf9?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":17927},{"gravatar_id":"17faa52c4ce95a86ac34b4d3010ea56d","login":"arn","url":"https://api.github.com/users/arn","avatar_url":"https://secure.gravatar.com/avatar/17faa52c4ce95a86ac34b4d3010ea56d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":6053},{"gravatar_id":"aa7c1350d93036592f58f165318044db","login":"llimllib","url":"https://api.github.com/users/llimllib","avatar_url":"https://secure.gravatar.com/avatar/aa7c1350d93036592f58f165318044db?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":7150},{"gravatar_id":"63d809dbf4d44297f73caad307972ec5","login":"jtrupiano","url":"https://api.github.com/users/jtrupiano","avatar_url":"https://secure.gravatar.com/avatar/63d809dbf4d44297f73caad307972ec5?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":12331},{"gravatar_id":"f027637a680a05254c6f721f8ab57392","login":"lmarburger","url":"https://api.github.com/users/lmarburger","avatar_url":"https://secure.gravatar.com/avatar/f027637a680a05254c6f721f8ab57392?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":23582},{"gravatar_id":"5f76cc23c75e77aa30ff1ac1fbf1ec54","login":"lfaren","url":"https://api.github.com/users/lfaren","avatar_url":"https://secure.gravatar.com/avatar/5f76cc23c75e77aa30ff1ac1fbf1ec54?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":142776},{"gravatar_id":"3f4de376ba800ba092d9e1e332ede421","login":"slaney","url":"https://api.github.com/users/slaney","avatar_url":"https://secure.gravatar.com/avatar/3f4de376ba800ba092d9e1e332ede421?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":5012},{"gravatar_id":"1fdf54b0ccb88bb46f99b6d9352302dc","login":"stevenhaddox","url":"https://api.github.com/users/stevenhaddox","avatar_url":"https://secure.gravatar.com/avatar/1fdf54b0ccb88bb46f99b6d9352302dc?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":58004},{"gravatar_id":"dca772bde69d5a9f39a62ee79b122f0b","login":"stonegao","url":"https://api.github.com/users/stonegao","avatar_url":"https://secure.gravatar.com/avatar/dca772bde69d5a9f39a62ee79b122f0b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":42081},{"gravatar_id":"788dec4942d6108c2cfb3ff2a9fb37ca","login":"riethmayer","url":"https://api.github.com/users/riethmayer","avatar_url":"https://secure.gravatar.com/avatar/788dec4942d6108c2cfb3ff2a9fb37ca?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":67637},{"gravatar_id":"ed5c8e9a67490816384ff83e9d0e0a42","login":"natebunnyfield","url":"https://api.github.com/users/natebunnyfield","avatar_url":"https://secure.gravatar.com/avatar/ed5c8e9a67490816384ff83e9d0e0a42?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":94285},{"gravatar_id":"cf491f57897e7f31122ca6d03d6a49e4","login":"nerdEd","url":"https://api.github.com/users/nerdEd","avatar_url":"https://secure.gravatar.com/avatar/cf491f57897e7f31122ca6d03d6a49e4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":1726},{"gravatar_id":"3538353e7f9c08efddaabff15c9c6480","login":"jamesdaniels","url":"https://api.github.com/users/jamesdaniels","avatar_url":"https://secure.gravatar.com/avatar/3538353e7f9c08efddaabff15c9c6480?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":44975},{"gravatar_id":"d5cdad8cf459a2f3660d374e72eccf4b","login":"jkamenik","url":"https://api.github.com/users/jkamenik","avatar_url":"https://secure.gravatar.com/avatar/d5cdad8cf459a2f3660d374e72eccf4b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":165914},{"gravatar_id":"58dac781cb69c3342f0a73c8936cf48b","login":"mnelson","url":"https://api.github.com/users/mnelson","avatar_url":"https://secure.gravatar.com/avatar/58dac781cb69c3342f0a73c8936cf48b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":51276},{"gravatar_id":"7ea1a46afc3c483ef7ae7b6503b41793","login":"devreq","url":"https://api.github.com/users/devreq","avatar_url":"https://secure.gravatar.com/avatar/7ea1a46afc3c483ef7ae7b6503b41793?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":230532},{"gravatar_id":"ffca7d80230ae1f99914b74853bf06bb","login":"flipsasser","url":"https://api.github.com/users/flipsasser","avatar_url":"https://secure.gravatar.com/avatar/ffca7d80230ae1f99914b74853bf06bb?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":8594},{"gravatar_id":"939848268c73b4049f90ee0703df7c68","login":"abachman","url":"https://api.github.com/users/abachman","avatar_url":"https://secure.gravatar.com/avatar/939848268c73b4049f90ee0703df7c68?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":13002},{"gravatar_id":"6661ef9d747db3af8896cd94959d717d","login":"pjb3","url":"https://api.github.com/users/pjb3","avatar_url":"https://secure.gravatar.com/avatar/6661ef9d747db3af8896cd94959d717d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":726}]'
|
128
|
+
http_version:
|
129
|
+
recorded_at: Wed, 01 Aug 2012 19:38:35 GMT
|
130
|
+
recorded_with: VCR 2.2.4
|
@@ -3,7 +3,9 @@ http_interactions:
|
|
3
3
|
- request:
|
4
4
|
method: get
|
5
5
|
uri: https://api.github.com/
|
6
|
-
body:
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
7
9
|
headers:
|
8
10
|
Accept:
|
9
11
|
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
@@ -11,55 +13,25 @@ http_interactions:
|
|
11
13
|
response:
|
12
14
|
status:
|
13
15
|
code: 204
|
14
|
-
message:
|
16
|
+
message:
|
15
17
|
headers:
|
16
18
|
server:
|
17
|
-
- nginx/1.0.
|
19
|
+
- nginx/1.0.13
|
18
20
|
date:
|
19
|
-
-
|
21
|
+
- Wed, 01 Aug 2012 19:38:41 GMT
|
20
22
|
connection:
|
21
23
|
- close
|
22
24
|
status:
|
23
25
|
- 204 No Content
|
24
26
|
x-ratelimit-limit:
|
25
27
|
- '5000'
|
26
|
-
|
27
|
-
-
|
28
|
+
cache-control:
|
29
|
+
- ''
|
28
30
|
x-ratelimit-remaining:
|
29
|
-
- '
|
30
|
-
body:
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
body: 'null'
|
37
|
-
headers:
|
38
|
-
Content-Type:
|
39
|
-
- application/json
|
40
|
-
Accept:
|
41
|
-
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
42
|
-
text/plain
|
43
|
-
response:
|
44
|
-
status:
|
45
|
-
code: 204
|
46
|
-
message: !!null
|
47
|
-
headers:
|
48
|
-
server:
|
49
|
-
- nginx/1.0.4
|
50
|
-
date:
|
51
|
-
- Mon, 16 Jan 2012 02:45:54 GMT
|
52
|
-
connection:
|
53
|
-
- close
|
54
|
-
status:
|
55
|
-
- 204 No Content
|
56
|
-
x-ratelimit-limit:
|
57
|
-
- '5000'
|
58
|
-
etag:
|
59
|
-
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
60
|
-
x-ratelimit-remaining:
|
61
|
-
- '4993'
|
62
|
-
body: ''
|
63
|
-
http_version: !!null
|
64
|
-
recorded_at: Mon, 16 Jan 2012 02:45:54 GMT
|
65
|
-
recorded_with: VCR 2.0.0.rc1
|
31
|
+
- '4988'
|
32
|
+
body:
|
33
|
+
encoding: US-ASCII
|
34
|
+
string: ''
|
35
|
+
http_version:
|
36
|
+
recorded_at: Wed, 01 Aug 2012 19:38:30 GMT
|
37
|
+
recorded_with: VCR 2.2.4
|
@@ -3,7 +3,9 @@ http_interactions:
|
|
3
3
|
- request:
|
4
4
|
method: get
|
5
5
|
uri: https://api.github.com/
|
6
|
-
body:
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
7
9
|
headers:
|
8
10
|
Accept:
|
9
11
|
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
@@ -11,55 +13,25 @@ http_interactions:
|
|
11
13
|
response:
|
12
14
|
status:
|
13
15
|
code: 204
|
14
|
-
message:
|
16
|
+
message:
|
15
17
|
headers:
|
16
18
|
server:
|
17
|
-
- nginx/1.0.
|
19
|
+
- nginx/1.0.13
|
18
20
|
date:
|
19
|
-
-
|
21
|
+
- Wed, 01 Aug 2012 19:38:41 GMT
|
20
22
|
connection:
|
21
23
|
- close
|
22
24
|
status:
|
23
25
|
- 204 No Content
|
24
26
|
x-ratelimit-limit:
|
25
27
|
- '5000'
|
26
|
-
|
27
|
-
-
|
28
|
+
cache-control:
|
29
|
+
- ''
|
28
30
|
x-ratelimit-remaining:
|
29
|
-
- '
|
30
|
-
body:
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
body: 'null'
|
37
|
-
headers:
|
38
|
-
Content-Type:
|
39
|
-
- application/json
|
40
|
-
Accept:
|
41
|
-
- application/json, text/x-yaml, application/xml, application/xhtml+xml, text/html,
|
42
|
-
text/plain
|
43
|
-
response:
|
44
|
-
status:
|
45
|
-
code: 204
|
46
|
-
message: !!null
|
47
|
-
headers:
|
48
|
-
server:
|
49
|
-
- nginx/1.0.4
|
50
|
-
date:
|
51
|
-
- Mon, 16 Jan 2012 02:45:54 GMT
|
52
|
-
connection:
|
53
|
-
- close
|
54
|
-
status:
|
55
|
-
- 204 No Content
|
56
|
-
x-ratelimit-limit:
|
57
|
-
- '5000'
|
58
|
-
etag:
|
59
|
-
- ! '"d41d8cd98f00b204e9800998ecf8427e"'
|
60
|
-
x-ratelimit-remaining:
|
61
|
-
- '4992'
|
62
|
-
body: ''
|
63
|
-
http_version: !!null
|
64
|
-
recorded_at: Mon, 16 Jan 2012 02:45:54 GMT
|
65
|
-
recorded_with: VCR 2.0.0.rc1
|
31
|
+
- '4987'
|
32
|
+
body:
|
33
|
+
encoding: US-ASCII
|
34
|
+
string: ''
|
35
|
+
http_version:
|
36
|
+
recorded_at: Wed, 01 Aug 2012 19:38:30 GMT
|
37
|
+
recorded_with: VCR 2.2.4
|
@@ -21,11 +21,13 @@ module Leadlight
|
|
21
21
|
'<https://api.github.com/users/avdi/followers?page=2>; rel="next",'\
|
22
22
|
' <https://api.github.com/users/avdi/followers?page=6>; rel="last"'
|
23
23
|
}
|
24
|
+
let(:captures) { {} }
|
24
25
|
|
25
26
|
before do
|
26
|
-
representation.stub(__response__: response,
|
27
|
+
representation.stub(__response__: response,
|
27
28
|
__service__: service,
|
28
|
-
__location__: '/foo'
|
29
|
+
__location__: '/foo',
|
30
|
+
__captures__: captures)
|
29
31
|
end
|
30
32
|
|
31
33
|
describe '.extend' do
|
@@ -69,10 +71,38 @@ module Leadlight
|
|
69
71
|
it 'adds a link helper' do
|
70
72
|
subject.add_link('/parent', 'parent')
|
71
73
|
service.should_receive(:get_representation!).
|
72
|
-
with(Addressable::URI.parse('/parent')).
|
74
|
+
with(Addressable::URI.parse('/parent'), anything, anything).
|
73
75
|
and_return(request)
|
74
76
|
subject.parent
|
75
77
|
end
|
78
|
+
|
79
|
+
context 'given a URI template' do
|
80
|
+
let(:captures) { { 'id' => '123', 'type' => 'user', 'secret' => 'xyzzy' } }
|
81
|
+
before do
|
82
|
+
subject.add_link('/{type}/{id}/', 'foo')
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'statically expands the template using data in __captures__' do
|
86
|
+
subject.link('foo').href.to_s.should eq('/user/123/')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'supports relative links' do
|
91
|
+
subject.add_link('./bar', 'bar')
|
92
|
+
subject.link('bar').href.to_s.should eq('/foo/bar')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'collapses slashes when expanding relative links' do
|
96
|
+
representation.stub(:__location__ => '/foo/')
|
97
|
+
subject.add_link('./bar', 'bar')
|
98
|
+
subject.link('bar').href.to_s.should eq('/foo/bar')
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'supports .. for previous directory' do
|
102
|
+
representation.stub(:__location__ => '/foo/bar/baz')
|
103
|
+
subject.add_link('../../buz', 'buz')
|
104
|
+
subject.link('buz').href.to_s.should eq('/foo/buz')
|
105
|
+
end
|
76
106
|
end
|
77
107
|
|
78
108
|
describe '#add_link_template' do
|
@@ -94,10 +124,26 @@ module Leadlight
|
|
94
124
|
it 'adds a link helper' do
|
95
125
|
subject.add_link_template('/child/{index}', 'child')
|
96
126
|
service.should_receive(:get_representation!).
|
97
|
-
with('/child/23')
|
127
|
+
with(u('/child/23'))
|
98
128
|
subject.child(23)
|
99
129
|
end
|
100
130
|
|
131
|
+
it 'supports relative links' do
|
132
|
+
subject.add_link_template('./bar', 'bar')
|
133
|
+
subject.link('bar').href.to_s.should eq('/foo/bar')
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'collapses slashes when expanding relative links' do
|
137
|
+
representation.stub(:__location__ => '/foo/')
|
138
|
+
subject.add_link_template('./bar', 'bar')
|
139
|
+
subject.link('bar').href.to_s.should eq('/foo/bar')
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'supports .. for previous directory' do
|
143
|
+
representation.stub(:__location__ => '/foo/bar/baz')
|
144
|
+
subject.add_link_template('../../buz', 'buz')
|
145
|
+
subject.link('buz').href.to_s.should eq('/foo/buz')
|
146
|
+
end
|
101
147
|
end
|
102
148
|
|
103
149
|
describe '#add_link_set' do
|