streamsend 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e61be8f0dbd41447e476d4910db11a7f4d860fa
4
- data.tar.gz: 5ca77625cf5941bb0b947e504e07d4a20f1df55a
3
+ metadata.gz: 570a759259227d544ce683da82e01e9de3fcf02f
4
+ data.tar.gz: 3fab2452d29f3e1cb9246958482860a5610d9cf7
5
5
  SHA512:
6
- metadata.gz: a1dbb65d585166e0fed66484cecb556c44d559de6ff8e0effc80da9b4711d1207d85e18a5a2aa1d6b0eb86e3b8954453f2a7526bbfb7777a81e8299d2c8a4e8e
7
- data.tar.gz: a546c213c265d6e810d3031405ea15e51209883229bd8d6ede350abedfcaaa368d2c27d08444bfcd7df91a95c99a22255f6d4d28c12804e85bbe3dede199e418
6
+ metadata.gz: 731dd7a05dc12b5cf17b923b3dba981703ff96838cf94abe44d7306270a89d5aa270e65e2ea2d5655f89f063c93951445e433e568494a8fc36555173cae46f2f
7
+ data.tar.gz: ff1ece90306b86ff2ebe904309f0782a4c0f0ea81fef98fbeb9bd8397a51eeaf3a84d0df40b76cc80c6cb495c918c7d26569d504a6d27a27659489cd3518770d
data/.gitignore CHANGED
@@ -1,2 +1,5 @@
1
1
  .DS_Store
2
2
  tags
3
+ spec/integration/integration.yml
4
+ .git-commit-story.yml
5
+ logfile.log
data/.pair ADDED
@@ -0,0 +1,10 @@
1
+ email: engineers@streamsend.com
2
+ authors:
3
+ - hn Huy Nguyen
4
+ - em Edward Monical-Vuylsteke
5
+ - eg Ed Gibbs
6
+ - tp Tom Parker
7
+ - sh Steve Holmes
8
+ - ar Andrei Ramanovich
9
+ - me Mark Eschbach
10
+ - by Bob Yeo
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- streamsend (0.2.0)
4
+ streamsend (0.2.2)
5
5
  activesupport (~> 3.2)
6
6
  builder
7
7
  httparty
@@ -9,20 +9,22 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (3.2.13)
13
- i18n (= 0.6.1)
12
+ activesupport (3.2.14)
13
+ i18n (~> 0.6, >= 0.6.4)
14
14
  multi_json (~> 1.0)
15
15
  addressable (2.3.5)
16
16
  builder (3.2.2)
17
17
  crack (0.4.0)
18
18
  safe_yaml (~> 0.9.0)
19
19
  diff-lcs (1.2.4)
20
+ git-commit-story (0.1.5)
20
21
  httparty (0.11.0)
21
22
  multi_json (~> 1.0)
22
23
  multi_xml (>= 0.5.2)
23
- i18n (0.6.1)
24
- multi_json (1.7.7)
25
- multi_xml (0.5.4)
24
+ i18n (0.6.5)
25
+ multi_json (1.8.0)
26
+ multi_xml (0.5.5)
27
+ pair-salad (0.1.1)
26
28
  rspec (2.13.0)
27
29
  rspec-core (~> 2.13.0)
28
30
  rspec-expectations (~> 2.13.0)
@@ -43,6 +45,8 @@ PLATFORMS
43
45
  ruby
44
46
 
45
47
  DEPENDENCIES
48
+ git-commit-story
49
+ pair-salad
46
50
  rspec
47
51
  ruby-fsevent
48
52
  streamsend!
@@ -1,2 +1,15 @@
1
- class StreamSend::Api::Exception < Exception
1
+ module StreamSend
2
+ module Api
3
+ class Exception < StandardError
4
+ end
5
+
6
+ class ApiException < Exception
7
+ end
8
+
9
+ class LockedError < ApiException
10
+ end
11
+
12
+ class UnexpectedResponse < ApiException
13
+ end
14
+ end
2
15
  end
@@ -4,13 +4,27 @@ module StreamSend
4
4
  module Api
5
5
  class Subscriber < Resource
6
6
  def self.all
7
- response = StreamSend::Api.get("/audiences/#{audience_id}/people.xml")
7
+ options = { :per_page => 1_000, :page => 0 }
8
+ last_gathered_count = 1
9
+ sbuscribers = []
10
+
11
+ until last_gathered_count == 0
12
+ gathered = self.index( options )
13
+ subscribers.concat( gathered )
14
+ options[:page] = options[:page]+1
15
+ last_gathered_count = gatehred.count
16
+ end
17
+ subscribers
18
+ end
19
+
20
+ def self.index(options = {})
21
+ response = StreamSend::Api.get("/audiences/#{audience_id}/people.xml", :query => options)
8
22
 
9
23
  case response.code
10
24
  when 200
11
25
  response["people"].collect { |data| new(data) }
12
26
  else
13
- raise StreamSend::Api::Exception.new("Could not find any subscribers. Make sure your audience ID is correct. (#{response.code})")
27
+ raise StreamSend::Api::ApiException.new("Error response (#{response.code}), Make sure your audience ID is correct. (audience_id => #{audience_id})")
14
28
  end
15
29
  end
16
30
 
@@ -80,6 +94,18 @@ module StreamSend
80
94
  raise StreamSend::Api::Exception("Could not subscribe the subscriber. (#{response.code})")
81
95
  end
82
96
  end
97
+
98
+ def destroy
99
+ response = StreamSend::Api.delete("/audiences/#{audience_id}/people/#{id}.xml")
100
+ case response.code
101
+ when 200
102
+ true
103
+ when 423
104
+ raise LockedError, "Can not delete"
105
+ else
106
+ raise UnexpectedResponse, response.code
107
+ end
108
+ end
83
109
  end
84
110
  end
85
111
  end
@@ -56,7 +56,7 @@ module StreamSend
56
56
  end
57
57
  end
58
58
 
59
- describe ".all" do
59
+ describe ".index" do
60
60
  describe "with subscribers" do
61
61
  before(:each) do
62
62
  xml = <<-XML
@@ -70,11 +70,11 @@ module StreamSend
70
70
  </people>
71
71
  XML
72
72
 
73
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/people.xml").to_return(:body => xml)
73
+ stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/people.xml?").to_return(:body => xml)
74
74
  end
75
75
 
76
76
  it "should return array of one subscriber object" do
77
- subscribers = StreamSend::Api::Subscriber.all
77
+ subscribers = StreamSend::Api::Subscriber.index
78
78
  subscribers.size.should == 1
79
79
 
80
80
  subscribers.first.should be_instance_of(StreamSend::Api::Subscriber)
@@ -91,11 +91,11 @@ module StreamSend
91
91
  <people type="array"/>
92
92
  XML
93
93
 
94
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/people.xml").to_return(:body => xml)
94
+ stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/people.xml?").to_return(:body => xml)
95
95
  end
96
96
 
97
97
  it "should return an empty array" do
98
- StreamSend::Api::Subscriber.all.should == []
98
+ StreamSend::Api::Subscriber.index.should == []
99
99
  end
100
100
  end
101
101
 
@@ -110,7 +110,9 @@ module StreamSend
110
110
  end
111
111
 
112
112
  it "should raise an exception" do
113
- lambda { StreamSend::Api::Subscriber.all }.should raise_error
113
+ expect do
114
+ StreamSend::Api::Subscriber.index
115
+ end.to raise_error(ApiException)
114
116
  end
115
117
  end
116
118
  end
@@ -278,6 +280,32 @@ module StreamSend
278
280
  end
279
281
  end
280
282
  end
283
+
284
+ describe "#destory" do
285
+ let( :subscriber ){
286
+ StreamSend::Api::Subscriber.new({"id"=> 2, "audience_id" => 1})
287
+ }
288
+ let( :uri ){ "http://#{@username}:#{@password}@#{@host}/audiences/1/people/2.xml" }
289
+
290
+ it "returns true when destroyed" do
291
+ stub_http_request(:delete, uri ).to_return(:body => nil)
292
+ expect(subscriber.destroy).to be_true
293
+ end
294
+
295
+ it "throws a LockedError when locked" do
296
+ stub_http_request(:delete, uri ).to_return(:status => 423, :body => nil)
297
+ expect do
298
+ subscriber.destroy
299
+ end.to raise_error( LockedError )
300
+ end
301
+
302
+ it "throws unexpected response with any other exception" do
303
+ stub_http_request(:delete, uri ).to_return(:status => 500, :body => "Error text meant for HCI")
304
+ expect do
305
+ subscriber.destroy
306
+ end.to raise_error( UnexpectedResponse )
307
+ end
308
+ end
281
309
  end
282
310
  end
283
311
  end
data/streamsend.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.authors = ["Scott Albertson", "Jeff Roush"]
4
+ gem.authors = ["Scott Albertson", "Jeff Roush", "Mark Eschbach", "Bob Yeo"]
5
5
  gem.email = %q{jroush@ezpublishing.com}
6
6
  gem.summary = %q{Ruby wrapper for the StreamSend API.}
7
7
  gem.description = %q{Ruby wrapper for the StreamSend API.}
@@ -12,15 +12,17 @@ Gem::Specification.new do |gem|
12
12
  gem.add_dependency "activesupport", "~>3.2"
13
13
  gem.add_dependency "builder"
14
14
  gem.add_development_dependency "rspec"
15
+ gem.add_development_dependency "git-commit-story"
15
16
  gem.add_development_dependency "webmock", "~> 1.6"
16
17
  gem.add_development_dependency "vcr"
17
18
  gem.add_development_dependency "watchr"
18
19
  gem.add_development_dependency "ruby-fsevent"
20
+ gem.add_development_dependency "pair-salad"
19
21
 
20
22
  gem.files = `git ls-files`.split($\)
21
23
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
22
24
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
23
25
  gem.name = "streamsend"
24
26
  gem.require_paths = ["lib"]
25
- gem.version = "0.2.1"
27
+ gem.version = "0.2.2"
26
28
  end
metadata CHANGED
@@ -1,11 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: streamsend
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Albertson
8
8
  - Jeff Roush
9
+ - Mark Eschbach
10
+ - Bob Yeo
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
@@ -67,6 +69,20 @@ dependencies:
67
69
  - - '>='
68
70
  - !ruby/object:Gem::Version
69
71
  version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: git-commit-story
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
70
86
  - !ruby/object:Gem::Dependency
71
87
  name: webmock
72
88
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +139,20 @@ dependencies:
123
139
  - - '>='
124
140
  - !ruby/object:Gem::Version
125
141
  version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: pair-salad
144
+ requirement: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ type: :development
150
+ prerelease: false
151
+ version_requirements: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
126
156
  description: Ruby wrapper for the StreamSend API.
127
157
  email: jroush@ezpublishing.com
128
158
  executables: []
@@ -130,6 +160,7 @@ extensions: []
130
160
  extra_rdoc_files: []
131
161
  files:
132
162
  - .gitignore
163
+ - .pair
133
164
  - .rspec
134
165
  - Gemfile
135
166
  - Gemfile.lock