bgetting-hominid 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/VERSION.yml +1 -1
  2. data/hominid.gemspec +2 -2
  3. data/lib/hominid.rb +51 -139
  4. metadata +2 -2
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 1
4
- :patch: 4
4
+ :patch: 5
data/hominid.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hominid}
5
- s.version = "1.1.4"
5
+ s.version = "1.1.5"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Brian Getting"]
9
- s.date = %q{2009-07-08}
9
+ s.date = %q{2009-07-26}
10
10
  s.description = %q{Hominid is a Rails GemPlugin for interacting with the Mailchimp API}
11
11
  s.email = %q{brian@terra-firma-design.com}
12
12
  s.extra_rdoc_files = [
data/lib/hominid.rb CHANGED
@@ -1,18 +1,30 @@
1
1
  require 'xmlrpc/client'
2
2
 
3
+ class HominidError < RuntimeError
4
+ def initialize(message)
5
+ super(message)
6
+ end
7
+ end
8
+
9
+ class HominidCommunicationError < HominidError
10
+ def initialize(message)
11
+ super(message)
12
+ end
13
+ end
14
+
3
15
  class Hominid
4
16
 
5
17
  # MailChimp API Documentation: http://www.mailchimp.com/api/1.2/
6
18
  MAILCHIMP_API = "http://api.mailchimp.com/1.2/"
7
19
 
8
- def initialize(config=nil)
20
+ def initialize(config = nil)
9
21
  load_monkey_brains(config)
10
22
  @chimpApi ||= XMLRPC::Client.new2(MAILCHIMP_API)
11
- return self
12
23
  end
13
24
 
14
25
  def load_monkey_brains(config)
15
26
  config = YAML.load(File.open("#{RAILS_ROOT}/config/hominid.yml"))[RAILS_ENV].symbolize_keys unless config
27
+
16
28
  @chimpUsername = config[:username].to_s
17
29
  @chimpPassword = config[:password].to_s
18
30
  @api_key = config[:api_key]
@@ -44,7 +56,7 @@ class Hominid
44
56
  def api_keys(include_expired = false)
45
57
  begin
46
58
  @chimpApi ||= XMLRPC::Client.new2(MAILCHIMP_API)
47
- @api_keys = @chimpApi.call("apikeys", @chimpUsername, @chimpPassword, @api_key, include_expired)
59
+ @api_keys = @chimpApi.call("apikeys", @chimpUsername, @chimpPassword, include_expired)
48
60
  rescue
49
61
  return nil
50
62
  end
@@ -54,11 +66,7 @@ class Hominid
54
66
 
55
67
  def campaign_content(campaign_id)
56
68
  # Get the content of a campaign
57
- begin
58
- @content = @chimpApi.call("campaignContent", @api_key, campaign_id)
59
- rescue
60
- return nil
61
- end
69
+ @content = call("campaignContent", campaign_id)
62
70
  end
63
71
 
64
72
  def campaigns(filters = {}, start = 0, limit = 50)
@@ -76,178 +84,102 @@ class Hominid
76
84
  # :sedtime_start = (string) Show campaigns sent after YYYY-MM-DD HH:mm:ss.
77
85
  # :sendtime_end = (string) Show campaigns sent before YYYY-MM-DD HH:mm:ss.
78
86
  # :subject = (boolean) Filter by exact values, or search within content for filter values.
79
- begin
80
- @campaigns = @chimpApi.call("campaigns", @api_key, filters, start, limit)
81
- rescue
82
- return nil
83
- end
87
+ @campaigns = call("campaigns", filters, start, limit)
84
88
  end
85
89
 
86
90
  def create_campaign(type = 'regular', options = {}, content = {}, segment_options = {}, type_opts = {})
87
91
  # Create a new campaign
88
- begin
89
- @campaign = @chimpApi.call("campaignCreate", @api_key, type, options, content, segment_options, type_opts)
90
- rescue
91
- return nil
92
- end
92
+ @campaign = call("campaignCreate", type, options, content, segment_options, type_opts)
93
93
  end
94
94
 
95
95
  def delete_campaign(campaign_id)
96
96
  # Delete a campaign
97
- begin
98
- @campaign = @chimpApi.call("campaignDelete", @api_key, campaign_id)
99
- rescue
100
- false
101
- end
97
+ @campaign = call("campaignDelete", campaign_id)
102
98
  end
103
99
 
104
100
  def replicate_campaign(campaign_id)
105
101
  # Replicate a campaign (returns ID of new campaign)
106
- begin
107
- @campaign = @chimpApi.call("campaignReplicate", @api_key, campaign_id)
108
- rescue
109
- false
110
- end
102
+ @campaign = call("campaignReplicate", campaign_id)
111
103
  end
112
104
 
113
105
  def schedule_campaign(campaign_id, time = "#{1.day.from_now}")
114
106
  # Schedule a campaign
115
107
  ## TODO: Add support for A/B Split scheduling
116
- begin
117
- @chimpApi.call("campaignSchedule", @api_key, campaign_id, time)
118
- rescue
119
- false
120
- end
108
+ call("campaignSchedule", campaign_id, time)
121
109
  end
122
110
 
123
111
  def send_now(campaign_id)
124
112
  # Send a campaign
125
- begin
126
- @chimpApi.call("campaignSendNow", @api_key, campaign_id)
127
- rescue
128
- false
129
- end
113
+ call("campaignSendNow", campaign_id)
130
114
  end
131
115
 
132
116
  def send_test(campaign_id, emails = {})
133
117
  # Send a test of a campaign
134
- begin
135
- @chimpApi.call("campaignSendTest", @api_key, campaign_id, emails)
136
- rescue
137
- false
138
- end
118
+ call("campaignSendTest", campaign_id, emails)
139
119
  end
140
120
 
141
121
  def templates
142
122
  # Get the templates
143
- begin
144
- @templates = @chimpApi.call("campaignTemplates", @api_key)
145
- rescue
146
- return nil
147
- end
123
+ @templates = call("campaignTemplates", @api_key)
148
124
  end
149
125
 
150
126
  def update_campaign(campaign_id, name, value)
151
127
  # Update a campaign
152
- begin
153
- @chimpApi.call("campaignUpdate", @api_key, campaign_id, name, value)
154
- rescue
155
- false
156
- end
128
+ call("campaignUpdate", campaign_id, name, value)
157
129
  end
158
130
 
159
131
  def unschedule_campaign(campaign_id)
160
132
  # Unschedule a campaign
161
- begin
162
- @chimpApi.call("campaignUnschedule", @api_key, campaign_id)
163
- rescue
164
- false
165
- end
133
+ call("campaignUnschedule", campaign_id)
166
134
  end
167
135
 
168
136
  ## Helper methods
169
137
 
170
138
  def html_to_text(content)
171
139
  # Convert HTML content to text
172
- begin
173
- @html_to_text = @chimpApi.call("generateText", @api_key, 'html', content)
174
- rescue
175
- return nil
176
- end
140
+ @html_to_text = call("generateText", 'html', content)
177
141
  end
178
142
 
179
143
  def convert_css_to_inline(html, strip_css = false)
180
144
  # Convert CSS styles to inline styles and (optionally) remove original styles
181
- begin
182
- @html_to_text = @chimpApi.call("inlineCss", @api_key, html, strip_css)
183
- rescue
184
- return nil
185
- end
145
+ @html_to_text = call("inlineCss", html, strip_css)
186
146
  end
187
147
 
188
148
  ## List related methods
189
149
 
190
150
  def lists
191
151
  # Get all of the lists for this mailchimp account
192
- begin
193
- @lists = @chimpApi.call("lists", @api_key)
194
- rescue
195
- return nil
196
- end
152
+ @lists = call("lists", @api_key)
197
153
  end
198
154
 
199
155
  def create_group(list_id, group)
200
156
  # Add an interest group to a list
201
- begin
202
- @chimpApi.call("listInterestGroupAdd", @api_key, list_id, group)
203
- rescue
204
- false
205
- end
157
+ call("listInterestGroupAdd", list_id, group)
206
158
  end
207
159
 
208
160
  def create_tag(list_id, tag, name, required = false)
209
161
  # Add a merge tag to a list
210
- begin
211
- @chimpApi.call("listMergeVarAdd", @api_key, list_id, tag, name, required)
212
- rescue
213
- false
214
- end
162
+ call("listMergeVarAdd", list_id, tag, name, required)
215
163
  end
216
164
 
217
165
  def delete_group(list_id, group)
218
166
  # Delete an interest group for a list
219
- begin
220
- @chimpApi.call("listInterestGroupDel", @api_key, list_id, group)
221
- rescue
222
- false
223
- end
167
+ call("listInterestGroupDel", list_id, group)
224
168
  end
225
169
 
226
170
  def delete_tag(list_id, tag)
227
171
  # Delete a merge tag and all its members
228
- begin
229
- @chimpApi.call("listMergeVarDel", @api_key, list_id, tag)
230
- rescue
231
- false
232
- end
172
+ call("listMergeVarDel", list_id, tag)
233
173
  end
234
174
 
235
175
  def groups(list_id)
236
176
  # Get the interest groups for a list
237
- begin
238
- @groups = @chimpApi.call("listInterestGroups", @api_key, list_id)
239
- rescue
240
- return nil
241
- end
177
+ @groups = call("listInterestGroups", list_id)
242
178
  end
243
179
 
244
180
  def member(list_id, email)
245
181
  # Get a member of a list
246
- begin
247
- @member = @chimpApi.call("listMemberInfo", @api_key, list_id, email)
248
- rescue
249
- return nil
250
- end
182
+ @member = call("listMemberInfo", list_id, email)
251
183
  end
252
184
 
253
185
  def members(list_id, status = "subscribed", since = "2000-01-01 00:00:00", start = 0, limit = 100)
@@ -261,67 +193,47 @@ class Hominid
261
193
  # Select members that have updated their status or profile by providing
262
194
  # a "since" date in the format of YYYY-MM-DD HH:MM:SS
263
195
  #
264
- begin
265
- @members = @chimpApi.call("listMembers", @api_key, list_id, status, since, start, limit)
266
- rescue
267
- return nil
268
- end
196
+ @members = call("listMembers", list_id, status, since, start, limit)
269
197
  end
270
198
 
271
199
  def merge_tags(list_id)
272
200
  # Get the merge tags for a list
273
- begin
274
- @merge_tags = @chimpApi.call("listMergeVars", @api_key, list_id)
275
- rescue
276
- return nil
277
- end
201
+ @merge_tags = call("listMergeVars", list_id)
278
202
  end
279
203
 
280
204
  def subscribe(list_id, email, user_info = {}, email_type = "html", update_existing = true, replace_interests = true, double_opt_in = nil)
281
205
  # Subscribe a member
282
- begin
283
- @chimpApi.call("listSubscribe", @api_key, list_id, email, user_info, email_type, double_opt_in || @double_opt, update_existing, replace_interests)
284
- rescue
285
- false
286
- end
206
+ call("listSubscribe", list_id, email, user_info, email_type, double_opt_in || @double_opt, update_existing, replace_interests)
287
207
  end
288
208
 
289
209
  def subscribe_many(list_id, subscribers)
290
210
  # Subscribe a batch of members
291
211
  # subscribers = {:EMAIL => 'example@email.com', :EMAIL_TYPE => 'html'}
292
- begin
293
- @chimpApi.call("listBatchSubscribe", @api_key, list_id, subscribers, @double_opt, true)
294
- rescue
295
- false
296
- end
212
+ call("listBatchSubscribe", list_id, subscribers, @double_opt, true)
297
213
  end
298
214
 
299
215
  def unsubscribe(list_id, current_email)
300
216
  # Unsubscribe a list member
301
- begin
302
- @chimpApi.call("listUnsubscribe", @api_key, list_id, current_email, true, @send_goodbye, @send_notify)
303
- rescue
304
- false
305
- end
217
+ call("listUnsubscribe", list_id, current_email, true, @send_goodbye, @send_notify)
306
218
  end
307
219
 
308
220
  def unsubscribe_many(list_id, emails)
309
221
  # Unsubscribe an array of email addresses
310
222
  # emails = ['first@email.com', 'second@email.com']
311
- begin
312
- @chimpApi.call("listBatchUnsubscribe", @api_key, list_id, emails, true, @send_goodbye, @send_notify)
313
- rescue
314
- false
315
- end
223
+ call("listBatchUnsubscribe", list_id, emails, true, @send_goodbye, @send_notify)
316
224
  end
317
225
 
318
226
  def update_member(list_id, current_email, user_info = {}, email_type = "")
319
227
  # Update a member of this list
320
- begin
321
- @chimpApi.call("listUpdateMember", @api_key, list_id, current_email, user_info, email_type, true)
322
- rescue
323
- false
324
- end
228
+ call("listUpdateMember", list_id, current_email, user_info, email_type, true)
229
+ end
230
+
231
+ protected
232
+ def call(method, *args)
233
+ @chimpApi.call(method, @api_key, *args)
234
+ rescue XMLRPC::FaultException => error
235
+ raise HominidError.new(error.message)
236
+ rescue Exception => error
237
+ raise HominidCommunicationError.new(error.message)
325
238
  end
326
-
327
239
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bgetting-hominid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Getting
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-08 00:00:00 -07:00
12
+ date: 2009-07-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15