hominid 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,131 @@
1
+ module Hominid
2
+
3
+ class Webhook < Base
4
+ # Expects a hash of POST data generated from Mailchimp:
5
+ #
6
+ # "type": "unsubscribe",
7
+ # "fired_at": "2009-03-26 21:54:00",
8
+ # "data[email]": "sample@emailaddress.com"
9
+ #
10
+ # Simple Usage:
11
+ #
12
+ # h = Hominid::Webhook.new(params)
13
+ #
14
+ # Sample params from Mailchimp webhook:
15
+ # params => { "type" => "subscribe",
16
+ # "fired_at" => "2009-03-26 21:35:57",
17
+ # "data" => { "id" => "8a25ff1d98",
18
+ # "list_id" => "8a25ff1d98",
19
+ # "email" => "api@mailchimp.com",
20
+ # "email_type" => "html",
21
+ # "merges" => {"EMAIL" => "api@mailchimp.com",
22
+ # "FNAME" => "Brian",
23
+ # "LNAME" => "Getting",
24
+ # "INTERESTS" => "Group1,Group2"},
25
+ # "ip_opt" => "10.20.10.30",
26
+ # "ip_signup" => "10.20.10.30" }}
27
+ #
28
+ # Returns an object with the following methods (NOTE: Not all methods are available
29
+ # for all event types. Refer to http://www.mailchimp.com/api/webhooks/ for information
30
+ # on what data will be available for each event):
31
+ #
32
+ # h.event <= (String) The event that fired the request. Possible events are:
33
+ # "subscribe", "unsubscribe", "profile", "upemail", "cleaned"
34
+ # h.fired_at <= (Datetime) When the webhook request was fired.
35
+ # h.id <= (String) The ID of the webhook request.
36
+ # h.list_id <= (String) The ID of the list that generated the request.
37
+ # h.email <= (String) The email address of the subscriber that generated the request.
38
+ # h.email_type <= (String) The email type of the subscriber that generated the request.
39
+ # h.first_name <= (String) The first name of the subscriber (if available).
40
+ # h.last_name <= (String) The first name of the subscriber (if available).
41
+ # h.interests <= (Array) An array of the interest groups.
42
+ # h.ip_opt <= (String) The opt in IP address.
43
+ # h.ip_signup <= (String) The signup IP address.
44
+ #
45
+
46
+ attr_reader :request
47
+
48
+ def initialize(*args)
49
+ post_data = args.last
50
+ raise HominidError.new('Please provide the POST data from a Mailchimp webhook request.') unless post_data.is_a?(Hash)
51
+ post_data.merge!({"event" => "#{post_data.delete('type')}"})
52
+ @request = hash_to_object(post_data)
53
+ end
54
+
55
+
56
+ def email
57
+ self.request.data.email if self.request.data.email
58
+ end
59
+
60
+ def email_type
61
+ self.request.data.email_type if self.request.data.email_type
62
+ end
63
+
64
+ def event
65
+ self.request.event if self.request.event
66
+ end
67
+
68
+ def fired_at
69
+ self.request.fired_at.to_datetime if self.request.fired_at
70
+ end
71
+
72
+ def first_name
73
+ self.request.data.merges.fname if self.request.data.merges.fname
74
+ end
75
+
76
+ def last_name
77
+ self.request.data.merges.lname if self.request.data.merges.lname
78
+ end
79
+
80
+ def id
81
+ self.request.data.id if self.request.data.id
82
+ end
83
+
84
+ def interests
85
+ self.request.data.merges.interests.split(',') if self.request.data.merges.interests
86
+ end
87
+
88
+ def ip_opt
89
+ self.request.data.ip_opt if self.request.data.ip_opt
90
+ end
91
+
92
+ def ip_signup
93
+ self.request.data.ip_signup if self.request.data.ip_signup
94
+ end
95
+
96
+ def list_id
97
+ self.request.data.list_id if self.request.data.list_id
98
+ end
99
+
100
+ def new_email
101
+ self.request.data.new_email if self.request.data.new_email
102
+ end
103
+
104
+ def old_email
105
+ self.request.data.old_email if self.request.data.old_email
106
+ end
107
+
108
+ def reason
109
+ self.request.data.reason if self.request.data.reason
110
+ end
111
+
112
+ private
113
+
114
+ def hash_to_object(object)
115
+ return case object
116
+ when Hash
117
+ object = object.clone
118
+ object.each do |key, value|
119
+ object[key.downcase] = hash_to_object(value)
120
+ end
121
+ OpenStruct.new(object)
122
+ when Array
123
+ object = object.clone
124
+ object.map! { |i| hash_to_object(i) }
125
+ else
126
+ object
127
+ end
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ namespace :hominid do
3
+ # Task to create the config file
4
+ desc "Generate a Hominid config file"
5
+ task :config => :environment do |t|
6
+ require 'fileutils'
7
+ if defined?(Rails.root)
8
+ config_file = File.join(Rails.root, 'config', 'hominid.yml')
9
+ template_file = File.join(File.dirname(__FILE__), '..', '..', 'hominid.yml.tpl')
10
+ unless File.exists? config_file
11
+ FileUtils.cp(
12
+ File.join(File.dirname(__FILE__), '..', '..', 'hominid.yml.tpl'),
13
+ File.join(Rails.root, 'config', 'hominid.yml')
14
+ )
15
+ puts 'Please edit config/hominid.yml to your needs.'
16
+ else
17
+ puts 'We left your existing config/hominid.yml untouched.'
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class HominidTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'hominid'
8
+
9
+ class Test::Unit::TestCase
10
+ end
metadata CHANGED
@@ -1,43 +1,56 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hominid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Getting
8
+ - "Michael Str\xC3\xBCder"
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2009-10-13 00:00:00 -07:00
13
+ date: 2009-10-30 00:00:00 -07:00
13
14
  default_executable:
14
- dependencies: []
15
-
16
- description: Use the hominid gem to easily integrate with the Mailchimp email marketing service API.
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: shoulda
18
+ type: :development
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ version:
26
+ description: Hominid is a Ruby gem that provides a wrapper for interacting with the Mailchimp email marketing service API.
17
27
  email: brian@terra-firma-design.com
18
28
  executables: []
19
29
 
20
30
  extensions: []
21
31
 
22
32
  extra_rdoc_files:
33
+ - LICENSE
23
34
  - README.textile
24
35
  files:
25
- - MIT-LICENSE
36
+ - .gitignore
37
+ - LICENSE
26
38
  - README.textile
27
39
  - Rakefile
28
- - VERSION.yml
40
+ - VERSION
29
41
  - hominid.gemspec
30
42
  - hominid.yml.tpl
31
- - init.rb
32
- - install.rb
33
43
  - lib/hominid.rb
34
- - pkg/hominid-1.2.1.gem
35
- - rails/init.rb
36
- - spec/hominid_spec.rb
37
- - spec/spec_helper.rb
38
- - uninstall.rb
44
+ - lib/hominid/base.rb
45
+ - lib/hominid/campaign.rb
46
+ - lib/hominid/helper.rb
47
+ - lib/hominid/list.rb
48
+ - lib/hominid/webhook.rb
49
+ - tasks/rails/hominid.rake
50
+ - test/hominid_test.rb
51
+ - test/test_helper.rb
39
52
  has_rdoc: true
40
- homepage: http://terra-firma-design.com
53
+ homepage: http://github.com/bgetting/hominid
41
54
  licenses: []
42
55
 
43
56
  post_install_message:
@@ -65,5 +78,5 @@ signing_key:
65
78
  specification_version: 3
66
79
  summary: Hominid is a Ruby gem for interacting with the Mailchimp API.
67
80
  test_files:
68
- - spec/hominid_spec.rb
69
- - spec/spec_helper.rb
81
+ - test/hominid_test.rb
82
+ - test/test_helper.rb
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 1
3
- :minor: 2
4
- :patch: 1
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require File.dirname(__FILE__) + "/rails/init"
data/install.rb DELETED
@@ -1,4 +0,0 @@
1
- require 'fileutils'
2
- monkeyBrains = File.dirname(__FILE__) + '/../../../config/hominid.yml'
3
- FileUtils.cp File.dirname(__FILE__) + '/hominid.yml.tpl', monkeyBrains unless File.exist?(monkeyBrains)
4
- puts IO.read(File.join(File.dirname(__FILE__), 'README'))
Binary file
@@ -1 +0,0 @@
1
- require 'hominid'
@@ -1,29 +0,0 @@
1
- require 'spec/spec_helper'
2
-
3
- describe Hominid do
4
- before do
5
- api_key = ENV['MAIL_CHIMP_API_KEY']
6
- raise "You must set the MAIL_CHIMP_API_KEY environment variable to test" if api_key.empty?
7
- @hominid = Hominid.new(:api_key => api_key)
8
- @list_id = ENV['MAIL_CHIMP_TEST_LIST_ID']
9
- raise "You must set the MAIL_CHIMP_TEST_LIST_ID environment variable to test" if @list_id.empty?
10
- end
11
-
12
- describe "#subscribe" do
13
- context "when not supplying a double-opt-in argument" do
14
- it "should not blow up" do
15
- proc {
16
- @hominid.subscribe(@list_id, Faker::Internet.email)
17
- }.should_not raise_error
18
- end
19
- end
20
- end
21
-
22
- describe "#call" do
23
- it "should raise HominidError on failure" do
24
- proc {
25
- Hominid.new.send(:call, 'bogusApi')
26
- }.should raise_error(HominidError)
27
- end
28
- end
29
- end
@@ -1,3 +0,0 @@
1
- require 'rubygems'
2
- require 'faker'
3
- require 'lib/hominid'
@@ -1 +0,0 @@
1
- # Uninstall hook code here