apsis-on-steroids 0.0.0 → 0.0.1
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 +1 -1
- data/Gemfile.lock +2 -2
- data/README.rdoc +13 -0
- data/VERSION +1 -1
- data/apsis-on-steroids.gemspec +4 -4
- data/include/mailing_list.rb +24 -0
- data/include/subscriber.rb +12 -19
- data/lib/apsis-on-steroids.rb +19 -3
- data/spec/apsis-on-steroids_spec.rb +25 -6
- metadata +4 -4
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -3,7 +3,7 @@ GEM
|
|
3
3
|
specs:
|
4
4
|
diff-lcs (1.1.3)
|
5
5
|
git (1.2.5)
|
6
|
-
http2 (0.0.
|
6
|
+
http2 (0.0.16)
|
7
7
|
jeweler (1.8.4)
|
8
8
|
bundler (~> 1.0)
|
9
9
|
git (>= 1.2.5)
|
@@ -28,7 +28,7 @@ PLATFORMS
|
|
28
28
|
|
29
29
|
DEPENDENCIES
|
30
30
|
bundler (>= 1.0.0)
|
31
|
-
http2 (>= 0.0.
|
31
|
+
http2 (>= 0.0.16)
|
32
32
|
jeweler (~> 1.8.4)
|
33
33
|
rdoc (~> 3.12)
|
34
34
|
rspec (~> 2.8.0)
|
data/README.rdoc
CHANGED
@@ -10,10 +10,23 @@ Library that implements the Apsis API in Ruby in regards to administrating subsc
|
|
10
10
|
:api_key => "[your api key]"
|
11
11
|
)
|
12
12
|
|
13
|
+
=== Create a mailing list
|
14
|
+
|
15
|
+
aos.create_mailing_list(
|
16
|
+
:Name => "my_awesome_list",
|
17
|
+
:FromName => "Kasper Johansen",
|
18
|
+
:FromEmail => "kj@naoshi-dev.com",
|
19
|
+
:CharacterSet => "utf-8"
|
20
|
+
)
|
21
|
+
|
13
22
|
=== Get a mailing list.
|
14
23
|
|
15
24
|
mlist = aos.mailing_list_by_name("test_list")
|
16
25
|
|
26
|
+
=== Delete a mailing list.
|
27
|
+
|
28
|
+
mlist.delete
|
29
|
+
|
17
30
|
=== Get a subscriber from a mailing list.
|
18
31
|
|
19
32
|
sub = mlist.subscriber_by_email("some@email.com")
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/apsis-on-steroids.gemspec
CHANGED
@@ -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.
|
8
|
+
s.version = "0.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["kaspernj"]
|
@@ -43,14 +43,14 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.specification_version = 3
|
44
44
|
|
45
45
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
-
s.add_runtime_dependency(%q<http2>, [">= 0.0.
|
46
|
+
s.add_runtime_dependency(%q<http2>, [">= 0.0.16"])
|
47
47
|
s.add_runtime_dependency(%q<string-cases>, [">= 0"])
|
48
48
|
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
49
49
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
50
50
|
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
51
51
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
52
52
|
else
|
53
|
-
s.add_dependency(%q<http2>, [">= 0.0.
|
53
|
+
s.add_dependency(%q<http2>, [">= 0.0.16"])
|
54
54
|
s.add_dependency(%q<string-cases>, [">= 0"])
|
55
55
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
56
56
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -58,7 +58,7 @@ Gem::Specification.new do |s|
|
|
58
58
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
59
59
|
end
|
60
60
|
else
|
61
|
-
s.add_dependency(%q<http2>, [">= 0.0.
|
61
|
+
s.add_dependency(%q<http2>, [">= 0.0.16"])
|
62
62
|
s.add_dependency(%q<string-cases>, [">= 0"])
|
63
63
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
64
64
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
data/include/mailing_list.rb
CHANGED
@@ -36,4 +36,28 @@ class ApsisOnSteroids::MailingList < ApsisOnSteroids::SubBase
|
|
36
36
|
raise "Unexpected result: '#{res["Result"]}'."
|
37
37
|
end
|
38
38
|
end
|
39
|
+
|
40
|
+
def delete
|
41
|
+
res = aos.req_json("v1/mailinglists/", :delete, :json => [data(:id)])
|
42
|
+
|
43
|
+
url = URI.parse(res["Result"]["PollURL"])
|
44
|
+
data = nil
|
45
|
+
|
46
|
+
Timeout.timeout(30) do
|
47
|
+
loop do
|
48
|
+
sleep 0.5
|
49
|
+
res = aos.req_json(url.path)
|
50
|
+
|
51
|
+
if res["State"] == "2"
|
52
|
+
data_url = URI.parse(res["DataUrl"])
|
53
|
+
data = aos.req_json(data_url.path)
|
54
|
+
break
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
data.each do |element|
|
60
|
+
raise "Unexpected result: '#{data}'." if element["Value"] != "Succefully deleted"
|
61
|
+
end
|
62
|
+
end
|
39
63
|
end
|
data/include/subscriber.rb
CHANGED
@@ -14,36 +14,29 @@ class ApsisOnSteroids::Subscriber < ApsisOnSteroids::SubBase
|
|
14
14
|
# Returns true if the subscriber is active.
|
15
15
|
def active?
|
16
16
|
details = self.details
|
17
|
-
|
18
|
-
if details[:pending]
|
19
|
-
return false
|
20
|
-
end
|
21
|
-
|
17
|
+
return false if details[:pending]
|
22
18
|
return true
|
23
19
|
end
|
24
20
|
|
25
21
|
# Update one or more details on the subscriber.
|
26
22
|
def update(data)
|
27
|
-
res = aos.req_json("v1/subscribers/queue", :post, :json => [
|
28
|
-
{
|
29
|
-
:Id => data(:id)
|
30
|
-
}.merge(data)
|
31
|
-
])
|
32
|
-
|
23
|
+
res = aos.req_json("v1/subscribers/queue", :post, :json => [data.merge(:Id => self.data(:id))])
|
33
24
|
url = URI.parse(res["Result"]["PollURL"])
|
34
25
|
data = nil
|
35
26
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
27
|
+
Timeout.timeout(30) do
|
28
|
+
loop do
|
29
|
+
res = aos.req_json(url.path)
|
30
|
+
|
31
|
+
if res["State"] == "2"
|
32
|
+
url_data = URI.parse(res["DataUrl"])
|
33
|
+
data = aos.req_json(url_data.path)
|
34
|
+
break
|
35
|
+
end
|
43
36
|
end
|
44
37
|
end
|
45
38
|
|
46
39
|
raise data["FailedUpdatedSubscribers"].to_s if data["FailedUpdatedSubscribers"] && data["FailedUpdatedSubscribers"].any?
|
47
40
|
return nil
|
48
41
|
end
|
49
|
-
end
|
42
|
+
end
|
data/lib/apsis-on-steroids.rb
CHANGED
@@ -14,6 +14,8 @@ class ApsisOnSteroids
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def initialize(args)
|
17
|
+
raise "Invalid API key: '#{args[:api_key]}' from: '#{args}'." if args[:api_key].to_s.strip.empty?
|
18
|
+
|
17
19
|
@args = args
|
18
20
|
@http = Http2.new(
|
19
21
|
:host => "se.api.anpdm.com",
|
@@ -41,7 +43,7 @@ class ApsisOnSteroids
|
|
41
43
|
end
|
42
44
|
|
43
45
|
def mailing_lists
|
44
|
-
res = req_json("v1/mailinglists/1/
|
46
|
+
res = req_json("v1/mailinglists/1/999")
|
45
47
|
|
46
48
|
ret = []
|
47
49
|
res["Result"]["Items"].each do |mlist|
|
@@ -54,6 +56,15 @@ class ApsisOnSteroids
|
|
54
56
|
return ret
|
55
57
|
end
|
56
58
|
|
59
|
+
def create_mailing_list(data)
|
60
|
+
res = req_json("v1/mailinglists/", :post, :json => data)
|
61
|
+
if res["Code"] == 1
|
62
|
+
# Success!
|
63
|
+
else
|
64
|
+
raise "Unexpected result: '#{res}'."
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
57
68
|
def mailing_list_by_name(name)
|
58
69
|
self.mailing_lists.each do |mlist|
|
59
70
|
return mlist if name.to_s == mlist.name.to_s
|
@@ -127,7 +138,12 @@ class ApsisOnSteroids
|
|
127
138
|
# Parse arguments, send and parse the result.
|
128
139
|
args = {:url => url}.merge(method_args)
|
129
140
|
http_res = @http.__send__(type, args)
|
130
|
-
|
141
|
+
|
142
|
+
begin
|
143
|
+
res = JSON.parse(http_res.body)
|
144
|
+
rescue JSON::ParserError
|
145
|
+
raise "Invalid JSON given: '#{http_res.body}'."
|
146
|
+
end
|
131
147
|
|
132
148
|
# Check for various kind of server errors and raise them as Ruby errors if present.
|
133
149
|
raise "Failed on server with code #{res["Code"]}: #{res["Message"]}" if res.is_a?(Hash) && res.key?("Code") && res["Code"] < 0
|
@@ -136,4 +152,4 @@ class ApsisOnSteroids
|
|
136
152
|
# Return the result.
|
137
153
|
return res
|
138
154
|
end
|
139
|
-
end
|
155
|
+
end
|
@@ -8,14 +8,30 @@ describe "ApsisOnSteroids" do
|
|
8
8
|
)
|
9
9
|
end
|
10
10
|
|
11
|
+
it "should create and delete a mailing list" do
|
12
|
+
name = "create-mlist-#{Time.now.to_f.to_s}"
|
13
|
+
|
14
|
+
$aos.create_mailing_list(
|
15
|
+
:Name => name,
|
16
|
+
:FromName => "Kasper Johansen",
|
17
|
+
:FromEmail => "kj@naoshi-dev.com",
|
18
|
+
:CharacterSet => "utf-8"
|
19
|
+
)
|
20
|
+
|
21
|
+
mlist = $aos.mailing_list_by_name(name)
|
22
|
+
|
23
|
+
sleep 1
|
24
|
+
mlist.delete
|
25
|
+
end
|
26
|
+
|
11
27
|
it "can get a mailing list" do
|
12
28
|
$mlist = $aos.mailing_list_by_name("kj")
|
13
29
|
end
|
14
30
|
|
15
31
|
it "can create subscribers" do
|
16
32
|
$mlist.create_subscribers([{
|
17
|
-
|
18
|
-
|
33
|
+
:Email => "kj@gfish.com",
|
34
|
+
:Name => "Kasper Johansen"
|
19
35
|
}])
|
20
36
|
end
|
21
37
|
|
@@ -23,23 +39,26 @@ describe "ApsisOnSteroids" do
|
|
23
39
|
$sub = $aos.subscriber_by_email("kj@gfish.com")
|
24
40
|
details = $sub.details
|
25
41
|
details.is_a?(Hash).should eql(true)
|
26
|
-
details.key?(:pending).should eql(
|
42
|
+
details.key?(:pending).should eql(false)
|
27
43
|
end
|
28
44
|
|
29
45
|
it "can update subscribers" do
|
30
46
|
new_email = "kaspernj#{Time.now.to_f}@naoshi-dev.com"
|
31
47
|
$sub.update(:Email => new_email)
|
32
48
|
$sub.details[:Email].should eql(new_email)
|
49
|
+
$sub.details[:Name].should eql("Kasper Johansen")
|
33
50
|
end
|
34
51
|
|
35
52
|
it "should not overwrite data when updating" do
|
36
|
-
|
37
|
-
$sub.update(:
|
53
|
+
phone = Time.now.to_i.to_s
|
54
|
+
$sub.update(:PhoneNumber => phone)
|
55
|
+
$sub.details[:PhoneNumber].should eql(phone)
|
38
56
|
|
39
57
|
new_email = "kaspernj#{Time.now.to_f}@naoshi-dev.com"
|
40
58
|
$sub.update(:Email => new_email)
|
59
|
+
$sub.details[:Email].should eql(new_email)
|
41
60
|
|
42
|
-
$sub.details[:
|
61
|
+
$sub.details[:PhoneNumber].should eql(phone)
|
43
62
|
end
|
44
63
|
|
45
64
|
it "can remove subscribers from lists" do
|
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.
|
5
|
+
version: 0.0.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- kaspernj
|
@@ -17,7 +17,7 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ! '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.0.
|
20
|
+
version: 0.0.16
|
21
21
|
name: http2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.0.
|
29
|
+
version: 0.0.16
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
version_requirements: !ruby/object:Gem::Requirement
|
32
32
|
none: false
|
@@ -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: -
|
147
|
+
hash: -2130577314090490558
|
148
148
|
version: '0'
|
149
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
150
|
none: false
|