workarea-mail_chimp 3.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +15 -0
- data/.gitignore +55 -0
- data/.markdownlint.json +10 -0
- data/.rails-rubocop.yml +119 -0
- data/.rubocop.yml +8 -0
- data/.scss-lint.yml +188 -0
- data/CHANGELOG.md +244 -0
- data/Gemfile +9 -0
- data/README.md +115 -0
- data/Rakefile +53 -0
- data/app/assets/javascripts/workarea/storefront/mail_chimp/mail_chimp_tracking.js +15 -0
- data/app/controllers/workarea/storefront/application_controller.decorator +11 -0
- data/app/controllers/workarea/storefront/cart_items_controller.decorator +18 -0
- data/app/controllers/workarea/storefront/checkout/addresses_controller.decorator +13 -0
- data/app/controllers/workarea/storefront/checkout/shipping_controller.decorator +13 -0
- data/app/controllers/workarea/storefront/users/accounts_controller.decorator +37 -0
- data/app/models/workarea/catalog/product.decorator +7 -0
- data/app/models/workarea/mail_chimp/group.rb +39 -0
- data/app/models/workarea/mail_chimp/store.rb +26 -0
- data/app/models/workarea/order.decorator +9 -0
- data/app/models/workarea/user.decorator +31 -0
- data/app/services/workarea/mail_chimp/address.rb +28 -0
- data/app/services/workarea/mail_chimp/cart.rb +78 -0
- data/app/services/workarea/mail_chimp/order.rb +97 -0
- data/app/services/workarea/mail_chimp/product.rb +43 -0
- data/app/services/workarea/mail_chimp/variant.rb +43 -0
- data/app/view_models/workarea/storefront/user_view_model.decorator +16 -0
- data/app/views/workarea/storefront/mail_chimp/_ecommerce_javascript.html.haml +2 -0
- data/app/views/workarea/storefront/users/accounts/_edit.html.haml +12 -0
- data/app/views/workarea/storefront/users/accounts/_email_interests.html.haml +13 -0
- data/app/workers/workarea/mail_chimp/ecommerce/save_cart.rb +40 -0
- data/app/workers/workarea/mail_chimp/ecommerce/save_order.rb +31 -0
- data/app/workers/workarea/mail_chimp/ecommerce/save_product.rb +31 -0
- data/app/workers/workarea/mail_chimp/list_subscriber.rb +30 -0
- data/app/workers/workarea/mail_chimp/list_unsubscriber.rb +22 -0
- data/app/workers/workarea/mail_chimp/subscription_edit.rb +28 -0
- data/bin/rails +19 -0
- data/config/initializers/appends.rb +21 -0
- data/config/initializers/workarea.rb +14 -0
- data/config/locales/en.yml +15 -0
- data/lib/gibbon/request_decorator.rb +10 -0
- data/lib/integrations/workarea/mail_chimp/bogus_api_request.rb +30 -0
- data/lib/integrations/workarea/mail_chimp/bogus_gateway.rb +35 -0
- data/lib/integrations/workarea/mail_chimp/bogus_request.rb +78 -0
- data/lib/integrations/workarea/mail_chimp/gateway.rb +86 -0
- data/lib/integrations/workarea/mail_chimp/gateway/list.rb +47 -0
- data/lib/integrations/workarea/mail_chimp/gateway/members.rb +61 -0
- data/lib/integrations/workarea/mail_chimp/gateway/subscribe_argument_builder.rb +101 -0
- data/lib/tasks/mail_chimp.rake +71 -0
- data/lib/workarea/mail_chimp.rb +72 -0
- data/lib/workarea/mail_chimp/engine.rb +14 -0
- data/lib/workarea/mail_chimp/errors.rb +2 -0
- data/lib/workarea/mail_chimp/tasks/ecommerce.rb +43 -0
- data/lib/workarea/mail_chimp/version.rb +5 -0
- data/script/admin_ci +9 -0
- data/script/ci +11 -0
- data/script/core_ci +9 -0
- data/script/plugins_ci +9 -0
- data/script/storefront_ci +9 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +56 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/factories/mail_chimp.rb +50 -0
- data/test/integration/workarea/mailchimp/subscription_test.rb +52 -0
- data/test/integration/workarea/mailchimp/tracking_params_test.rb +50 -0
- data/test/integration/workarea/mailchimp/unsubscribe_test.rb +14 -0
- data/test/integration/workarea/storefront/mail_chimp_order_test.rb +106 -0
- data/test/integration/workarea/storefront/mail_chimp_product_test.rb +51 -0
- data/test/integration/workarea/storefront/mail_chimp_site_javascript_test.rb +25 -0
- data/test/lib/workarea/mailchimp/gateway/list_test.rb +48 -0
- data/test/lib/workarea/mailchimp/gateway_test.rb +196 -0
- data/test/lib/workarea/mailchimp/tasks/ecommerce_test.rb +40 -0
- data/test/services/workarea/mail_chimp/cart_test.rb +44 -0
- data/test/services/workarea/mail_chimp/order_test.rb +50 -0
- data/test/services/workarea/mail_chimp/product_test.rb +29 -0
- data/test/support/workarea/mail_chimp_api_config.rb +33 -0
- data/test/system/workarea/storefront/campaign_tracking_test.rb +14 -0
- data/test/system/workarea/storefront/group_test.rb +33 -0
- data/test/system/workarea/storefront/mail_chimp_accounts_system_test.rb +79 -0
- data/test/test_helper.rb +17 -0
- data/test/vcr_cassettes/get_default_list_interests.yml +104 -0
- data/test/vcr_cassettes/get_member_details_no_match.yml +51 -0
- data/test/vcr_cassettes/get_member_details_unsubscribed.yml +51 -0
- data/test/vcr_cassettes/interest_categories_read.yml +104 -0
- data/test/vcr_cassettes/mail_chimp/tasks/create_store-successful.yml +97 -0
- data/test/vcr_cassettes/mc_order_test.yml +381 -0
- data/test/vcr_cassettes/mc_product_test.yml +234 -0
- data/test/vcr_cassettes/subscribe_to_default_list.yml +254 -0
- data/test/vcr_cassettes/subscribe_to_default_list_interest_groups.yml +254 -0
- data/test/vcr_cassettes/subscribe_to_default_list_with_groupings.yml +254 -0
- data/test/vcr_cassettes/subscribe_to_default_list_with_user_details.yml +254 -0
- data/test/vcr_cassettes/unsubscribe_from_default_list.yml +53 -0
- data/test/vcr_cassettes/update_member_on_default_list_change_email.yml +254 -0
- data/test/vcr_cassettes/update_member_on_default_list_change_groupings.yml +254 -0
- data/test/workers/workarea/mail_chimp/ecommerce/save_cart_test.rb +28 -0
- data/test/workers/workarea/mail_chimp/ecommerce/save_order_test.rb +15 -0
- data/test/workers/workarea/mail_chimp/ecommerce/save_product_test.rb +15 -0
- data/workarea-mail_chimp.gemspec +20 -0
- metadata +212 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
Workarea Mail Chimp
|
2
|
+
================================================================================
|
3
|
+
|
4
|
+
MailChimp plugin for the Worakrea e-commerce platform
|
5
|
+
|
6
|
+
This plugin creates a basic integration between the WebLinc platform and
|
7
|
+
MailChimp's v3 API
|
8
|
+
|
9
|
+
It requires a mailchimp access token which can be generated by following
|
10
|
+
MailChimp's OAuth2 Flow here: <http://developer.mailchimp.com/documentation/mailchimp/guides/how-to-use-oauth2/>
|
11
|
+
|
12
|
+
Scope and Dependencies
|
13
|
+
--------------------------------------------------------------------------------
|
14
|
+
|
15
|
+
This plugin currently wraps functionality for subscribing and unsubscribing users
|
16
|
+
by email, as well as retrieving interest groups (or categories) for users and lists
|
17
|
+
|
18
|
+
It is dependant on the [gibbon rubygem](https://github.com/amro/gibbon) which
|
19
|
+
provides a basic wrapper for the MailChimp v3 API.
|
20
|
+
|
21
|
+
Configuration
|
22
|
+
--------------------------------------------------------------------------------
|
23
|
+
|
24
|
+
This plugin requires gateway configuration in order to function.
|
25
|
+
|
26
|
+
In your secrets file:
|
27
|
+
|
28
|
+
mail_chimp:
|
29
|
+
:api_key: APIKEY
|
30
|
+
:default_list_id: LIST_ID
|
31
|
+
:list_preferences_id: LIST_PREFERENCES_ID
|
32
|
+
|
33
|
+
### To find your default list ID, in the mailchimp admin:
|
34
|
+
|
35
|
+
1. Go to the list you wish to use
|
36
|
+
2. Click the settings dropdown menu
|
37
|
+
3. Choose the 'List name and defaults' menu item
|
38
|
+
4. You will find the List ID on this page, at the time of writing it is displayed
|
39
|
+
at the top left of the page.
|
40
|
+
|
41
|
+
### To find your list preferences ID via the API playground:
|
42
|
+
|
43
|
+
1. Visit [API playground](https://us16.api.mailchimp.com/playground/)
|
44
|
+
2. Enter your API key
|
45
|
+
3. Click on the 'Lists' Link
|
46
|
+
4. Find the subresources dropdown for your default list
|
47
|
+
5. Choose 'interest-categories' from the subresources dropdown
|
48
|
+
6. Click the name of your interest group
|
49
|
+
7. Use the ID field shown in the details section, the 'list_id' field should
|
50
|
+
correspond with your default_list_id
|
51
|
+
|
52
|
+
Testing & Maintenance
|
53
|
+
--------------------------------------------------------------------------------
|
54
|
+
|
55
|
+
Ensure that the gateway credentials within application secrets are set in
|
56
|
+
`spec/dummy/config/secrets.yml` for test mode
|
57
|
+
|
58
|
+
To get specs to pass, you will need to configure a MailChimp account with the
|
59
|
+
following data
|
60
|
+
|
61
|
+
* A group/category with the same information as what is configured in
|
62
|
+
`HelperMethods#email_all_interests_hash` in `spec/fixtures/helper_methods.rb`
|
63
|
+
|
64
|
+
* A user that was unsubscribed with the following email: `test-unsubscribed@weblinc.com`
|
65
|
+
|
66
|
+
* A subscribed user with the following email: `mdalton-simonpearce@weblinc.com`
|
67
|
+
|
68
|
+
The specs use VCR cassettes to record http requests, so maintainers will need to
|
69
|
+
flush the cassettes when modifying the requests.
|
70
|
+
|
71
|
+
Getting Started
|
72
|
+
--------------------------------------------------------------------------------
|
73
|
+
|
74
|
+
This gem contains a rails engine that must be mounted onto a host Rails application.
|
75
|
+
|
76
|
+
You must have access to a WebLinc gems server to use this gem. Add your gems
|
77
|
+
server credentials to Bundler:
|
78
|
+
|
79
|
+
bundle config gems.weblinc.com my_username:my_password
|
80
|
+
|
81
|
+
Or set the appropriate environment variable in a shell startup file:
|
82
|
+
|
83
|
+
export BUNDLE_GEMS__WEBLINC__COM='my_username:my_password'
|
84
|
+
|
85
|
+
Then add the gem to your application's Gemfile specifying the source:
|
86
|
+
|
87
|
+
# ...
|
88
|
+
gem 'workarea-mail_chimp', source: 'https://gems.weblinc.com'
|
89
|
+
# ...
|
90
|
+
|
91
|
+
Or use a source block:
|
92
|
+
|
93
|
+
# ...
|
94
|
+
source 'https://gems.weblinc.com' do
|
95
|
+
gem 'workarea-mail_chimp'
|
96
|
+
end
|
97
|
+
# ...
|
98
|
+
|
99
|
+
Update your application's bundle.
|
100
|
+
|
101
|
+
cd path/to/application
|
102
|
+
bundle
|
103
|
+
|
104
|
+
WebLinc Platform Documentation
|
105
|
+
--------------------------------------------------------------------------------
|
106
|
+
|
107
|
+
See [http://developer.weblinc.com](http://developer.weblinc.com) for Workarea
|
108
|
+
platform documentation.
|
109
|
+
|
110
|
+
Copyright & Licensing
|
111
|
+
--------------------------------------------------------------------------------
|
112
|
+
|
113
|
+
Copyright WebLinc 2015. All rights reserved.
|
114
|
+
|
115
|
+
For licensing, contact sales@weblinc.com.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require "bundler/setup"
|
4
|
+
rescue LoadError
|
5
|
+
puts "You must `gem install bundler` and `bundle install` to run rake tasks"
|
6
|
+
end
|
7
|
+
|
8
|
+
require "rdoc/task"
|
9
|
+
|
10
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
11
|
+
rdoc.rdoc_dir = "rdoc"
|
12
|
+
rdoc.title = "Tasker"
|
13
|
+
rdoc.options << "--line-numbers"
|
14
|
+
rdoc.rdoc_files.include("README.md")
|
15
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
16
|
+
end
|
17
|
+
|
18
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
19
|
+
load "rails/tasks/engine.rake"
|
20
|
+
load "rails/tasks/statistics.rake"
|
21
|
+
load "workarea/changelog.rake"
|
22
|
+
|
23
|
+
require "rake/testtask"
|
24
|
+
|
25
|
+
Rake::TestTask.new(:test) do |t|
|
26
|
+
t.libs << "lib"
|
27
|
+
t.libs << "test"
|
28
|
+
t.pattern = "test/**/*_test.rb"
|
29
|
+
t.verbose = false
|
30
|
+
end
|
31
|
+
|
32
|
+
task default: :test
|
33
|
+
|
34
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
35
|
+
require "workarea/mail_chimp/version"
|
36
|
+
|
37
|
+
desc "Release version #{Workarea::MailChimp::VERSION} of the gem"
|
38
|
+
task :release do
|
39
|
+
host = "https://#{ENV['BUNDLE_GEMS__WEBLINC__COM']}@gems.weblinc.com"
|
40
|
+
|
41
|
+
#Rake::Task["workarea:changelog"].execute
|
42
|
+
#system "git add CHANGELOG.md"
|
43
|
+
#system 'git commit -m "Update CHANGELOG"'
|
44
|
+
#system "git push origin HEAD"
|
45
|
+
|
46
|
+
system "git tag -a v#{Workarea::MailChimp::VERSION} -m 'Tagging #{Workarea::MailChimp::VERSION}'"
|
47
|
+
system "git push --tags"
|
48
|
+
|
49
|
+
system "gem build workarea-mail_chimp.gemspec"
|
50
|
+
system "gem push workarea-mail_chimp-#{Workarea::MailChimp::VERSION}.gem"
|
51
|
+
system "gem push workarea-mail_chimp-#{Workarea::MailChimp::VERSION}.gem --host #{host}"
|
52
|
+
system "rm workarea-mail_chimp-#{Workarea::MailChimp::VERSION}.gem"
|
53
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.mailchimpTracking
|
3
|
+
*/
|
4
|
+
WORKAREA.registerModule('mailchimpTracking', (function () {
|
5
|
+
'use strict';
|
6
|
+
|
7
|
+
var setCookie = function() {
|
8
|
+
var tracking_value = WORKAREA.url.parse(document.URL).queryKey.mc_cid;
|
9
|
+
|
10
|
+
if (_.isUndefined(tracking_value)) { return; }
|
11
|
+
|
12
|
+
WORKAREA.cookie.create('mc_cid', tracking_value, 30);
|
13
|
+
};
|
14
|
+
setCookie();
|
15
|
+
}()));
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Workarea
|
2
|
+
decorate Storefront::CartItemsController, with: :mail_chimp do
|
3
|
+
decorated do
|
4
|
+
after_action :sync_with_mailchimp, only: [:create, :update]
|
5
|
+
end
|
6
|
+
|
7
|
+
def destroy
|
8
|
+
super
|
9
|
+
Workarea::MailChimp::Ecommerce::SaveCart.perform_async(current_order.id, deleted_item_id: params[:id])
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def sync_with_mailchimp
|
15
|
+
Workarea::MailChimp::Ecommerce::SaveCart.perform_async(current_order.id, { })
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Workarea
|
2
|
+
decorate Storefront::Checkout::AddressesController, with: :mail_chimp do
|
3
|
+
decorated do
|
4
|
+
after_action :sync_with_mailchimp, only: [:update_addresses]
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def sync_with_mailchimp
|
10
|
+
Workarea::MailChimp::Ecommerce::SaveCart.perform_async(current_order.id)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Workarea
|
2
|
+
decorate Storefront::Checkout::ShippingController, with: :mail_chimp do
|
3
|
+
decorated do
|
4
|
+
after_action :sync_with_mailchimp, only: [:update_shipping]
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def sync_with_mailchimp
|
10
|
+
Workarea::MailChimp::Ecommerce::SaveCart.perform_async(current_order.id)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Workarea
|
2
|
+
decorate Storefront::Users::AccountsController, with: :mail_chimp do
|
3
|
+
decorated { before_action :set_email_interests, only: :edit }
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def user_params
|
8
|
+
@user_params ||= super
|
9
|
+
.merge(params.permit(:email_signup, :groups))
|
10
|
+
.merge(sanitize_groups_param(params))
|
11
|
+
end
|
12
|
+
|
13
|
+
def sanitize_groups_param(params)
|
14
|
+
@sanitize_groups_param ||= Hash[
|
15
|
+
:groups,
|
16
|
+
params.fetch(:groups, []).map do |group|
|
17
|
+
{
|
18
|
+
_id: group[:id],
|
19
|
+
name: group[:name],
|
20
|
+
interests: group[:interests].to_unsafe_hash
|
21
|
+
}
|
22
|
+
end
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_email_interests
|
27
|
+
key = "mail_chimp_email_interests/#{Workarea::MailChimp.config.default_store[:list_id]}"
|
28
|
+
options = { expires_in: 1.hour }
|
29
|
+
|
30
|
+
options.merge!(force: true) if Rails.cache.read(key).nil?
|
31
|
+
|
32
|
+
@email_interests = Rails.cache.fetch(key, options) do
|
33
|
+
Workarea::MailChimp.gateway.list.interests
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Group
|
4
|
+
include ApplicationDocument
|
5
|
+
|
6
|
+
field :_id, type: String
|
7
|
+
field :name, type: String
|
8
|
+
field :interests, type: Hash
|
9
|
+
|
10
|
+
embedded_in :user, class_name: "Workarea::User"
|
11
|
+
|
12
|
+
validate :id_or_name
|
13
|
+
|
14
|
+
def self.email_interests
|
15
|
+
MailChimp.gateway.get_default_list_interests.first
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_hash
|
19
|
+
[_id, name, interests].hash
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
"#{name} (#{id}) - #{interests}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def ==(other)
|
27
|
+
self.name == other[:name] && self.interests == other[:interests]
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def id_or_name
|
33
|
+
unless id.present? || name.present?
|
34
|
+
self.errors[:base] << "An ID or Name is Required."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Store
|
4
|
+
include ApplicationDocument
|
5
|
+
|
6
|
+
field :mail_chimp_id, type: String
|
7
|
+
field :list_id, type: String
|
8
|
+
field :name, type: String
|
9
|
+
field :currency_code, type: String
|
10
|
+
field :connected_site, type: Hash
|
11
|
+
|
12
|
+
index mail_chimp_id: 1
|
13
|
+
|
14
|
+
def self.with_syncing_enabled(&block)
|
15
|
+
MailChimp.request.ecommerce.stores(Workarea::MailChimp.config.default_store[:id]).update(body: { is_syncing: true })
|
16
|
+
block.call
|
17
|
+
ensure
|
18
|
+
MailChimp.request.ecommerce.stores(Workarea::MailChimp.config.default_store[:id]).update(body: { is_syncing: false })
|
19
|
+
end
|
20
|
+
|
21
|
+
def site_script_fragment
|
22
|
+
connected_site.dig("site_script", "fragment")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Workarea
|
2
|
+
decorate User, with: :mail_chimp do
|
3
|
+
class_methods do
|
4
|
+
def default_groups
|
5
|
+
Workarea::MailChimp.gateway.interests
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
decorated do
|
10
|
+
before_validation :check_email_signup
|
11
|
+
before_save :default_groups_if_empty
|
12
|
+
|
13
|
+
field :email_signup, type: Boolean, default: false
|
14
|
+
embeds_many :groups, class_name: "Workarea::MailChimp::Group"
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def check_email_signup
|
20
|
+
self.email_signup ||= Workarea::Email.signed_up?(self.email)
|
21
|
+
end
|
22
|
+
|
23
|
+
def default_groups_if_empty
|
24
|
+
return unless has_attribute?("email_signup")
|
25
|
+
|
26
|
+
if self.groups.empty? && self.email_signup?
|
27
|
+
self.groups = User.default_groups
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Workarea
|
2
|
+
module MailChimp
|
3
|
+
class Address
|
4
|
+
|
5
|
+
attr_reader :address, :options
|
6
|
+
|
7
|
+
def initialize(address, options = {})
|
8
|
+
@address = address
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return Hash
|
13
|
+
def to_h
|
14
|
+
{
|
15
|
+
name: address.first_name + " " + address.last_name,
|
16
|
+
address1: address.street,
|
17
|
+
address2: address.street_2.to_s,
|
18
|
+
city: address.city,
|
19
|
+
province: address.region.to_s,
|
20
|
+
postal_code: address.postal_code.to_s,
|
21
|
+
country: address.country.alpha2,
|
22
|
+
phone: address.phone_number.to_s,
|
23
|
+
company: address.company.to_s
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|