campaign_monitor_subscriber 0.6.3 → 1.0.0
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/campaign_monitor_subscriber.gemspec +14 -24
- data/lib/campaign_monitor_subscriber.rb +3 -30
- data/lib/campaign_monitor_subscriber/basic_configuration.rb +16 -0
- data/lib/campaign_monitor_subscriber/configuration.rb +32 -0
- data/lib/campaign_monitor_subscriber/instance_methods.rb +21 -0
- data/lib/campaign_monitor_subscriber/macro.rb +26 -0
- data/lib/campaign_monitor_subscriber/subscription_hooks.rb +45 -0
- metadata +50 -69
- data/Manifest +0 -4
- data/README.rdoc +0 -59
- data/Rakefile +0 -13
@@ -1,32 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
|
-
s.name
|
5
|
-
s.version
|
6
|
-
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
s.
|
5
|
+
s.name = "campaign_monitor_subscriber"
|
6
|
+
s.version = '1.0.0'
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Gary Greyling"]
|
9
|
+
s.email = ["gary@mpowered.co.za"]
|
10
|
+
s.homepage = "https://github.com/mpowered/campaign_monitor_subscriber"
|
11
|
+
s.summary = %q{Sync user emails with Campaign Monitor mailing lists}
|
10
12
|
s.description = %q{Sync user emails with Campaign Monitor mailing lists}
|
11
|
-
|
12
|
-
s.
|
13
|
-
s.files
|
14
|
-
s.homepage = %q{http://github.com/mpowered/campaign_monitor_subscriber}
|
15
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Campaign_monitor_subscriber", "--main", "README.rdoc"]
|
13
|
+
|
14
|
+
s.files = `git ls-files -- {lib/*,vendor/*,*.gemspec}`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
16
|
s.require_paths = ["lib"]
|
17
|
-
s.rubyforge_project = %q{campaign_monitor_subscriber}
|
18
|
-
s.rubygems_version = %q{1.4.1}
|
19
|
-
s.summary = %q{Sync user emails with Campaign Monitor mailing lists}
|
20
17
|
|
21
|
-
|
22
|
-
|
18
|
+
s.add_dependency 'createsend', '>= 1.0.4'
|
19
|
+
s.add_development_dependency 'active_support', '>= 3.0.0'
|
23
20
|
|
24
|
-
|
25
|
-
s.add_development_dependency(%q<campaigning>, [">= 0.15.0"])
|
26
|
-
else
|
27
|
-
s.add_dependency(%q<campaigning>, [">= 0.15.0"])
|
28
|
-
end
|
29
|
-
else
|
30
|
-
s.add_dependency(%q<campaigning>, [">= 0.15.0"])
|
31
|
-
end
|
21
|
+
ruby_minor_version = RUBY_VERSION.split('.')[1].to_i
|
32
22
|
end
|
@@ -1,31 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
CM_CONFIG = YAML::load_file(File.join(RAILS_ROOT, "config/campaign_monitor_subscriber_config.yml"))
|
4
|
-
::CAMPAIGN_MONITOR_API_KEY = CM_CONFIG['api_key']
|
1
|
+
require 'campaign_monitor_subscriber/basic_configuration'
|
2
|
+
require 'campaign_monitor_subscriber/macro'
|
5
3
|
|
6
|
-
|
7
|
-
return if CM_CONFIG[RAILS_ENV] == false
|
8
|
-
|
9
|
-
after_create do |record|
|
10
|
-
begin
|
11
|
-
s = Campaigning::Subscriber.new(record.send(email_field))
|
12
|
-
s.add!(cm_list_id)
|
13
|
-
rescue RuntimeError
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
after_destroy do |record|
|
18
|
-
begin
|
19
|
-
Campaigning::Subscriber.unsubscribe!(record.send(email_field), cm_list_id)
|
20
|
-
rescue RuntimeError
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
def cm_list_id
|
27
|
-
YAML::load_file(File.join(RAILS_ROOT, "config/campaign_monitor_subscriber_config.yml"))['list_id']
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
ActiveRecord::Base.extend(CampaignMonitorSubscriber)
|
4
|
+
ActiveRecord::Base.extend(CampaignMonitorSubscriber::Macro)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# These methods become part of all models that call #subscribe_me_using regardless
|
2
|
+
# of the environment and other qualifying criteria.
|
3
|
+
# We keep this light so that if the current environment fails to qualify for subscription
|
4
|
+
# we haven't created a lot of bootstrapping overhead.
|
5
|
+
module CampaignMonitorSubscriber
|
6
|
+
module BasicConfiguration
|
7
|
+
require 'yaml'
|
8
|
+
|
9
|
+
private
|
10
|
+
# All yaml config is namespaced under the environment name (the same way
|
11
|
+
# database.yml does it)
|
12
|
+
def raw_cms_config
|
13
|
+
@raw_cms_config ||= YAML::load_file(File.join("config/campaign_monitor_subscriber.yml"))[::Rails.env]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# These methods become class methods on a model that calls #subscribe_me_using.
|
2
|
+
# They provide config bootstrapping easy access to loaded configuration.
|
3
|
+
module CampaignMonitorSubscriber
|
4
|
+
module Configuration
|
5
|
+
# Load config from yaml and #subscribe_me_using arguments.
|
6
|
+
def load_cms_configuration(email_field, options)
|
7
|
+
options.stringify_keys!
|
8
|
+
# Load the list_id from the yaml file. If a list is specified in #subscribe_me_using
|
9
|
+
# then load the id under the '*given_list_name*_id' key.
|
10
|
+
# Otherwise use the value as defined under the 'list_id' key.
|
11
|
+
cms_config.list_id = raw_cms_config.fetch("#{options.delete('list')}_list_id", raw_cms_config['list_id'])
|
12
|
+
|
13
|
+
# Load the API key from the yaml file.
|
14
|
+
CreateSend.api_key raw_cms_config['api_key']
|
15
|
+
|
16
|
+
# Extract config from the options supplied to #subscribe_me_using.
|
17
|
+
cms_config.email_field = email_field
|
18
|
+
cms_config.name_field = options.delete('name')
|
19
|
+
cms_config.custom_fields = options
|
20
|
+
end
|
21
|
+
|
22
|
+
def cms_config
|
23
|
+
@cms_config ||= CMSConfig.new.config
|
24
|
+
end
|
25
|
+
|
26
|
+
# We namespace the AS::config in case this
|
27
|
+
# model already uses AS's configurable. Because we care :)
|
28
|
+
class CMSConfig
|
29
|
+
include ActiveSupport::Configurable
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# These methosd became instance methods on a model that calls #subscribe_me_using.
|
2
|
+
# They provide easy access to parsed CMS config values.
|
3
|
+
module CampaignMonitorSubscriber
|
4
|
+
module InstanceMethods
|
5
|
+
def cms_custom_fields
|
6
|
+
cms_config.custom_fields.inject({}) { |h, (k, v)| h[k] = send(v); h }
|
7
|
+
end
|
8
|
+
|
9
|
+
def cms_email
|
10
|
+
send(cms_config.email_field)
|
11
|
+
end
|
12
|
+
|
13
|
+
def cms_name
|
14
|
+
cms_config.name_field ? send(cms_config.name_field) : cms_email
|
15
|
+
end
|
16
|
+
|
17
|
+
def cms_config
|
18
|
+
self.class.cms_config
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CampaignMonitorSubscriber
|
2
|
+
module Macro
|
3
|
+
def subscribe_me_using(email_field, options = {})
|
4
|
+
extend CampaignMonitorSubscriber::BasicConfiguration
|
5
|
+
# Don't active CMS hooks if there is no configuration for the
|
6
|
+
# current environment.
|
7
|
+
return if raw_cms_config.nil?
|
8
|
+
|
9
|
+
# Now that we know CMS subscription is relevant we
|
10
|
+
# include the required libraries and bootstrap the hooks
|
11
|
+
require 'createsend'
|
12
|
+
require 'campaign_monitor_subscriber/configuration'
|
13
|
+
require 'campaign_monitor_subscriber/instance_methods'
|
14
|
+
require 'campaign_monitor_subscriber/subscription_hooks'
|
15
|
+
|
16
|
+
# Load configuration from the yaml file and this macro's options
|
17
|
+
extend CampaignMonitorSubscriber::Configuration
|
18
|
+
load_cms_configuration(email_field, options)
|
19
|
+
|
20
|
+
# Include CMS config accessors to this model
|
21
|
+
include CampaignMonitorSubscriber::InstanceMethods
|
22
|
+
# Include CMS subscription hooks in this model
|
23
|
+
include CampaignMonitorSubscriber::SubscriptionHooks
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# This module defines the CMS subscription callbacks.
|
2
|
+
# The callbacks are included in a model that calls #subscribe_me_using.
|
3
|
+
module CampaignMonitorSubscriber
|
4
|
+
module SubscriptionHooks
|
5
|
+
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
require 'logger'
|
10
|
+
@@log = Logger.new('log/cm_subscriber.log')
|
11
|
+
|
12
|
+
after_create do |record|
|
13
|
+
@@log.info "\n* Adding '#{record.cms_email}' to CM"
|
14
|
+
|
15
|
+
begin
|
16
|
+
CreateSend::Subscriber.add(
|
17
|
+
cms_config.list_id,
|
18
|
+
record.cms_email,
|
19
|
+
record.cms_name,
|
20
|
+
[record.cms_custom_fields],
|
21
|
+
true
|
22
|
+
)
|
23
|
+
rescue CreateSend::CreateSendError => err
|
24
|
+
@@log.info err.message
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
after_destroy do |record|
|
30
|
+
@@log.info "\n* Removing '#{record.cms_email}' from CM"
|
31
|
+
|
32
|
+
begin
|
33
|
+
s = CreateSend::Subscriber.new(
|
34
|
+
cms_config.list_id,
|
35
|
+
record.cms_email
|
36
|
+
)
|
37
|
+
s.unsubscribe
|
38
|
+
rescue CreateSend::CreateSendError => err
|
39
|
+
@@log.info err.message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,93 +1,74 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: campaign_monitor_subscriber
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 6
|
9
|
-
- 3
|
10
|
-
version: 0.6.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Gary Greyling
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
12
|
+
date: 2012-06-19 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: createsend
|
16
|
+
requirement: &2169567680 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.4
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
|
24
|
+
version_requirements: *2169567680
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: active_support
|
27
|
+
requirement: &2169567200 !ruby/object:Gem::Requirement
|
25
28
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 15
|
33
|
-
- 0
|
34
|
-
version: 0.15.0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.0
|
35
33
|
type: :development
|
36
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2169567200
|
37
36
|
description: Sync user emails with Campaign Monitor mailing lists
|
38
|
-
email:
|
37
|
+
email:
|
38
|
+
- gary@mpowered.co.za
|
39
39
|
executables: []
|
40
|
-
|
41
40
|
extensions: []
|
42
|
-
|
43
|
-
|
44
|
-
- README.rdoc
|
45
|
-
- lib/campaign_monitor_subscriber.rb
|
46
|
-
files:
|
47
|
-
- Manifest
|
48
|
-
- README.rdoc
|
49
|
-
- Rakefile
|
50
|
-
- lib/campaign_monitor_subscriber.rb
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
51
43
|
- campaign_monitor_subscriber.gemspec
|
52
|
-
|
53
|
-
|
44
|
+
- lib/campaign_monitor_subscriber.rb
|
45
|
+
- lib/campaign_monitor_subscriber/basic_configuration.rb
|
46
|
+
- lib/campaign_monitor_subscriber/configuration.rb
|
47
|
+
- lib/campaign_monitor_subscriber/instance_methods.rb
|
48
|
+
- lib/campaign_monitor_subscriber/macro.rb
|
49
|
+
- lib/campaign_monitor_subscriber/subscription_hooks.rb
|
50
|
+
homepage: https://github.com/mpowered/campaign_monitor_subscriber
|
54
51
|
licenses: []
|
55
|
-
|
56
52
|
post_install_message:
|
57
|
-
rdoc_options:
|
58
|
-
|
59
|
-
- --inline-source
|
60
|
-
- --title
|
61
|
-
- Campaign_monitor_subscriber
|
62
|
-
- --main
|
63
|
-
- README.rdoc
|
64
|
-
require_paths:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
65
55
|
- lib
|
66
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
57
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
|
73
|
-
- 0
|
74
|
-
version: "0"
|
75
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
63
|
none: false
|
77
|
-
requirements:
|
78
|
-
- -
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
|
81
|
-
segments:
|
82
|
-
- 1
|
83
|
-
- 2
|
84
|
-
version: "1.2"
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
85
68
|
requirements: []
|
86
|
-
|
87
|
-
|
88
|
-
rubygems_version: 1.4.1
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.8.6
|
89
71
|
signing_key:
|
90
72
|
specification_version: 3
|
91
73
|
summary: Sync user emails with Campaign Monitor mailing lists
|
92
74
|
test_files: []
|
93
|
-
|
data/Manifest
DELETED
data/README.rdoc
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
= campaign_monitor_subscriber
|
2
|
-
|
3
|
-
http://github.com/mpowered/campaign_monitor_subscriber
|
4
|
-
|
5
|
-
== DESCRIPTION:
|
6
|
-
|
7
|
-
Automatically push/delete a model's email address to a Campaign Monitor mailing when the model is created or destroyed.
|
8
|
-
|
9
|
-
== FEATURES:
|
10
|
-
|
11
|
-
* Push email addresses to CM on create
|
12
|
-
* Delete email address from CM on destroy
|
13
|
-
|
14
|
-
== SYNOPSIS:
|
15
|
-
|
16
|
-
Specify the model's email address field name:
|
17
|
-
Class User < ActiveRecord::Base
|
18
|
-
subscribe_me_using :email
|
19
|
-
end
|
20
|
-
|
21
|
-
Set the list id & api key in config/campaign_monitor_subscriber_config.yml:
|
22
|
-
list_id: 12oeu0089oe8gf9794oe498587o5
|
23
|
-
api_key: 23rbmoe351sd123d12134hbi1234
|
24
|
-
development: false # disable in development
|
25
|
-
|
26
|
-
Thats it!
|
27
|
-
|
28
|
-
== REQUIREMENTS:
|
29
|
-
|
30
|
-
* campaigning gem
|
31
|
-
|
32
|
-
== INSTALL:
|
33
|
-
|
34
|
-
gem install campaign_monitor_subscriber
|
35
|
-
|
36
|
-
== LICENSE:
|
37
|
-
|
38
|
-
(The MIT License)
|
39
|
-
|
40
|
-
Copyright (c) 2010 FIX
|
41
|
-
|
42
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
43
|
-
a copy of this software and associated documentation files (the
|
44
|
-
'Software'), to deal in the Software without restriction, including
|
45
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
46
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
47
|
-
permit persons to whom the Software is furnished to do so, subject to
|
48
|
-
the following conditions:
|
49
|
-
|
50
|
-
The above copyright notice and this permission notice shall be
|
51
|
-
included in all copies or substantial portions of the Software.
|
52
|
-
|
53
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
54
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
55
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
56
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
57
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
58
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
59
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.st
|
data/Rakefile
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
require 'rubygems'
|
3
|
-
require 'rake'
|
4
|
-
require 'echoe'
|
5
|
-
|
6
|
-
Echoe.new('campaign_monitor_subscriber', '0.6.3') do |p|
|
7
|
-
p.description = "Sync user emails with Campaign Monitor mailing lists"
|
8
|
-
p.url = "http://github.com/mpowered/campaign_monitor_subscriber"
|
9
|
-
p.author = "Gary Greyling"
|
10
|
-
p.email = "gary@mpowered.co.za"
|
11
|
-
p.ignore_pattern = ["tmp/*", "script/*"]
|
12
|
-
p.development_dependencies = [['campaigning', '>= 0.15.0']]
|
13
|
-
end
|