neuron-client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/README.md +34 -8
  2. data/lib/neuron-client.rb +61 -12
  3. data/lib/neuron-client/{connection.rb → admin_connection.rb} +7 -7
  4. data/lib/neuron-client/api.rb +48 -31
  5. data/lib/neuron-client/membase_connection.rb +18 -0
  6. data/lib/neuron-client/model/admin/ad.rb +22 -0
  7. data/lib/neuron-client/model/admin/ad_zone.rb +15 -0
  8. data/lib/neuron-client/model/admin/base.rb +91 -0
  9. data/lib/neuron-client/model/admin/blocked_referer.rb +12 -0
  10. data/lib/neuron-client/model/admin/blocked_user_agent.rb +12 -0
  11. data/lib/neuron-client/model/admin/geo_target.rb +16 -0
  12. data/lib/neuron-client/model/admin/report.rb +15 -0
  13. data/lib/neuron-client/model/admin/s3_file.rb +12 -0
  14. data/lib/neuron-client/model/admin/zone.rb +15 -0
  15. data/lib/neuron-client/model/base.rb +38 -0
  16. data/lib/neuron-client/model/common/ad.rb +40 -0
  17. data/lib/neuron-client/model/common/ad_calculations.rb +329 -0
  18. data/lib/neuron-client/model/common/ad_zone.rb +17 -0
  19. data/lib/neuron-client/model/common/base.rb +67 -0
  20. data/lib/neuron-client/model/common/blocked_referer.rb +16 -0
  21. data/lib/neuron-client/model/common/blocked_user_agent.rb +16 -0
  22. data/lib/neuron-client/model/common/geo_target.rb +16 -0
  23. data/lib/neuron-client/model/common/report.rb +21 -0
  24. data/lib/neuron-client/model/common/s3_file.rb +16 -0
  25. data/lib/neuron-client/model/common/zone.rb +22 -0
  26. data/lib/neuron-client/model/common/zone_calculations.rb +41 -0
  27. data/lib/neuron-client/model/membase/ad.rb +31 -0
  28. data/lib/neuron-client/model/membase/ad_zone.rb +11 -0
  29. data/lib/neuron-client/model/membase/blocked_referer.rb +18 -0
  30. data/lib/neuron-client/model/membase/blocked_user_agent.rb +18 -0
  31. data/lib/neuron-client/model/membase/geo_target.rb +11 -0
  32. data/lib/neuron-client/model/membase/report.rb +11 -0
  33. data/lib/neuron-client/model/membase/s3_file.rb +11 -0
  34. data/lib/neuron-client/model/membase/zone.rb +19 -0
  35. data/lib/neuron-client/model/models.rb +14 -0
  36. data/lib/neuron-client/version.rb +1 -1
  37. data/neuron-client.gemspec +18 -11
  38. data/spec/fixtures/vcr_cassettes/s3_file.yml +186 -4
  39. data/spec/lib/admin_connection_spec.rb +82 -0
  40. data/spec/lib/api_spec.rb +80 -0
  41. data/spec/lib/membase_connection_spec.rb +27 -0
  42. data/spec/lib/model/admin/ad_spec.rb +34 -0
  43. data/spec/lib/model/admin/ad_zone_spec.rb +19 -0
  44. data/spec/lib/model/admin/base_spec.rb +11 -0
  45. data/spec/lib/model/admin/blocked_referer_spec.rb +11 -0
  46. data/spec/lib/model/admin/blocked_user_agent_spec.rb +11 -0
  47. data/spec/lib/model/admin/geo_target_spec.rb +30 -0
  48. data/spec/lib/model/admin/report_spec.rb +21 -0
  49. data/spec/lib/model/admin/s3_spec.rb +11 -0
  50. data/spec/lib/model/admin/zone_spec.rb +21 -0
  51. data/spec/lib/model/base_spec.rb +89 -0
  52. data/spec/lib/model/common/ad_calculations_spec.rb +1148 -0
  53. data/spec/lib/model/common/ad_spec.rb +11 -0
  54. data/spec/lib/model/common/ad_zone_spec.rb +11 -0
  55. data/spec/lib/model/common/base_spec.rb +11 -0
  56. data/spec/lib/model/common/blocked_referer_spec.rb +11 -0
  57. data/spec/lib/model/common/blocked_user_agent_spec.rb +11 -0
  58. data/spec/lib/model/common/geo_target_spec.rb +11 -0
  59. data/spec/lib/model/common/report_spec.rb +11 -0
  60. data/spec/lib/model/common/s3_spec.rb +11 -0
  61. data/spec/lib/model/common/zone_calculations_spec.rb +54 -0
  62. data/spec/lib/model/common/zone_spec.rb +11 -0
  63. data/spec/lib/model/membase/ad_spec.rb +50 -0
  64. data/spec/lib/model/membase/ad_zone_spec.rb +11 -0
  65. data/spec/lib/model/membase/base_spec.rb +11 -0
  66. data/spec/lib/model/membase/blocked_referer_spec.rb +30 -0
  67. data/spec/lib/model/membase/blocked_user_agent_spec.rb +30 -0
  68. data/spec/lib/model/membase/geo_target_spec.rb +11 -0
  69. data/spec/lib/model/membase/report_spec.rb +11 -0
  70. data/spec/lib/model/membase/s3_spec.rb +11 -0
  71. data/spec/lib/model/membase/zone_spec.rb +28 -0
  72. data/spec/lib/old_spec.rb +192 -149
  73. data/spec/lib/s3_file_spec.rb +45 -42
  74. data/spec/spec_helper.rb +2 -1
  75. metadata +296 -57
  76. data/lib/neuron-client/ad.rb +0 -39
  77. data/lib/neuron-client/ad_zone.rb +0 -16
  78. data/lib/neuron-client/blocked_referer.rb +0 -12
  79. data/lib/neuron-client/blocked_user_agent.rb +0 -12
  80. data/lib/neuron-client/connected.rb +0 -138
  81. data/lib/neuron-client/geo_target.rb +0 -16
  82. data/lib/neuron-client/real_time_stats.rb +0 -0
  83. data/lib/neuron-client/report.rb +0 -20
  84. data/lib/neuron-client/s3_file.rb +0 -10
  85. data/lib/neuron-client/zone.rb +0 -16
@@ -37,7 +37,46 @@
37
37
  set-cookie:
38
38
  - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNTkyMGNkZGRkZGEzMmI3ODFiMDhlZjI3ZjZjN2Y5ZTY%3D--abc9759030ac57f081014793dd0a18200acd40ce;
39
39
  path=/; HttpOnly
40
- body: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
40
+ body: !str
41
+ str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
42
+ net_http_res: &30964600 !ruby/object:Net::HTTPCreated
43
+ http_version: '1.0'
44
+ code: '201'
45
+ message: Created
46
+ header:
47
+ location:
48
+ - http://127.0.0.1:3000/s3_files/1
49
+ content-type:
50
+ - application/json; charset=utf-8
51
+ cache-control:
52
+ - no-cache
53
+ x-ua-compatible:
54
+ - IE=Edge
55
+ x-runtime:
56
+ - '2.156203'
57
+ server:
58
+ - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
59
+ date:
60
+ - Tue, 26 Jul 2011 21:15:03 GMT
61
+ content-length:
62
+ - '156'
63
+ set-cookie:
64
+ - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNTkyMGNkZGRkZGEzMmI3ODFiMDhlZjI3ZjZjN2Y5ZTY%3D--abc9759030ac57f081014793dd0a18200acd40ce;
65
+ path=/; HttpOnly
66
+ body: !str
67
+ str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
68
+ net_http_res: *30964600
69
+ args: &30979260
70
+ :method: :post
71
+ :url: http://127.0.0.1:3000/s3_files.json?api_key=secret
72
+ :payload: ! '{"s3_file":{"bucket":"test","filename":"filename","purpose":"RAW_EVENT_LOG"}}'
73
+ :headers:
74
+ :content_type: :json
75
+ :accept: :json
76
+ code: 201
77
+ read: true
78
+ args: *30979260
79
+ code: 201
41
80
  http_version: '1.1'
42
81
  - !ruby/struct:VCR::HTTPInteraction
43
82
  request: !ruby/struct:VCR::Request
@@ -72,7 +111,42 @@
72
111
  - Tue, 26 Jul 2011 21:15:03 GMT
73
112
  content-length:
74
113
  - '158'
75
- body: ! '[{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}]'
114
+ body: !str
115
+ str: ! '[{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}]'
116
+ net_http_res: &30899300 !ruby/object:Net::HTTPOK
117
+ http_version: '1.0'
118
+ code: '200'
119
+ message: OK
120
+ header:
121
+ content-type:
122
+ - application/json; charset=utf-8
123
+ etag:
124
+ - ! '"f28f9f731f02abb52de52eeb140f3904"'
125
+ cache-control:
126
+ - max-age=0, private, must-revalidate
127
+ x-ua-compatible:
128
+ - IE=Edge
129
+ x-runtime:
130
+ - '0.058083'
131
+ server:
132
+ - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
133
+ date:
134
+ - Tue, 26 Jul 2011 21:15:03 GMT
135
+ content-length:
136
+ - '158'
137
+ body: !str
138
+ str: ! '[{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}]'
139
+ net_http_res: *30899300
140
+ args: &30918140
141
+ :method: :get
142
+ :url: http://127.0.0.1:3000/s3_files.json?api_key=secret
143
+ :headers:
144
+ :content_type: :json
145
+ :accept: :json
146
+ code: 200
147
+ read: true
148
+ args: *30918140
149
+ code: 200
76
150
  http_version: '1.1'
77
151
  - !ruby/struct:VCR::HTTPInteraction
78
152
  request: !ruby/struct:VCR::Request
@@ -107,7 +181,42 @@
107
181
  - Tue, 26 Jul 2011 21:15:03 GMT
108
182
  content-length:
109
183
  - '156'
110
- body: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
184
+ body: !str
185
+ str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
186
+ net_http_res: &30863640 !ruby/object:Net::HTTPOK
187
+ http_version: '1.0'
188
+ code: '200'
189
+ message: OK
190
+ header:
191
+ content-type:
192
+ - application/json; charset=utf-8
193
+ etag:
194
+ - ! '"67aa857a0fae3ef759591bfd7c6ce984"'
195
+ cache-control:
196
+ - max-age=0, private, must-revalidate
197
+ x-ua-compatible:
198
+ - IE=Edge
199
+ x-runtime:
200
+ - '0.058488'
201
+ server:
202
+ - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
203
+ date:
204
+ - Tue, 26 Jul 2011 21:15:03 GMT
205
+ content-length:
206
+ - '156'
207
+ body: !str
208
+ str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
209
+ net_http_res: *30863640
210
+ args: &30882500
211
+ :method: :get
212
+ :url: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
213
+ :headers:
214
+ :content_type: :json
215
+ :accept: :json
216
+ code: 200
217
+ read: true
218
+ args: *30882500
219
+ code: 200
111
220
  http_version: '1.1'
112
221
  - !ruby/struct:VCR::HTTPInteraction
113
222
  request: !ruby/struct:VCR::Request
@@ -142,7 +251,42 @@
142
251
  - Tue, 26 Jul 2011 21:15:03 GMT
143
252
  content-length:
144
253
  - '156'
145
- body: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
254
+ body: !str
255
+ str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
256
+ net_http_res: &30800000 !ruby/object:Net::HTTPOK
257
+ http_version: '1.0'
258
+ code: '200'
259
+ message: OK
260
+ header:
261
+ content-type:
262
+ - application/json; charset=utf-8
263
+ etag:
264
+ - ! '"67aa857a0fae3ef759591bfd7c6ce984"'
265
+ cache-control:
266
+ - max-age=0, private, must-revalidate
267
+ x-ua-compatible:
268
+ - IE=Edge
269
+ x-runtime:
270
+ - '0.103646'
271
+ server:
272
+ - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
273
+ date:
274
+ - Tue, 26 Jul 2011 21:15:03 GMT
275
+ content-length:
276
+ - '156'
277
+ body: !str
278
+ str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
279
+ net_http_res: *30800000
280
+ args: &30814500
281
+ :method: :get
282
+ :url: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
283
+ :headers:
284
+ :content_type: :json
285
+ :accept: :json
286
+ code: 200
287
+ read: true
288
+ args: *30814500
289
+ code: 200
146
290
  http_version: '1.1'
147
291
  - !ruby/struct:VCR::HTTPInteraction
148
292
  request: !ruby/struct:VCR::Request
@@ -219,3 +363,41 @@
219
363
  - '158'
220
364
  body: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename_2","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
221
365
  http_version: '1.1'
366
+ - !ruby/struct:VCR::HTTPInteraction
367
+ request: !ruby/struct:VCR::Request
368
+ method: :put
369
+ uri: http://127.0.0.1:3000//1.json?api_key=secret
370
+ body: !!null
371
+ headers:
372
+ accept:
373
+ - application/json
374
+ accept-encoding:
375
+ - gzip, deflate
376
+ content-type:
377
+ - application/json
378
+ content-length:
379
+ - '30'
380
+ response: !ruby/struct:VCR::Response
381
+ status: !ruby/struct:VCR::ResponseStatus
382
+ code: 404
383
+ message: Not Found
384
+ headers:
385
+ content-type:
386
+ - text/html
387
+ content-length:
388
+ - '627'
389
+ x-runtime:
390
+ - '0.299115'
391
+ connection:
392
+ - keep-alive
393
+ server:
394
+ - thin 1.2.11 codename Bat-Shit Crazy
395
+ body: ! "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <title>Action
396
+ Controller: Exception caught</title>\n <style>\n body { background-color:
397
+ #fff; color: #333; }\n\n body, p, ol, ul, td {\n font-family: verdana,
398
+ arial, helvetica, sans-serif;\n font-size: 13px;\n line-height:
399
+ 18px;\n }\n\n pre {\n background-color: #eee;\n padding: 10px;\n
400
+ \ font-size: 11px;\n }\n\n a { color: #000; }\n a:visited { color:
401
+ #666; }\n a:hover { color: #fff; background-color:#000; }\n </style>\n</head>\n<body>\n\n<h1>Routing
402
+ Error</h1>\n<p><pre>No route matches &quot;/1.json&quot;</pre></p>\n\n\n\n</body>\n</html>\n"
403
+ http_version: '1.1'
@@ -0,0 +1,82 @@
1
+ module Neuron
2
+ module Client
3
+ describe AdminConnection do
4
+ describe "initialize(url, key)" do
5
+ it "should set the appropriate instance variables"
6
+ end
7
+
8
+ describe "query_string(attrs={})" do
9
+ it "should return the expected value"
10
+ end
11
+
12
+ describe "get(path="", attrs={})" do
13
+ context "when response.code is 200" do
14
+ context "when the format is :json" do
15
+ it "should call the expected methods and return the expected value"
16
+ end
17
+ end
18
+ context "when response.code is not 200" do
19
+ it "it should raise an error"
20
+ end
21
+ end
22
+
23
+ describe "post(path="", form={}, attrs={})" do
24
+ context "when response.code is 201" do
25
+ context "when the format is :json" do
26
+ it "should call the expected methods and return the expected value"
27
+ end
28
+ context "when the format is not :json" do
29
+ it "should call the expected methods and return the expected value"
30
+ end
31
+ end
32
+ context "when response.code is 422" do
33
+ context "when the format is :json" do
34
+ it "should throw the expected symbol and object"
35
+ end
36
+ context "when the format is not :json" do
37
+ it "should throw the expected symbol and object"
38
+ end
39
+ end
40
+ context "when response.code is not 201 or 422" do
41
+ it "should raise an error"
42
+ end
43
+ end
44
+
45
+ describe "put(path="", form={}, attrs={})" do
46
+ context "when response.code is 200" do
47
+ context "when the format is :json" do
48
+ it "should call the expected methods and return the expected value"
49
+ end
50
+ context "when the format is not :json" do
51
+ it "should call the expected methods and return the expected value"
52
+ end
53
+ end
54
+ context "when response.code is 422" do
55
+ context "when the format is :json" do
56
+ it "should throw the expected symbol and object"
57
+ end
58
+ context "when the format is not :json" do
59
+ it "should throw the expected symbol and object"
60
+ end
61
+ end
62
+ context "when response.code is not 200 or 422" do
63
+ it "should raise an error"
64
+ end
65
+ end
66
+
67
+ describe "delete(path="", attrs={})" do
68
+ context "when response.code is 200" do
69
+ context "when format is :json" do
70
+ it "should call the expected methods and return the expected value"
71
+ end
72
+ context "when format is not :json" do
73
+ it "should call the expected methods and return the expected value"
74
+ end
75
+ end
76
+ context "when response.code is not 200" do
77
+ it "should raise an error"
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,80 @@
1
+ module Neuron
2
+ module Client
3
+ describe API do
4
+ describe "configure" do
5
+ context "when connection_type is :admin" do
6
+ it "should call the expected methods" do
7
+ a = API.new
8
+ c = stub(:config)
9
+ a.should_receive(:config).exactly(4).times.and_return(c)
10
+ c.should_receive(:connection_type=).with(:admin)
11
+ a.should_receive(:inclusion).with(c, :connection_type, [:admin, :membase])
12
+ c.should_receive(:connection_type).exactly(2).times.and_return(:admin)
13
+ a.should_receive(:configure_admin_connection)
14
+
15
+ a.configure do |conf|
16
+ conf.connection_type = :admin
17
+ end
18
+ end
19
+ end
20
+ context "when connection_type is :membase" do
21
+ it "should call the expected methods" do
22
+ a = API.new
23
+ c = stub(:config)
24
+ a.should_receive(:config).exactly(4).times.and_return(c)
25
+ c.should_receive(:connection_type=).with(:membase)
26
+ a.should_receive(:inclusion).with(c, :connection_type, [:admin, :membase])
27
+ c.should_receive(:connection_type).exactly(2).times.and_return(:membase)
28
+ a.should_receive(:configure_membase_connection)
29
+
30
+ a.configure do |conf|
31
+ conf.connection_type = :membase
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "connection_type" do
38
+ it "should return the expected value"
39
+ end
40
+
41
+ describe "config" do
42
+ it "should return the expected value"
43
+ end
44
+
45
+ describe "required(obj, attrib)" do
46
+ context "when val is nil" do
47
+ it "should call the expected methods and raise an error"
48
+ end
49
+ context "when val is not nil and val.empty? does not exist" do
50
+ it "should call the expected methods and not raise an error"
51
+ end
52
+ context "when val is not nil and val.empty? exists and returns true" do
53
+ it "should call the expected methods and raise an error"
54
+ end
55
+ end
56
+
57
+ describe "inclusion(obj, attrib, valid_values)" do
58
+ context "when valid_values includes the attribute value" do
59
+ it "should not raise an error"
60
+ end
61
+ context "when valid_values does not include the attribute value" do
62
+ it "should raise an error"
63
+ end
64
+ end
65
+
66
+ describe "configure_admin_connection" do
67
+ context "when URI.parse raises an error" do
68
+ it "should raise a custom error"
69
+ end
70
+ context "when URI.parse does not raise an error" do
71
+ it "should call the expected methods"
72
+ end
73
+ end
74
+
75
+ describe "configure_membase_connection" do
76
+ it "should call the expected methods"
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,27 @@
1
+ module Neuron
2
+ module Client
3
+ describe MembaseConnection do
4
+ describe "initialize(servers)" do
5
+ it "should properly set @membase" do
6
+ c = stub(:client)
7
+ Dalli::Client.should_receive(:new).with('127.0.0.1:11211').and_return(c)
8
+
9
+ m = MembaseConnection.new('127.0.0.1:11211')
10
+
11
+ m.instance_variable_get(:@client).should == c
12
+ end
13
+ end
14
+
15
+ describe "get(key)" do
16
+ it "should call the expected method and return the expected value" do
17
+ m = MembaseConnection.allocate
18
+ c = stub(:client)
19
+ m.instance_variable_set(:@client, c)
20
+ c.should_receive(:get).with('key_value')
21
+
22
+ m.get('key_value')
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Admin
5
+ describe Ad do
6
+ describe "recent(statistic, parameters)" do
7
+ it "should call the expecte method and return the expected result" do
8
+ a = Ad.allocate
9
+ c = stub(:connection)
10
+ a.class.should_receive(:connection).and_return(c)
11
+ a.should_receive(:id).and_return(7)
12
+ p = stub(:parameters)
13
+ c.should_receive(:get).with('ads/7/recent/statistic_value', p).and_return('return_value')
14
+
15
+ a.recent('statistic_value', p).should == 'return_value'
16
+ end
17
+ end
18
+
19
+ describe "unlink(ad_id)" do
20
+ it "should call the expected method and return the expected result" do
21
+ a = Ad.allocate
22
+ c = stub(:connection)
23
+ a.class.should_receive(:connection).and_return(c)
24
+ a.should_receive(:id).and_return(7)
25
+ c.should_receive(:delete).with('ads/7/zones/33').and_return('return_value')
26
+
27
+ a.unlink(33).should == 'return_value'
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Admin
5
+ describe AdZone do
6
+ describe "self.unlink(ad_id, zone_id)" do
7
+ it "should call the expected method and return the expected value" do
8
+ c = stub(:connection)
9
+ AdZone.should_receive(:connection).and_return(c)
10
+ c.should_receive(:delete).with('zones/1/ads/2').and_return('return_value')
11
+
12
+ AdZone.unlink(2, 1).should == 'return_value'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end