streamsend 0.1.2 → 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.
data/streamsend.gemspec CHANGED
@@ -1,21 +1,25 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.authors = ["Scott Albertson"]
5
- gem.email = %q{salbertson@streamsend.com}
4
+ gem.authors = ["Scott Albertson", "Jeff Roush"]
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.}
8
- gem.homepage = %q{http://github.com/salbertson/streamsend-ruby}
9
- gem.date = %q{2012-04-02}
8
+ gem.homepage = %q{https://github.com/Jeff-R/streamsend-ruby}
9
+ gem.date = %q{2013-07-09}
10
10
 
11
- gem.add_dependency "httparty", "0.7.4"
12
- gem.add_development_dependency "rspec", "~> 2.9"
11
+ gem.add_dependency "httparty"
12
+ gem.add_dependency "activesupport", "~>3.2"
13
+ gem.add_dependency "builder"
14
+ gem.add_development_dependency "debugger"
15
+ gem.add_development_dependency "rspec"
13
16
  gem.add_development_dependency "webmock", "~> 1.6"
17
+ gem.add_development_dependency "vcr"
14
18
 
15
19
  gem.files = `git ls-files`.split($\)
16
20
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
21
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
22
  gem.name = "streamsend"
19
23
  gem.require_paths = ["lib"]
20
- gem.version = "0.1.2"
24
+ gem.version = "0.2.0"
21
25
  end
metadata CHANGED
@@ -1,127 +1,177 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: streamsend
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Scott Albertson
8
+ - Jeff Roush
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-02 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-07-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: httparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
22
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - "="
27
- - !ruby/object:Gem::Version
28
- hash: 11
29
- segments:
30
- - 0
31
- - 7
32
- - 4
33
- version: 0.7.4
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: activesupport
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '3.2'
34
35
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rspec
38
36
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
42
39
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 17
45
- segments:
46
- - 2
47
- - 9
48
- version: "2.9"
40
+ - !ruby/object:Gem::Version
41
+ version: '3.2'
42
+ - !ruby/object:Gem::Dependency
43
+ name: builder
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: debugger
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
49
77
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
52
85
  name: webmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '1.6'
91
+ type: :development
53
92
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
57
95
  - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 1
62
- - 6
63
- version: "1.6"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.6'
98
+ - !ruby/object:Gem::Dependency
99
+ name: vcr
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
64
105
  type: :development
65
- version_requirements: *id003
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
66
112
  description: Ruby wrapper for the StreamSend API.
67
- email: salbertson@streamsend.com
113
+ email: jroush@ezpublishing.com
68
114
  executables: []
69
-
70
115
  extensions: []
71
-
72
116
  extra_rdoc_files: []
73
-
74
- files:
117
+ files:
118
+ - .gitignore
119
+ - .rspec
75
120
  - Gemfile
76
121
  - Gemfile.lock
77
122
  - README.rdoc
78
123
  - Rakefile
79
124
  - lib/streamsend.rb
80
- - lib/streamsend/list.rb
81
- - lib/streamsend/resource.rb
82
- - lib/streamsend/subscriber.rb
83
- - spec/lib/streamsend/list_spec.rb
84
- - spec/lib/streamsend/resource_spec.rb
85
- - spec/lib/streamsend/subscriber_spec.rb
125
+ - lib/streamsend/api/account.rb
126
+ - lib/streamsend/api/exception.rb
127
+ - lib/streamsend/api/list.rb
128
+ - lib/streamsend/api/resource.rb
129
+ - lib/streamsend/api/subscriber.rb
130
+ - lib/streamsend/api/user.rb
131
+ - spec/integration/account_spec.rb
132
+ - spec/integration/integration.yml
133
+ - spec/integration/list_spec.rb
134
+ - spec/integration/spec_helper.rb
135
+ - spec/integration/user_spec.rb
136
+ - spec/lib/streamsend/api/list_spec.rb
137
+ - spec/lib/streamsend/api/resource_spec.rb
138
+ - spec/lib/streamsend/api/subscriber_spec.rb
139
+ - spec/lib/streamsend/api/user_spec.rb
140
+ - spec/lib/streamsend/api_spec.rb
86
141
  - spec/spec_helper.rb
87
- - spec/streamsend_spec.rb
88
142
  - streamsend.gemspec
89
- homepage: http://github.com/salbertson/streamsend-ruby
143
+ homepage: https://github.com/Jeff-R/streamsend-ruby
90
144
  licenses: []
91
-
145
+ metadata: {}
92
146
  post_install_message:
93
147
  rdoc_options: []
94
-
95
- require_paths:
148
+ require_paths:
96
149
  - lib
97
- required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
- version: "0"
106
- required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 3
112
- segments:
113
- - 0
114
- version: "0"
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
115
160
  requirements: []
116
-
117
161
  rubyforge_project:
118
- rubygems_version: 1.7.1
162
+ rubygems_version: 2.0.3
119
163
  signing_key:
120
- specification_version: 3
164
+ specification_version: 4
121
165
  summary: Ruby wrapper for the StreamSend API.
122
- test_files:
123
- - spec/lib/streamsend/list_spec.rb
124
- - spec/lib/streamsend/resource_spec.rb
125
- - spec/lib/streamsend/subscriber_spec.rb
166
+ test_files:
167
+ - spec/integration/account_spec.rb
168
+ - spec/integration/integration.yml
169
+ - spec/integration/list_spec.rb
170
+ - spec/integration/spec_helper.rb
171
+ - spec/integration/user_spec.rb
172
+ - spec/lib/streamsend/api/list_spec.rb
173
+ - spec/lib/streamsend/api/resource_spec.rb
174
+ - spec/lib/streamsend/api/subscriber_spec.rb
175
+ - spec/lib/streamsend/api/user_spec.rb
176
+ - spec/lib/streamsend/api_spec.rb
126
177
  - spec/spec_helper.rb
127
- - spec/streamsend_spec.rb
@@ -1,36 +0,0 @@
1
- module StreamSend
2
- class List < Resource
3
- def self.all
4
- response = StreamSend.get("/audiences/#{audience_id}/lists.xml")
5
-
6
- case response.code
7
- when 200
8
- response["lists"].collect { |data| new(data) }
9
- else
10
- raise "Could not find any lists. (#{response.code})"
11
- end
12
- end
13
-
14
- def self.find(list_id)
15
- response = StreamSend.get("/audiences/#{audience_id}/lists/#{list_id}.xml")
16
-
17
- case response.code
18
- when 200
19
- new(response["list"])
20
- else
21
- raise "Could not find any lists. (#{response.code})"
22
- end
23
- end
24
-
25
- def self.create(list_name)
26
- response = StreamSend.post("/audiences/#{audience_id}/lists.xml", :query => {:list => {:name => list_name}})
27
-
28
- if response.code == 201
29
- response.headers["location"] =~ /audiences\/\d\/lists\/(\d+)$/
30
- new_list_id = $1.to_i
31
- else
32
- raise "Could not create a list. (#{response.body})"
33
- end
34
- end
35
- end
36
- end
@@ -1,23 +0,0 @@
1
- module StreamSend
2
- class Resource
3
- def initialize(data)
4
- @data = data
5
- end
6
-
7
- def method_missing(method, *args, &block)
8
- if @data.include?(method.to_s)
9
- @data[method.to_s]
10
- else
11
- super
12
- end
13
- end
14
-
15
- def id
16
- @data["id"]
17
- end
18
-
19
- def self.audience_id
20
- @audience_id ||= StreamSend.get("/audiences.xml").parsed_response["audiences"].first["id"]
21
- end
22
- end
23
- end
@@ -1,81 +0,0 @@
1
- module StreamSend
2
- class Subscriber < Resource
3
- def self.all
4
- response = StreamSend.get("/audiences/#{audience_id}/people.xml")
5
-
6
- case response.code
7
- when 200
8
- response["people"].collect { |data| new(data) }
9
- else
10
- raise "Could not find any subscribers. Make sure your audience ID is correct. (#{response.code})"
11
- end
12
- end
13
-
14
- def self.find(email_address)
15
- response = StreamSend.get("/audiences/#{audience_id}/people.xml?email_address=#{email_address}")
16
-
17
- case response.code
18
- when 200
19
- if subscriber = response["people"].first
20
- new(subscriber)
21
- else
22
- nil
23
- end
24
- else
25
- raise "Could not find the subscriber. Make sure your audience ID is correct. (#{response.code})"
26
- end
27
- end
28
-
29
- def self.create(person_hash)
30
- response = StreamSend.post("/audiences/#{audience_id}/people.xml", :query => {:person => person_hash})
31
-
32
- case response.code
33
- when 201
34
- response.headers["location"] =~ /audiences\/\d+\/people\/(\d+)$/
35
- subscriber_id = $1
36
- unless subscriber_id.nil?
37
- subscriber_id.to_i
38
- end
39
- else
40
- raise "Could not create the subscriber. (#{response.code})"
41
- end
42
- end
43
-
44
- def show
45
- response = StreamSend.get("/audiences/#{audience_id}/people/#{id}.xml")
46
-
47
- case response.code
48
- when 200
49
- if subscriber = response["person"]
50
- self.class.new(subscriber)
51
- else
52
- nil
53
- end
54
- else
55
- raise "Could not show the subscriber. (#{response.code})"
56
- end
57
- end
58
-
59
- def activate
60
- response = StreamSend.post("/audiences/#{audience_id}/people/#{id}/activate.xml")
61
-
62
- case response.code
63
- when 200
64
- true
65
- else
66
- raise "Could not activate the subscriber. (#{response.code})"
67
- end
68
- end
69
-
70
- def unsubscribe
71
- response = StreamSend.post("/audiences/#{audience_id}/people/#{id}/unsubscribe.xml")
72
-
73
- case response.code
74
- when 200
75
- true
76
- else
77
- raise "Could not subscribe the subscriber. (#{response.code})"
78
- end
79
- end
80
- end
81
- end
@@ -1,203 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "../../spec_helper")
2
-
3
- module StreamSend
4
- describe "List" do
5
- let(:app_host) { "http://test.host" }
6
- before(:each) do
7
- stub_http_request(:any, //).to_return(:body => "Page not found.", :status => 404)
8
-
9
- @username = "scott"
10
- @password = "topsecret"
11
- @host = "test.host"
12
-
13
- xml = <<-XML
14
- <?xml version="1.0" encoding="UTF-8"?>
15
- <audiences type="array">
16
- <audience>
17
- <id type="integer">2</id>
18
- </audience>
19
- </audiences>
20
- XML
21
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences.xml").to_return(:body => xml)
22
-
23
- StreamSend.configure(@username, @password, @host)
24
- end
25
-
26
- describe ".audience_id" do
27
- it "should return the id of the first audience" do
28
- StreamSend::List.audience_id.should == 2
29
- end
30
- end
31
-
32
- describe ".all" do
33
- describe "with lists" do
34
- before(:each) do
35
- xml = <<-XML
36
- <?xml version="1.0" encoding="UTF-8"?>
37
- <lists type="array">
38
- <list>
39
- <active-people-count type="integer">11</active-people-count>
40
- <checked-by-default type="boolean" nil="true"></checked-by-default>
41
- <created-at type="datetime">2012-01-14T18:11:50Z</created-at>
42
- <deleted-at type="datetime" nil="true"></deleted-at>
43
- <description nil="true"></description>
44
- <id type="integer">42</id>
45
- <inactive-people-count type="integer">0</inactive-people-count>
46
- <name>First list</name>
47
- <pending-people-count type="integer">0</pending-people-count>
48
- <public type="boolean" nil="true"></public>
49
- <status type="enum">idle</status>
50
- <unsubscribed-people-count type="integer">0</unsubscribed-people-count>
51
- <updated-at type="datetime">2012-01-14T18:11:50Z</updated-at>
52
- <audience-id type="integer">2</audience-id>
53
- </list>
54
- </lists>
55
- XML
56
-
57
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/lists.xml").to_return(:body => xml)
58
- end
59
-
60
- it "should return array of one list object" do
61
- lists = StreamSend::List.all
62
- lists.size.should == 1
63
-
64
- lists.first.should be_instance_of(StreamSend::List)
65
- lists.first.id.should == 42
66
- lists.first.name.should == "First list"
67
- lists.first.created_at.should == Time.parse("2012-01-14T18:11:50Z")
68
- end
69
- end
70
-
71
- describe "with no lists" do
72
- before(:each) do
73
- xml = <<-XML
74
- <?xml version="1.0" encoding="UTF-8"?>
75
- <lists type="array"/>
76
- XML
77
-
78
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/lists.xml").to_return(:body => xml)
79
- end
80
-
81
- it "should return an empty array" do
82
- StreamSend::List.all.should == []
83
- end
84
- end
85
-
86
- describe "with invalid audience" do
87
- before(:each) do
88
- xml = <<-XML
89
- <?xml version="1.0" encoding="UTF-8"?>
90
- <people type="array"/>
91
- XML
92
-
93
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/99/people.xml").to_return(:body => xml)
94
- end
95
-
96
- it "should raise an exception" do
97
- lambda { StreamSend::List.all }.should raise_error
98
- end
99
- end
100
- end
101
-
102
- describe ".find" do
103
- describe "with matching list" do
104
- before(:each) do
105
- xml = <<-XML
106
- <?xml version="1.0" encoding="UTF-8"?>
107
- <list>
108
- <active-people-count type="integer">11</active-people-count>
109
- <checked-by-default type="boolean" nil="true"></checked-by-default>
110
- <created-at type="datetime">2012-01-14T18:11:50Z</created-at>
111
- <deleted-at type="datetime" nil="true"></deleted-at>
112
- <description nil="true"></description>
113
- <id type="integer">42</id>
114
- <inactive-people-count type="integer">0</inactive-people-count>
115
- <name>First list</name>
116
- <pending-people-count type="integer">0</pending-people-count>
117
- <public type="boolean" nil="true"></public>
118
- <status type="enum">idle</status>
119
- <unsubscribed-people-count type="integer">0</unsubscribed-people-count>
120
- <updated-at type="datetime">2012-01-14T18:11:50Z</updated-at>
121
- <audience-id type="integer">2</audience-id>
122
- </list>
123
- XML
124
-
125
- stub_http_request(:get, /audiences\/2\/lists\/42.xml/).with(:id => "42").to_return(:body => xml)
126
- end
127
-
128
- it "should return list" do
129
- list = StreamSend::List.find(42)
130
-
131
- list.should be_instance_of(StreamSend::List)
132
- list.id.should == 42
133
- list.name.should == "First list"
134
- list.created_at.should == Time.parse("2012-01-14T18:11:50Z")
135
- end
136
- end
137
-
138
- describe "with no matching list" do
139
- before(:each) do
140
- xml = <<-XML
141
- <?xml version="1.0" encoding="UTF-8"?>
142
- <lists type="array"\>
143
- XML
144
-
145
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/2/people.xml?email_address=bad.email@gmail.com").to_return(:status => 404)
146
- end
147
-
148
- it "should return throw an exception" do
149
- lambda {
150
- StreamSend::List.find(-1)
151
- }.should raise_error
152
- end
153
- end
154
-
155
- describe "with invalid audience" do
156
- before(:each) do
157
- xml = <<-XML
158
- <?xml version="1.0" encoding="UTF-8"?>
159
- <people type="array"\>
160
- XML
161
-
162
- stub_http_request(:get, "http://#{@username}:#{@password}@#{@host}/audiences/99/people.xml?email_address=bad.email@gmail.com").to_return(:body => xml)
163
- end
164
-
165
- it "should raise an exception" do
166
- lambda { StreamSend::List.find("scott@gmail.com") }.should raise_error
167
- end
168
- end
169
- end
170
-
171
-
172
- describe ".create" do
173
- describe "with no existing list using the same name" do
174
- before(:each) do
175
- @new_list_name = "list 1"
176
- new_list_params = { :list => {:name => @new_list_name} }
177
- stub_http_request(:post, /audiences\/2\/lists.xml/).with(new_list_params).to_return(:status => 201, :headers => {:location => "#{app_host}/audiences/2/lists/42"} )
178
- end
179
-
180
- it "should return list" do
181
- list_id = StreamSend::List.create(@new_list_name)
182
- list_id.should == 42
183
- end
184
- end
185
-
186
- describe "with an existing list using the same name" do
187
- before(:each) do
188
- @new_list_name = "list 1"
189
- new_list_params = { :list => {:name => @new_list_name} }
190
- @error_message = "<error>Name has already been taken<error>"
191
- stub_http_request(:post, /audiences\/2\/lists.xml/).with(new_list_params).to_return(:status => 422, :body => @error_message)
192
- end
193
-
194
- it "should raise an error" do
195
- lambda {
196
- StreamSend::List.create(@new_list_name)
197
- }.should raise_error
198
- end
199
- end
200
- end
201
-
202
- end
203
- end
@@ -1,21 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "../../spec_helper")
2
-
3
- module StreamSend
4
- describe "Resource" do
5
- describe "with missing method" do
6
- before(:each) do
7
- @resource = StreamSend::Resource.new({"name" => "scott"})
8
- end
9
-
10
- it "should return value" do
11
- @resource.name.should == "scott"
12
- end
13
- end
14
-
15
- describe "#id" do
16
- it "should return id" do
17
- StreamSend::Resource.new({"id" => 99}).id.should == 99
18
- end
19
- end
20
- end
21
- end