neuron-client 0.1.0 → 0.2.0

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.
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
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe Ad do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe AdZone do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe Base do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe BlockedReferer do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe BlockedUserAgent do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe GeoTarget do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe Report do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe S3File do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,54 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ class FakeZone
6
+ include ZoneCalculations
7
+ def initialize(ads, ad_links)
8
+ @ads = ads
9
+ @ad_links = ad_links
10
+ end
11
+ attr_reader :ad_links
12
+ def find_ad(ad_id)
13
+ @ads[ad_id]
14
+ end
15
+ end
16
+
17
+ class ZoneCalculationSpecAd
18
+ def initialize(active, pressure)
19
+ @active = active
20
+ @pressure = pressure
21
+ end
22
+ attr_reader :pressure, :active
23
+ alias_method :active?, :active
24
+ end
25
+
26
+ describe ZoneCalculations do
27
+ describe ".calculate_ads_by_priority" do
28
+ it "should generate the expected result" do
29
+ ads = {
30
+ "0" => ZoneCalculationSpecAd.new(false, 42.0),
31
+ "1" => ZoneCalculationSpecAd.new(true, 11.1),
32
+ "2" => ZoneCalculationSpecAd.new(true, 11.1),
33
+ "3" => ZoneCalculationSpecAd.new(true, 22.2),
34
+ "4" => ZoneCalculationSpecAd.new(true, 1000),
35
+ "5" => ZoneCalculationSpecAd.new(true, 828282)
36
+ }
37
+ ad_links = {
38
+ "0" => {"priority" => 1, "weight" => 50},
39
+ "1" => {"priority" => 1, "weight" => 4},
40
+ "2" => {"priority" => 1, "weight" => 2},
41
+ "3" => {"priority" => 1, "weight" => 2},
42
+ "4" => {"priority" => 2, "weight" => 99.9}
43
+ }
44
+ zone = FakeZone.new(ads, ad_links)
45
+
46
+ zone.calculate_ads_by_priority.should == [[["1", 44.4], ["2", 22.2], ["3", 44.4]], [["4", 99900.0]]]
47
+ end
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Common
5
+ describe Zone do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,50 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe Ad do
6
+ describe "total_impressed" do
7
+ it "should call the expected methods and return the expected value" do
8
+ a = Ad.allocate
9
+ a.should_receive(:id).and_return(7)
10
+ Ad.stub_chain(:connection, :get).with('count_delivery_ad_7').and_return('999.999')
11
+
12
+ a.total_impressed.should == 999.999
13
+ end
14
+ end
15
+
16
+ describe "today_impressed" do
17
+ it "should call the expected methods and return the expected value" do
18
+ a = Ad.allocate
19
+ a.should_receive(:time_zone).and_return('time_zone_value')
20
+ Time.stub_chain(:now, :in_time_zone).with('time_zone_value').and_return(Time.new(2011, 5, 6, 7, 8, 9))
21
+ a.should_receive(:id).and_return(7)
22
+ Ad.stub_chain(:connection, :get).with('count_delivery_20110506_ad_7').and_return('99.99')
23
+
24
+ a.today_impressed.should == 99.99
25
+ end
26
+ end
27
+
28
+ describe "Ad.find(id)" do
29
+ context "when the connection returns a value" do
30
+ it "should call the expected methods and return the expected value" do
31
+ Ad.stub_chain(:connection, :get).with('Ad:7').and_return('{"ad":{"attr":"value","attr2":"value2"}}')
32
+ a = stub(:ad)
33
+ Ad.should_receive(:new).with({'attr' => 'value', 'attr2' => 'value2'}).and_return(a)
34
+
35
+ Ad.find(7).should == a
36
+ end
37
+ end
38
+ context "when the connection returns nil" do
39
+ it "should call the expected methods and return nil" do
40
+ Ad.stub_chain(:connection, :get).with('Ad:7').and_return(nil)
41
+
42
+ Ad.find(7).should be_nil
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe AdZone do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe Base do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe BlockedReferer do
6
+ describe "BlockedReferer.all" do
7
+ context "when connection returns a value" do
8
+ it "should call the expected methods and return the expected value" do
9
+ BlockedReferer.stub_chain(:connection, :get).with('blocked_referers').and_return('[{"blocked_referer":{"attr":"value"}},{"blocked_referer":{"attr2":"value2"}}]')
10
+ br = stub(:blocked_referer)
11
+ br2 = stub(:blocked_referer2)
12
+ BlockedReferer.should_receive(:new).with({'attr' => 'value'}).and_return(br)
13
+ BlockedReferer.should_receive(:new).with({'attr2' => 'value2'}).and_return(br2)
14
+
15
+ BlockedReferer.all.should == [br, br2]
16
+ end
17
+ end
18
+ context "when connection returns nil" do
19
+ it "should call the expected methods and return the expected value" do
20
+ BlockedReferer.stub_chain(:connection, :get).with('blocked_referers').and_return(nil)
21
+
22
+ BlockedReferer.all.should == []
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe BlockedUserAgent do
6
+ describe "BlockedUserAgent.all" do
7
+ context "when connection returns a value" do
8
+ it "should call the expected methods and return the expected value" do
9
+ BlockedUserAgent.stub_chain(:connection, :get).with('blocked_user_agents').and_return('[{"blocked_user_agent":{"attr":"value"}},{"blocked_user_agent":{"attr2":"value2"}}]')
10
+ bua = stub(:blocked_user_agent)
11
+ bua2 = stub(:blocked_user_agent2)
12
+ BlockedUserAgent.should_receive(:new).with({'attr' => 'value'}).and_return(bua)
13
+ BlockedUserAgent.should_receive(:new).with({'attr2' => 'value2'}).and_return(bua2)
14
+
15
+ BlockedUserAgent.all.should == [bua, bua2]
16
+ end
17
+ end
18
+ context "when connection returns nil" do
19
+ it "should call the expected methods and return the expected value" do
20
+ BlockedUserAgent.stub_chain(:connection, :get).with('blocked_user_agents').and_return(nil)
21
+
22
+ BlockedUserAgent.all.should == []
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe GeoTarget do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe Report do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe S3File do
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ module Neuron
2
+ module Client
3
+ module Model
4
+ module Membase
5
+ describe Zone do
6
+ describe "Zone.all" do
7
+ context "when connection.get returns a value" do
8
+ it "should call the expected methods and return the expected result" do
9
+ Zone.stub_chain(:connection, :get).with('Zone:7').and_return('{"zone":{"attr":"value","attr2":"value2"}}')
10
+ z = stub(:zone)
11
+ Zone.should_receive(:new).with({'attr' => 'value', 'attr2' => 'value2'}).and_return(z)
12
+
13
+ Zone.find(7).should == z
14
+ end
15
+ end
16
+ context "when connection.get returns nil" do
17
+ it "should call the expected methods and return nil" do
18
+ Zone.stub_chain(:connection, :get).with('Zone:7').and_return(nil)
19
+
20
+ Zone.find(7).should be_nil
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
data/spec/lib/old_spec.rb CHANGED
@@ -6,280 +6,323 @@ module Neuron
6
6
 
7
7
  describe API do
8
8
  describe "configure" do
9
- it "creates a valid Connection object" do
10
- API.reset!
11
- API.connection.should be_nil
12
- API.configure do |config|
9
+ it "creates a valid AdminConnection object" do
10
+ API.default_api = API.new
11
+ API.default_api.connection.should be_nil
12
+ API.default_api.configure do |config|
13
+ config.connection_type = :admin
13
14
  config.admin_url = "https://example.com"
14
15
  config.admin_key = "secret"
15
16
  end
16
- API.connection.should be_a(Connection)
17
+ API.default_api.connection.should be_a(AdminConnection)
17
18
  end
18
19
  end
19
20
  end
20
21
 
21
- describe AdZone do
22
- before(:each) do
23
- @connection = stub(:connection)
24
- API.stub(:connection).and_return(@connection)
25
- end
26
- describe "create" do
27
- it "makes a post call"
28
- end
29
- end
30
-
31
- describe Ad do
32
- before(:each) do
33
- @connection = stub(:connection)
34
- API.stub(:connection).and_return(@connection)
35
- end
36
-
37
- describe "all" do
22
+ module Model
23
+ describe AdZone do
38
24
  before(:each) do
39
- @response = [{}]
25
+ @connection = stub(:connection)
26
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :admin))
40
27
  end
41
- it "returns a list of Ads" do
42
- @connection.stub(:get).and_return(@response)
43
- ads = Ad.all
44
- ads.should be_a(Array)
45
- ads.length.should be > 0
46
- ads.first.should be_a(Ad)
47
- end
48
-
49
- it "makes a get call" do
50
- @connection.should_receive(:get).with("ads").once.and_return(@response)
51
- Ad.all
28
+ describe "create" do
29
+ it "makes a post call"
52
30
  end
53
31
  end
32
+ end
54
33
 
55
- describe "find" do
34
+ module Model
35
+ describe Ad do
56
36
  before(:each) do
57
- @response = {:ad => {:id => 1, :name => "Ad 1"}}
37
+ @connection = stub(:connection)
38
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :admin))
58
39
  end
59
40
 
60
- it "returns a Ad" do
61
- @connection.stub(:get).and_return(@response)
62
- ad = Ad.find(1)
63
- ad.should be_a(Ad)
64
- end
41
+ describe "all" do
42
+ before(:each) do
43
+ @response = [{}]
44
+ end
45
+ it "returns a list of Ads" do
46
+ @connection.stub(:get).and_return(@response)
47
+ ads = Ad.all
48
+ ads.should be_a(Array)
49
+ ads.length.should be > 0
50
+ ads.first.should be_a(Admin::Ad)
51
+ end
65
52
 
66
- it "makes a get call" do
67
- @connection.should_receive(:get).with("ads/1").once.and_return(@response)
68
- Ad.find(1)
53
+ it "makes a get call" do
54
+ @connection.should_receive(:get).with("ads").once.and_return(@response)
55
+ Ad.all
56
+ end
69
57
  end
70
- end
71
58
 
72
- describe "create" do
73
- before(:each) do
74
- @attrs = {:name => "Ad 1"}
75
- @response = {'ad' => @attrs.merge({:id => 1})}
76
- end
59
+ describe "find" do
60
+ before(:each) do
61
+ @response = {:ad => {:id => 1, :name => "Ad 1"}}
62
+ end
63
+
64
+ it "returns a Ad" do
65
+ @connection.stub(:get).and_return(@response)
66
+ ad = Ad.find(1)
67
+ ad.should be_a(Admin::Ad)
68
+ end
77
69
 
78
- it "posts json" do
79
- @connection.should_receive(:post).with("ads", {'ad' => @attrs}).once.and_return(@response)
80
- Ad.create(@attrs)
70
+ it "makes a get call" do
71
+ @connection.should_receive(:get).with("ads/1").once.and_return(@response)
72
+ Ad.find(1)
73
+ end
81
74
  end
82
75
 
83
- it "returns the created Ad" do
84
- @connection.should_receive(:post).and_return(@response)
85
- ad = Ad.create(@attrs)
86
- ad.id.should == 1
87
- ad.name.should == "Ad 1"
76
+ describe "create" do
77
+ before(:each) do
78
+ @attrs = {:name => "Ad 1"}
79
+ @response = {'ad' => @attrs.merge({:id => 1})}
80
+ end
81
+
82
+ it "posts json" do
83
+ @connection.should_receive(:post).with("ads", {'ad' => @attrs}).once.and_return(@response)
84
+ Ad.create(@attrs)
85
+ end
86
+
87
+ it "returns the created Ad" do
88
+ @connection.should_receive(:post).and_return(@response)
89
+ ad = Ad.create(@attrs)
90
+ ad.id.should == 1
91
+ ad.name.should == "Ad 1"
92
+ end
93
+
94
+ it "returns the created Ad With AdTrackers" do
95
+ @attrs = {:name => "Ad 1", :ad_trackers => [{:url => "http://www.google.com", :event => "video.impression"}]}
96
+ @response = {'ad' => @attrs.merge({:id => 1})}
97
+ @connection.should_receive(:post).and_return(@response)
98
+ ad = Ad.create(@attrs)
99
+ ad.id.should == 1
100
+ ad.name.should == "Ad 1"
101
+ ad.ad_trackers.should have(1).things
102
+ end
88
103
  end
89
- end
90
104
 
91
- describe "update_attributes" do
92
- it "makes a put call" do
93
- attrs = {:id => 1, :name => "Ad 1"}
94
- ad = Ad.new(attrs)
95
- @connection.should_receive(:put).with("ads/1", {'ad' => {:name => "Ad 2"}})
96
- ad.update_attributes(:name => "Ad 2")
105
+ describe "update_attributes" do
106
+ it "makes a put call" do
107
+ attrs = {:id => 1, :name => "Ad 1"}
108
+ ad = Ad.new(attrs)
109
+ @connection.should_receive(:put).with("ads/1", {'ad' => {:name => "Ad 2"}})
110
+ ad.update_attributes(:name => "Ad 2")
111
+ end
112
+
113
+ it "makes a put call with AdTrackers" do
114
+ attrs = {:id => 1, :name => "Ad 1", :ad_trackers => [{:id => 1, :advertiser_id => 1, :url => "http://testurl.com", :event => "video.impression"}]}
115
+ ad = Ad.new(attrs)
116
+ @connection.should_receive(:put).with("ads/1", {'ad' => {:ad => {:ad_trackers => [{:url => "http://testurl.com/new"}]}}})
117
+ ad.update_attributes(:ad => {:ad_trackers => [{:url => "http://testurl.com/new"}]})
118
+ end
97
119
  end
98
120
  end
99
121
  end
100
122
 
101
- describe Zone do
102
- before(:each) do
103
- @connection = stub(:connection)
104
- API.stub(:connection).and_return(@connection)
105
- end
106
- describe "all" do
123
+ module Model
124
+ describe Zone do
107
125
  before(:each) do
108
- @response = [{}]
126
+ @connection = stub(:connection)
127
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :admin))
109
128
  end
129
+ describe "all" do
130
+ before(:each) do
131
+ @response = [{}]
132
+ end
110
133
 
111
- it "returns a list of Zones" do
112
- @connection.stub(:get).and_return(@response)
113
- zones = Zone.all
114
- zones.should be_a(Array)
115
- zones.length.should be > 0
116
- zones.first.should be_a(Zone)
117
- end
134
+ it "returns a list of Zones" do
135
+ @connection.stub(:get).and_return(@response)
136
+ zones = Zone.all
137
+ zones.should be_a(Array)
138
+ zones.length.should be > 0
139
+ zones.first.should be_a(Admin::Zone)
140
+ end
118
141
 
119
- it "makes a get call" do
120
- @connection.should_receive(:get).with("zones").once.and_return(@response)
121
- Zone.all
142
+ it "makes a get call" do
143
+ @connection.should_receive(:get).with("zones").once.and_return(@response)
144
+ Zone.all
145
+ end
122
146
  end
123
- end
124
147
 
125
- describe "find" do
126
- before(:each) do
127
- @response = {:zone => {:id => 1, :slug => "zone1"}}
148
+ describe "find" do
149
+ before(:each) do
150
+ @response = {:zone => {:id => 1, :slug => "zone1"}}
151
+ end
152
+
153
+ it "returns a Zone" do
154
+ @connection.stub(:get).and_return(@response)
155
+ zone = Zone.find(1)
156
+ zone.should be_a(Admin::Zone)
157
+ end
158
+
159
+ it "makes a get call" do
160
+ @connection.should_receive(:get).with("zones/1").once.and_return(@response)
161
+ Zone.find(1)
162
+ end
128
163
  end
129
164
 
130
- it "returns a Zone" do
131
- @connection.stub(:get).and_return(@response)
132
- zone = Zone.find(1)
133
- zone.should be_a(Zone)
165
+ describe "create" do
166
+ before(:each) do
167
+ @attrs = {:slug => "zone1"}
168
+ @response = {'zone' => @attrs.merge({:id => 1})}
169
+ end
170
+
171
+ it "posts json" do
172
+ @connection.should_receive(:post).with("zones", {'zone' => @attrs}).once.and_return(@response)
173
+ Zone.create(@attrs)
174
+ end
175
+
176
+ it "returns the created Ad" do
177
+ @connection.should_receive(:post).and_return(@response)
178
+ zone = Zone.create(@attrs)
179
+ zone.id.should == 1
180
+ zone.slug.should == "zone1"
181
+ end
134
182
  end
135
183
 
136
- it "makes a get call" do
137
- @connection.should_receive(:get).with("zones/1").once.and_return(@response)
138
- Zone.find(1)
184
+ describe "update_attributes" do
185
+ it "makes a put call" do
186
+ attrs = {:id => 1, :slug => "zone1"}
187
+ zone = Zone.new(attrs)
188
+ @connection.should_receive(:put).with("zones/1", {'zone' => {:slug => "zone2"}})
189
+ zone.update_attributes(:slug => "zone2")
190
+ end
139
191
  end
140
192
  end
193
+ end
141
194
 
142
- describe "create" do
143
- before(:each) do
144
- @attrs = {:slug => "zone1"}
145
- @response = {'zone' => @attrs.merge({:id => 1})}
146
- end
147
195
 
148
- it "posts json" do
149
- @connection.should_receive(:post).with("zones", {'zone' => @attrs}).once.and_return(@response)
150
- Zone.create(@attrs)
151
- end
196
+ module Model
197
+ module Common
198
+ class TestModel
199
+ include Base
152
200
 
153
- it "returns the created Ad" do
154
- @connection.should_receive(:post).and_return(@response)
155
- zone = Zone.create(@attrs)
156
- zone.id.should == 1
157
- zone.slug.should == "zone1"
201
+ resource_name 'test'
202
+ resources_name 'tests'
158
203
  end
159
204
  end
205
+ end
206
+
207
+ module Model
208
+ module Admin
209
+ class TestModel < Common::TestModel
210
+ include Base
160
211
 
161
- describe "update_attributes" do
162
- it "makes a put call" do
163
- attrs = {:id => 1, :slug => "zone1"}
164
- zone = Zone.new(attrs)
165
- @connection.should_receive(:put).with("zones/1", {'zone' => {:slug => "zone2"}})
166
- zone.update_attributes(:slug => "zone2")
167
212
  end
168
213
  end
169
214
  end
170
215
 
171
- describe Connected do
172
- class ConnectedTest
173
- include Connected
174
- resource_name 'connection'
175
- resources_name 'connection'
176
- end
216
+ module Model
217
+ class TestModel < Base; end
218
+ end
177
219
 
220
+ describe AdminConnection do
178
221
  before(:each) do
179
222
  @connection = stub(:connection)
180
- API.stub(:connection).and_return(@connection)
223
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :admin))
181
224
  end
182
225
 
183
226
  describe "update_attributes" do
184
227
  it "should return false when errors occur for updated objects" do
185
- @connection.should_receive(:put).with("connection/1", {'connection' => {}}) do
228
+ @connection.should_receive(:put).with("tests/1", {'test' => {}}) do
186
229
  throw :errors, {:error => "is required"}
187
230
  end
188
231
 
189
- ConnectedTest.new(:id => 1).update_attributes({}).should be_false
232
+ Model::TestModel.new(:id => 1).update_attributes({}).should be_false
190
233
  end
191
234
 
192
235
  it "should provide access to errors when validation fails" do
193
- @connection.should_receive(:put).with("connection/1", {'connection' => {}}) do
236
+ @connection.should_receive(:put).with("tests/1", {'test' => {}}) do
194
237
  throw :errors, {:error => "is required"}
195
238
  end
196
239
 
197
- c = ConnectedTest.new(:id => 1)
240
+ c = Model::TestModel.new(:id => 1)
198
241
  c.update_attributes({}).should be_false
199
242
  c.errors.should == {:error => "is required"}
200
243
  end
201
244
 
202
245
  it "should return true when errors do not occure for updated objects" do
203
- @connection.should_receive(:put).with("connection/1", {'connection' => {}})
246
+ @connection.should_receive(:put).with("tests/1", {'test' => {}})
204
247
 
205
- ConnectedTest.new(:id => 1).update_attributes({}).should be_true
248
+ Model::TestModel.new(:id => 1).update_attributes({}).should be_true
206
249
  end
207
250
  end
208
251
 
209
252
  describe "save" do
210
253
  it "should return false when errors occur for new objects" do
211
- @connection.should_receive(:post).with("connection", {'connection' => {}}) do
254
+ @connection.should_receive(:post).with("tests", {'test' => {}}) do
212
255
  throw :errors, {:error => "is required"}
213
256
  end
214
257
 
215
- ConnectedTest.new.save.should be_false
258
+ Model::TestModel.new.save.should be_false
216
259
  end
217
260
 
218
261
  it "should provide access to errors when validation fails" do
219
- @connection.should_receive(:post).with("connection", {'connection' => {}}) do
262
+ @connection.should_receive(:post).with("tests", {'test' => {}}) do
220
263
  throw :errors, {:error => "is required"}
221
264
  end
222
265
 
223
- c = ConnectedTest.new
266
+ c = Model::TestModel.new
224
267
  c.save.should be_false
225
268
  c.errors.should == {:error => "is required"}
226
269
  end
227
270
 
228
271
  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}})
272
+ @connection.should_receive(:post).with("tests", {'test' => {}}).and_return({'test' => {:id => 1}})
230
273
 
231
- ConnectedTest.new.save.should be_true
274
+ Model::TestModel.new.save.should be_true
232
275
  end
233
276
 
234
277
  it "should return false when errors occur for existing objects" do
235
- @connection.should_receive(:put).with('connection/1', {'connection' => {}}) do
278
+ @connection.should_receive(:put).with('tests/1', {'test' => {}}) do
236
279
  throw :errors, {:error => "is required"}
237
280
  end
238
281
 
239
- ConnectedTest.new(:id => 1).save.should be_false
282
+ Model::TestModel.new(:id => 1).save.should be_false
240
283
  end
241
284
 
242
285
  it "should provide access to errors when validation fails" do
243
- @connection.should_receive(:put).with("connection/1", {'connection' => {}}) do
286
+ @connection.should_receive(:put).with("tests/1", {'test' => {}}) do
244
287
  throw :errors, {:error => "is required"}
245
288
  end
246
289
 
247
- c = ConnectedTest.new(:id => 1)
290
+ c = Model::TestModel.new(:id => 1)
248
291
  c.save.should be_false
249
292
  c.errors.should == {:error => "is required"}
250
293
  end
251
294
 
252
295
  it "should return true when errors do not occur for existing objects" do
253
- @connection.should_receive(:put).with("connection/1", {'connection' => {}})
296
+ @connection.should_receive(:put).with("tests/1", {'test' => {}})
254
297
 
255
- ConnectedTest.new(:id => 1).save.should be_true
298
+ Model::TestModel.new(:id => 1).save.should be_true
256
299
  end
257
300
  end
258
301
 
259
302
  describe "create" do
260
303
  it "should return nil when errors occur" do
261
- @connection.should_receive(:post).with("connection", {'connection' => {}}) do
304
+ @connection.should_receive(:post).with("tests", {'test' => {}}) do
262
305
  throw :errors, {:error => "is_required"}
263
306
  end
264
307
 
265
- ConnectedTest.create({}).should be_nil
308
+ Model::TestModel.create({}).should be_nil
266
309
  end
267
310
 
268
311
  it "should return the created object when no errors occur" do
269
- @connection.should_receive(:post).with("connection", {'connection' => {}}).and_return({'connection' => {:id => 1}})
312
+ @connection.should_receive(:post).with("tests", {'test' => {}}).and_return({'test' => {:id => 1}})
270
313
 
271
- ConnectedTest.create({}).should be_a ConnectedTest
314
+ Model::TestModel.create({}).should be_a Model::Admin::TestModel
272
315
  end
273
316
  end
274
317
 
275
318
  describe "create!" do
276
319
  it "should return nil when errors occur" do
277
- @connection.should_receive(:post).with("connection", {'connection' => {}}) do
320
+ @connection.should_receive(:post).with("tests", {'test' => {}}) do
278
321
  throw :errors, {:error => "is_required"}
279
322
  end
280
323
 
281
324
  errors = catch(:errors) do
282
- ConnectedTest.create!({})
325
+ Model::TestModel.create!({})
283
326
  nil
284
327
  end
285
328
  errors.should_not be_nil
@@ -287,20 +330,20 @@ module Neuron
287
330
  end
288
331
 
289
332
  it "should return the created object when no errors occur" do
290
- @connection.should_receive(:post).with("connection", {'connection' => {}}).and_return({'connection' => {:id => 1}})
333
+ @connection.should_receive(:post).with("tests", {'test' => {}}).and_return({'test' => {:id => 1}})
291
334
 
292
- ConnectedTest.create!({}).should be_a ConnectedTest
335
+ Model::TestModel.create!({}).should be_a Model::Admin::TestModel
293
336
  end
294
337
  end
295
338
  end
296
339
 
297
- describe Connection do
340
+ describe AdminConnection do
298
341
  before(:each) do
299
- @connection = Connection.new('http://neuron.admin', "my_api_key")
342
+ @connection = AdminConnection.new('http://neuron.admin', "my_api_key")
300
343
  end
301
344
 
302
345
  it "should escape the passed api_key" do
303
- connection = Connection.new("http://neuron.admin", "an unescaped string")
346
+ connection = AdminConnection.new("http://neuron.admin", "an unescaped string")
304
347
  FakeWeb.register_uri(:get, "http://neuron.admin/test.json?api_key=an+unescaped+string", :body => Yajl.dump({"escaped" => true}))
305
348
  connection.get("test").should == {"escaped" => true}
306
349
  end