ecircle 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -0
- data/Rakefile +7 -1
- data/lib/ecircle/client.rb +81 -34
- data/lib/ecircle/helper.rb +3 -1
- data/lib/ecircle/job_package.rb +37 -35
- data/lib/ecircle/version.rb +1 -1
- data/spec/client_spec.rb +2 -3
- metadata +16 -15
data/.travis.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm: 1.9.2
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
[![Build Status](https://secure.travis-ci.org/troessner/ecircle.png)](http://travis-ci.org/troessner/ecircle)
|
1
2
|
|
3
|
+
Synopsis
|
4
|
+
-------------
|
2
5
|
|
3
6
|
This gem aims to be a full-fledged solution for the ecircle API, the [synchronous one](http://webservices.ecircle-ag.com/soap/javadoc/com/ecircleag/webservices/EcMApi.html) and the [asynchronous one](http://developer.ecircle-ag.com/apiwiki/wiki/AsynchronousAPI).
|
4
7
|
|
data/Rakefile
CHANGED
data/lib/ecircle/client.rb
CHANGED
@@ -1,5 +1,48 @@
|
|
1
1
|
module Ecircle
|
2
2
|
class Client
|
3
|
+
attr_accessor :auth_token
|
4
|
+
|
5
|
+
def ensuring_logon &block
|
6
|
+
begin
|
7
|
+
@auth_token ||= logon
|
8
|
+
rescue Savon::SOAP::Fault => e
|
9
|
+
# If we are here this probably means that our login credentials are wrong.
|
10
|
+
response = e.to_hash
|
11
|
+
if response[:fault][:faultcode] == 'soapenv:Server.userException' && response[:fault][:detail][:fault][:code] == '502'
|
12
|
+
help = <<-doc
|
13
|
+
!!!
|
14
|
+
Got an authentication exception, chances are good that you're credentials are wrong, so better double check that.
|
15
|
+
You can explicitly check for it by calling something like:
|
16
|
+
Ecircle.configure do..
|
17
|
+
Ecircle.logon
|
18
|
+
!!!
|
19
|
+
doc
|
20
|
+
puts help
|
21
|
+
else
|
22
|
+
puts "!!! Got an unexpected fault code from Savon: #{response.inspect} !!!"
|
23
|
+
end
|
24
|
+
raise
|
25
|
+
rescue => e
|
26
|
+
puts "!!! Got unexpected non-Savon exception: #{e.class} !!!"
|
27
|
+
raise
|
28
|
+
end
|
29
|
+
|
30
|
+
first_try = true
|
31
|
+
begin
|
32
|
+
block.call
|
33
|
+
rescue Savon::SOAP::Fault => e
|
34
|
+
# If we are here that probably means that our session token has expired.
|
35
|
+
if first_try
|
36
|
+
first_try = false
|
37
|
+
@auth_token = logon
|
38
|
+
retry
|
39
|
+
else
|
40
|
+
puts "!!! Could not re-authenticate after session expired: #{e.to_hash.inspect} !!!"
|
41
|
+
raise
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
3
46
|
def client
|
4
47
|
@client ||= Savon::Client.new do
|
5
48
|
wsdl.document = Ecircle.configuration.wsdl
|
@@ -9,40 +52,43 @@ module Ecircle
|
|
9
52
|
end
|
10
53
|
|
11
54
|
def create_member user_id, group_id, invite = false, send_message = false
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
55
|
+
ensuring_logon do
|
56
|
+
@response = client.request :createMember do
|
57
|
+
soap.body = {
|
58
|
+
:session => auth_token,
|
59
|
+
:userId => user_id,
|
60
|
+
:groupId => group_id,
|
61
|
+
:invite => invite.to_s,
|
62
|
+
:sendMessage => send_message.to_s
|
63
|
+
}
|
64
|
+
end
|
65
|
+
@response.body[:create_member_response][:create_member_return].to_s
|
21
66
|
end
|
22
|
-
@response.body[:create_member_response][:create_member_return].to_s
|
23
67
|
end
|
24
68
|
|
25
69
|
def create_or_update_user_by_email email
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
70
|
+
ensuring_logon do
|
71
|
+
@response = client.request :createOrUpdateUserByEmail do
|
72
|
+
soap.body = {
|
73
|
+
:session => auth_token, # TODO We can't use @auth_token here cause then the session_id is nil. Why?
|
74
|
+
:userXml => "<user><email>#{email}</email></user>",
|
75
|
+
:sendMessage => 0
|
76
|
+
}
|
77
|
+
end
|
78
|
+
@response.body[:create_or_update_user_by_email_response][:create_or_update_user_by_email_return].to_s
|
33
79
|
end
|
34
|
-
@response.body[:create_or_update_user_by_email_response][:create_or_update_user_by_email_return].to_s
|
35
80
|
end
|
36
81
|
|
37
82
|
def delete_member member_id
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
83
|
+
ensuring_logon do
|
84
|
+
@response = client.request :deleteMember do
|
85
|
+
soap.body = {
|
86
|
+
:session => auth_token,
|
87
|
+
:memberId => member_id
|
88
|
+
}
|
89
|
+
end
|
90
|
+
@response.body[:delete_member_response][:delete_member_return].to_s
|
44
91
|
end
|
45
|
-
@response.body[:delete_member_response][:delete_member_return].to_s
|
46
92
|
end
|
47
93
|
|
48
94
|
def logon
|
@@ -57,15 +103,16 @@ module Ecircle
|
|
57
103
|
end
|
58
104
|
|
59
105
|
def send_parametrized_single_message_to_user user_id, message_id, names = [], values = []
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
106
|
+
ensuring_logon do
|
107
|
+
@response = client.request :sendParametrizedSingleMessageToUser do
|
108
|
+
soap.body = {
|
109
|
+
:session => auth_token,
|
110
|
+
:singleMessageId => message_id,
|
111
|
+
:userId => user_id,
|
112
|
+
:names => names,
|
113
|
+
:values => values
|
114
|
+
}
|
115
|
+
end
|
69
116
|
end
|
70
117
|
end
|
71
118
|
end
|
data/lib/ecircle/helper.rb
CHANGED
@@ -3,7 +3,9 @@ module Ecircle
|
|
3
3
|
extend self
|
4
4
|
|
5
5
|
def date_format date
|
6
|
-
date.strftime(
|
6
|
+
tz = date.strftime('%z')
|
7
|
+
matcher = /(.*)(00)/.match(tz) # We need to do that because ecircle won't accept +0200, just +02:00.
|
8
|
+
"#{date.strftime('%Y-%m-%dT%H:%M:%S')}#{matcher[1]}:#{matcher[2]}"
|
7
9
|
end
|
8
10
|
end
|
9
11
|
end
|
data/lib/ecircle/job_package.rb
CHANGED
@@ -4,11 +4,11 @@ module Ecircle
|
|
4
4
|
|
5
5
|
def self.send_async_message_to_group(options)
|
6
6
|
client = Savon::Client.new do
|
7
|
-
wsdl.endpoint
|
7
|
+
wsdl.endpoint = options[:endpoint]
|
8
8
|
wsdl.namespace = "http://webservices.ecircleag.com/ws"
|
9
9
|
end
|
10
10
|
|
11
|
-
response = client.request :
|
11
|
+
response = client.request :postGroupRequest, 'xmlns' => 'http://webservices.ecircle-ag.com/ws' do
|
12
12
|
soap.header = { :authenticate => { :realm => Ecircle.configuration.async_realm,
|
13
13
|
:email => Ecircle.configuration.user,
|
14
14
|
:password => Ecircle.configuration.password },
|
@@ -19,47 +19,49 @@ module Ecircle
|
|
19
19
|
|
20
20
|
def self.soap_body(options)
|
21
21
|
xml = Builder::XmlMarkup.new(:indent => 2)
|
22
|
-
xml.
|
23
|
-
xml.
|
24
|
-
xml.tag! '
|
25
|
-
|
26
|
-
|
27
|
-
xml.tag! 'send-date' do
|
28
|
-
xml.date Helper.date_format(options[:send_out_date])
|
29
|
-
end
|
30
|
-
xml.tag! 'send-report-address' do
|
31
|
-
xml.tag! 'email-address' do
|
32
|
-
xml.email options[:report_email]
|
33
|
-
xml.name "Send report for newsletter for location #{options[:location_name]} sent out on #{options[:send_out_date]}"
|
22
|
+
xml.control 'xmlns' => "http://webservices.ecircle-ag.com/ecm", 'request-id' => options[:request_id], 'group-id' => options[:group_id] do
|
23
|
+
xml.message 'message-id' => 'new', 'delete' => 'false' do
|
24
|
+
xml.tag! 'sendout-preferences' do
|
25
|
+
xml.tag! 'object-handling', 'html-images' => 'untouched'
|
26
|
+
xml.tag! 'email-channel', 'preferred-format' => 'email-html-multipart'
|
34
27
|
end
|
35
|
-
|
36
|
-
|
37
|
-
|
28
|
+
xml.tag! 'send-date' do
|
29
|
+
xml.date Helper.date_format(options[:send_out_date])
|
30
|
+
end
|
31
|
+
xml.tag! 'send-report-address' do
|
38
32
|
xml.tag! 'email-address' do
|
39
33
|
xml.email options[:report_email]
|
40
|
-
xml.name "
|
34
|
+
xml.name "Send report for newsletter for location #{options[:location_name]} sent out on #{options[:send_out_date]}"
|
41
35
|
end
|
42
36
|
end
|
43
|
-
xml.tag! '
|
44
|
-
xml.
|
37
|
+
xml.tag! 'status-report', 'report-id' => 'new', 'delete' => 'false', 'user-tracking-details' => 'false', 'link-tracking-details' => 'false', 'bouncing-details' => 'false' do
|
38
|
+
xml.tag! 'report-address' do
|
39
|
+
xml.tag! 'email-address' do
|
40
|
+
xml.email options[:report_email]
|
41
|
+
xml.name "Status report for newsletter for location #{options[:location_name]} sent out on #{options[:send_out_date]}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
xml.tag! 'send-date' do
|
45
|
+
xml.date Helper.date_format(options[:send_date_for_report])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
xml.content 'target-content-encoding' => TARGET_CONTENT_ENCODING do
|
49
|
+
xml.subject options[:subject], 'target-encoding' => TARGET_CONTENT_ENCODING
|
50
|
+
xml.text options[:text], 'target-content-encoding' => TARGET_CONTENT_ENCODING
|
51
|
+
xml.html options[:html], 'target-content-encoding' => TARGET_CONTENT_ENCODING
|
45
52
|
end
|
46
53
|
end
|
47
|
-
xml.
|
48
|
-
xml.
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
xml.tag! 'success-report-address' do
|
54
|
-
xml.tag! 'email-address' do
|
55
|
-
xml.email options[:report_email]
|
56
|
-
xml.name "Success report for newsletter for location #{options[:location_name]} sent out on #{options[:send_out_date]}"
|
54
|
+
xml.tag! 'success-report-address' do
|
55
|
+
xml.tag! 'email-address' do
|
56
|
+
xml.email options[:report_email]
|
57
|
+
xml.name "Success report for newsletter for location #{options[:location_name]} sent out on #{options[:send_out_date]}"
|
58
|
+
end
|
57
59
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
xml.tag! 'failure-report-address' do
|
61
|
+
xml.tag! 'email-address' do
|
62
|
+
xml.email options[:report_email]
|
63
|
+
xml.name "Failure report for newsletter for location #{options[:location_name]} sent out on #{options[:send_out_date]}"
|
64
|
+
end
|
63
65
|
end
|
64
66
|
end
|
65
67
|
xml.target!
|
data/lib/ecircle/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -16,8 +16,7 @@ describe Ecircle::JobPackage do
|
|
16
16
|
}
|
17
17
|
|
18
18
|
@doc = <<xml
|
19
|
-
|
20
|
-
<control xmlns="http://webservices.ecircle-ag.com/ecm" request-id="#{@options[:request_id]}" group-id="#{@options[:group_id]}">
|
19
|
+
<control xmlns="http://webservices.ecircle-ag.com/ecm" request-id="1234" group-id="5678">
|
21
20
|
<message message-id="new" delete="false">
|
22
21
|
<sendout-preferences>
|
23
22
|
<object-handling html-images="untouched"/>
|
@@ -67,7 +66,7 @@ xml
|
|
67
66
|
|
68
67
|
describe 'xml_for_asynch_calls' do
|
69
68
|
it 'should generate valid xml' do
|
70
|
-
Ecircle::JobPackage.
|
69
|
+
Ecircle::JobPackage.soap_body(@options).should == @doc
|
71
70
|
end
|
72
71
|
end
|
73
72
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecircle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-02 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &78327690 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *78327690
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: i18n
|
27
|
-
requirement: &
|
27
|
+
requirement: &78326710 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *78326710
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &78325790 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *78325790
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: savon
|
49
|
-
requirement: &
|
49
|
+
requirement: &78324890 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.9.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *78324890
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec
|
60
|
-
requirement: &
|
60
|
+
requirement: &78323840 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - =
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 2.6.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *78323840
|
69
69
|
description: The ecircle gem aims to be a full-fledged client for all ecircle services.
|
70
70
|
email:
|
71
71
|
- timo.roessner@googlemail.com
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- .gitignore
|
77
77
|
- .rvmrc
|
78
|
+
- .travis.yml
|
78
79
|
- Gemfile
|
79
80
|
- Gemfile.lock
|
80
81
|
- README.md
|
@@ -102,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
103
|
version: '0'
|
103
104
|
segments:
|
104
105
|
- 0
|
105
|
-
hash:
|
106
|
+
hash: 645926193
|
106
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
108
|
none: false
|
108
109
|
requirements:
|
@@ -111,10 +112,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
112
|
version: '0'
|
112
113
|
segments:
|
113
114
|
- 0
|
114
|
-
hash:
|
115
|
+
hash: 645926193
|
115
116
|
requirements: []
|
116
117
|
rubyforge_project: ecircle
|
117
|
-
rubygems_version: 1.8.
|
118
|
+
rubygems_version: 1.8.10
|
118
119
|
signing_key:
|
119
120
|
specification_version: 3
|
120
121
|
summary: Ecircle gem
|