diff --git a/lib/acts_as_icontact/rails.rb b/lib/acts_as_icontact/rails.rb index 208f15c..24f2a0f 100644 --- a/lib/acts_as_icontact/rails.rb +++ b/lib/acts_as_icontact/rails.rb @@ -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 diff --git a/lib/acts_as_icontact/rails/callbacks.rb b/lib/acts_as_icontact/rails/callbacks.rb index 6591318..9177636 100644 --- a/lib/acts_as_icontact/rails/callbacks.rb +++ b/lib/acts_as_icontact/rails/callbacks.rb @@ -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 diff --git a/lib/acts_as_icontact/rails/lists.rb b/lib/acts_as_icontact/rails/lists.rb new file mode 100644 index 0000000..82d86c6 --- /dev/null +++ b/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 diff --git a/lib/acts_as_icontact/rails/macro.rb b/lib/acts_as_icontact/rails/macro.rb index 93fead5..dfbc964 100644 --- a/lib/acts_as_icontact/rails/macro.rb +++ b/lib/acts_as_icontact/rails/macro.rb @@ -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) diff --git a/spec/rails_spec/callbacks_spec.rb b/spec/rails_spec/callbacks_spec.rb index 1667d08..0fb97f7 100644 --- a/spec/rails_spec/callbacks_spec.rb +++ b/spec/rails_spec/callbacks_spec.rb @@ -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 diff --git a/spec/support/spec_fakeweb.rb b/spec/support/spec_fakeweb.rb index f60885b..1b58c41 100644 --- a/spec/support/spec_fakeweb.rb +++ b/spec/support/spec_fakeweb.rb @@ -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}]}>)