apsis-on-steroids 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
- gem "http2", ">= 0.0.15"
6
+ gem "http2", ">= 0.0.16"
7
7
  gem "string-cases"
8
8
 
9
9
  # Add dependencies to develop your gem here.
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.15)
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.15)
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.0
1
+ 0.0.1
@@ -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.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.15"])
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.15"])
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.15"])
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"])
@@ -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
@@ -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
- loop do
37
- res = aos.req_json(url.path)
38
-
39
- if res["State"] == "2"
40
- url_data = URI.parse(res["DataUrl"])
41
- data = aos.req_json(url_data.path)
42
- break
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
@@ -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/10")
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
- res = JSON.parse(http_res.body)
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
- "Email" => "kj@gfish.com",
18
- "Name" => "Kasper Johansen"
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(true)
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
- addr = Time.now.to_f.to_s
37
- $sub.update(:Address => addr)
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[:Address].should eql(addr)
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.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.15
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.15
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: -1005707843598481402
147
+ hash: -2130577314090490558
148
148
  version: '0'
149
149
  required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  none: false