effective_mailchimp 0.2.5 → 0.3.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.
- checksums.yaml +4 -4
- data/app/controllers/admin/mailchimp_lists_controller.rb +10 -3
- data/app/controllers/effective/mailchimp_controller.rb +18 -0
- data/app/helpers/effective_mailchimp_helper.rb +0 -13
- data/app/jobs/effective_mailchimp_update_job.rb +1 -1
- data/app/models/concerns/effective_mailchimp_user.rb +75 -21
- data/app/models/effective/mailchimp_api.rb +15 -0
- data/app/models/effective/mailchimp_list_member.rb +6 -0
- data/app/views/admin/mailchimp_lists/index.html.haml +14 -10
- data/app/views/admin/mailchimp_user/_form.html.haml +2 -13
- data/app/views/admin/mailchimp_user/_sync.html.haml +15 -0
- data/app/views/effective/mailchimp_user/_fields.html.haml +5 -2
- data/app/views/effective/mailchimp_user/_sync.html.haml +15 -0
- data/config/routes.rb +5 -1
- data/lib/effective_mailchimp/version.rb +1 -1
- data/lib/effective_mailchimp.rb +1 -1
- metadata +6 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6a5caed2328b202f012d4c813afb0c5038aa304b6b7efdcf30097bcc7ff7be2e
         | 
| 4 | 
            +
              data.tar.gz: ed2fb79473591925eaf5ac5f2556464afb01269370e173215988afa33630dd12
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 272d0eda1823ee5df64c6f32612707cf5a80cabcd27b8cfd1ed346b2dc6e95142482e81fbc4f8c2bbd8afbce92be580898685b4c6833c83728bd30a408f8f9d4
         | 
| 7 | 
            +
              data.tar.gz: 33c4543526fe5b465f4a2252482fd5d9774f62a06f2b82cc825274599f0e3f53f0a5f48891e66c4cb983451669f23e4e201c7979f4207e30e0051c7f49696f69
         | 
| @@ -3,11 +3,18 @@ module Admin | |
| 3 3 | 
             
                before_action(:authenticate_user!) if defined?(Devise)
         | 
| 4 4 | 
             
                before_action { EffectiveResources.authorize!(self, :admin, :effective_mailchimp) }
         | 
| 5 5 |  | 
| 6 | 
            -
                # Calls Sync
         | 
| 7 | 
            -
                before_action(only: :index) { Effective::MailchimpList.sync! }
         | 
| 8 | 
            -
             | 
| 9 6 | 
             
                include Effective::CrudController
         | 
| 10 7 |  | 
| 8 | 
            +
                def mailchimp_sync
         | 
| 9 | 
            +
                  EffectiveResources.authorize!(self, :mailchimp_sync, Effective::MailchimpList)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  Effective::MailchimpList.sync!
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  flash[:success] = "Successfully synced mailchimp lists"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  redirect_back(fallback_location: effective_mailchimp.admin_mailchimp_lists_path)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 11 18 | 
             
                private
         | 
| 12 19 |  | 
| 13 20 | 
             
                def permitted_params
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            module Effective
         | 
| 2 | 
            +
              class MailchimpController < ApplicationController
         | 
| 3 | 
            +
                before_action(:authenticate_user!) if defined?(Devise)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def mailchimp_sync_user
         | 
| 6 | 
            +
                  resource = current_user
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  EffectiveResources.authorize!(self, :mailchimp_sync_user, current_user)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  resource.mailchimp_sync!
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  flash[:success] = "Successfully synced mailchimp"
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  redirect_back(fallback_location: '/settings')
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -1,15 +1,2 @@ | |
| 1 1 | 
             
            module EffectiveMailchimpHelper
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              def mailchimp_user_fields(form)
         | 
| 4 | 
            -
                raise('expected a form') unless form.respond_to?(:object)
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                resource = form.object
         | 
| 7 | 
            -
                raise('expected an effective_mailchimp_user resource') unless resource.class.respond_to?(:effective_mailchimp_user?)
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                resource.reload
         | 
| 10 | 
            -
                resource.mailchimp_sync!(force: false)
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                render('effective/mailchimp_user/fields', form: form, f: form, resource: resource, mailchimp_user: resource)
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 2 | 
             
            end
         | 
| @@ -14,6 +14,10 @@ module EffectiveMailchimpUser | |
| 14 14 |  | 
| 15 15 | 
             
              module ClassMethods
         | 
| 16 16 | 
             
                def effective_mailchimp_user?; true; end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def require_mailchimp_update_fields
         | 
| 19 | 
            +
                  ['email', 'last_name', 'first_name']
         | 
| 20 | 
            +
                end
         | 
| 17 21 | 
             
              end
         | 
| 18 22 |  | 
| 19 23 | 
             
              included do
         | 
| @@ -26,11 +30,54 @@ module EffectiveMailchimpUser | |
| 26 30 | 
             
                accepts_nested_attributes_for :mailchimp_lists, allow_destroy: true
         | 
| 27 31 |  | 
| 28 32 | 
             
                # The user updated the form
         | 
| 29 | 
            -
                after_commit(if: -> {  | 
| 33 | 
            +
                after_commit(if: -> { mailchimp_member_update_required? }) do
         | 
| 30 34 | 
             
                  EffectiveMailchimpUpdateJob.perform_later(self)
         | 
| 31 35 | 
             
                end
         | 
| 32 36 | 
             
              end
         | 
| 33 37 |  | 
| 38 | 
            +
              def mailchimp_subscribed?(mailchimp_list)
         | 
| 39 | 
            +
                raise('expected a MailchimpList') unless mailchimp_lists.all? { |list| list.kind_of?(Effective::MailchimpList) }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                member = mailchimp_list_member(mailchimp_list: mailchimp_list)
         | 
| 42 | 
            +
                return false if member.blank?
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                member.subscribed? && member.synced?
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              # Api method to just subscribe this user to this list right now
         | 
| 48 | 
            +
              # Pass one list or an Array of lists
         | 
| 49 | 
            +
              def mailchimp_subscribe!(mailchimp_list)
         | 
| 50 | 
            +
                mailchimp_lists = Array(mailchimp_list)
         | 
| 51 | 
            +
                raise('expected a MailchimpList') unless mailchimp_lists.all? { |list| list.kind_of?(Effective::MailchimpList) }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                mailchimp_lists.each do |mailchimp_list|
         | 
| 54 | 
            +
                  member = build_mailchimp_list_member(mailchimp_list: mailchimp_list)
         | 
| 55 | 
            +
                  member.assign_attributes(subscribed: true)
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                # This sets up the after_commit to run the mailchimp_update! job
         | 
| 59 | 
            +
                assign_attributes(mailchimp_user_form_action: true)
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                save!
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              # Api method to just unsubscribe this user to this list right now
         | 
| 65 | 
            +
              # Pass one list or an Array of lists
         | 
| 66 | 
            +
              def mailchimp_unsubscribe!(mailchimp_list)
         | 
| 67 | 
            +
                mailchimp_lists = Array(mailchimp_list)
         | 
| 68 | 
            +
                raise('expected a MailchimpList') unless mailchimp_lists.all? { |list| list.kind_of?(Effective::MailchimpList) }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                mailchimp_lists.each do |mailchimp_list|
         | 
| 71 | 
            +
                  member = build_mailchimp_list_member(mailchimp_list: mailchimp_list)
         | 
| 72 | 
            +
                  member.assign_attributes(subscribed: false)
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                # This sets up the after_commit to run the mailchimp_update! job
         | 
| 76 | 
            +
                assign_attributes(mailchimp_user_form_action: true)
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                save!
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
             | 
| 34 81 | 
             
              # Intended for app to extend
         | 
| 35 82 | 
             
              def mailchimp_merge_fields
         | 
| 36 83 | 
             
                default_mailchimp_merge_fields()
         | 
| @@ -88,26 +135,29 @@ module EffectiveMailchimpUser | |
| 88 135 | 
             
                mailchimp_list_member(mailchimp_list: mailchimp_list) || mailchimp_list_members.build(mailchimp_list: mailchimp_list)
         | 
| 89 136 | 
             
              end
         | 
| 90 137 |  | 
| 91 | 
            -
              def mailchimp_list_members_changed?
         | 
| 92 | 
            -
                mailchimp_list_members.any? { |mlm| mlm.changes.present? || mlm.marked_for_destruction? }
         | 
| 93 | 
            -
              end
         | 
| 94 | 
            -
             | 
| 95 138 | 
             
              def mailchimp_last_synced_at
         | 
| 96 | 
            -
                mailchimp_list_members.map(&:last_synced_at).min
         | 
| 139 | 
            +
                mailchimp_list_members.map(&:last_synced_at).compact.min
         | 
| 97 140 | 
             
              end
         | 
| 98 141 |  | 
| 99 | 
            -
               | 
| 100 | 
            -
             | 
| 101 | 
            -
                 | 
| 142 | 
            +
              # Used by the form to set it up for all lists
         | 
| 143 | 
            +
              def build_mailchimp_list_members
         | 
| 144 | 
            +
                mailchimp_lists = Effective::MailchimpList.subscribable.sorted.to_a
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                mailchimp_lists.each do |mailchimp_list|
         | 
| 147 | 
            +
                  build_mailchimp_list_member(mailchimp_list: mailchimp_list)
         | 
| 148 | 
            +
                end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                mailchimp_list_members
         | 
| 102 151 | 
             
              end
         | 
| 103 152 |  | 
| 104 153 | 
             
              # Pulls the current status from Mailchimp API into the Mailchimp List Member objects
         | 
| 105 154 | 
             
              # Run before the mailchimp fields are displayed
         | 
| 106 | 
            -
               | 
| 155 | 
            +
              # Only run in the background when a user or admin clicks sync now
         | 
| 156 | 
            +
              def mailchimp_sync!
         | 
| 107 157 | 
             
                api = EffectiveMailchimp.api
         | 
| 108 158 | 
             
                lists = Effective::MailchimpList.subscribable.sorted.to_a
         | 
| 109 159 |  | 
| 110 | 
            -
                 | 
| 160 | 
            +
                assign_attributes(mailchimp_user_form_action: nil)
         | 
| 111 161 |  | 
| 112 162 | 
             
                Timeout::timeout(lists.length * 2) do
         | 
| 113 163 | 
             
                  lists.each do |mailchimp_list|
         | 
| @@ -123,12 +173,12 @@ module EffectiveMailchimpUser | |
| 123 173 | 
             
                  member.mark_for_destruction unless list.present?
         | 
| 124 174 | 
             
                end
         | 
| 125 175 |  | 
| 126 | 
            -
                save! | 
| 127 | 
            -
                true
         | 
| 176 | 
            +
                save!
         | 
| 128 177 | 
             
              end
         | 
| 129 178 |  | 
| 130 179 | 
             
              # Pushes the current Mailchimp List Member objects to Mailchimp when needed
         | 
| 131 | 
            -
               | 
| 180 | 
            +
              # Called in the background after a form submission that changes the user email/last_name/first_name or mailchimp subscriptions
         | 
| 181 | 
            +
              def mailchimp_update!
         | 
| 132 182 | 
             
                api = EffectiveMailchimp.api
         | 
| 133 183 |  | 
| 134 184 | 
             
                assign_attributes(mailchimp_user_form_action: nil)
         | 
| @@ -137,24 +187,28 @@ module EffectiveMailchimpUser | |
| 137 187 | 
             
                  if member.mailchimp_id.blank? && member.subscribed?
         | 
| 138 188 | 
             
                    list_member = api.list_member_add(member)
         | 
| 139 189 | 
             
                    member.assign_mailchimp_attributes(list_member)
         | 
| 140 | 
            -
                  elsif member.mailchimp_id.present? | 
| 190 | 
            +
                  elsif member.mailchimp_id.present?
         | 
| 141 191 | 
             
                    list_member = api.list_member_update(member)
         | 
| 142 192 | 
             
                    member.assign_mailchimp_attributes(list_member)
         | 
| 143 193 | 
             
                  end
         | 
| 144 194 | 
             
                end
         | 
| 145 195 |  | 
| 146 | 
            -
                save! | 
| 147 | 
            -
                true
         | 
| 196 | 
            +
                save!
         | 
| 148 197 | 
             
              end
         | 
| 149 198 |  | 
| 150 | 
            -
               | 
| 151 | 
            -
             | 
| 199 | 
            +
              private
         | 
| 200 | 
            +
             | 
| 201 | 
            +
              def mailchimp_member_update_required?
         | 
| 202 | 
            +
                return false unless mailchimp_user_form_action
         | 
| 152 203 |  | 
| 204 | 
            +
                # Update if my email first name or last name change
         | 
| 205 | 
            +
                require_update = self.class.require_mailchimp_update_fields()
         | 
| 153 206 | 
             
                return true if (changes.keys & require_update).present?
         | 
| 154 207 | 
             
                return true if (previous_changes.keys & require_update).present?
         | 
| 155 208 |  | 
| 156 | 
            -
                 | 
| 157 | 
            -
                 | 
| 209 | 
            +
                # Update if any of my mailchimp list members changed
         | 
| 210 | 
            +
                # which happens when I submit a form and change the Mailchimp values
         | 
| 211 | 
            +
                return true if mailchimp_list_members.any? { |m| m.changes.present? || m.previous_changes.present? || m.marked_for_destruction? }
         | 
| 158 212 |  | 
| 159 213 | 
             
                false
         | 
| 160 214 | 
             
              end
         | 
| @@ -21,10 +21,18 @@ module Effective | |
| 21 21 | 
             
                  @client.set_config(api_key: @api_key, server: @server)
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            +
                def debug?
         | 
| 25 | 
            +
                  Rails.env.development?
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 24 28 | 
             
                def admin_url
         | 
| 25 29 | 
             
                  "https://#{server}.admin.mailchimp.com"
         | 
| 26 30 | 
             
                end
         | 
| 27 31 |  | 
| 32 | 
            +
                def public_url
         | 
| 33 | 
            +
                  "https://mailchimp.com"
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 28 36 | 
             
                def ping
         | 
| 29 37 | 
             
                  client.ping.get()
         | 
| 30 38 | 
             
                end
         | 
| @@ -32,11 +40,15 @@ module Effective | |
| 32 40 | 
             
                # Returns an Array of Lists, which are each Hash
         | 
| 33 41 | 
             
                # Like this [{ ...}, { ... }]
         | 
| 34 42 | 
             
                def lists
         | 
| 43 | 
            +
                  Rails.logger.info "[effective_mailchimp] Index Lists..." if debug?
         | 
| 44 | 
            +
             | 
| 35 45 | 
             
                  response = client.lists.get_all_lists(count: 250)
         | 
| 36 46 | 
             
                  Array(response['lists']) - [nil, '', {}]
         | 
| 37 47 | 
             
                end
         | 
| 38 48 |  | 
| 39 49 | 
             
                def list(id)
         | 
| 50 | 
            +
                  Rails.logger.info "[effective_mailchimp] Show List..." if debug?
         | 
| 51 | 
            +
             | 
| 40 52 | 
             
                  client.lists.get_list(id.try(:mailchimp_id) || id)
         | 
| 41 53 | 
             
                end
         | 
| 42 54 |  | 
| @@ -70,6 +82,9 @@ module Effective | |
| 70 82 | 
             
                def list_member_add(member)
         | 
| 71 83 | 
             
                  raise('expected an Effective::MailchimpListMember') unless member.kind_of?(Effective::MailchimpListMember)
         | 
| 72 84 |  | 
| 85 | 
            +
                  existing = list_member(member.mailchimp_list, member.user.email)
         | 
| 86 | 
            +
                  return existing if existing.present?
         | 
| 87 | 
            +
             | 
| 73 88 | 
             
                  merge_fields = member.user.mailchimp_merge_fields
         | 
| 74 89 | 
             
                  raise('expected user mailchimp_merge_fields to be a Hash') unless merge_fields.kind_of?(Hash)
         | 
| 75 90 |  | 
| @@ -21,6 +21,8 @@ module Effective | |
| 21 21 | 
             
                  timestamps
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            +
                validates :mailchimp_list_id, uniqueness: { scope: [:user_type, :user_id] }
         | 
| 25 | 
            +
             | 
| 24 26 | 
             
                scope :deep, -> { includes(:mailchimp_list, :user) }
         | 
| 25 27 | 
             
                scope :sorted, -> { order(:id) }
         | 
| 26 28 |  | 
| @@ -43,5 +45,9 @@ module Effective | |
| 43 45 | 
             
                  )
         | 
| 44 46 | 
             
                end
         | 
| 45 47 |  | 
| 48 | 
            +
                def synced?
         | 
| 49 | 
            +
                  last_synced_at.present?
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 46 52 | 
             
              end
         | 
| 47 53 | 
             
            end
         | 
| @@ -1,16 +1,20 @@ | |
| 1 1 | 
             
            %h1.effective-admin-heading= @page_title
         | 
| 2 2 |  | 
| 3 | 
            -
            . | 
| 4 | 
            -
              .card-body
         | 
| 5 | 
            -
                = collapse('Show merge field settings') do
         | 
| 6 | 
            -
                  %p The following Merge fields are sent to Mailchimp when a user subscribes:
         | 
| 3 | 
            +
            - resource = (@_effective_resource || Effective::Resource.new(controller_path))
         | 
| 7 4 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                      %li= key
         | 
| 5 | 
            +
            .resource-buttons
         | 
| 6 | 
            +
              = render_resource_buttons(resource.klass, (action ||= :index) => false)
         | 
| 11 7 |  | 
| 12 | 
            -
             | 
| 8 | 
            +
            = card do
         | 
| 9 | 
            +
              = collapse('Show merge field settings') do
         | 
| 10 | 
            +
                %p The following Merge fields are sent to Mailchimp when a user subscribes:
         | 
| 13 11 |  | 
| 14 | 
            -
                 | 
| 12 | 
            +
                %ul
         | 
| 13 | 
            +
                  - current_user.mailchimp_merge_fields.keys.each do |key|
         | 
| 14 | 
            +
                    %li= key
         | 
| 15 15 |  | 
| 16 | 
            -
                 | 
| 16 | 
            +
                %p To have these fields displayed in Mailchimp, please configure each campaign with any of these merge fields.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              .mb-4
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              = render_datatable @datatable
         | 
| @@ -12,18 +12,7 @@ | |
| 12 12 | 
             
              = effective_form_with model: [:admin, user] do |f|
         | 
| 13 13 | 
             
                = f.hidden_field :id
         | 
| 14 14 |  | 
| 15 | 
            -
                =  | 
| 16 | 
            -
             | 
| 17 | 
            -
                %p.text-muted
         | 
| 18 | 
            -
                  %small
         | 
| 19 | 
            -
                    last synced with
         | 
| 20 | 
            -
                    = link_to 'Mailchimp', EffectiveMailchimp.api.admin_url
         | 
| 21 | 
            -
                    - if user.mailchimp_last_synced_at.present?
         | 
| 22 | 
            -
                      = time_ago_in_words(user.mailchimp_last_synced_at)
         | 
| 23 | 
            -
                      ago.
         | 
| 24 | 
            -
                    - else
         | 
| 25 | 
            -
                      never.
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                    = link_to 'sync now', effective_mailchimp.mailchimp_sync_user_admin_mailchimp_path(f.object), 'data-method': :post
         | 
| 15 | 
            +
                = render('effective/mailchimp_user/fields', f: f)
         | 
| 16 | 
            +
                = render('admin/mailchimp_user/sync', f: f)
         | 
| 28 17 |  | 
| 29 18 | 
             
                = f.submit
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            - user = f.object
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            - if user.persisted?
         | 
| 4 | 
            +
              %p.text-muted
         | 
| 5 | 
            +
                %small
         | 
| 6 | 
            +
                  last synced with
         | 
| 7 | 
            +
                  = link_to 'Mailchimp', EffectiveMailchimp.api.admin_url, target: '_blank'
         | 
| 8 | 
            +
                  - if user.mailchimp_last_synced_at.present?
         | 
| 9 | 
            +
                    = time_ago_in_words(user.mailchimp_last_synced_at)
         | 
| 10 | 
            +
                    ago.
         | 
| 11 | 
            +
                  - else
         | 
| 12 | 
            +
                    never.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  - if EffectiveResources.authorized?(self, :mailchimp_sync_user, user) 
         | 
| 15 | 
            +
                    = link_to 'sync now', effective_mailchimp.mailchimp_sync_user_admin_mailchimp_path(user), 'data-method': :post
         | 
| @@ -1,12 +1,15 @@ | |
| 1 1 | 
             
            = f.hidden_field :mailchimp_user_form_action, value: true
         | 
| 2 2 |  | 
| 3 | 
            -
            = f.fields_for :mailchimp_list_members do |fmlm|
         | 
| 3 | 
            +
            = f.fields_for :mailchimp_list_members, f.object.build_mailchimp_list_members do |fmlm|
         | 
| 4 4 | 
             
              - mailchimp_list = fmlm.object.mailchimp_list
         | 
| 5 5 | 
             
              - next if mailchimp_list.blank?
         | 
| 6 6 |  | 
| 7 | 
            +
              = fmlm.hidden_field :id
         | 
| 8 | 
            +
              = fmlm.hidden_field :mailchimp_list_id
         | 
| 9 | 
            +
             | 
| 7 10 | 
             
              - if mailchimp_list.force_subscribe?
         | 
| 8 11 | 
             
                %p
         | 
| 9 | 
            -
                  = fmlm.check_box :subscribed, label: fmlm.object.to_s, disabled: true, hint: 'required'
         | 
| 12 | 
            +
                  = fmlm.check_box :subscribed, label: fmlm.object.to_s, disabled: true, hint: 'required', checked: true
         | 
| 10 13 | 
             
                  = fmlm.hidden_field :subscribed, value: true
         | 
| 11 14 |  | 
| 12 15 | 
             
              - elsif mailchimp_list.can_subscribe?
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            - user = f.object
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            - if user.persisted?
         | 
| 4 | 
            +
              %p.text-muted
         | 
| 5 | 
            +
                %small
         | 
| 6 | 
            +
                  last synced with
         | 
| 7 | 
            +
                  = link_to 'Mailchimp', EffectiveMailchimp.api.public_url, target: '_blank'
         | 
| 8 | 
            +
                  - if user.mailchimp_last_synced_at.present?
         | 
| 9 | 
            +
                    = time_ago_in_words(user.mailchimp_last_synced_at)
         | 
| 10 | 
            +
                    ago.
         | 
| 11 | 
            +
                  - else
         | 
| 12 | 
            +
                    never.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  - if EffectiveResources.authorized?(self, :mailchimp_sync_user, user)
         | 
| 15 | 
            +
                    = link_to 'sync now', effective_mailchimp.mailchimp_sync_user_mailchimp_path(user), 'data-method': :post
         | 
    
        data/config/routes.rb
    CHANGED
    
    | @@ -7,6 +7,9 @@ end | |
| 7 7 | 
             
            EffectiveMailchimp::Engine.routes.draw do
         | 
| 8 8 | 
             
              # Public routes
         | 
| 9 9 | 
             
              scope module: 'effective' do
         | 
| 10 | 
            +
                resources :mailchimp, only: [] do
         | 
| 11 | 
            +
                  post :mailchimp_sync_user, on: :member
         | 
| 12 | 
            +
                end
         | 
| 10 13 | 
             
              end
         | 
| 11 14 |  | 
| 12 15 | 
             
              namespace :admin do
         | 
| @@ -16,12 +19,13 @@ EffectiveMailchimp::Engine.routes.draw do | |
| 16 19 |  | 
| 17 20 | 
             
                  post :force_subscribe, on: :member
         | 
| 18 21 | 
             
                  post :unforce_subscribe, on: :member
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  get :mailchimp_sync, on: :collection
         | 
| 19 24 | 
             
                end
         | 
| 20 25 |  | 
| 21 26 | 
             
                resources :mailchimp, only: [] do
         | 
| 22 27 | 
             
                  post :mailchimp_sync_user, on: :member
         | 
| 23 28 | 
             
                end
         | 
| 24 | 
            -
             | 
| 25 29 | 
             
              end
         | 
| 26 30 |  | 
| 27 31 | 
             
            end
         | 
    
        data/lib/effective_mailchimp.rb
    CHANGED
    
    | @@ -24,7 +24,7 @@ module EffectiveMailchimp | |
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 26 | 
             
              def self.permitted_params
         | 
| 27 | 
            -
                [ :mailchimp_user_form_action, mailchimp_list_members_attributes: [:id, :subscribed] ]
         | 
| 27 | 
            +
                [ :mailchimp_user_form_action, mailchimp_list_members_attributes: [:id, :mailchimp_list_id, :subscribed] ]
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: effective_mailchimp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Code and Effect
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-08-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         | 
| @@ -195,6 +195,7 @@ files: | |
| 195 195 | 
             
            - app/assets/stylesheets/effective_mailchimp/base.scss
         | 
| 196 196 | 
             
            - app/controllers/admin/mailchimp_controller.rb
         | 
| 197 197 | 
             
            - app/controllers/admin/mailchimp_lists_controller.rb
         | 
| 198 | 
            +
            - app/controllers/effective/mailchimp_controller.rb
         | 
| 198 199 | 
             
            - app/datatables/admin/effective_mailchimp_lists_datatable.rb
         | 
| 199 200 | 
             
            - app/helpers/effective_mailchimp_helper.rb
         | 
| 200 201 | 
             
            - app/jobs/effective_mailchimp_update_job.rb
         | 
| @@ -205,7 +206,9 @@ files: | |
| 205 206 | 
             
            - app/views/admin/mailchimp_lists/_form.html.haml
         | 
| 206 207 | 
             
            - app/views/admin/mailchimp_lists/index.html.haml
         | 
| 207 208 | 
             
            - app/views/admin/mailchimp_user/_form.html.haml
         | 
| 209 | 
            +
            - app/views/admin/mailchimp_user/_sync.html.haml
         | 
| 208 210 | 
             
            - app/views/effective/mailchimp_user/_fields.html.haml
         | 
| 211 | 
            +
            - app/views/effective/mailchimp_user/_sync.html.haml
         | 
| 209 212 | 
             
            - config/effective_mailchimp.rb
         | 
| 210 213 | 
             
            - config/routes.rb
         | 
| 211 214 | 
             
            - db/migrate/01_create_effective_mailchimp.rb.erb
         | 
| @@ -235,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 235 238 | 
             
                - !ruby/object:Gem::Version
         | 
| 236 239 | 
             
                  version: '0'
         | 
| 237 240 | 
             
            requirements: []
         | 
| 238 | 
            -
            rubygems_version: 3. | 
| 241 | 
            +
            rubygems_version: 3.4.10
         | 
| 239 242 | 
             
            signing_key:
         | 
| 240 243 | 
             
            specification_version: 4
         | 
| 241 244 | 
             
            summary: Subscribe and unsubscribe to mailchimp lists.
         |