diff --git a/README.md b/README.md index 1f283dc..f34994f 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ would do this: ```ruby client = ActiveCampaign.client -contact = ActiveCampaign::Contact.new(email: "hi@example.com") +contact = ActiveCampaign::Contact.new(params: {email: "hi@example.com", first_name: "Tester"}) client.create!(contact) ``` diff --git a/lib/active_campaign/contact.rb b/lib/active_campaign/contact.rb index 946e7a0..33e1f4e 100644 --- a/lib/active_campaign/contact.rb +++ b/lib/active_campaign/contact.rb @@ -2,10 +2,6 @@ module ActiveCampaign class Contact < Resource - def initialize(email:, **params) - @params = params.merge(email: email) - end - action find: :contact_view_email action create: :contact_add action update: :contact_edit diff --git a/lib/active_campaign/resource.rb b/lib/active_campaign/resource.rb index 8b9957d..d501a8f 100644 --- a/lib/active_campaign/resource.rb +++ b/lib/active_campaign/resource.rb @@ -1,7 +1,15 @@ module ActiveCampaign class Resource def initialize(**params) - @params = params + @params = format_params(params) + end + + def format_params(params) + raise "no email attribute included in params" if params[:email].nil? + + params.map do |k, v| + [:email, :phone].include?(k) ? [k, v] : ["%#{k.upcase}%, 0".to_sym, v] + end.to_h end attr_reader :params diff --git a/test/active_campaign/resource_test.rb b/test/active_campaign/resource_test.rb index faa3785..3206659 100644 --- a/test/active_campaign/resource_test.rb +++ b/test/active_campaign/resource_test.rb @@ -11,7 +11,7 @@ class ActiveCampaign::ResourceTest < Minitest::Test action action_name => action_mapping end end - let(:params) { {} } + let(:params) { { email: "testing@email.com" } } subject { resource.new(params) } describe "actions" do @@ -28,5 +28,14 @@ class ActiveCampaign::ResourceTest < Minitest::Test end end end + + describe "when no email param" do + let(:params) { {} } + it "raises an error" do + assert_raises RuntimeError do + subject.action(action_name) + end + end + end end end