Рельсы Пользовательские библиотеки перекодирования сухим способом

У меня есть этот файл mailchimp.rb, но я думаю, что он не эффективен.

class MailchimpAdapter
  class << self


    def remove_from_mailchimp_list(user, bucket_id) 
      connection = Gibbon.new
      lists = connection.lists
      begin
        connection.list_unsubscribe({:id => lists["data"][user_type_id]["id"], :email_address => user.email, :delete_member => true, :send_goodbye => false, :send_notify => false})
      rescue Exception => ex
      end
    end

    def add_to_mailchimp_list(user, bucket_id)
      connection = Gibbon.new
      lists = connection.lists
      begin
        connection.list_subscribe({:id => lists["data"][user_type_id]["id"], :email_address => user.email, :merge_vars => {:FNAME => user.user_name, :LNAME => ""}, :double_optin => false})
      rescue Exception => ex
      end
    end

  end
end

Есть ли лучший способ кодировать этот класс? Потому что я повторяю эту часть

connection = Gibbon.new
lists = connection.lists

1 ответ

Я бы сделал что-то вроде этого:

class MailchimpAdapter
  class << self

    def remove_from_mailchimp_list(user, bucket_id) 
      list_operation do |connection, lists|
        connection.list_unsubscribe({:id => lists["data"][user_type_id]["id"], :email_address => user.email, :delete_member => true, :send_goodbye => false, :send_notify => false})
      end
    end

    def add_to_mailchimp_list(user, bucket_id)
      list_operation do |connection, lists|
        connection.list_subscribe({:id => lists["data"][user_type_id]["id"], :email_address => user.email, :merge_vars => {:FNAME => user.user_name, :LNAME => ""}, :double_optin => false})
      end
    end

    private

    def list_operation
      connection = Gibbon.new
      lists = connection.lists
      begin
        yield(connection, lists)
      rescue Exception => ex
      end
    end

  end
end
Другие вопросы по тегам