workarea-mail_chimp 3.0.2

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.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +15 -0
  3. data/.gitignore +55 -0
  4. data/.markdownlint.json +10 -0
  5. data/.rails-rubocop.yml +119 -0
  6. data/.rubocop.yml +8 -0
  7. data/.scss-lint.yml +188 -0
  8. data/CHANGELOG.md +244 -0
  9. data/Gemfile +9 -0
  10. data/README.md +115 -0
  11. data/Rakefile +53 -0
  12. data/app/assets/javascripts/workarea/storefront/mail_chimp/mail_chimp_tracking.js +15 -0
  13. data/app/controllers/workarea/storefront/application_controller.decorator +11 -0
  14. data/app/controllers/workarea/storefront/cart_items_controller.decorator +18 -0
  15. data/app/controllers/workarea/storefront/checkout/addresses_controller.decorator +13 -0
  16. data/app/controllers/workarea/storefront/checkout/shipping_controller.decorator +13 -0
  17. data/app/controllers/workarea/storefront/users/accounts_controller.decorator +37 -0
  18. data/app/models/workarea/catalog/product.decorator +7 -0
  19. data/app/models/workarea/mail_chimp/group.rb +39 -0
  20. data/app/models/workarea/mail_chimp/store.rb +26 -0
  21. data/app/models/workarea/order.decorator +9 -0
  22. data/app/models/workarea/user.decorator +31 -0
  23. data/app/services/workarea/mail_chimp/address.rb +28 -0
  24. data/app/services/workarea/mail_chimp/cart.rb +78 -0
  25. data/app/services/workarea/mail_chimp/order.rb +97 -0
  26. data/app/services/workarea/mail_chimp/product.rb +43 -0
  27. data/app/services/workarea/mail_chimp/variant.rb +43 -0
  28. data/app/view_models/workarea/storefront/user_view_model.decorator +16 -0
  29. data/app/views/workarea/storefront/mail_chimp/_ecommerce_javascript.html.haml +2 -0
  30. data/app/views/workarea/storefront/users/accounts/_edit.html.haml +12 -0
  31. data/app/views/workarea/storefront/users/accounts/_email_interests.html.haml +13 -0
  32. data/app/workers/workarea/mail_chimp/ecommerce/save_cart.rb +40 -0
  33. data/app/workers/workarea/mail_chimp/ecommerce/save_order.rb +31 -0
  34. data/app/workers/workarea/mail_chimp/ecommerce/save_product.rb +31 -0
  35. data/app/workers/workarea/mail_chimp/list_subscriber.rb +30 -0
  36. data/app/workers/workarea/mail_chimp/list_unsubscriber.rb +22 -0
  37. data/app/workers/workarea/mail_chimp/subscription_edit.rb +28 -0
  38. data/bin/rails +19 -0
  39. data/config/initializers/appends.rb +21 -0
  40. data/config/initializers/workarea.rb +14 -0
  41. data/config/locales/en.yml +15 -0
  42. data/lib/gibbon/request_decorator.rb +10 -0
  43. data/lib/integrations/workarea/mail_chimp/bogus_api_request.rb +30 -0
  44. data/lib/integrations/workarea/mail_chimp/bogus_gateway.rb +35 -0
  45. data/lib/integrations/workarea/mail_chimp/bogus_request.rb +78 -0
  46. data/lib/integrations/workarea/mail_chimp/gateway.rb +86 -0
  47. data/lib/integrations/workarea/mail_chimp/gateway/list.rb +47 -0
  48. data/lib/integrations/workarea/mail_chimp/gateway/members.rb +61 -0
  49. data/lib/integrations/workarea/mail_chimp/gateway/subscribe_argument_builder.rb +101 -0
  50. data/lib/tasks/mail_chimp.rake +71 -0
  51. data/lib/workarea/mail_chimp.rb +72 -0
  52. data/lib/workarea/mail_chimp/engine.rb +14 -0
  53. data/lib/workarea/mail_chimp/errors.rb +2 -0
  54. data/lib/workarea/mail_chimp/tasks/ecommerce.rb +43 -0
  55. data/lib/workarea/mail_chimp/version.rb +5 -0
  56. data/script/admin_ci +9 -0
  57. data/script/ci +11 -0
  58. data/script/core_ci +9 -0
  59. data/script/plugins_ci +9 -0
  60. data/script/storefront_ci +9 -0
  61. data/test/dummy/Rakefile +6 -0
  62. data/test/dummy/app/assets/config/manifest.js +4 -0
  63. data/test/dummy/app/assets/images/.keep +0 -0
  64. data/test/dummy/app/assets/javascripts/application.js +13 -0
  65. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  66. data/test/dummy/app/controllers/application_controller.rb +3 -0
  67. data/test/dummy/app/controllers/concerns/.keep +0 -0
  68. data/test/dummy/app/helpers/application_helper.rb +2 -0
  69. data/test/dummy/app/jobs/application_job.rb +2 -0
  70. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  71. data/test/dummy/app/models/concerns/.keep +0 -0
  72. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  73. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  74. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  75. data/test/dummy/bin/bundle +3 -0
  76. data/test/dummy/bin/rails +4 -0
  77. data/test/dummy/bin/rake +4 -0
  78. data/test/dummy/bin/setup +34 -0
  79. data/test/dummy/bin/update +29 -0
  80. data/test/dummy/config.ru +5 -0
  81. data/test/dummy/config/application.rb +23 -0
  82. data/test/dummy/config/boot.rb +5 -0
  83. data/test/dummy/config/cable.yml +9 -0
  84. data/test/dummy/config/environment.rb +5 -0
  85. data/test/dummy/config/environments/development.rb +56 -0
  86. data/test/dummy/config/environments/production.rb +86 -0
  87. data/test/dummy/config/environments/test.rb +43 -0
  88. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  89. data/test/dummy/config/initializers/assets.rb +11 -0
  90. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  91. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  92. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  93. data/test/dummy/config/initializers/inflections.rb +16 -0
  94. data/test/dummy/config/initializers/mime_types.rb +4 -0
  95. data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
  96. data/test/dummy/config/initializers/session_store.rb +3 -0
  97. data/test/dummy/config/initializers/workarea.rb +5 -0
  98. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  99. data/test/dummy/config/locales/en.yml +23 -0
  100. data/test/dummy/config/puma.rb +47 -0
  101. data/test/dummy/config/routes.rb +5 -0
  102. data/test/dummy/config/secrets.yml +22 -0
  103. data/test/dummy/config/spring.rb +6 -0
  104. data/test/dummy/db/seeds.rb +2 -0
  105. data/test/dummy/lib/assets/.keep +0 -0
  106. data/test/factories/mail_chimp.rb +50 -0
  107. data/test/integration/workarea/mailchimp/subscription_test.rb +52 -0
  108. data/test/integration/workarea/mailchimp/tracking_params_test.rb +50 -0
  109. data/test/integration/workarea/mailchimp/unsubscribe_test.rb +14 -0
  110. data/test/integration/workarea/storefront/mail_chimp_order_test.rb +106 -0
  111. data/test/integration/workarea/storefront/mail_chimp_product_test.rb +51 -0
  112. data/test/integration/workarea/storefront/mail_chimp_site_javascript_test.rb +25 -0
  113. data/test/lib/workarea/mailchimp/gateway/list_test.rb +48 -0
  114. data/test/lib/workarea/mailchimp/gateway_test.rb +196 -0
  115. data/test/lib/workarea/mailchimp/tasks/ecommerce_test.rb +40 -0
  116. data/test/services/workarea/mail_chimp/cart_test.rb +44 -0
  117. data/test/services/workarea/mail_chimp/order_test.rb +50 -0
  118. data/test/services/workarea/mail_chimp/product_test.rb +29 -0
  119. data/test/support/workarea/mail_chimp_api_config.rb +33 -0
  120. data/test/system/workarea/storefront/campaign_tracking_test.rb +14 -0
  121. data/test/system/workarea/storefront/group_test.rb +33 -0
  122. data/test/system/workarea/storefront/mail_chimp_accounts_system_test.rb +79 -0
  123. data/test/test_helper.rb +17 -0
  124. data/test/vcr_cassettes/get_default_list_interests.yml +104 -0
  125. data/test/vcr_cassettes/get_member_details_no_match.yml +51 -0
  126. data/test/vcr_cassettes/get_member_details_unsubscribed.yml +51 -0
  127. data/test/vcr_cassettes/interest_categories_read.yml +104 -0
  128. data/test/vcr_cassettes/mail_chimp/tasks/create_store-successful.yml +97 -0
  129. data/test/vcr_cassettes/mc_order_test.yml +381 -0
  130. data/test/vcr_cassettes/mc_product_test.yml +234 -0
  131. data/test/vcr_cassettes/subscribe_to_default_list.yml +254 -0
  132. data/test/vcr_cassettes/subscribe_to_default_list_interest_groups.yml +254 -0
  133. data/test/vcr_cassettes/subscribe_to_default_list_with_groupings.yml +254 -0
  134. data/test/vcr_cassettes/subscribe_to_default_list_with_user_details.yml +254 -0
  135. data/test/vcr_cassettes/unsubscribe_from_default_list.yml +53 -0
  136. data/test/vcr_cassettes/update_member_on_default_list_change_email.yml +254 -0
  137. data/test/vcr_cassettes/update_member_on_default_list_change_groupings.yml +254 -0
  138. data/test/workers/workarea/mail_chimp/ecommerce/save_cart_test.rb +28 -0
  139. data/test/workers/workarea/mail_chimp/ecommerce/save_order_test.rb +15 -0
  140. data/test/workers/workarea/mail_chimp/ecommerce/save_product_test.rb +15 -0
  141. data/workarea-mail_chimp.gemspec +20 -0
  142. metadata +212 -0
@@ -0,0 +1,78 @@
1
+ module Workarea
2
+ module MailChimp
3
+ class Cart
4
+ include Workarea::I18n::DefaultUrlOptions
5
+ include Storefront::Engine.routes.url_helpers
6
+
7
+ attr_reader :order, :options
8
+
9
+ def initialize(order, options = {})
10
+ @order = order
11
+ @options = options
12
+ end
13
+
14
+ # @return Hash
15
+ def to_h
16
+ cart_hsh = {
17
+ id: order.id.to_s,
18
+ currency_code: order.total_price.currency.iso_code,
19
+ order_total: order.total_price.to_s,
20
+ tax_total: order.tax_total.to_s,
21
+ shipping_total: order.shipping_total.to_s,
22
+ lines: lines,
23
+ customer: customer,
24
+ checkout_url: Storefront::Engine.routes.url_helpers.resume_cart_url(token: order.token, host: Workarea.config.host),
25
+ }
26
+
27
+ # Mailchimp api does not accept empty values for campaign ID
28
+ # only merge in if the campaign ID is present
29
+ cart_hsh.merge!(campaign_id: order.mail_chimp_campaign_id) if order.mail_chimp_campaign_id.present?
30
+
31
+ cart_hsh
32
+ end
33
+
34
+ private
35
+
36
+ def customer
37
+ customer = { id: Digest::MD5.hexdigest(order.email) }
38
+ if send_full_customer?
39
+ customer.merge!(
40
+ {
41
+ email_address: order.email,
42
+ opt_in_status: Workarea::Email.signed_up?(order.email),
43
+ first_name: payment.address.first_name,
44
+ last_name: payment.address.last_name
45
+ }
46
+ )
47
+ end
48
+
49
+ customer
50
+ end
51
+
52
+ def payment
53
+ @payment ||= Workarea::Payment.find(order.id)
54
+ end
55
+
56
+ # order items. Mailchimp refers to them as "lines"
57
+ def lines
58
+ order.items.map do |oi|
59
+ {
60
+ id: oi.id.to_s,
61
+ product_id: oi.product_id,
62
+ product_variant_id: oi.sku,
63
+ quantity: oi.quantity,
64
+ price: oi.total_price.to_s
65
+ }
66
+ end
67
+ end
68
+
69
+ def payment
70
+ @payment ||= Workarea::Payment.find(order.id)
71
+ end
72
+
73
+ def send_full_customer?
74
+ options[:send_full_customer]
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,97 @@
1
+ module Workarea
2
+ module MailChimp
3
+ class Order
4
+ attr_reader :order, :options
5
+
6
+ def initialize(order, options = {})
7
+ @order = order
8
+ @options = options
9
+ end
10
+
11
+ # @return Hash
12
+ def to_h
13
+ order_hsh = {
14
+ id: order.id.to_s,
15
+ financial_status: financial_status,
16
+ fulfillment_status: fulfillment_status,
17
+ currency_code: order.total_price.currency.iso_code,
18
+ order_total: order.total_price.to_s,
19
+ tax_total: order.tax_total.to_s,
20
+ shipping_total: order.shipping_total.to_s,
21
+ processed_at_foreign: order.placed_at.strftime('%FT%T%:z'),
22
+ shipping_address: shipping_address,
23
+ billing_address: billing_address,
24
+ lines: lines,
25
+ customer: customer
26
+ }
27
+ order_hsh.merge!(campaign_id: order.mail_chimp_campaign_id) if order.mail_chimp_campaign_id.present?
28
+ order_hsh
29
+ end
30
+
31
+ private
32
+
33
+ def customer
34
+ {
35
+ id: Digest::MD5.hexdigest(order.email),
36
+ email_address: order.email,
37
+ opt_in_status: Workarea::Email.signed_up?(order.email),
38
+ orders_count: user_order_count,
39
+ total_spent: user_order_total.to_s,
40
+ first_name: payment.address.first_name,
41
+ last_name: payment.address.last_name
42
+ }
43
+ end
44
+
45
+ def user_order_count
46
+ user_orders.count
47
+ end
48
+
49
+ def user_order_total
50
+ user_orders.map(&:total_price).sum
51
+ end
52
+
53
+ def user_orders
54
+ @user_orders ||= Workarea::Order.placed.where(email: order.email)
55
+ end
56
+
57
+ def shipping_address
58
+ return unless shipping.present?
59
+
60
+ MailChimp::Address.new(shipping.address).to_h
61
+ end
62
+
63
+ def billing_address
64
+ MailChimp::Address.new(payment.address).to_h
65
+ end
66
+
67
+ def financial_status
68
+ options[:financial_status] || ""
69
+ end
70
+
71
+ def fulfillment_status
72
+ options[:fulfillment_status] || ""
73
+ end
74
+
75
+ # order items. Mailchimp refers to them as "lines"
76
+ def lines
77
+ order.items.map do |oi|
78
+ {
79
+ id: oi.id.to_s,
80
+ product_id: oi.product_id,
81
+ product_variant_id: oi.sku,
82
+ quantity: oi.quantity,
83
+ price: oi.total_price.to_s
84
+ }
85
+ end
86
+ end
87
+
88
+ def payment
89
+ @payment ||= Workarea::Payment.find(order.id)
90
+ end
91
+
92
+ def shipping
93
+ @shipping ||= Workarea::Shipping.find_by_order(order.id)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,43 @@
1
+ module Workarea
2
+ module MailChimp
3
+ class Product
4
+ include ActionView::Helpers::AssetUrlHelper
5
+ include Core::Engine.routes.url_helpers
6
+ include Storefront::Engine.routes.url_helpers
7
+ include Workarea::ApplicationHelper
8
+
9
+ attr_reader :product
10
+
11
+ def initialize(product)
12
+ @product = product
13
+ end
14
+
15
+ # @return Hash
16
+ def to_h
17
+ {
18
+ id: product.id.to_s,
19
+ title: product.name,
20
+ handle: product.slug,
21
+ url: product_url(id: product.to_param, host: Workarea.config.host),
22
+ description: product.description.to_s,
23
+ image_url: primary_image,
24
+ variants: variants
25
+ }
26
+ end
27
+
28
+ private
29
+
30
+ def variants
31
+ @variants ||= product.variants.map{ |v| Variant.new(v).to_h }
32
+ end
33
+
34
+ def primary_image
35
+ Workarea.config.host + ProductPrimaryImageUrl.new(product).path
36
+ end
37
+
38
+ def mounted_core
39
+ self
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ module Workarea
2
+ module MailChimp
3
+ class Variant
4
+ include ActionView::Helpers::AssetUrlHelper
5
+ include Core::Engine.routes.url_helpers
6
+ include Workarea::ApplicationHelper
7
+
8
+ delegate :sku, to: :variant
9
+
10
+ attr_reader :variant
11
+
12
+ def initialize(variant)
13
+ @variant = variant
14
+ end
15
+
16
+ # @return Hash
17
+ def to_h
18
+ {
19
+ id: sku,
20
+ title: variant.name,
21
+ sku: sku,
22
+ price: price.to_s,
23
+ inventory_quantity: inventory_sku.available_to_sell,
24
+ visibility: inventory_sku.displayable?.to_s
25
+ }
26
+ end
27
+
28
+ private
29
+
30
+ def inventory_sku
31
+ @inventory_sku ||= Inventory::Sku.find(sku) rescue Inventory::Sku.new(id: sku)
32
+ end
33
+
34
+ def pricing_sku
35
+ @pricing_sku ||= Pricing::Sku.find(sku) rescue Pricing::Sku.new(id: sku)
36
+ end
37
+
38
+ def price
39
+ pricing_sku.sell_price.dollars.to_f
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,16 @@
1
+ module Workarea
2
+ decorate Storefront::UserViewModel, with: :mail_chimp do
3
+ def has_email_interest?(interest)
4
+ return false if model.groups.empty?
5
+ email_interests.find { |id, int| int == interest }
6
+ end
7
+
8
+ def email_interests
9
+ model.groups.map(&:interests).inject(&:merge)
10
+ end
11
+
12
+ def email_signup?
13
+ model.email_signup || super
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,2 @@
1
+ - if Workarea::MailChimp.current_store.present?
2
+ != Workarea::MailChimp.current_store.site_script_fragment
@@ -0,0 +1,12 @@
1
+ .email-interest-group
2
+ - if @email_interests.present?
3
+ %p.email-interest-group__heading= t('workarea.storefront.users.edit.email_interests')
4
+ - @email_interests.each do |group|
5
+ %p.email-interest-group__sub-heading= group["name"]
6
+ - group.interests.each do |id, interest|
7
+ .button-property
8
+ .value= check_box_tag "groups[][interests][#{id}]", interest, @user.has_email_interest?(interest)
9
+ = label_tag "groups[][interests][#{id}]", nil, class: 'button-property__name' do
10
+ %span.text= interest
11
+ = hidden_field_tag 'groups[][id]', group._id if group._id.present?
12
+ = hidden_field_tag 'groups[][name]', group.name if group.name.present?
@@ -0,0 +1,13 @@
1
+ %tr
2
+ %th
3
+ %span= t('workarea.storefront.users.email_preferences.interests')
4
+ %td
5
+ - if @user.email_interests.present?
6
+ %ul.inline-list
7
+ - @user.email_interests.each.with_index(1) do |(_id, interest), index|
8
+ %li<
9
+ #{interest}
10
+ - if index != @user.email_interests.size
11
+ ,
12
+ - else
13
+ %p= t('workarea.storefront.users.email_preferences.none')
@@ -0,0 +1,40 @@
1
+ module Workarea
2
+ module MailChimp
3
+ module Ecommerce
4
+ class SaveCart
5
+ include Sidekiq::Worker
6
+
7
+ def perform(id, options = {})
8
+ order = Workarea::Order.find(id)
9
+
10
+ return if order.placed?
11
+ return if order.email.blank?
12
+
13
+ store_id = Workarea::MailChimp.config.default_store[:id]
14
+
15
+ customer_id = Digest::MD5.hexdigest(order.email)
16
+
17
+ # see if customer exists already
18
+ # existing customers only need to send the ID ot mailchimp
19
+ customer = MailChimp.request.ecommerce.stores(store_id).customers(customer_id).retrieve rescue nil
20
+
21
+ cart_options = { send_full_customer: customer.blank? }
22
+ mc_cart = Workarea::MailChimp::Cart.new(order, cart_options)
23
+
24
+ if order.cart_exported_to_mail_chimp_at.present?
25
+ MailChimp.request.ecommerce.stores(store_id).carts(order.id.to_s).update(body: mc_cart.to_h)
26
+ else
27
+ MailChimp.request.ecommerce.stores(store_id).carts.create(body: mc_cart.to_h)
28
+ end
29
+
30
+ # cart lines in mail chimp need to be removed outside of the delete or update methods.
31
+ if options["deleted_item_id"].present?
32
+ MailChimp.request.ecommerce.stores(store_id).carts(order.id.to_s).lines(options["deleted_item_id"]).delete
33
+ end
34
+
35
+ order.set(cart_exported_to_mail_chimp_at: Time.current)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,31 @@
1
+ module Workarea
2
+ module MailChimp
3
+ module Ecommerce
4
+ class SaveOrder
5
+ include Sidekiq::Worker
6
+ include Sidekiq::CallbacksWorker
7
+
8
+ sidekiq_options(
9
+ enqueue_on: { Workarea::Order => [:place] },
10
+ unique: :until_executing
11
+ )
12
+
13
+ def perform(id)
14
+ order = Workarea::Order.find(id)
15
+ mc_order = Workarea::MailChimp::Order.new(order)
16
+ store_id = Workarea::MailChimp.config.default_store[:id]
17
+
18
+ MailChimp.request.ecommerce.stores(store_id).orders.create(body: mc_order.to_h)
19
+
20
+ order.set(exported_to_mail_chimp_at: Time.current)
21
+
22
+ delete_cart(id, store_id)
23
+ end
24
+
25
+ def delete_cart(id, store_id)
26
+ MailChimp.request.ecommerce.stores(store_id).carts(id).delete rescue nil
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ module Workarea
2
+ module MailChimp
3
+ module Ecommerce
4
+ class SaveProduct
5
+ include Sidekiq::Worker
6
+ include Sidekiq::CallbacksWorker
7
+
8
+ sidekiq_options(
9
+ enqueue_on: { Catalog::Product => [:save] },
10
+ unique: :until_executing
11
+ )
12
+
13
+ def perform(id)
14
+ product = Workarea::Catalog::Product.find(id)
15
+
16
+ mc_product = Workarea::MailChimp::Product.new(product)
17
+
18
+ store_id = Workarea::MailChimp.config.default_store[:id]
19
+
20
+ if product.exported_to_mail_chimp_at.present?
21
+ MailChimp.request.ecommerce.stores(store_id).products(product.id.to_s).update(body: mc_product.to_h)
22
+ else
23
+ MailChimp.request.ecommerce.stores(store_id).products.create(body: mc_product.to_h)
24
+ end
25
+
26
+ product.set(exported_to_mail_chimp_at: Time.current)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ module Workarea
2
+ module MailChimp
3
+ class ListSubscriber
4
+ include Sidekiq::Worker
5
+ include Sidekiq::CallbacksWorker
6
+
7
+ sidekiq_options(
8
+ enqueue_on: { Email::Signup => [:save] },
9
+ queue: "low",
10
+ retry: true
11
+ )
12
+
13
+ def perform(email_signup_id)
14
+ signup = Email::Signup.find(email_signup_id)
15
+ @user = User.find_by(email: signup.email) rescue nil
16
+
17
+ if @user
18
+ Workarea::MailChimp.gateway.subscribe(@user.email, user: @user)
19
+ update_user_subscription
20
+ else
21
+ Workarea::MailChimp.gateway.subscribe(signup.email)
22
+ end
23
+ end
24
+
25
+ def update_user_subscription
26
+ @user.update_attributes(email_signup: true)
27
+ end
28
+ end
29
+ end
30
+ end