From 68b2cb96e5638a7a5884aaa315eb07c800e5aa1b Mon Sep 17 00:00:00 2001 From: "kato.takuya" Date: Mon, 7 Mar 2016 19:46:42 +0900 Subject: [PATCH 1/2] each slice when over 300 leads on createupdate/delete --- lib/mrkt/concerns/crud_leads.rb | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/mrkt/concerns/crud_leads.rb b/lib/mrkt/concerns/crud_leads.rb index 529f6d0..2aa213e 100644 --- a/lib/mrkt/concerns/crud_leads.rb +++ b/lib/mrkt/concerns/crud_leads.rb @@ -1,5 +1,7 @@ module Mrkt module CrudLeads + MAX_LEADS_SIZE = 300 + def get_leads(filter_type, filter_values, fields: nil, batch_size: nil, next_page_token: nil) params = { filterType: filter_type, @@ -13,22 +15,30 @@ def get_leads(filter_type, filter_values, fields: nil, batch_size: nil, next_pag end def createupdate_leads(leads, action: 'createOrUpdate', lookup_field: nil, partition_name: nil, async_processing: nil) - post('/rest/v1/leads.json') do |req| - params = { - action: action, - input: leads - } - params[:lookupField] = lookup_field if lookup_field - params[:partitionName] = partition_name if partition_name - params[:asyncProcessing] = async_processing if async_processing + # see also: http://developers.marketo.com/documentation/rest/createupdate-leads/ + # > You can update a maximum of 300 leads with a single API call. + leads.each_slice(MAX_LEADS_SIZE) do |_leads| + post('/rest/v1/leads.json') do |req| + params = { + action: action, + input: _leads + } + params[:lookupField] = lookup_field if lookup_field + params[:partitionName] = partition_name if partition_name + params[:asyncProcessing] = async_processing if async_processing - json_payload(req, params) + json_payload(req, params) + end end end def delete_leads(leads) - delete('/rest/v1/leads.json') do |req| - json_payload(req, input: map_lead_ids(leads)) + # see also: http://developers.marketo.com/documentation/rest/delete-lead/ + # > The max batch size for this endpoint is 300 leads. + leads.each_slice(MAX_LEADS_SIZE) do |_leads| + delete('/rest/v1/leads.json') do |req| + json_payload(req, input: map_lead_ids(_leads)) + end end end From 1533a81787140f701b1917c369032d5eb1e1a50e Mon Sep 17 00:00:00 2001 From: "kato.takuya" Date: Mon, 7 Mar 2016 19:54:58 +0900 Subject: [PATCH 2/2] fix specs for each_slice --- lib/mrkt/concerns/crud_leads.rb | 4 ++-- spec/concerns/crud_leads_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mrkt/concerns/crud_leads.rb b/lib/mrkt/concerns/crud_leads.rb index 2aa213e..054c250 100644 --- a/lib/mrkt/concerns/crud_leads.rb +++ b/lib/mrkt/concerns/crud_leads.rb @@ -17,7 +17,7 @@ def get_leads(filter_type, filter_values, fields: nil, batch_size: nil, next_pag def createupdate_leads(leads, action: 'createOrUpdate', lookup_field: nil, partition_name: nil, async_processing: nil) # see also: http://developers.marketo.com/documentation/rest/createupdate-leads/ # > You can update a maximum of 300 leads with a single API call. - leads.each_slice(MAX_LEADS_SIZE) do |_leads| + leads.each_slice(MAX_LEADS_SIZE).map do |_leads| post('/rest/v1/leads.json') do |req| params = { action: action, @@ -35,7 +35,7 @@ def createupdate_leads(leads, action: 'createOrUpdate', lookup_field: nil, parti def delete_leads(leads) # see also: http://developers.marketo.com/documentation/rest/delete-lead/ # > The max batch size for this endpoint is 300 leads. - leads.each_slice(MAX_LEADS_SIZE) do |_leads| + leads.each_slice(MAX_LEADS_SIZE).map do |_leads| delete('/rest/v1/leads.json') do |req| json_payload(req, input: map_lead_ids(_leads)) end diff --git a/spec/concerns/crud_leads_spec.rb b/spec/concerns/crud_leads_spec.rb index d446831..f41b925 100644 --- a/spec/concerns/crud_leads_spec.rb +++ b/spec/concerns/crud_leads_spec.rb @@ -72,7 +72,7 @@ .to_return(json_stub(response_stub)) end - it { is_expected.to eq(response_stub) } + it { is_expected.to eq([response_stub]) } end describe '#delete_leads' do @@ -101,7 +101,7 @@ .to_return(json_stub(response_stub)) end - it { is_expected.to eq(response_stub) } + it { is_expected.to eq([response_stub]) } end describe '#associate_lead' do