ecircle 0.0.5 → 0.0.6
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/.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
|
+
[](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
|