gh 0.13.0 → 0.13.1
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.
- checksums.yaml +4 -4
- data/lib/gh/error.rb +2 -2
- data/lib/gh/response.rb +1 -1
- data/lib/gh/version.rb +1 -1
- metadata +6 -94
- data/.gitignore +0 -4
- data/.travis.yml +0 -19
- data/Gemfile +0 -6
- data/README.md +0 -117
- data/Rakefile +0 -6
- data/gh.gemspec +0 -28
- data/spec/cache_spec.rb +0 -28
- data/spec/custom_limit_spec.rb +0 -23
- data/spec/error_spec.rb +0 -55
- data/spec/gh_spec.rb +0 -32
- data/spec/instrumentation_spec.rb +0 -30
- data/spec/lazy_loader_spec.rb +0 -63
- data/spec/link_follower_spec.rb +0 -24
- data/spec/merge_commit_spec.rb +0 -24
- data/spec/normalizer_spec.rb +0 -319
- data/spec/pagination_spec.rb +0 -32
- data/spec/parallel_spec.rb +0 -95
- data/spec/payloads/.yml +0 -3
- data/spec/payloads/repos/rkh/gh/contents/README.md_per_page_100.yml +0 -15
- data/spec/payloads/repos/rkh/test-project-1.yml +0 -23
- data/spec/payloads/repos/sinatra/sinatra/issues/56/comments.yml +0 -36
- data/spec/payloads/repos/sinatra/sinatra/issues/comments/383214.yml +0 -21
- data/spec/payloads/repos/sinatra/sinatra/pulls/56.yml +0 -23
- data/spec/payloads/repos/travis-repos/test-project-1.yml +0 -21
- data/spec/payloads/repos/travis-repos/test-project-1/git/commits/ca3c0a44ec1d9bf8557d2653aa1b79fcc9ff5f5d.yml +0 -23
- data/spec/payloads/repos/travis-repos/test-project-1/git/refs/pull/1.yml +0 -20
- data/spec/payloads/repos/travis-repos/test-project-1/pulls/1.yml +0 -24
- data/spec/payloads/users/rkh.yml +0 -22
- data/spec/payloads/users/rkh/repos.yml +0 -52
- data/spec/payloads/users/rkh/repos_page_2&per_page=100.yml +0 -49
- data/spec/payloads/users/rkh/repos_page_2.yml +0 -54
- data/spec/payloads/users/rkh/repos_page_2_per_page_100.yml +0 -49
- data/spec/payloads/users/rkh/repos_page_3.yml +0 -57
- data/spec/payloads/users/rkh/repos_page_4.yml +0 -56
- data/spec/payloads/users/rkh/repos_page_5.yml +0 -28
- data/spec/payloads/users/rkh/repos_per_page_100.yml +0 -121
- data/spec/payloads/users/rkh_per_page_100.yml +0 -21
- data/spec/payloads/users/rtomayko.yml +0 -21
- data/spec/payloads/users/svenfuchs.yml +0 -21
- data/spec/payloads/users/travis-repos.yml +0 -21
- data/spec/pull_request_hook.json +0 -181
- data/spec/remote_spec.rb +0 -48
- data/spec/response_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -88
- data/spec/stack_spec.rb +0 -5
- data/spec/token_check_spec.rb +0 -27
- data/spec/wrapper_spec.rb +0 -5
data/spec/gh_spec.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GH do
|
4
|
-
it 'allows doing requests right from the GH object' do
|
5
|
-
GH['users/rkh']['name'].should be == "Konstantin Haase"
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'allows posting to github' do
|
9
|
-
stub_request(:post, "https://api.github.com/somewhere").
|
10
|
-
with(:body => "{\"foo\":\"bar\"}").to_return(:status => 200, :body => '{"hi": "ho"}', :headers => {})
|
11
|
-
response = GH.post "somewhere", "foo" => "bar"
|
12
|
-
response['hi'].should be == 'ho'
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'with' do
|
16
|
-
it 'returns the GH instance if no block is given' do
|
17
|
-
GH.with(:token => "...").should be_a(GH::Wrapper)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns the block value if block is given' do
|
21
|
-
GH.with(:token => "...") { 42 }.should be == 42
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'propagates options' do
|
25
|
-
GH.with(:a => :b) do
|
26
|
-
GH.with(:b => :c) do
|
27
|
-
GH.options.should be == {:a => :b, :b => :c}
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GH::Instrumentation do
|
4
|
-
before do
|
5
|
-
@events = []
|
6
|
-
subject.instrumenter = proc { |*a, &b| @events << a and b[] }
|
7
|
-
stub_request(:get, "https://api.github.com/").to_return :body => "{}"
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'instruments http' do
|
11
|
-
subject.http :get, '/'
|
12
|
-
@events.size.should be == 1
|
13
|
-
@events.first.should be == ['http.gh', {:verb => :get, :url => '/', :gh => subject}]
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'instruments []' do
|
17
|
-
subject['/']
|
18
|
-
@events.size.should be == 2
|
19
|
-
@events.should be == [
|
20
|
-
['access.gh', {:key => '/', :gh => subject}],
|
21
|
-
['http.gh', {:verb => :get, :url => '/', :gh => subject}]
|
22
|
-
]
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'instruments load' do
|
26
|
-
subject.load("[]")
|
27
|
-
@events.size.should be == 1
|
28
|
-
@events.first.should be == ['load.gh', {:data => "[]", :gh => subject}]
|
29
|
-
end
|
30
|
-
end
|
data/spec/lazy_loader_spec.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GH::LazyLoader do
|
4
|
-
before { subject.backend = GH::Normalizer.new(GH::MockBackend.new) }
|
5
|
-
|
6
|
-
let! :raw do
|
7
|
-
hash = subject.backend['users/rkh'].to_hash
|
8
|
-
hash.delete 'name'
|
9
|
-
hash
|
10
|
-
end
|
11
|
-
|
12
|
-
let :rkh do
|
13
|
-
subject.load(raw)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'wraps normalizer by default' do
|
17
|
-
GH::LazyLoader.new.backend.should be_a(GH::Normalizer)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'send http requests for missing fields' do
|
21
|
-
should_request(1) { rkh['name'].should be == 'Konstantin Haase' }
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'does not send http requests for existing fields' do
|
25
|
-
should_not_request { rkh['login'].should be == 'rkh' }
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'allows traversing into nested structures' do
|
29
|
-
sven = subject.backend['users/svenfuchs'].to_hash
|
30
|
-
sven['friends'] = [raw]
|
31
|
-
sven.delete 'name'
|
32
|
-
|
33
|
-
sven = subject.load(sven)
|
34
|
-
should_request(1) { sven['friends'][0]['name'].should be == 'Konstantin Haase' }
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'does not request twice if the field does not exist upstream' do
|
38
|
-
should_request(1) { 2.times { rkh['foo'] } }
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'does not skip an already existing default proc' do
|
42
|
-
count = 0
|
43
|
-
raw.default_proc = proc { |hash, key| count += 1 if key == 'foo' }
|
44
|
-
rkh = subject.load(raw)
|
45
|
-
|
46
|
-
should_not_request do
|
47
|
-
rkh['foo'].should be == 1
|
48
|
-
rkh['foo'].should be == 2
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'is still loading missing fields, even if a default proc is set' do
|
53
|
-
count = 0
|
54
|
-
raw.default_proc = proc { |hash, key| count += 1 if key == 'foo' }
|
55
|
-
rkh = subject.load(raw)
|
56
|
-
|
57
|
-
should_request 1 do
|
58
|
-
rkh['foo'].should be == 1
|
59
|
-
rkh['name'].should be == 'Konstantin Haase'
|
60
|
-
rkh['foo'].should be == 2
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
data/spec/link_follower_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GH::LinkFollower do
|
4
|
-
before { subject.backend = GH::Normalizer.new(GH::MockBackend.new) }
|
5
|
-
|
6
|
-
let(:pull_request) { subject['/repos/sinatra/sinatra/pulls/56'] }
|
7
|
-
let(:comments) { pull_request['comments'] }
|
8
|
-
let(:comment) { comments.first }
|
9
|
-
let(:commentator) { comment['owner'] }
|
10
|
-
|
11
|
-
it 'follows links' do
|
12
|
-
commentator['login'].should be == 'rtomayko'
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'works with lazy loading' do
|
16
|
-
subject.backend = GH::LazyLoader.new(subject.backend)
|
17
|
-
# location is not included in the comment payload
|
18
|
-
commentator["location"].should be == "San Francisco"
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'does not raise exceptions for unknown fields' do
|
22
|
-
commentator["location"].should be_nil
|
23
|
-
end
|
24
|
-
end
|
data/spec/merge_commit_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GH::MergeCommit do
|
4
|
-
let(:file) { File.expand_path('../pull_request_hook.json', __FILE__) }
|
5
|
-
let(:payload) { File.read file }
|
6
|
-
let(:gh) { GH.load payload }
|
7
|
-
let(:pull_request) { gh['pull_request'] }
|
8
|
-
|
9
|
-
it 'adds merge commits' do
|
10
|
-
pull_request['merge_commit']['sha'].should_not be_nil
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'adds base commits' do
|
14
|
-
pull_request['base_commit']['sha'].should_not be_nil
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'adds head commits' do
|
18
|
-
pull_request['head_commit']['sha'].should_not be_nil
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'allows lazy loading on the commit' do
|
22
|
-
pull_request['merge_commit']['committer']['name'] == 'GitHub Merge Button'
|
23
|
-
end
|
24
|
-
end
|
data/spec/normalizer_spec.rb
DELETED
@@ -1,319 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GH::Normalizer do
|
4
|
-
before { subject.backend = GH::MockBackend.new }
|
5
|
-
|
6
|
-
def normalize(payload)
|
7
|
-
data[subject.path_for('/payload')] = payload
|
8
|
-
end
|
9
|
-
|
10
|
-
def with_headers(headers = {})
|
11
|
-
response = GH::Response.new("{}", headers)
|
12
|
-
data[subject.path_for('/payload')], response.data = response, data[subject.path_for('/payload')]
|
13
|
-
end
|
14
|
-
|
15
|
-
def normalized
|
16
|
-
subject[subject.path_for('/payload')]
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'is set up properly' do
|
20
|
-
backend.frontend.should be_a(GH::Normalizer)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'leaves unknown fields in place' do
|
24
|
-
normalize 'foo' => 'bar'
|
25
|
-
normalized['foo'].should be == 'bar'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'allows normalization with #load' do
|
29
|
-
result = subject.load("org" => "foo")
|
30
|
-
result.should_not include("org")
|
31
|
-
result["organization"].should be == "foo"
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'works for deeply nested fields'
|
35
|
-
it 'works for lists'
|
36
|
-
|
37
|
-
context 'date fields' do
|
38
|
-
it 'generates date from timestamp'
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'renaming' do
|
42
|
-
def self.renames(a, b)
|
43
|
-
it "renames #{a} to #{b}" do
|
44
|
-
normalize a => "foo"
|
45
|
-
normalized.should_not include(a)
|
46
|
-
normalized.should include(b)
|
47
|
-
normalized[b].should be == "foo"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
renames 'org', 'organization'
|
52
|
-
renames 'orgs', 'organizations'
|
53
|
-
renames 'username', 'login'
|
54
|
-
renames 'repo', 'repository'
|
55
|
-
renames 'repos', 'repositories'
|
56
|
-
renames 'repo_foo', 'repository_foo'
|
57
|
-
renames 'repos_foo', 'repository_foo'
|
58
|
-
renames 'foo_repo', 'foo_repository'
|
59
|
-
renames 'foo_repos', 'foo_repositories'
|
60
|
-
|
61
|
-
it 'renames commit to sha if value is a sha' do
|
62
|
-
normalize 'commit' => 'd0f4aa01f100c26c6eae17ea637f46cf150d9c1f'
|
63
|
-
normalized.should_not include('commit')
|
64
|
-
normalized.should include('sha')
|
65
|
-
normalized['sha'].should be == 'd0f4aa01f100c26c6eae17ea637f46cf150d9c1f'
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'does not rename commit to sha if value is not a sha' do
|
69
|
-
normalize 'commit' => 'foo'
|
70
|
-
normalized.should include('commit')
|
71
|
-
normalized.should_not include('sha')
|
72
|
-
normalized['commit'].should be == 'foo'
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'renames commit_id to sha if value is a sha' do
|
76
|
-
normalize 'commit_id' => 'd0f4aa01f100c26c6eae17ea637f46cf150d9c1f'
|
77
|
-
normalized.should_not include('commit_id')
|
78
|
-
normalized.should include('sha')
|
79
|
-
normalized['sha'].should be == 'd0f4aa01f100c26c6eae17ea637f46cf150d9c1f'
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'does not rename commit_id to sha if value is not a sha' do
|
83
|
-
normalize 'commit_id' => 'foo'
|
84
|
-
normalized.should include('commit_id')
|
85
|
-
normalized.should_not include('sha')
|
86
|
-
normalized['commit_id'].should be == 'foo'
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'renames comments to comment_count if content is a number' do
|
90
|
-
normalize 'comments' => 42
|
91
|
-
normalized.should include('comment_count')
|
92
|
-
normalized.should_not include('comments')
|
93
|
-
normalized['comment_count'].should be == 42
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'renames repositories to repository_count if content is a number' do
|
97
|
-
normalize 'repositories' => 42
|
98
|
-
normalized.should include('repository_count')
|
99
|
-
normalized.should_not include('repositories')
|
100
|
-
normalized['repository_count'].should be == 42
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'renames repos to repository_count if content is a number' do
|
104
|
-
normalize 'repos' => 42
|
105
|
-
normalized.should include('repository_count')
|
106
|
-
normalized.should_not include('repos')
|
107
|
-
normalized['repository_count'].should be == 42
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'renames forks to fork_count if content is a number' do
|
111
|
-
normalize 'forks' => 42
|
112
|
-
normalized.should include('fork_count')
|
113
|
-
normalized.should_not include('forks')
|
114
|
-
normalized['fork_count'].should be == 42
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'does not rename comments to comment_count if content is not a number' do
|
118
|
-
normalize 'comments' => 'foo'
|
119
|
-
normalized.should include('comments')
|
120
|
-
normalized.should_not include('comment_count')
|
121
|
-
normalized['comments'].should be == 'foo'
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'does not rename repositories to repository_count if content is not a number' do
|
125
|
-
normalize 'repositories' => 'foo'
|
126
|
-
normalized.should include('repositories')
|
127
|
-
normalized.should_not include('repository_count')
|
128
|
-
normalized['repositories'].should be == 'foo'
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'does not rename repos to repository_count if content is not a number' do
|
132
|
-
normalize 'repos' => 'foo'
|
133
|
-
normalized.should include('repositories')
|
134
|
-
normalized.should_not include('repository_count')
|
135
|
-
normalized['repositories'].should be == 'foo'
|
136
|
-
end
|
137
|
-
|
138
|
-
it 'does not rename forks to fork_count if content is not a number' do
|
139
|
-
normalize 'forks' => 'foo'
|
140
|
-
normalized.should include('forks')
|
141
|
-
normalized.should_not include('fork_count')
|
142
|
-
normalized['forks'].should be == 'foo'
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'renames user to owner if appropriate' do
|
146
|
-
normalize 'user' => 'me', 'created_at' => Time.now.xmlschema
|
147
|
-
normalized.should_not include('user')
|
148
|
-
normalized.should include('owner')
|
149
|
-
normalized['owner'].should be == 'me'
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'renames user to author if appropriate' do
|
153
|
-
normalize 'user' => 'me', 'committed_at' => Time.now.xmlschema
|
154
|
-
normalized.should_not include('user')
|
155
|
-
normalized.should include('author')
|
156
|
-
normalized['author'].should be == 'me'
|
157
|
-
end
|
158
|
-
|
159
|
-
it 'leaves user in place if owner exists' do
|
160
|
-
normalize 'user' => 'me', 'created_at' => Time.now.xmlschema, 'owner' => 'you'
|
161
|
-
normalized.should include('user')
|
162
|
-
normalized.should include('owner')
|
163
|
-
normalized['user'].should be == 'me'
|
164
|
-
normalized['owner'].should be == 'you'
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'leaves user in place if author exists' do
|
168
|
-
normalize 'user' => 'me', 'committed_at' => Time.now.xmlschema, 'author' => 'you'
|
169
|
-
normalized.should include('user')
|
170
|
-
normalized.should include('author')
|
171
|
-
normalized['user'].should be == 'me'
|
172
|
-
normalized['author'].should be == 'you'
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'leaves user in place if no indication what kind of user' do
|
176
|
-
normalize 'user' => 'me'
|
177
|
-
normalized.should_not include('owner')
|
178
|
-
normalized.should_not include('author')
|
179
|
-
normalized.should include('user')
|
180
|
-
normalized['user'].should be == 'me'
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'copies author to committer' do
|
184
|
-
normalize 'author' => 'me'
|
185
|
-
normalized.should include('author')
|
186
|
-
normalized.should include('committer')
|
187
|
-
normalized['author'].should be == 'me'
|
188
|
-
end
|
189
|
-
|
190
|
-
it 'copies committer to author' do
|
191
|
-
normalize 'committer' => 'me'
|
192
|
-
normalized.should include('author')
|
193
|
-
normalized.should include('committer')
|
194
|
-
normalized['author'].should be == 'me'
|
195
|
-
end
|
196
|
-
|
197
|
-
it 'does not override committer or author if both exist' do
|
198
|
-
normalize 'committer' => 'me', 'author' => 'you'
|
199
|
-
normalized.should include('author')
|
200
|
-
normalized.should include('committer')
|
201
|
-
normalized['author'].should be == 'you'
|
202
|
-
normalized['committer'].should be == 'me'
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
context 'time' do
|
207
|
-
it 'transforms timestamps stored in "timestamp" to a date in "date"' do
|
208
|
-
normalize 'timestamp' => 1234
|
209
|
-
normalized['date'].should be == "1970-01-01T00:20:34Z"
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'transforms dates stored in "timestamp" to a date in "date"' do
|
213
|
-
normalize 'timestamp' => "2012-04-12T17:29:51+02:00"
|
214
|
-
normalized['date'].should be == "2012-04-12T15:29:51Z"
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'changes date to UTC' do
|
218
|
-
normalize 'date' => "2012-04-12T17:29:51+02:00"
|
219
|
-
normalized['date'].should be == "2012-04-12T15:29:51Z"
|
220
|
-
end
|
221
|
-
|
222
|
-
it 'changes any time entry to UTC' do
|
223
|
-
normalize 'foo' => "2012-04-12T17:29:51+02:00"
|
224
|
-
normalized['foo'].should be == "2012-04-12T15:29:51Z"
|
225
|
-
end
|
226
|
-
|
227
|
-
it 'does not choke on empty values' do
|
228
|
-
normalize 'date' => ""
|
229
|
-
normalized['date'].should be == ""
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
context 'links' do
|
234
|
-
it 'does not normalize config' do
|
235
|
-
normalize 'config' => {'url' => 'http://localhost'}
|
236
|
-
normalized['config'].should be == {'url' => 'http://localhost'}
|
237
|
-
end
|
238
|
-
|
239
|
-
it 'generates link entries from link headers' do
|
240
|
-
pending
|
241
|
-
normalize '_links' => {'href' => 'foo'}
|
242
|
-
with_headers
|
243
|
-
|
244
|
-
normalized.headers.should include("Link")
|
245
|
-
normalized.headers["Link"].should be == "something something"
|
246
|
-
end
|
247
|
-
|
248
|
-
it 'generates link headers from link entries'
|
249
|
-
it 'does not discard existing link entires'
|
250
|
-
it 'does not discard existing link headers'
|
251
|
-
|
252
|
-
it 'identifies _url suffix as link' do
|
253
|
-
normalize 'foo_url' => 'http://lmgtfy.com/?q=foo'
|
254
|
-
normalized.should_not include('foo_url')
|
255
|
-
normalized.should include("_links")
|
256
|
-
normalized["_links"].should include("foo")
|
257
|
-
normalized["_links"]["foo"].should be_a(Hash)
|
258
|
-
normalized["_links"]["foo"]["href"].should be == 'http://lmgtfy.com/?q=foo'
|
259
|
-
end
|
260
|
-
|
261
|
-
it 'identifies blog as link' do
|
262
|
-
normalize 'blog' => 'http://rkh.im'
|
263
|
-
normalized.should_not include('blog')
|
264
|
-
normalized.should include("_links")
|
265
|
-
normalized["_links"].should include("blog")
|
266
|
-
normalized["_links"]["blog"].should be_a(Hash)
|
267
|
-
normalized["_links"]["blog"]["href"].should be == 'http://rkh.im'
|
268
|
-
end
|
269
|
-
|
270
|
-
it 'detects avatar links from gravatar_url' do
|
271
|
-
normalize 'gravatar_url' => 'http://gravatar.com/avatar/93c02710978db9979064630900741691?size=50'
|
272
|
-
normalized.should_not include('gravatar_url')
|
273
|
-
normalized.should include("_links")
|
274
|
-
normalized["_links"].should include("avatar")
|
275
|
-
normalized["_links"]["avatar"].should be_a(Hash)
|
276
|
-
normalized["_links"]["avatar"]["href"].should be == 'http://gravatar.com/avatar/93c02710978db9979064630900741691?size=50'
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'detects html urls in url field' do
|
280
|
-
normalize 'url' => 'http://github.com/foo'
|
281
|
-
normalized.should_not include('url')
|
282
|
-
normalized.should include('_links')
|
283
|
-
normalized['_links'].should include('html')
|
284
|
-
normalized['_links']['html']['href'].should be == 'http://github.com/foo'
|
285
|
-
end
|
286
|
-
|
287
|
-
it 'detects self urls in url field' do
|
288
|
-
normalize 'url' => 'https://api.github.com/foo'
|
289
|
-
normalized.should_not include('url')
|
290
|
-
normalized.should include('_links')
|
291
|
-
normalized['_links'].should include('self')
|
292
|
-
normalized['_links'].should_not include('html')
|
293
|
-
normalized['_links']['self']['href'].should be == 'https://api.github.com/foo'
|
294
|
-
end
|
295
|
-
|
296
|
-
it 'passes through true' do
|
297
|
-
normalize 'foo' => true
|
298
|
-
normalized['foo'].should be == true
|
299
|
-
end
|
300
|
-
|
301
|
-
it 'properly detects html links when api is served from same host' do
|
302
|
-
subject.backend.setup("http://localhost/api/v3", {})
|
303
|
-
normalize 'url' => 'http://localhost/foo'
|
304
|
-
normalized.should_not include('url')
|
305
|
-
normalized.should include('_links')
|
306
|
-
normalized['_links'].should include('html')
|
307
|
-
normalized['_links']['html']['href'].should be == 'http://localhost/foo'
|
308
|
-
end
|
309
|
-
|
310
|
-
it 'properly detects self links when api is served from same host' do
|
311
|
-
subject.backend.setup("http://localhost/api/v3", {})
|
312
|
-
normalize 'url' => 'http://localhost/api/v3/foo'
|
313
|
-
normalized.should_not include('url')
|
314
|
-
normalized.should include('_links')
|
315
|
-
normalized['_links'].should include('self')
|
316
|
-
normalized['_links']['self']['href'].should be == 'http://localhost/api/v3/foo'
|
317
|
-
end
|
318
|
-
end
|
319
|
-
end
|