Travis Build Status
Synopsis
This gem aims to be a full-fledged solution for the ecircle API, the synchronous one and the asynchronous one.
The API coverage is far from complete, however as far as I can see the most useful / frequent methods are covered.
The existing API methods can be considered stable and are used in production.
Installation
Either as a gem:
gem install ecircle
or via Bundler by adding it to your Gemfile.
Configuration
Ecircle.configure do |config|
config.user = '[email protected]'
config.sync_realm = 'http://your.realm.com'
config.password = 'your_password'
end
The reason for the unusual configuration setting "sync_realm" is that there is also an asynchronous ecircle API with a different realm.
Response handling
The ecircle gem will always return a wrapped response for all API methods, except for the logon method (see examples below or the API doc).
The wrapped response object is just a neat abstraction to hide Ecircle's horrible, horrible error handling from you and provides several methods for doing so.
The most usefull (and self-explanatory) would be:
- success?
- error_message
- fault_code
- ecircle_id IF the API returns an ID an success, e.g. for create_member and create_or_update_user_by_email
- convenience methods which depend on your (failed request), e.g.:
- member_does_not_exist? (delete_member requests)
- message_id_does_not_exist? (send_parametrized_message_to_user requests)
- no_such_group? (create_member requests)
- no_such_user? (create_member_requests)
For details see here
Features
Synchronous API
The following methods are implemented:
- createMember
- createOrUpdateGroup
- createOrUpdateUserByEmail
- deleteGroup
- deleteMember
- logon (only for debugging purposes)
- logout
- sendParametrizedSingleMessageToUser
See the online API documentation for details on arguments and return values
Asnchronous API
Since the asynchronous API is neither documented by ecircle nor intuitive at all, you're on your own. Jump to the examples section and good luck.
Using ecircle
Synchronous API
# Given you have called Ecircle.configure appropriatly...
# 1.) Create a user
r = Ecircle.create_or_update_user_by_email '[email protected]'
uid = r.ecircle_id
puts "Ecircle user ID: #{uid}"
# 2.) Create a group
r = Ecircle.create_or_update_group :name => 'ecircletestgroup', :description => 'ecircletestgroup', :email => '[email protected]'
gid = r.ecircle_id
puts "Ecircle group ID: #{gid}"
# 3.) Add this user as a member to a group - e.g. for newsletters
r = Ecircle.create_member uid, gid
mid = r.ecircle_id
puts "Ecircle member Id: #{mid}"
# 4.) Delete member from group - e.g. when he unsubscribes
Ecircle.delete_member mid
# 5.) Send the user a transactional email:
Ecircle. uid,
your_template_id_at_ecircle,
[ :name, :message ],
[ 'Tom', 'welcome!' ]
# 6.) Delete the group
Ecircle.delete_group your_group_id
# 7.) Log out
Ecircle.logout
Asynchronous API
Note the async_realm in the configure block, this another realm as for the sync API.
Ecircle.configure do |config|
config.user = '[email protected]'
config.async_realm = 'http://your.async.realm.com' # IMPORTANT - different realm.
config.password = 'your_password'
end
@options = {
:endpoint => 'http://your.domain/eC-MessageService',
:request_id => '1234',
:group_id => '5678',
:send_out_date => 70.minutes.from_now, # Must be at least one hour in the future!
:send_date_for_report => 140.minutes.from_now, # Must be at least one hour in the future *after* dispatching!
:report_email => '[email protected]',
:report_email_name => 'Your name',
:subject => 'Newsletter',
:text => 'Newsletter text content',
:html => 'Newsletter html content'
}
Ecircle::JobPackage. @options
To do
- Implement missing API methods:
- deleteUser
- deleteUserByEmail
- lookupGroups
- Add more functional specs
Logon
The ecircle gem does the session handling for you, there is no need to logon explicitly. Session tokens will be re-used to keep the number of session related traffic to a minimum.
Running the specs
In order to run the functional specs you need to fill in the configuration values at the top of spec/api_spec.rb.disabled with your ecircle account data and then rename spec/api_spec.rb.disabled to spec/api_spec.rb.
Currently you need to clean up created groups and members manually afterwards (yes, I know that sucks) since ecircle doesn't offer a test api so all tests are going against the live API. Without a test API I figured it's too dangerous to execute destructive actions like delete_group so the only actions which are actually tested are non-destructive like create_or_update_user.... and so on, but never methods like delete_group. Finding data that has been created by the tests is pretty easy, right now there is only one user with email '[email protected]' and one or more groups whose names are 'API TEST' so you can easily find test remnants via the web interface.