ecircle 0.0.6 → 0.0.7

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.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecircle (0.0.6)
4
+ ecircle (0.0.7)
5
5
  activesupport
6
6
  i18n
7
7
  rake
@@ -14,13 +14,17 @@ GEM
14
14
  multi_json (~> 1.0)
15
15
  akami (1.0.0)
16
16
  gyoku (>= 0.4.0)
17
+ archive-tar-minitar (0.5.2)
17
18
  builder (3.0.0)
19
+ columnize (0.3.4)
18
20
  diff-lcs (1.1.3)
19
21
  gyoku (0.4.4)
20
22
  builder (>= 2.1.2)
21
23
  httpi (0.9.5)
22
24
  rack
23
25
  i18n (0.6.0)
26
+ linecache19 (0.5.12)
27
+ ruby_core_source (>= 0.1.4)
24
28
  multi_json (1.0.3)
25
29
  nokogiri (1.5.0)
26
30
  nori (1.0.2)
@@ -34,6 +38,16 @@ GEM
34
38
  rspec-expectations (2.6.0)
35
39
  diff-lcs (~> 1.1.2)
36
40
  rspec-mocks (2.6.0)
41
+ ruby-debug-base19 (0.11.25)
42
+ columnize (>= 0.3.1)
43
+ linecache19 (>= 0.5.11)
44
+ ruby_core_source (>= 0.1.4)
45
+ ruby-debug19 (0.11.6)
46
+ columnize (>= 0.3.1)
47
+ linecache19 (>= 0.5.11)
48
+ ruby-debug-base19 (>= 0.11.19)
49
+ ruby_core_source (0.1.5)
50
+ archive-tar-minitar (>= 0.5.2)
37
51
  savon (0.9.7)
38
52
  akami (~> 1.0)
39
53
  builder (>= 2.1.2)
@@ -44,6 +58,7 @@ GEM
44
58
  wasabi (~> 2.0)
45
59
  wasabi (2.0.0)
46
60
  nokogiri (>= 1.4.0)
61
+ yard (0.7.3)
47
62
 
48
63
  PLATFORMS
49
64
  ruby
@@ -51,3 +66,5 @@ PLATFORMS
51
66
  DEPENDENCIES
52
67
  ecircle!
53
68
  rspec (= 2.6.0)
69
+ ruby-debug19
70
+ yard
data/README.md CHANGED
@@ -5,7 +5,9 @@ Synopsis
5
5
 
6
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).
7
7
 
8
- This is WIP and far from complete.
8
+ The API coverage is far from complete.
9
+
10
+ However, the existing API coverage can be considered stable and is used in production.
9
11
 
10
12
  Features
11
13
  -------------
@@ -15,33 +17,60 @@ So far just a couple of methods:
15
17
  * create_member
16
18
  * create_or_update_user_by_email
17
19
  * delete_member
18
- * logon
19
20
  * send_parametrized_single_message_to_user
20
21
 
22
+ See the rdoc for details on arguments and return values: [TODO Add link]
23
+
21
24
  To do
22
25
  -------------
23
26
 
24
- * Rethink current structure e.g.
25
- * doing an explicit logon in every method is ugly at best
26
- * inefficient handling of session token (we could and should reuse it instead of requesting a new one every time)
27
+ * Rethink current structure
27
28
  * Implement missing API methods
28
29
  * Specs
29
30
  * RDoc
31
+ * Remove JobPackage from gem since this is highly specific
30
32
 
31
33
  Configuration
32
34
  -------------
33
35
 
34
36
  ```Ruby
35
37
  Ecircle.configure do |config|
36
- config.user = 'your@user.com'
37
- config.realm = 'http://your.realm.com'
38
- config.password = 'your_password'
38
+ config.user = 'your@user.com'
39
+ config.sync_realm = 'http://your.realm.com'
40
+ config.password = 'your_password'
39
41
  end
40
42
  ```
41
43
 
42
- Usage
44
+ The reason for the unusual configuration setting "sync_realm" is that there is also an asynchronous ecircle API with a different realm.
45
+
46
+ Logon
47
+ -------------
48
+
49
+ The ecircle gem does the session handling for you, there is no need to logon explicitly.
50
+ Session tokens will be re-used to keep the number of session related traffic to a minimum.
51
+
52
+
53
+ Examples
43
54
  -------------
44
55
 
45
56
  ```Ruby
46
- Ecircle.create_or_update_user_by_email 'user@email.com'
57
+ # Given you have called Ecircle.configure appropriatly...
58
+
59
+ # 1.) Create a user
60
+ uid = Ecircle.create_or_update_user_by_email 'your@email.com'
61
+ puts "Ecircle user ID: #{uid}"
62
+
63
+ # 2.) Add this user as a member to a group - e.g. for newsletters
64
+ mid = Ecircle.create_member uid, 'your_group_id'
65
+ puts "Ecircle member Id: #{mid}"
66
+
67
+ # 3.) Delete member from group - e.g. when he unsubscribes
68
+ Ecircle.delete_member mid
69
+
70
+ # 4.) Send the user a transactional email:
71
+ Ecircle.send_parametrized_single_message_to_user uid,
72
+ your_template_id_at_ecircle,
73
+ [ :name, :message ],
74
+ [ 'Tom', 'welcome!' ]
75
+
47
76
  ```
data/ecircle.gemspec CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |s|
23
23
  s.add_dependency 'rake'
24
24
  s.add_dependency 'savon', '>=0.9.7'
25
25
  s.add_development_dependency 'rspec', '2.6.0'
26
+ s.add_development_dependency 'yard'
27
+ s.add_development_dependency 'ruby-debug19'
26
28
  end
data/lib/ecircle.rb CHANGED
@@ -16,14 +16,18 @@ end
16
16
 
17
17
  module Ecircle
18
18
  class << self
19
+
20
+ #@private
19
21
  def configuration
20
22
  @configuration ||= Configuration.new
21
23
  end
22
24
 
25
+ #@private
23
26
  def client
24
27
  @client ||= Client.new
25
28
  end
26
29
 
30
+ #@private
27
31
  def configure &block
28
32
  block.call configuration
29
33
  end
@@ -1,14 +1,16 @@
1
1
  module Ecircle
2
2
  class Client
3
+ #@private
3
4
  attr_accessor :auth_token
4
5
 
6
+ #@private
5
7
  def ensuring_logon &block
6
8
  begin
7
9
  @auth_token ||= logon
8
10
  rescue Savon::SOAP::Fault => e
9
11
  # If we are here this probably means that our login credentials are wrong.
10
12
  response = e.to_hash
11
- if response[:fault][:faultcode] == 'soapenv:Server.userException' && response[:fault][:detail][:fault][:code] == '502'
13
+ if response[:fault][:detail][:fault][:code] == '502'
12
14
  help = <<-doc
13
15
  !!!
14
16
  Got an authentication exception, chances are good that you're credentials are wrong, so better double check that.
@@ -43,6 +45,7 @@ module Ecircle
43
45
  end
44
46
  end
45
47
 
48
+ # @private
46
49
  def client
47
50
  @client ||= Savon::Client.new do
48
51
  wsdl.document = Ecircle.configuration.wsdl
@@ -51,6 +54,13 @@ module Ecircle
51
54
  end
52
55
  end
53
56
 
57
+ # Creates a member, which basically is just an association between a user and a group.
58
+ #
59
+ # @param [Integer] user_id ecircle user_id
60
+ # @param [Integer] group_id ecircle group_id
61
+ # @param [Boolean] invite send an invite by ecircle
62
+ # @param [Boolean] send_message send a message by ecircle
63
+ # @return [String] the member id
54
64
  def create_member user_id, group_id, invite = false, send_message = false
55
65
  ensuring_logon do
56
66
  @response = client.request :createMember do
@@ -66,31 +76,59 @@ module Ecircle
66
76
  end
67
77
  end
68
78
 
69
- def create_or_update_user_by_email email
79
+ # Create or update user by email
80
+ # see http://developer.ecircle-ag.com/apiwiki/wiki/SynchronousSoapAPI#section-SynchronousSoapAPI-UserObjectExample
81
+ # for an example of the user xml
82
+ # @param [Hash] user_xml, in it's most simple form a { :email => 'test@test.com' } is sufficient
83
+ # @return [Integer] the user id
84
+ def create_or_update_user_by_email attributes
85
+ user_xml = '<user>' + attributes.each_with_object('') do |slice, xml|
86
+ name, value = slice.first, slice.last;
87
+ xml << "<#{name}>#{value}</#{name}>"
88
+ end+'</user>'
89
+
70
90
  ensuring_logon do
71
91
  @response = client.request :createOrUpdateUserByEmail do
72
92
  soap.body = {
73
93
  :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>",
94
+ :userXml => user_xml,
75
95
  :sendMessage => 0
76
96
  }
77
97
  end
78
- @response.body[:create_or_update_user_by_email_response][:create_or_update_user_by_email_return].to_s
98
+ @response.body[:create_or_update_user_by_email_response][:create_or_update_user_by_email_return].to_i
79
99
  end
80
100
  end
81
101
 
102
+ # Delete a member.
103
+ #
104
+ # @param [Integer] member_id ecircle member id
105
+ # @return [Boolean]
82
106
  def delete_member member_id
83
107
  ensuring_logon do
84
- @response = client.request :deleteMember do
85
- soap.body = {
86
- :session => auth_token,
87
- :memberId => member_id
88
- }
108
+ # In case we pass in a non existing member id we'll get a corresponding exception, so we need to catch this here as well.
109
+ begin
110
+ @response = client.request :deleteMember do
111
+ soap.body = {
112
+ :session => auth_token,
113
+ :memberId => member_id
114
+ }
115
+ end
116
+ rescue Savon::SOAP::Fault => e
117
+ if e.to_hash[:fault][:detail][:fault][:code] == '100'
118
+ # "100" means member ID didn't exist so just return false.
119
+ return false
120
+ else
121
+ # Re-raise cause something else went wrong.
122
+ raise
123
+ end
89
124
  end
90
- @response.body[:delete_member_response][:delete_member_return].to_s
91
125
  end
126
+ true
92
127
  end
93
128
 
129
+ # Logon. You don't need to call this explicitly but it's useful for debugging.
130
+ #
131
+ # @return [String] the session id
94
132
  def logon
95
133
  @response = client.request :logon do
96
134
  soap.body = {
@@ -102,6 +140,13 @@ module Ecircle
102
140
  @response.body[:logon_response][:logon_return].to_s
103
141
  end
104
142
 
143
+ # Send a parametrized single message to user - you need an existing ecircle template ID for this.
144
+ #
145
+ # @param [Integer] user_id ecircle user_id
146
+ # @param [Integer] message_id the ecircle template ID
147
+ # @param [Array] the names of the variables you want to interpolate in the template
148
+ # @param [Array] the values of the variables you want to interpolate in the template
149
+ # @return nil
105
150
  def send_parametrized_single_message_to_user user_id, message_id, names = [], values = []
106
151
  ensuring_logon do
107
152
  @response = client.request :sendParametrizedSingleMessageToUser do
@@ -4,8 +4,10 @@ module Ecircle
4
4
  ENDPOINT = 'http://webservices.ecircle-ag.com/rpc'
5
5
  NAMESPACE = "http://webservices.ecircleag.com/rpcns"
6
6
 
7
+ # @private
7
8
  attr_accessor :user, :password, :sync_realm, :async_realm, :wsdl, :endpoint, :namespace
8
9
 
10
+ # @private
9
11
  def initialize
10
12
  @wsdl = WSDL
11
13
  @endpoint = ENDPOINT
@@ -2,6 +2,7 @@ module Ecircle
2
2
  module Helper
3
3
  extend self
4
4
 
5
+ # @private
5
6
  def date_format date
6
7
  tz = date.strftime('%z')
7
8
  matcher = /(.*)(00)/.match(tz) # We need to do that because ecircle won't accept +0200, just +02:00.
@@ -2,6 +2,7 @@ module Ecircle
2
2
  module JobPackage
3
3
  TARGET_CONTENT_ENCODING = 'ISO-8859-1'
4
4
 
5
+ # @private
5
6
  def self.send_async_message_to_group(options)
6
7
  client = Savon::Client.new do
7
8
  wsdl.endpoint = options[:endpoint]
@@ -17,6 +18,7 @@ module Ecircle
17
18
  end
18
19
  end
19
20
 
21
+ # @private
20
22
  def self.soap_body(options)
21
23
  xml = Builder::XmlMarkup.new(:indent => 2)
22
24
  xml.control 'xmlns' => "http://webservices.ecircle-ag.com/ecm", 'request-id' => options[:request_id], 'group-id' => options[:group_id] do
@@ -1,3 +1,3 @@
1
1
  module Ecircle
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  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.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-11-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &78327690 !ruby/object:Gem::Requirement
16
+ requirement: &69598750 !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: *78327690
24
+ version_requirements: *69598750
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: i18n
27
- requirement: &78326710 !ruby/object:Gem::Requirement
27
+ requirement: &69598090 !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: *78326710
35
+ version_requirements: *69598090
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &78325790 !ruby/object:Gem::Requirement
38
+ requirement: &69597470 !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: *78325790
46
+ version_requirements: *69597470
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: savon
49
- requirement: &78324890 !ruby/object:Gem::Requirement
49
+ requirement: &69596650 !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: *78324890
57
+ version_requirements: *69596650
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &78323840 !ruby/object:Gem::Requirement
60
+ requirement: &69595940 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - =
@@ -65,7 +65,29 @@ dependencies:
65
65
  version: 2.6.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *78323840
68
+ version_requirements: *69595940
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: &69595540 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *69595540
80
+ - !ruby/object:Gem::Dependency
81
+ name: ruby-debug19
82
+ requirement: &69594720 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *69594720
69
91
  description: The ecircle gem aims to be a full-fledged client for all ecircle services.
70
92
  email:
71
93
  - timo.roessner@googlemail.com
@@ -103,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
125
  version: '0'
104
126
  segments:
105
127
  - 0
106
- hash: 645926193
128
+ hash: -98517107
107
129
  required_rubygems_version: !ruby/object:Gem::Requirement
108
130
  none: false
109
131
  requirements:
@@ -112,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
134
  version: '0'
113
135
  segments:
114
136
  - 0
115
- hash: 645926193
137
+ hash: -98517107
116
138
  requirements: []
117
139
  rubyforge_project: ecircle
118
140
  rubygems_version: 1.8.10
@@ -120,3 +142,4 @@ signing_key:
120
142
  specification_version: 3
121
143
  summary: Ecircle gem
122
144
  test_files: []
145
+ has_rdoc: