neuron-client 0.0.3 → 0.0.4

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 CHANGED
@@ -2,3 +2,5 @@ source :rubygems
2
2
 
3
3
  # Specify your gem's dependencies in neuron-client.gemspec
4
4
  gemspec
5
+
6
+ gem 'rake'
@@ -11,7 +11,7 @@ module Neuron
11
11
  :redirect_url,
12
12
  # video
13
13
  :video_api_url, :video_setup_xml, :video_flv_url,
14
- :video_clickthru_url, :video_companion_ad_html,
14
+ :video_clickthru_url, :video_companion_ad_html, :social_links,
15
15
  # caps
16
16
  :frequency_cap_limit, :frequency_cap_window, :overall_cap,
17
17
  :daily_cap, :day_partitions, :ideal_impressions_per_hour,
@@ -37,4 +37,4 @@ module Neuron
37
37
  end
38
38
  end
39
39
  end
40
- end
40
+ end
@@ -8,7 +8,7 @@ module Neuron
8
8
  end
9
9
 
10
10
  def attributes
11
- self.class.attributes
11
+ self.class.attributes || []
12
12
  end
13
13
 
14
14
  def to_hash
@@ -24,19 +24,29 @@ module Neuron
24
24
  end
25
25
 
26
26
  def save
27
- if new_record?
28
- response = self.class.connection.post("#{self.class.resources_name}", {self.class.resource_name => self.to_hash})
29
- else
30
- response = self.class.connection.put("#{self.class.resources_name}/#{id}", {self.class.resource_name => self.to_hash})
31
- self.id = response[self.resource_name]['id']
27
+ @errors = catch :errors do
28
+ if new_record?
29
+ response = self.class.connection.post("#{self.class.resources_name}", {self.class.resource_name => self.to_hash})
30
+ self.id = response[self.class.resource_name]['id']
31
+ else
32
+ response = self.class.connection.put("#{self.class.resources_name}/#{id}", {self.class.resource_name => self.to_hash})
33
+ end
34
+ []
32
35
  end
36
+
37
+ @errors.empty?
33
38
  end
34
39
 
35
40
  def update_attributes(attrs={})
36
- response = self.class.connection.put("#{self.class.resources_name}/#{id}", {self.class.resource_name => attrs})
37
- attrs.each do |key, value|
38
- self.send("#{key}=", value) if self.respond_to?("#{key}=")
41
+ @errors = catch :errors do
42
+ response = self.class.connection.put("#{self.class.resources_name}/#{id}", {self.class.resource_name => attrs})
43
+ attrs.each do |key, value|
44
+ self.send("#{key}=", value) if self.respond_to?("#{key}=")
45
+ end
46
+ []
39
47
  end
48
+
49
+ @errors.empty?
40
50
  end
41
51
 
42
52
  def destroy
@@ -45,6 +55,7 @@ module Neuron
45
55
 
46
56
  def self.included(base)
47
57
  base.send(:attr_accessor, :id)
58
+ base.send(:attr_accessor, :errors)
48
59
  base.extend(ClassMethods)
49
60
  end
50
61
 
@@ -97,6 +108,13 @@ module Neuron
97
108
  end
98
109
 
99
110
  def create(attrs={})
111
+ @errors = catch (:errors) do
112
+ return create!(attrs)
113
+ end
114
+ nil
115
+ end
116
+
117
+ def create!(attrs={})
100
118
  response = self.connection.post("#{self.resources_name}", {self.resource_name => attrs})
101
119
  self.new(response[self.resource_name])
102
120
  end
@@ -43,6 +43,8 @@ module Neuron
43
43
  case response.code
44
44
  when 201
45
45
  return (format == :json ? Yajl.load(response.to_str) : response.to_str)
46
+ when 422
47
+ throw :errors, Yajl.load(response.to_str)
46
48
  else
47
49
  raise "Error : #{response.code} - #{response.to_str}"
48
50
  end
@@ -57,6 +59,8 @@ module Neuron
57
59
  case response.code
58
60
  when 200
59
61
  return (format == :json ? Yajl.load(response.to_str) : response.to_str)
62
+ when 422
63
+ throw :errors, Yajl.load(response.to_str)
60
64
  else
61
65
  raise "Error : #{response.code} - #{response.to_str}"
62
66
  end
@@ -1,5 +1,5 @@
1
1
  module Neuron
2
2
  module Client
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
data/spec/lib/old_spec.rb CHANGED
@@ -168,6 +168,132 @@ module Neuron
168
168
  end
169
169
  end
170
170
 
171
+ describe Connected do
172
+ class ConnectedTest
173
+ include Connected
174
+ resource_name 'connection'
175
+ resources_name 'connection'
176
+ end
177
+
178
+ before(:each) do
179
+ @connection = stub(:connection)
180
+ API.stub(:connection).and_return(@connection)
181
+ end
182
+
183
+ describe "update_attributes" do
184
+ it "should return false when errors occur for updated objects" do
185
+ @connection.should_receive(:put).with("connection/1", {'connection' => {}}) do
186
+ throw :errors, {:error => "is required"}
187
+ end
188
+
189
+ ConnectedTest.new(:id => 1).update_attributes({}).should be_false
190
+ end
191
+
192
+ it "should provide access to errors when validation fails" do
193
+ @connection.should_receive(:put).with("connection/1", {'connection' => {}}) do
194
+ throw :errors, {:error => "is required"}
195
+ end
196
+
197
+ c = ConnectedTest.new(:id => 1)
198
+ c.update_attributes({}).should be_false
199
+ c.errors.should == {:error => "is required"}
200
+ end
201
+
202
+ it "should return true when errors do not occure for updated objects" do
203
+ @connection.should_receive(:put).with("connection/1", {'connection' => {}})
204
+
205
+ ConnectedTest.new(:id => 1).update_attributes({}).should be_true
206
+ end
207
+ end
208
+
209
+ describe "save" do
210
+ it "should return false when errors occur for new objects" do
211
+ @connection.should_receive(:post).with("connection", {'connection' => {}}) do
212
+ throw :errors, {:error => "is required"}
213
+ end
214
+
215
+ ConnectedTest.new.save.should be_false
216
+ end
217
+
218
+ it "should provide access to errors when validation fails" do
219
+ @connection.should_receive(:post).with("connection", {'connection' => {}}) do
220
+ throw :errors, {:error => "is required"}
221
+ end
222
+
223
+ c = ConnectedTest.new
224
+ c.save.should be_false
225
+ c.errors.should == {:error => "is required"}
226
+ end
227
+
228
+ it "should return true when errors do not occur for new objects" do
229
+ @connection.should_receive(:post).with("connection", {'connection' => {}}).and_return({'connection' => {:id => 1}})
230
+
231
+ ConnectedTest.new.save.should be_true
232
+ end
233
+
234
+ it "should return false when errors occur for existing objects" do
235
+ @connection.should_receive(:put).with('connection/1', {'connection' => {}}) do
236
+ throw :errors, {:error => "is required"}
237
+ end
238
+
239
+ ConnectedTest.new(:id => 1).save.should be_false
240
+ end
241
+
242
+ it "should provide access to errors when validation fails" do
243
+ @connection.should_receive(:put).with("connection/1", {'connection' => {}}) do
244
+ throw :errors, {:error => "is required"}
245
+ end
246
+
247
+ c = ConnectedTest.new(:id => 1)
248
+ c.save.should be_false
249
+ c.errors.should == {:error => "is required"}
250
+ end
251
+
252
+ it "should return true when errors do not occur for existing objects" do
253
+ @connection.should_receive(:put).with("connection/1", {'connection' => {}})
254
+
255
+ ConnectedTest.new(:id => 1).save.should be_true
256
+ end
257
+ end
258
+
259
+ describe "create" do
260
+ it "should return nil when errors occur" do
261
+ @connection.should_receive(:post).with("connection", {'connection' => {}}) do
262
+ throw :errors, {:error => "is_required"}
263
+ end
264
+
265
+ ConnectedTest.create({}).should be_nil
266
+ end
267
+
268
+ it "should return the created object when no errors occur" do
269
+ @connection.should_receive(:post).with("connection", {'connection' => {}}).and_return({'connection' => {:id => 1}})
270
+
271
+ ConnectedTest.create({}).should be_a ConnectedTest
272
+ end
273
+ end
274
+
275
+ describe "create!" do
276
+ it "should return nil when errors occur" do
277
+ @connection.should_receive(:post).with("connection", {'connection' => {}}) do
278
+ throw :errors, {:error => "is_required"}
279
+ end
280
+
281
+ errors = catch(:errors) do
282
+ ConnectedTest.create!({})
283
+ nil
284
+ end
285
+ errors.should_not be_nil
286
+ errors.should == {:error => 'is_required'}
287
+ end
288
+
289
+ it "should return the created object when no errors occur" do
290
+ @connection.should_receive(:post).with("connection", {'connection' => {}}).and_return({'connection' => {:id => 1}})
291
+
292
+ ConnectedTest.create!({}).should be_a ConnectedTest
293
+ end
294
+ end
295
+ end
296
+
171
297
  describe Connection do
172
298
  before(:each) do
173
299
  @connection = Connection.new('http://neuron.admin', "my_api_key")
@@ -209,6 +335,16 @@ module Neuron
209
335
  @connection.post("test", {:data => 1})
210
336
  end.should raise_error
211
337
  end
338
+
339
+ it "should throw :errors if validation fails" do
340
+ FakeWeb.register_uri(:post, "http://neuron.admin/test.json?api_key=my_api_key", :body => Yajl.dump({:my_field => 'is_required'}), :status => ["422", "Errors"])
341
+ errors = catch(:errors) do
342
+ value = @connection.post("test", {:data => 1})
343
+ nil
344
+ end
345
+ errors.should_not be_nil
346
+ errors.should == {'my_field' => 'is_required'}
347
+ end
212
348
  end
213
349
 
214
350
  describe "put" do
@@ -225,6 +361,16 @@ module Neuron
225
361
  @connection.put("test", {:data => 1})
226
362
  end.should raise_error
227
363
  end
364
+
365
+ it "should throw :errors if validation fails" do
366
+ FakeWeb.register_uri(:put, "http://neuron.admin/test.json?api_key=my_api_key", :body => Yajl.dump({:my_field => 'is_required'}), :status => ["422", "Errors"])
367
+ errors = catch(:errors) do
368
+ value = @connection.put("test", {:data => 1})
369
+ nil
370
+ end
371
+ errors.should_not be_nil
372
+ errors.should == {'my_field' => 'is_required'}
373
+ end
228
374
  end
229
375
 
230
376
  describe "delete" do
metadata CHANGED
@@ -1,135 +1,138 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: neuron-client
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.3
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.0.4
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Mark Simoneau
9
9
  - Chris Johnson
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-08-01 00:00:00.000000000 -05:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
13
+
14
+ date: 2011-08-03 00:00:00 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
17
  name: rest-client
18
- requirement: &2157689420 !ruby/object:Gem::Requirement
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
19
  none: false
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
23
  version: 1.6.3
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *2157689420
27
- - !ruby/object:Gem::Dependency
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
28
  name: yajl-ruby
29
- requirement: &2157688920 !ruby/object:Gem::Requirement
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
30
  none: false
31
- requirements:
32
- - - ! '>='
33
- - !ruby/object:Gem::Version
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
34
  version: 0.8.2
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *2157688920
38
- - !ruby/object:Gem::Dependency
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
39
  name: rspec
40
- requirement: &2157688460 !ruby/object:Gem::Requirement
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
41
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
45
  version: 2.6.0
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *2157688460
49
- - !ruby/object:Gem::Dependency
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
50
  name: simplecov
51
- requirement: &2157688000 !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
52
  none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
56
  version: 0.4.2
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *2157688000
60
- - !ruby/object:Gem::Dependency
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
61
  name: rb-fsevent
62
- requirement: &2157687500 !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
63
  none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
67
  version: 0.4.1
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *2157687500
71
- - !ruby/object:Gem::Dependency
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
72
  name: guard
73
- requirement: &2157687040 !ruby/object:Gem::Requirement
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
74
  none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
78
  version: 0.5.1
79
79
  type: :development
80
80
  prerelease: false
81
- version_requirements: *2157687040
82
- - !ruby/object:Gem::Dependency
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
83
  name: guard-bundler
84
- requirement: &2157686580 !ruby/object:Gem::Requirement
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
85
  none: false
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
89
  version: 0.1.3
90
90
  type: :development
91
91
  prerelease: false
92
- version_requirements: *2157686580
93
- - !ruby/object:Gem::Dependency
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
94
  name: guard-rspec
95
- requirement: &2157686120 !ruby/object:Gem::Requirement
95
+ requirement: &id008 !ruby/object:Gem::Requirement
96
96
  none: false
97
- requirements:
98
- - - ! '>='
99
- - !ruby/object:Gem::Version
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
100
  version: 0.4.0
101
101
  type: :development
102
102
  prerelease: false
103
- version_requirements: *2157686120
104
- - !ruby/object:Gem::Dependency
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
105
  name: fakeweb
106
- requirement: &2157685660 !ruby/object:Gem::Requirement
106
+ requirement: &id009 !ruby/object:Gem::Requirement
107
107
  none: false
108
- requirements:
109
- - - ! '>='
110
- - !ruby/object:Gem::Version
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
111
  version: 1.3.0
112
112
  type: :development
113
113
  prerelease: false
114
- version_requirements: *2157685660
115
- - !ruby/object:Gem::Dependency
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
116
  name: vcr
117
- requirement: &2157685200 !ruby/object:Gem::Requirement
117
+ requirement: &id010 !ruby/object:Gem::Requirement
118
118
  none: false
119
- requirements:
120
- - - ! '>='
121
- - !ruby/object:Gem::Version
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
122
  version: 1.10.2
123
123
  type: :development
124
124
  prerelease: false
125
- version_requirements: *2157685200
125
+ version_requirements: *id010
126
126
  description: Neuron Admin Client Gem
127
- email:
127
+ email:
128
128
  - devteam@rmmonline.com
129
129
  executables: []
130
+
130
131
  extensions: []
132
+
131
133
  extra_rdoc_files: []
132
- files:
134
+
135
+ files:
133
136
  - .gitignore
134
137
  - .rvmrc
135
138
  - Gemfile
@@ -154,32 +157,40 @@ files:
154
157
  - spec/lib/old_spec.rb
155
158
  - spec/lib/s3_file_spec.rb
156
159
  - spec/spec_helper.rb
157
- has_rdoc: true
158
160
  homepage: http://github.com/rmm/neuron-client
159
161
  licenses: []
162
+
160
163
  post_install_message:
161
164
  rdoc_options: []
162
- require_paths:
165
+
166
+ require_paths:
163
167
  - lib
164
- required_ruby_version: !ruby/object:Gem::Requirement
168
+ required_ruby_version: !ruby/object:Gem::Requirement
165
169
  none: false
166
- requirements:
167
- - - ! '>='
168
- - !ruby/object:Gem::Version
169
- version: '0'
170
- required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ hash: 3235199418878311580
174
+ segments:
175
+ - 0
176
+ version: "0"
177
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
178
  none: false
172
- requirements:
173
- - - ! '>='
174
- - !ruby/object:Gem::Version
175
- version: '0'
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ hash: 3235199418878311580
183
+ segments:
184
+ - 0
185
+ version: "0"
176
186
  requirements: []
187
+
177
188
  rubyforge_project: neuron-client
178
- rubygems_version: 1.6.2
189
+ rubygems_version: 1.8.4
179
190
  signing_key:
180
191
  specification_version: 3
181
192
  summary: Neuron Admin Client Gem
182
- test_files:
193
+ test_files:
183
194
  - spec/fixtures/vcr_cassettes/s3_file.yml
184
195
  - spec/lib/old_spec.rb
185
196
  - spec/lib/s3_file_spec.rb