mrkt 0.8.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.rubocop.yml +59 -5
- data/.travis.yml +19 -10
- data/Gemfile.lock +68 -63
- data/LICENSE +21 -0
- data/README.md +11 -7
- data/lib/mrkt.rb +16 -3
- data/lib/mrkt/concerns/authentication.rb +27 -12
- data/lib/mrkt/concerns/connection.rb +2 -5
- data/lib/mrkt/concerns/crud_activities.rb +10 -7
- data/lib/mrkt/concerns/crud_asset_folders.rb +43 -0
- data/lib/mrkt/concerns/crud_asset_static_lists.rb +30 -0
- data/lib/mrkt/concerns/crud_campaigns.rb +2 -4
- data/lib/mrkt/concerns/crud_custom_activities.rb +3 -2
- data/lib/mrkt/concerns/crud_custom_objects.rb +12 -13
- data/lib/mrkt/concerns/crud_helpers.rb +7 -0
- data/lib/mrkt/concerns/crud_leads.rb +28 -15
- data/lib/mrkt/concerns/crud_lists.rb +13 -10
- data/lib/mrkt/concerns/crud_programs.rb +6 -5
- data/lib/mrkt/concerns/import_custom_objects.rb +24 -0
- data/lib/mrkt/concerns/import_leads.rb +7 -4
- data/lib/mrkt/errors.rb +3 -2
- data/lib/mrkt/version.rb +1 -1
- data/mrkt.gemspec +11 -12
- data/spec/concerns/authentication_spec.rb +57 -5
- data/spec/concerns/crud_activities_spec.rb +46 -7
- data/spec/concerns/crud_asset_folders_spec.rb +273 -0
- data/spec/concerns/crud_asset_static_lists_spec.rb +183 -0
- data/spec/concerns/crud_custom_activities_spec.rb +3 -1
- data/spec/concerns/crud_custom_objects_spec.rb +1 -1
- data/spec/concerns/crud_leads_spec.rb +103 -1
- data/spec/concerns/crud_lists_spec.rb +33 -0
- data/spec/concerns/import_custom_objects_spec.rb +89 -0
- data/spec/concerns/import_leads_spec.rb +3 -3
- data/spec/spec_helper.rb +3 -1
- data/spec/support/webmock.rb +1 -7
- metadata +43 -46
@@ -11,16 +11,13 @@ module Mrkt
|
|
11
11
|
conn.request :multipart
|
12
12
|
conn.request :url_encoded
|
13
13
|
|
14
|
-
if @debug
|
15
|
-
conn.response :logger, @logger, (@log_options || {})
|
16
|
-
end
|
17
|
-
|
14
|
+
conn.response :logger, @logger, (@log_options || {}) if @debug
|
18
15
|
conn.response :mkto, content_type: /\bjson$/
|
19
16
|
|
20
17
|
conn.options.timeout = @options[:read_timeout] if @options.key?(:read_timeout)
|
21
18
|
conn.options.open_timeout = @options[:open_timeout] if @options.key?(:open_timeout)
|
22
19
|
|
23
|
-
conn.adapter Faraday.default_adapter
|
20
|
+
conn.adapter @options.fetch(:adapter, Faraday.default_adapter)
|
24
21
|
end
|
25
22
|
end
|
26
23
|
end
|
@@ -1,29 +1,32 @@
|
|
1
1
|
module Mrkt
|
2
2
|
module CrudActivities
|
3
3
|
def get_activity_types
|
4
|
-
get(
|
4
|
+
get('/rest/v1/activities/types.json')
|
5
5
|
end
|
6
6
|
|
7
7
|
def get_paging_token(since_datetime)
|
8
|
-
|
9
|
-
sinceDatetime: since_datetime.iso8601
|
10
|
-
}
|
11
|
-
get("/rest/v1/activities/pagingtoken.json", params)
|
8
|
+
get('/rest/v1/activities/pagingtoken.json', sinceDatetime: since_datetime.iso8601)
|
12
9
|
end
|
13
10
|
|
14
11
|
def get_activities(next_page_token, activity_type_ids: [], lead_ids: [])
|
15
12
|
params = {
|
16
13
|
nextPageToken: next_page_token
|
17
14
|
}
|
15
|
+
|
18
16
|
params[:activityTypeIds] = activity_type_ids.join(',') unless blank?(activity_type_ids)
|
19
17
|
params[:leadIds] = lead_ids.join(',') unless blank?(lead_ids)
|
20
|
-
|
18
|
+
|
19
|
+
get('/rest/v1/activities.json', params)
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_deleted_leads(next_page_token)
|
23
|
+
get('/rest/v1/activities/deletedleads.json', nextPageToken: next_page_token)
|
21
24
|
end
|
22
25
|
|
23
26
|
private
|
24
27
|
|
25
28
|
def blank?(value)
|
26
|
-
!value || value ==
|
29
|
+
!value || value == '' || value.empty?
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Mrkt
|
2
|
+
module CrudAssetFolders
|
3
|
+
def create_folder(name, parent, description: nil)
|
4
|
+
post('/rest/asset/v1/folders.json') do |req|
|
5
|
+
params = {
|
6
|
+
name: name,
|
7
|
+
parent: JSON.generate(parent)
|
8
|
+
}
|
9
|
+
|
10
|
+
optional = {
|
11
|
+
description: description
|
12
|
+
}
|
13
|
+
|
14
|
+
req.body = merge_params(params, optional)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_folder_by_id(id, type: nil)
|
19
|
+
params = {}
|
20
|
+
params[:type] = type if type
|
21
|
+
|
22
|
+
get("/rest/asset/v1/folder/#{id}.json", params)
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_folder_by_name(name, type: nil, root: nil, work_space: nil)
|
26
|
+
params = {
|
27
|
+
name: name
|
28
|
+
}
|
29
|
+
|
30
|
+
optional = {
|
31
|
+
root: root&.to_json,
|
32
|
+
type: type,
|
33
|
+
workSpace: work_space
|
34
|
+
}
|
35
|
+
|
36
|
+
get('/rest/asset/v1/folder/byName.json', params, optional)
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete_folder(id)
|
40
|
+
post("/rest/asset/v1/folder/#{id}/delete.json")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Mrkt
|
2
|
+
module CrudAssetStaticLists
|
3
|
+
def create_static_list(name, folder, description: nil)
|
4
|
+
post('/rest/asset/v1/staticLists.json') do |req|
|
5
|
+
params = {
|
6
|
+
name: name,
|
7
|
+
folder: JSON.generate(folder)
|
8
|
+
}
|
9
|
+
|
10
|
+
optional = {
|
11
|
+
description: description
|
12
|
+
}
|
13
|
+
|
14
|
+
req.body = merge_params(params, optional)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_static_list_by_id(id)
|
19
|
+
get("/rest/asset/v1/staticList/#{id}.json")
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_static_list_by_name(name)
|
23
|
+
get('/rest/asset/v1/staticList/byName.json', name: name)
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete_static_list(id)
|
27
|
+
post("/rest/asset/v1/staticList/#{id}/delete.json")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module Mrkt
|
2
2
|
module CrudCampaigns
|
3
3
|
def request_campaign(id, lead_ids, tokens = {})
|
4
|
-
|
5
|
-
|
4
|
+
post_json("/rest/v1/campaigns/#{id}/trigger.json") do
|
5
|
+
{
|
6
6
|
input: {
|
7
7
|
leads: map_lead_ids(lead_ids),
|
8
8
|
tokens: tokens
|
9
9
|
}
|
10
10
|
}
|
11
|
-
|
12
|
-
json_payload(req, params)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -19,8 +19,9 @@ module Mrkt
|
|
19
19
|
primaryAttributeValue: primary_attribute_value,
|
20
20
|
attributes: converted_attributes
|
21
21
|
}]
|
22
|
-
|
23
|
-
|
22
|
+
|
23
|
+
post_json('/rest/v1/activities/external.json') do
|
24
|
+
{ input: input }
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -8,45 +8,44 @@ module Mrkt
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def describe_custom_object(name)
|
11
|
-
|
11
|
+
raise Mrkt::Errors::Unknown unless name
|
12
12
|
|
13
13
|
get("/rest/v1/customobjects/#{name}/describe.json")
|
14
14
|
end
|
15
15
|
|
16
16
|
def createupdate_custom_objects(name, input, action: 'createOrUpdate', dedupe_by: 'dedupeFields')
|
17
|
-
|
18
|
-
|
17
|
+
post_json("/rest/v1/customobjects/#{name}.json") do
|
18
|
+
{
|
19
19
|
input: input,
|
20
20
|
action: action,
|
21
21
|
dedupeBy: dedupe_by
|
22
22
|
}
|
23
|
-
json_payload(req, params)
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
def delete_custom_objects(name, input, delete_by: 'dedupeFields')
|
28
|
-
|
29
|
-
|
27
|
+
post_json("/rest/v1/customobjects/#{name}/delete.json") do
|
28
|
+
{
|
30
29
|
input: input,
|
31
30
|
deleteBy: delete_by
|
32
31
|
}
|
33
|
-
|
34
|
-
json_payload(req, params)
|
35
32
|
end
|
36
33
|
end
|
37
34
|
|
38
35
|
def get_custom_objects(name, input, filter_type: 'dedupeFields', fields: nil, next_page_token: nil, batch_size: nil)
|
39
|
-
|
36
|
+
post_json("/rest/v1/customobjects/#{name}.json?_method=GET") do
|
40
37
|
params = {
|
41
38
|
input: input,
|
42
39
|
filterType: filter_type
|
43
40
|
}
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
optional = {
|
43
|
+
fields: fields,
|
44
|
+
nextPageToken: next_page_token,
|
45
|
+
batchSize: batch_size
|
46
|
+
}
|
48
47
|
|
49
|
-
|
48
|
+
merge_params(params, optional)
|
50
49
|
end
|
51
50
|
end
|
52
51
|
end
|
@@ -4,6 +4,13 @@ module Mrkt
|
|
4
4
|
lead_ids.map { |id| { id: id } }
|
5
5
|
end
|
6
6
|
|
7
|
+
def post_json(url)
|
8
|
+
post(url) do |req|
|
9
|
+
payload = block_given? ? yield(req) : {}
|
10
|
+
json_payload(req, payload)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
7
14
|
def json_payload(req, payload)
|
8
15
|
req.headers[:content_type] = 'application/json'
|
9
16
|
req.body = JSON.generate(payload)
|
@@ -1,28 +1,42 @@
|
|
1
1
|
module Mrkt
|
2
2
|
module CrudLeads
|
3
|
+
def get_lead_by_id(id, fields: nil)
|
4
|
+
optional = {
|
5
|
+
fields: fields&.join(',')
|
6
|
+
}
|
7
|
+
|
8
|
+
get("/rest/v1/lead/#{id}.json", {}, optional)
|
9
|
+
end
|
10
|
+
|
3
11
|
def get_leads(filter_type, filter_values, fields: nil, batch_size: nil, next_page_token: nil)
|
4
12
|
params = {
|
5
13
|
filterType: filter_type,
|
6
14
|
filterValues: filter_values.join(',')
|
7
15
|
}
|
8
|
-
params[:fields] = fields if fields
|
9
|
-
params[:batchSize] = batch_size if batch_size
|
10
|
-
params[:nextPageToken] = next_page_token if next_page_token
|
11
16
|
|
12
|
-
|
17
|
+
optional = {
|
18
|
+
fields: fields,
|
19
|
+
batchSize: batch_size,
|
20
|
+
nextPageToken: next_page_token
|
21
|
+
}
|
22
|
+
|
23
|
+
get('/rest/v1/leads.json', params, optional)
|
13
24
|
end
|
14
25
|
|
15
26
|
def createupdate_leads(leads, action: 'createOrUpdate', lookup_field: nil, partition_name: nil, async_processing: nil)
|
16
|
-
|
27
|
+
post_json('/rest/v1/leads.json') do
|
17
28
|
params = {
|
18
29
|
action: action,
|
19
30
|
input: leads
|
20
31
|
}
|
21
|
-
params[:lookupField] = lookup_field if lookup_field
|
22
|
-
params[:partitionName] = partition_name if partition_name
|
23
|
-
params[:asyncProcessing] = async_processing if async_processing
|
24
32
|
|
25
|
-
|
33
|
+
optional = {
|
34
|
+
lookupField: lookup_field,
|
35
|
+
partitionName: partition_name,
|
36
|
+
asyncProcessing: async_processing
|
37
|
+
}
|
38
|
+
|
39
|
+
merge_params(params, optional)
|
26
40
|
end
|
27
41
|
end
|
28
42
|
|
@@ -36,9 +50,7 @@ module Mrkt
|
|
36
50
|
params = Faraday::Utils::ParamsHash.new
|
37
51
|
params[:cookie] = cookie
|
38
52
|
|
39
|
-
|
40
|
-
json_payload(req, {})
|
41
|
-
end
|
53
|
+
post_json("/rest/v1/leads/#{id}/associate.json?#{params.to_query}")
|
42
54
|
end
|
43
55
|
|
44
56
|
def merge_leads(winning_lead_id, losing_lead_ids, merge_in_crm: false)
|
@@ -46,10 +58,11 @@ module Mrkt
|
|
46
58
|
params[:mergeInCRM] = merge_in_crm
|
47
59
|
params[:leadIds] = losing_lead_ids.join(',') if losing_lead_ids
|
48
60
|
|
49
|
-
|
50
|
-
json_payload(req,{})
|
51
|
-
end
|
61
|
+
post_json("/rest/v1/leads/#{winning_lead_id}/merge.json?#{params.to_query}")
|
52
62
|
end
|
53
63
|
|
64
|
+
def describe_lead
|
65
|
+
get('/rest/v1/leads/describe.json')
|
66
|
+
end
|
54
67
|
end
|
55
68
|
end
|
@@ -1,21 +1,24 @@
|
|
1
1
|
module Mrkt
|
2
2
|
module CrudLists
|
3
3
|
def get_leads_by_list(list_id, fields: nil, batch_size: nil, next_page_token: nil)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
optional = {
|
5
|
+
fields: fields,
|
6
|
+
batchSize: batch_size,
|
7
|
+
nextPageToken: next_page_token
|
8
|
+
}
|
8
9
|
|
9
|
-
get("/rest/v1/list/#{list_id}/leads.json",
|
10
|
+
get("/rest/v1/list/#{list_id}/leads.json", {}, optional)
|
10
11
|
end
|
11
12
|
|
12
13
|
def add_leads_to_list(list_id, lead_ids)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
post_json("/rest/v1/lists/#{list_id}/leads.json") do
|
15
|
+
{ input: map_lead_ids(lead_ids) }
|
16
|
+
end
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
+
def remove_leads_from_list(list_id, lead_ids)
|
20
|
+
delete("/rest/v1/lists/#{list_id}/leads.json") do |req|
|
21
|
+
json_payload(req, input: map_lead_ids(lead_ids))
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module Mrkt
|
2
2
|
module CrudPrograms
|
3
3
|
def browse_programs(offset: nil, max_return: nil, status: nil)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
optional = {
|
5
|
+
offset: offset,
|
6
|
+
maxReturn: max_return,
|
7
|
+
status: status
|
8
|
+
}
|
8
9
|
|
9
|
-
get('/rest/asset/v1/programs.json',
|
10
|
+
get('/rest/asset/v1/programs.json', {}, optional)
|
10
11
|
end
|
11
12
|
|
12
13
|
def get_program_by_id(id)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Mrkt
|
2
|
+
module ImportCustomObjects
|
3
|
+
def import_custom_object(file, custom_object, format = 'csv')
|
4
|
+
params = {
|
5
|
+
format: format,
|
6
|
+
file: Faraday::UploadIO.new(file, 'text/csv')
|
7
|
+
}
|
8
|
+
|
9
|
+
post("/bulk/v1/customobjects/#{custom_object}/import.json", params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def import_custom_object_status(id, custom_object)
|
13
|
+
get("/bulk/v1/customobjects/#{custom_object}/import/#{id}/status.json")
|
14
|
+
end
|
15
|
+
|
16
|
+
def import_custom_object_failures(id, custom_object)
|
17
|
+
get("/bulk/v1/customobjects/#{custom_object}/import/#{id}/failures.json")
|
18
|
+
end
|
19
|
+
|
20
|
+
def import_custom_object_warnings(id, custom_object)
|
21
|
+
get("/bulk/v1/customobjects/#{custom_object}/import/#{id}/warnings.json")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -5,11 +5,14 @@ module Mrkt
|
|
5
5
|
format: format,
|
6
6
|
file: Faraday::UploadIO.new(file, 'text/csv')
|
7
7
|
}
|
8
|
-
params[:lookupField] = lookup_field if lookup_field
|
9
|
-
params[:listId] = list_id if list_id
|
10
|
-
params[:partitionName] = partition_name if partition_name
|
11
8
|
|
12
|
-
|
9
|
+
optional = {
|
10
|
+
lookupField: lookup_field,
|
11
|
+
listId: list_id,
|
12
|
+
partitionName: partition_name
|
13
|
+
}
|
14
|
+
|
15
|
+
post('/bulk/v1/leads.json', params, optional)
|
13
16
|
end
|
14
17
|
|
15
18
|
def import_lead_status(id)
|
data/lib/mrkt/errors.rb
CHANGED
@@ -25,6 +25,7 @@ class Mrkt::Errors
|
|
25
25
|
610 => 'RequestedResourceNotFound',
|
26
26
|
611 => 'System',
|
27
27
|
612 => 'InvalidContentType',
|
28
|
+
702 => 'RecordNotFound',
|
28
29
|
703 => 'DisabledFeature',
|
29
30
|
1001 => 'TypeMismatch',
|
30
31
|
1002 => 'MissingParamater',
|
@@ -40,9 +41,9 @@ class Mrkt::Errors
|
|
40
41
|
1012 => 'InvalidCookieValue',
|
41
42
|
1013 => 'ObjectNotFound',
|
42
43
|
1014 => 'FailedToCreateObject'
|
43
|
-
}
|
44
|
+
}.freeze
|
44
45
|
|
45
|
-
RESPONSE_CODE_TO_ERROR.
|
46
|
+
RESPONSE_CODE_TO_ERROR.each_value do |class_name|
|
46
47
|
const_set(class_name, create_class)
|
47
48
|
end
|
48
49
|
|
data/lib/mrkt/version.rb
CHANGED
data/mrkt.gemspec
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'mrkt/version'
|
5
4
|
|
@@ -16,19 +15,19 @@ Gem::Specification.new do |spec|
|
|
16
15
|
spec.files = `git ls-files`.split($RS)
|
17
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = %w
|
18
|
+
spec.require_paths = %w[lib]
|
20
19
|
|
21
|
-
spec.required_ruby_version = '~> 2.
|
20
|
+
spec.required_ruby_version = '~> 2.5'
|
22
21
|
|
23
|
-
spec.add_dependency 'faraday', '
|
24
|
-
spec.add_dependency 'faraday_middleware', '
|
22
|
+
spec.add_dependency 'faraday', '~> 1.0'
|
23
|
+
spec.add_dependency 'faraday_middleware', '~> 1.0'
|
25
24
|
|
26
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
27
|
-
spec.add_development_dependency '
|
26
|
+
spec.add_development_dependency 'gem-release', '~> 2.1'
|
27
|
+
spec.add_development_dependency 'pry-byebug', '~> 3.7'
|
28
|
+
spec.add_development_dependency 'rake', '~> 12.3'
|
28
29
|
spec.add_development_dependency 'rspec', '~> 3.2'
|
29
|
-
spec.add_development_dependency '
|
30
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
31
|
-
spec.add_development_dependency '
|
32
|
-
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0.0'
|
33
|
-
spec.add_development_dependency 'rubocop', '~> 0.45.0'
|
30
|
+
spec.add_development_dependency 'rubocop', '~> 0.87.1'
|
31
|
+
spec.add_development_dependency 'simplecov', '~> 0.17.1'
|
32
|
+
spec.add_development_dependency 'webmock', '~> 3.1'
|
34
33
|
end
|