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 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