harpy 0.1.6 → 0.1.7
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/lib/harpy/resource.rb +24 -0
- data/lib/harpy/version.rb +1 -1
- data/spec/harpy/resource_spec.rb +97 -0
- metadata +18 -18
data/lib/harpy/resource.rb
CHANGED
@@ -80,6 +80,19 @@ module Harpy
|
|
80
80
|
result
|
81
81
|
end
|
82
82
|
|
83
|
+
def delete_from_url(url)
|
84
|
+
delete_from_url_handler Harpy.client.delete url
|
85
|
+
end
|
86
|
+
|
87
|
+
def delete_from_urn(urn)
|
88
|
+
url = Harpy.entry_point.urn urn
|
89
|
+
url ? delete_from_url(url) : false
|
90
|
+
end
|
91
|
+
|
92
|
+
def delete_from_id(id)
|
93
|
+
delete_from_urn urn id
|
94
|
+
end
|
95
|
+
|
83
96
|
private
|
84
97
|
|
85
98
|
def url
|
@@ -96,6 +109,17 @@ module Harpy
|
|
96
109
|
Harpy.client.invalid_code response
|
97
110
|
end
|
98
111
|
end
|
112
|
+
|
113
|
+
def delete_from_url_handler(response)
|
114
|
+
case response.code
|
115
|
+
when 204
|
116
|
+
true
|
117
|
+
when 404
|
118
|
+
false
|
119
|
+
else
|
120
|
+
Harpy.client.invalid_code response
|
121
|
+
end
|
122
|
+
end
|
99
123
|
end
|
100
124
|
|
101
125
|
module InstanceMethods
|
data/lib/harpy/version.rb
CHANGED
data/spec/harpy/resource_spec.rb
CHANGED
@@ -191,6 +191,103 @@ describe "class including Harpy::Resource" do
|
|
191
191
|
Harpy::Spec::Company.from_id(1).should be_nil
|
192
192
|
end
|
193
193
|
end
|
194
|
+
end
|
195
|
+
describe ".delete_from_url(url)" do
|
196
|
+
context "called with only one url" do
|
197
|
+
let(:url){ "http://localhost/company/1" }
|
198
|
+
it "is true on success" do
|
199
|
+
response = Typhoeus::Response.new :code => 204
|
200
|
+
Harpy.client.should_receive(:delete).with(url).and_return response
|
201
|
+
result = Harpy::Spec::Company.delete_from_url url
|
202
|
+
result.should be_true
|
203
|
+
end
|
204
|
+
it "is false when not found" do
|
205
|
+
response = Typhoeus::Response.new :code => 404
|
206
|
+
Harpy.client.should_receive(:delete).with(url).and_return response
|
207
|
+
Harpy::Spec::Company.delete_from_url(url).should be_false
|
208
|
+
end
|
209
|
+
it "delegates response code != 204 or 404 to client" do
|
210
|
+
response = Typhoeus::Response.new :code => 500
|
211
|
+
Harpy.client.should_receive(:delete).with(url).and_return response
|
212
|
+
Harpy.client.should_receive(:invalid_code).with response
|
213
|
+
Harpy::Spec::Company.delete_from_url url
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
describe ".delete_from_urn(urn)" do
|
218
|
+
context "when entry point is not set" do
|
219
|
+
it "raises Harpy::EntryPointRequired" do
|
220
|
+
lambda{
|
221
|
+
Harpy::Spec::Company.delete_from_urn("urn:harpy:company:1")
|
222
|
+
}.should raise_error Harpy::EntryPointRequired
|
223
|
+
end
|
224
|
+
end
|
225
|
+
context "when entry point is set" do
|
226
|
+
let(:urn) { "urn:harpy:company:1" }
|
227
|
+
let(:url) { "http://localhost/company/1" }
|
228
|
+
it "asks Harpy.entry_point to convert urn to url then call .from_url" do
|
229
|
+
# urn:harpy:company:1 -> http://localhost/company/1
|
230
|
+
Harpy.entry_point = mock
|
231
|
+
Harpy.entry_point.should_receive(:urn).with(urn).and_return url
|
232
|
+
|
233
|
+
# http://localhost/company/1 -> Harpy::Spec::Company instance
|
234
|
+
Harpy::Spec::Company.should_receive(:delete_from_url).with(url).and_return(expected = mock)
|
235
|
+
Harpy::Spec::Company.delete_from_urn(urn).should be expected
|
236
|
+
end
|
237
|
+
it "is nil if urn is not found" do
|
238
|
+
# urn:harpy:company:1 -> nil
|
239
|
+
Harpy.entry_point = mock
|
240
|
+
Harpy.entry_point.should_receive(:urn).with(urn)
|
241
|
+
|
242
|
+
Harpy::Spec::Company.delete_from_urn(urn).should be_false
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
describe ".delete_from_id(id)" do
|
247
|
+
context "when urn has not been overriden" do
|
248
|
+
it "raises NotImplementedError" do
|
249
|
+
lambda{
|
250
|
+
Harpy::Spec::Company.delete_from_id(1)
|
251
|
+
}.should raise_error NotImplementedError
|
252
|
+
end
|
253
|
+
end
|
254
|
+
context "when urn has been overriden but entry point is not set" do
|
255
|
+
let(:urn) { "urn:harpy:company:1" }
|
256
|
+
it "raises Harpy::EntryPointRequired" do
|
257
|
+
# 1 -> urn:harpy:company:1
|
258
|
+
Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
|
259
|
+
|
260
|
+
lambda{
|
261
|
+
Harpy::Spec::Company.delete_from_id(1)
|
262
|
+
}.should raise_error Harpy::EntryPointRequired
|
263
|
+
end
|
264
|
+
end
|
265
|
+
context "when entry point is set and urn has been overriden" do
|
266
|
+
let(:urn) { "urn:harpy:company:1" }
|
267
|
+
let(:url) { "http://localhost/company/1" }
|
268
|
+
it "asks Harpy.entry_point to convert urn to url then call .from_url" do
|
269
|
+
# 1 -> urn:harpy:company:1
|
270
|
+
Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
|
271
|
+
|
272
|
+
# urn:harpy:company:1 -> http://localhost/company/1
|
273
|
+
Harpy.entry_point = mock
|
274
|
+
Harpy.entry_point.should_receive(:urn).with(urn).and_return url
|
275
|
+
|
276
|
+
# http://localhost/company/1 -> Harpy::Spec::Company instance
|
277
|
+
Harpy::Spec::Company.should_receive(:delete_from_url).with(url).and_return(expected = mock)
|
278
|
+
Harpy::Spec::Company.delete_from_id(1).should be expected
|
279
|
+
end
|
280
|
+
it "is nil if urn is not found" do
|
281
|
+
# 1 -> urn:harpy:company:1
|
282
|
+
Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
|
283
|
+
|
284
|
+
# urn:harpy:company:1 -> nil
|
285
|
+
Harpy.entry_point = mock
|
286
|
+
Harpy.entry_point.should_receive(:urn).with(urn)
|
287
|
+
|
288
|
+
Harpy::Spec::Company.delete_from_id(1).should be_false
|
289
|
+
end
|
290
|
+
end
|
194
291
|
end
|
195
292
|
describe ".urn(id)" do
|
196
293
|
it "raises NotImplementedError" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: harpy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,12 +10,12 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-04 00:00:00.000000000 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: typhoeus
|
18
|
-
requirement: &
|
18
|
+
requirement: &2160282920 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: 0.2.4
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2160282920
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
|
-
requirement: &
|
29
|
+
requirement: &2160282260 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: 3.0.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2160282260
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: activemodel
|
40
|
-
requirement: &
|
40
|
+
requirement: &2160281760 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: 3.0.0
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *2160281760
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: hash-deep-merge
|
51
|
-
requirement: &
|
51
|
+
requirement: &2160281280 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: 0.1.1
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *2160281280
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: yajl-ruby
|
62
|
-
requirement: &
|
62
|
+
requirement: &2160280500 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ~>
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: 0.8.2
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *2160280500
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rake
|
73
|
-
requirement: &
|
73
|
+
requirement: &2160280000 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ~>
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: 0.8.7
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *2160280000
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rspec
|
84
|
-
requirement: &
|
84
|
+
requirement: &2160279480 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: 2.6.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *2160279480
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: rocco
|
95
|
-
requirement: &
|
95
|
+
requirement: &2160278960 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ~>
|
@@ -100,7 +100,7 @@ dependencies:
|
|
100
100
|
version: '0.7'
|
101
101
|
type: :development
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *2160278960
|
104
104
|
description: Client for REST API with HATEOAS
|
105
105
|
email:
|
106
106
|
- joseph.halter@thetalentbox.com
|