apsis-on-steroids 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "apsis-on-steroids"
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["kaspernj"]
@@ -164,4 +164,56 @@ class ApsisOnSteroids::MailingList < ApsisOnSteroids::SubBase
164
164
  raise "Unexpected result: '#{data}'." if element["Value"] != "Succefully deleted"
165
165
  end
166
166
  end
167
+
168
+ # Moves a subscriber to the opt-out-list.
169
+ def opt_out_subscriber(sub)
170
+ res = aos.req_json("v1/optouts/mailinglists/#{data(:id)}/subscribers/queued", :post, :json => [{
171
+ "ExternalId" => "",
172
+ "Reason" => "",
173
+ "SendQueueId" => 0,
174
+ "SubscriberId" => sub.data(:id)
175
+ }])
176
+ raise "Unexpected result: #{res}" if res["Code"] != 1
177
+ data = aos.read_queued_response(res["Result"]["PollURL"])
178
+
179
+ raise data if data["FailedSubscriberIds"] && data["FailedSubscriberIds"].any?
180
+ end
181
+
182
+ # Returns a list of subscribers on the opt-out-list.
183
+ def opt_out_list
184
+ res = aos.req_json("v1/optouts/mailinglists/#{data(:id)}/queued", :post)
185
+ raise "Unexpected result: #{res}" if res["Code"] != 1
186
+ data = aos.read_queued_response(res["Result"]["PollURL"])
187
+
188
+ ret = []
189
+ data.each do |opt_out_data|
190
+ sub = ApsisOnSteroids::Subscriber.new(:aos => aos, :data => {:id => opt_out_data["Id"], :email => opt_out_data["Email"]})
191
+
192
+ if block_given?
193
+ yield sub
194
+ else
195
+ ret << sub
196
+ end
197
+ end
198
+
199
+ return ret
200
+ end
201
+
202
+ # Returns true if the given subscriber is on the opt-out-list.
203
+ def opt_out?(sub)
204
+ opt_out_list do |sub_opt_out|
205
+ return true if sub_opt_out.data(:email) == sub.data(:email) || sub.data(:id).to_i == sub_opt_out.data(:id).to_i
206
+ end
207
+
208
+ return false
209
+ end
210
+
211
+ # Removes the given subscriber from the opt-out-list.
212
+ def opt_out_remove_subscriber(sub)
213
+ res = aos.req_json("v1/optouts/mailinglists/#{data(:id)}/subscribers/queued", :delete, :json => [
214
+ sub.data(:email)
215
+ ])
216
+ data = aos.read_queued_response(res["Result"]["PollURL"])
217
+ raise data if data["FailedSubscriberEmails"] && data["FailedSubscriberEmails"].any?
218
+ end
167
219
  end
@@ -120,6 +120,26 @@ class ApsisOnSteroids
120
120
  return res
121
121
  end
122
122
 
123
+ def read_queued_response(url)
124
+ uri = URI.parse(url)
125
+
126
+ Timeout.timeout(300) do
127
+ loop do
128
+ sleep 1
129
+ res = req_json(uri.path)
130
+
131
+ if res["State"] == "2"
132
+ uri_data = URI.parse(res["DataUrl"])
133
+ return req_json(uri_data.path)
134
+ elsif res["State"] == "1" || res["State"] == "0"
135
+ # Keep waiting.
136
+ else
137
+ raise "Unknown state '#{res["State"]}': #{res}"
138
+ end
139
+ end
140
+ end
141
+ end
142
+
123
143
  def parse_obj(obj)
124
144
  if obj.is_a?(Array)
125
145
  ret = []
@@ -111,5 +111,12 @@ describe "ApsisOnSteroids" do
111
111
  sub.active?.should eql(true)
112
112
  mlist.member?(sub).should eql(true)
113
113
  end
114
+
115
+ it "should be able to opt out a subscriber" do
116
+ mlist.opt_out_subscriber(sub)
117
+ mlist.opt_out?(sub).should eql(true)
118
+ mlist.opt_out_remove_subscriber(sub)
119
+ mlist.opt_out?(sub).should eql(false)
120
+ end
114
121
  end
115
122
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: apsis-on-steroids
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - kaspernj
@@ -144,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
144
  - !ruby/object:Gem::Version
145
145
  segments:
146
146
  - 0
147
- hash: -867617378324524175
147
+ hash: -3749909533048990827
148
148
  version: '0'
149
149
  required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  none: false