Skip to content

Commit

Permalink
Added list autosubscription
Browse files Browse the repository at this point in the history
  • Loading branch information
SFEley committed Aug 1, 2009
1 parent 0f31b9a commit b25b660
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 5 deletions.
1 change: 1 addition & 0 deletions lib/acts_as_icontact/rails.rb
Expand Up @@ -16,6 +16,7 @@
if defined?(::ActiveRecord)
module ::ActiveRecord
class Base
extend ActsAsIcontact::Rails::ClassMethods::Lists
extend ActsAsIcontact::Rails::ClassMethods::Mappings
extend ActsAsIcontact::Rails::ClassMethods::Macro
end
Expand Down
4 changes: 4 additions & 0 deletions lib/acts_as_icontact/rails/callbacks.rb
Expand Up @@ -22,6 +22,10 @@ def icontact_after_create
end
end
self.save
# Subscribe the contact to any lists
self.class.icontact_default_lists.each do |list|
c.subscribe(list)
end
@icontact_in_progress = false # Very primitive loop prevention
end
end
Expand Down
25 changes: 25 additions & 0 deletions lib/acts_as_icontact/rails/lists.rb
@@ -0,0 +1,25 @@
module ActsAsIcontact
module Rails
module ClassMethods
module Lists

# The lists that each new contact will be subscribed to upon creation. Set by the :list and :lists
# options to acts_as_icontact.
def icontact_default_lists
@icontact_default_lists
end

protected

# Builds an array of any lists in the :list or :lists parameter.
def set_default_lists(list, lists)
# Combines :list and :lists parameters into one array
@icontact_default_lists = []
@icontact_default_lists << list if list
@icontact_default_lists += lists if lists
end

end
end
end
end
7 changes: 3 additions & 4 deletions lib/acts_as_icontact/rails/macro.rb
Expand Up @@ -9,10 +9,9 @@ def acts_as_icontact(options = {})
# Fail on exceptions?
@icontact_exception_on_failure = options.delete(:exception_on_failure) || false

# Combines :list and :lists parameters into one array
@icontact_default_lists = []
@icontact_default_lists << options.delete(:list) if options.has_key?(:list)
@icontact_default_lists += options.delete(:lists) if options.has_key?(:lists)

# Set up lists for autosubscribe
set_default_lists(options.delete(:list), options.delete(:lists))

# Set up field mappings
set_mappings(options)
Expand Down
5 changes: 5 additions & 0 deletions spec/rails_spec/callbacks_spec.rb
Expand Up @@ -17,6 +17,11 @@
@person.save
@person.icontact_id.should == 333444
end

it "subscribes the Person to any lists" do
ActsAsIcontact::Contact.any_instance.expects(:subscribe).with("First Test").returns(true)
@person.save
end
end

context "for update" do
Expand Down
2 changes: 1 addition & 1 deletion spec/support/spec_fakeweb.rb
Expand Up @@ -59,4 +59,4 @@
FakeWeb.register_uri(:get, "#{ic}/subscriptions?limit=1&contactId=333444", :body => %q<{"subscriptions":[{"status":"normal","addDate":"2009-07-27T15:36:37-04:00","contactId":333444,"listId":444444, "subscriptionId":"444444_333333","confirmationMessageId":555666}]}>)
FakeWeb.register_uri(:get, "#{ic}/subscriptions?limit=500&contactId=333444", :body => %q<{"subscriptions":[{"status":"normal","addDate":"2009-07-27T15:36:37-04:00","contactId":333444,"listId":444444, "subscriptionId":"444444_333444","confirmationMessageId":555666}]}>)
FakeWeb.register_uri(:get, "#{ic}/subscriptions?limit=500&contactId=333333", :body => %q<{"subscriptions":[{"status":"normal","addDate":"2009-07-27T15:36:37-04:00","contactId":333333,"listId":444444, "subscriptionId":"444444_333333","confirmationMessageId":555666}]}>)

FakeWeb.register_uri(:post, "#{ic}/subscriptions", :body => %q<{"subscriptions":[{"status":"normal","addDate":"2009-07-27T15:36:37-04:00","contactId":333333,"listId":444444, "subscriptionId":"444444_333333","confirmationMessageId":555666}]}>)

0 comments on commit b25b660

Please sign in to comment.