launchrock-sync 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0311006cd29fccc55b9d3762a707526d47227024
4
+ data.tar.gz: 9cf07c8c8c81d245484fd5814359ec33e076c336
5
+ SHA512:
6
+ metadata.gz: 64cf385bab85a4176de9f54d1eef19e6e5af857c5543870a0eda720d9043ae84242b56e24f1ee0e4585ad0d18cb73bbe7729823bd4dd349be0091c9f230cc439
7
+ data.tar.gz: 80ce00e5408f8e35ab8b6587fd2cebf0048dc1a5349e065e4241099d5e345d9063b9a6538b2a8cc3a0ea14e8a1bce59830b7d59eefff31e9503deba36ad7d7aa
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ gem 'activesupport', ">= 3.2.10"
2
+ gem 'launchrock'
3
+ gem 'mailchimp'
4
+
5
+ group :development, :test do
6
+ gem 'minitest'
7
+ gem 'rake'
8
+ gem 'mocha'
9
+ gem 'fakeweb'
10
+ end
@@ -0,0 +1,22 @@
1
+ Launchrock-Sync
2
+ =========
3
+
4
+
5
+ Provides functionality to sync list from launchrock to a mail provider (right now, only MailChimp is supported).
6
+
7
+ Instructions
8
+ --------
9
+
10
+ 1. Install ruby
11
+ 2. Install launchrock-sync gem: gem install `launchrock-sync`
12
+ 3. Add config file to `.launchrock-sync.yml` where binary will run (see [sample config file](https://github.com/kenmazaika/launchrock-sync/blob/master/examples/sample_config.yml))
13
+ 4. Run `launchrock-sync` to sync the latest.
14
+
15
+ Executing Syncing
16
+ -----
17
+
18
+ The following methods are supported to sync the contacts
19
+
20
+ 1. Manually kickoff sync
21
+ 2. Have cron kick it off
22
+ 3. Put in screen session and pass `daemon=true sleep_threshold=x` as bash parameters, where x is the number of seconds to sleep between iterations
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+ require 'rake'
12
+
13
+ require 'rake/testtask'
14
+ Rake::TestTask.new(:test) do |test|
15
+ test.test_files = FileList['test/**/*_test.rb']
16
+ test.libs = ['lib', 'test']
17
+ end
18
+
19
+ task :default => :test
20
+
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ require 'launchrock-sync'
3
+
4
+ runner = LaunchrockSync::SyncRunner.new( ENV['config'] || File.join(Dir.pwd, '.launchrock-sync.yml') )
5
+
6
+ if ENV['daemon']
7
+ while(true)
8
+ puts "launchrock-sync"
9
+ runner.run
10
+ sleep(ENV['sleep_threshold'].try(:to_i) || 60)
11
+ end
12
+ else
13
+ runner.run
14
+ end
@@ -0,0 +1,9 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'rubygems'
4
+ require 'active_support/all'
5
+ require 'launchrock'
6
+ require 'mailchimp'
7
+
8
+ Dir[File.dirname(__FILE__) + '/launchrock-sync/*.rb'].each {|m| require m}
9
+ Dir[File.dirname(__FILE__) + '/launchrock-sync/models/*.rb'].each {|m| require m}
@@ -0,0 +1,87 @@
1
+ module LaunchrockSync
2
+ class SyncClient
3
+ attr_accessor :attributes
4
+
5
+ def initialize(attributes)
6
+ self.attributes = attributes.deep_symbolize_keys
7
+ end
8
+
9
+
10
+
11
+
12
+ def launchrock_users
13
+ self.launchrock_site.users.map(&:to_hash)
14
+ end
15
+
16
+ def launchrock_site
17
+ return @site if @site
18
+ @site = self.launchrock_client.site_named(attributes[:launchrock][:site])
19
+ raise "No site info found" unless @site
20
+
21
+ @site
22
+ end
23
+
24
+ def launchrock_client
25
+ @launchrock_client ||= Launchrock::Client.find_by_email_and_password(
26
+ attributes[:launchrock][:email],
27
+ attributes[:launchrock][:password]
28
+ )
29
+ end
30
+
31
+
32
+ def provider_client
33
+ @provider_client ||= provider_class.new(attributes[:sync][:options])
34
+ end
35
+
36
+ def provider_class
37
+ "LaunchrockSync::SyncClient::#{attributes[:sync][:provider]}Client".constantize
38
+ end
39
+
40
+
41
+ def sync(&block)
42
+ users = self.launchrock_users
43
+ timestamp = attributes[:last] ? Time.parse(attributes[:last]) : nil
44
+ if timestamp
45
+ users = users.find_all do |user|
46
+ Time.parse(user[:timestamp]) > timestamp
47
+ end
48
+ end
49
+
50
+ users.each do |user|
51
+ t = Time.parse(user[:timestamp])
52
+ timestamp = t if timestamp.nil? || timestamp < t
53
+
54
+ self.provider_client.add(user[:email])
55
+ block.call(user) if block
56
+ end
57
+
58
+ timestamp
59
+ end
60
+
61
+ class MailChimpClient
62
+ attr_accessor :attributes
63
+
64
+ def initialize(attributes)
65
+ self.attributes = attributes
66
+ end
67
+
68
+ def add(email)
69
+ api.listSubscribe( {
70
+ :id => list['id'],
71
+ :email_address => email,
72
+ :merge_vars => Hash.new,
73
+ :double_optin => false,
74
+ :send_welcome => false
75
+ } )
76
+ end
77
+
78
+ def list
79
+ @list ||= api.lists['data'].find {|a| a['name'] == attributes[:list] }
80
+ end
81
+
82
+ def api
83
+ @api ||= Mailchimp::API.new(attributes[:api_key])
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,34 @@
1
+ module LaunchrockSync
2
+ class SyncRunner
3
+ attr_accessor :configuration_file
4
+
5
+ def initialize(configuration_file)
6
+ self.configuration_file = configuration_file
7
+ end
8
+
9
+ def run
10
+ t = sync_client.sync do |user|
11
+ puts "Added! #{user[:email]}"
12
+ end
13
+
14
+ update_config_file!(t)
15
+ end
16
+
17
+ def update_config_file!(t)
18
+ new_config = configuration.merge('last' => t.to_s(:db)).to_yaml
19
+ File.open(configuration_file, 'w') do |file|
20
+ file.write(new_config)
21
+ end
22
+ end
23
+
24
+ def sync_client
25
+ LaunchrockSync::SyncClient.new(self.configuration)
26
+ end
27
+
28
+ def configuration
29
+ File.open(configuration_file) do |f|
30
+ return YAML.load(f.read)
31
+ end
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: launchrock-sync
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ken mazaika
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: launchrock
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mailchimp
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A ruby gem to sync between launchrock and mailing list providers
42
+ email: kenmazaika@gmail.com
43
+ executables:
44
+ - launchrock-sync
45
+ extensions: []
46
+ extra_rdoc_files:
47
+ - README.md
48
+ files:
49
+ - Gemfile
50
+ - README.md
51
+ - Rakefile
52
+ - lib/launchrock-sync.rb
53
+ - lib/launchrock-sync/models/sync_client.rb
54
+ - lib/launchrock-sync/models/sync_runner.rb
55
+ - bin/launchrock-sync
56
+ homepage: https://github.com/kenmazaika/launchrock-sync
57
+ licenses:
58
+ - Yoloswag
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.0.0
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: A ruby gem to integrate with the launchrock API and mailing list providers
80
+ test_files: []