mrkt 0.6.0 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5cf51cc511fdf8b5750a92ddff0f35d7dad207eb
4
- data.tar.gz: af29cc93b972906bdc74c260bae780ac3aae713b
3
+ metadata.gz: d12dd686225c6c59e0f4441adb10a1083e772080
4
+ data.tar.gz: ac0595a8e7e88a52cfcf87ff2cf3fa3967144a80
5
5
  SHA512:
6
- metadata.gz: eabcdb7980a68d505ca5ec8822a24554ebde7447769403fc40e4671de9395244fdefae4d3bc12f281c595c6de451856592b933f95942d7d0160ca012d1258b08
7
- data.tar.gz: fcf10904882d7b12a0391200dd755ab51f563a426a51ce1274beefe246bf9fb5d847e35a55bc5867b396d45271fa0408da7074999aeaa89ca64c3c0b8e6df448
6
+ metadata.gz: dd7a1923389e9412dc1e82e943627a27e1b214bebc14d75a4f88fe90b1703a22cb7d45104b00409fd69cfff696078b345ecd5f0f415f9cb138049088da130ed2
7
+ data.tar.gz: 210a3568aa5888b0eced93b20e6a8b3fbfc81465757608546dae933d638e24d603a40412d7260119fb28ff4b3762b511f876d5f96c4c50af875e5356a3e823bd
data/.rubocop.yml ADDED
@@ -0,0 +1,15 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'bin/**/*'
4
+ Documentation:
5
+ Enabled: false
6
+ LineLength:
7
+ Enabled: true
8
+ Max: 120
9
+ MethodLength:
10
+ Max: 20
11
+ IndentHash:
12
+ Enabled: false
13
+
14
+ Style/ClassAndModuleChildren:
15
+ Enabled: false
data/Gemfile.lock CHANGED
@@ -1,13 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mrkt (0.6.0)
4
+ mrkt (0.6.1)
5
5
  faraday_middleware (~> 0.9.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  addressable (2.3.8)
11
+ ast (2.0.0)
12
+ astrolabe (1.3.1)
13
+ parser (~> 2.2)
11
14
  byebug (4.0.5)
12
15
  columnize (= 0.9.0)
13
16
  codeclimate-test-reporter (0.4.7)
@@ -25,6 +28,9 @@ GEM
25
28
  json (1.8.2)
26
29
  method_source (0.8.2)
27
30
  multipart-post (2.0.0)
31
+ parser (2.2.2.6)
32
+ ast (>= 1.1, < 3.0)
33
+ powerpack (0.1.1)
28
34
  pry (0.10.1)
29
35
  coderay (~> 1.1.0)
30
36
  method_source (~> 0.8.1)
@@ -32,6 +38,7 @@ GEM
32
38
  pry-byebug (3.1.0)
33
39
  byebug (~> 4.0)
34
40
  pry (~> 0.10)
41
+ rainbow (2.0.0)
35
42
  rake (10.1.1)
36
43
  rspec (3.2.0)
37
44
  rspec-core (~> 3.2.0)
@@ -46,6 +53,13 @@ GEM
46
53
  diff-lcs (>= 1.2.0, < 2.0)
47
54
  rspec-support (~> 3.2.0)
48
55
  rspec-support (3.2.2)
56
+ rubocop (0.32.1)
57
+ astrolabe (~> 1.3)
58
+ parser (>= 2.2.2.5, < 3.0)
59
+ powerpack (~> 0.1)
60
+ rainbow (>= 1.99.1, < 3.0)
61
+ ruby-progressbar (~> 1.4)
62
+ ruby-progressbar (1.7.5)
49
63
  safe_yaml (1.0.4)
50
64
  simplecov (0.10.0)
51
65
  docile (~> 1.1.0)
@@ -67,5 +81,9 @@ DEPENDENCIES
67
81
  pry-byebug (~> 3.1.0)
68
82
  rake (~> 10.0)
69
83
  rspec (~> 3.2)
84
+ rubocop (~> 0.32.1)
70
85
  simplecov (~> 0.10.0)
71
86
  webmock (~> 1.21.0)
87
+
88
+ BUNDLED WITH
89
+ 1.10.6
data/README.md CHANGED
@@ -68,6 +68,20 @@ response[:result].each do |result|
68
68
  end
69
69
  ```
70
70
 
71
+ ### Run a smart campaign on existing leads
72
+ ```ruby
73
+ campaign_id = 42 # this is the ID of the campaign
74
+ lead_ids = [1, 2, 4] # these are the leads who receive the campaign
75
+ tokens = [{ # these tokens (optional) are then passed to the campaign
76
+ name: '{{my.message}}',
77
+ value: 'Updated message'
78
+ }, {
79
+ name: '{{my.other token}}',
80
+ value: 'Value for other token'
81
+ }]
82
+ client.request_campaign(campaign_id, lead_ids, tokens) # tokens can be omited
83
+ => { requestId: 'e42b#14272d07d78', success: true }
84
+ ```
71
85
 
72
86
  ## Run Tests
73
87
 
data/lib/mrkt.rb CHANGED
@@ -3,14 +3,20 @@ require 'mrkt/errors'
3
3
 
4
4
  require 'mrkt/concerns/connection'
5
5
  require 'mrkt/concerns/authentication'
6
+ require 'mrkt/concerns/crud_helpers'
7
+ require 'mrkt/concerns/crud_campaigns'
6
8
  require 'mrkt/concerns/crud_leads'
9
+ require 'mrkt/concerns/crud_lists'
7
10
  require 'mrkt/concerns/import_leads'
8
11
 
9
12
  module Mrkt
10
13
  class Client
11
14
  include Connection
12
15
  include Authentication
16
+ include CrudHelpers
17
+ include CrudCampaigns
13
18
  include CrudLeads
19
+ include CrudLists
14
20
  include ImportLeads
15
21
 
16
22
  attr_accessor :debug
@@ -0,0 +1,16 @@
1
+ module Mrkt
2
+ module CrudCampaigns
3
+ def request_campaign(id, lead_ids, tokens = {})
4
+ post("/rest/v1/campaigns/#{id}/trigger.json") do |req|
5
+ params = {
6
+ input: {
7
+ leads: map_lead_ids(lead_ids),
8
+ tokens: tokens
9
+ }
10
+ }
11
+
12
+ json_payload(req, params)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module Mrkt
2
+ module CrudHelpers
3
+ def map_lead_ids(lead_ids)
4
+ lead_ids.map { |id| { id: id } }
5
+ end
6
+
7
+ def json_payload(req, payload)
8
+ req.headers[:content_type] = 'application/json'
9
+ req.body = JSON.generate(payload)
10
+ end
11
+ end
12
+ end
@@ -12,7 +12,7 @@ module Mrkt
12
12
  get('/rest/v1/leads.json', params)
13
13
  end
14
14
 
15
- def createupdate_leads(leads, action: 'createOrUpdate', lookup_field: nil, partition_name: nil)
15
+ def createupdate_leads(leads, action: 'createOrUpdate', lookup_field: nil, partition_name: nil, async_processing: nil)
16
16
  post('/rest/v1/leads.json') do |req|
17
17
  params = {
18
18
  action: action,
@@ -20,6 +20,7 @@ module Mrkt
20
20
  }
21
21
  params[:lookupField] = lookup_field if lookup_field
22
22
  params[:partitionName] = partition_name if partition_name
23
+ params[:asyncProcessing] = async_processing if async_processing
23
24
 
24
25
  json_payload(req, params)
25
26
  end
@@ -27,15 +28,10 @@ module Mrkt
27
28
 
28
29
  def delete_leads(leads)
29
30
  delete('/rest/v1/leads.json') do |req|
30
- json_payload(req, input: leads.map { |lead_id| { id: lead_id } })
31
+ json_payload(req, input: map_lead_ids(leads))
31
32
  end
32
33
  end
33
34
 
34
- def json_payload(req, payload)
35
- req.headers[:content_type] = 'application/json'
36
- req.body = JSON.generate(payload)
37
- end
38
-
39
35
  def associate_lead(id, cookie)
40
36
  params = Faraday::Utils::ParamsHash.new
41
37
  params[:cookie] = cookie
@@ -0,0 +1,22 @@
1
+ module Mrkt
2
+ module CrudLists
3
+ def get_leads_by_list(list_id, fields: nil, batch_size: nil, next_page_token: nil)
4
+ params = {}
5
+ params[:fields] = fields if fields
6
+ params[:batchSize] = batch_size if batch_size
7
+ params[:nextPageToken] = next_page_token if next_page_token
8
+
9
+ get("/rest/v1/list/#{list_id}/leads.json", params)
10
+ end
11
+
12
+ def add_leads_to_list(list_id, lead_ids)
13
+ post("/rest/v1/lists/#{list_id}/leads.json") do |req|
14
+ params = {
15
+ input: map_lead_ids(lead_ids)
16
+ }
17
+
18
+ json_payload(req, params)
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/mrkt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mrkt
2
- VERSION = '0.6.0'
2
+ VERSION = '0.6.1'
3
3
  end
data/mrkt.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = 'https://github.com/raszi/mrkt'
14
14
  spec.license = 'MIT'
15
15
 
16
- spec.files = `git ls-files`.split($/)
16
+ spec.files = `git ls-files`.split($RS)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = %w(lib)
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency 'simplecov', '~> 0.10.0'
30
30
  spec.add_development_dependency 'pry-byebug', '~> 3.1.0'
31
31
  spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4.7'
32
+ spec.add_development_dependency 'rubocop', '~> 0.32.1'
32
33
  end
@@ -0,0 +1,71 @@
1
+ describe Mrkt::CrudCampaigns do
2
+ include_context 'initialized client'
3
+
4
+ describe '#request_campaign' do
5
+ let(:id) { 42 }
6
+ let(:lead_ids) { [1234, 5678] }
7
+ let(:tokens) do
8
+ [{
9
+ name: '{{my.message}}',
10
+ value: 'Updated message'
11
+ }, {
12
+ name: '{{my.other token}}',
13
+ value: 'Value for other token'
14
+ }]
15
+ end
16
+ subject { client.request_campaign(id, lead_ids, tokens) }
17
+
18
+ before do
19
+ stub_request(:post, "https://#{host}/rest/v1/campaigns/#{id}/trigger.json")
20
+ .with(body: { input: { leads: lead_ids.map { |id| { id: id } }, tokens: tokens } })
21
+ .to_return(json_stub(response_stub))
22
+ end
23
+
24
+ context 'with an invalid campaign id' do
25
+ let(:response_stub) do
26
+ {
27
+ requestId: 'a9b#14eb6771358',
28
+ success: false,
29
+ errors: [{
30
+ code: '1013',
31
+ message: 'Campaign not found'
32
+ }]
33
+ }
34
+ end
35
+
36
+ it 'should raise an Error' do
37
+ expect { subject }.to raise_error(Mrkt::Errors::ObjectNotFound)
38
+ end
39
+ end
40
+
41
+ context 'with valid campaign id' do
42
+ context 'with invalid lead id' do
43
+ let(:response_stub) do
44
+ {
45
+ requestId: '7cdc#14eb6ae8a86',
46
+ success: false,
47
+ errors: [{
48
+ code: '1004',
49
+ message: 'Lead [1234] not found'
50
+ }]
51
+ }
52
+ end
53
+
54
+ it 'should raise an Error' do
55
+ expect { subject }.to raise_error(Mrkt::Errors::LeadNotFound)
56
+ end
57
+ end
58
+
59
+ context 'for valid lead ids' do
60
+ let(:response_stub) do
61
+ {
62
+ requestId: 'e42b#14272d07d78',
63
+ success: true
64
+ }
65
+ end
66
+
67
+ it { is_expected.to eq(response_stub) }
68
+ end
69
+ end
70
+ end
71
+ end
@@ -136,7 +136,7 @@ describe Mrkt::CrudLeads do
136
136
  success: false,
137
137
  errors: [
138
138
  {
139
- code: "1004",
139
+ code: '1004',
140
140
  message: "Lead '1' not found"
141
141
  }
142
142
  ]
@@ -0,0 +1,66 @@
1
+ describe Mrkt::CrudLists do
2
+ include_context 'initialized client'
3
+
4
+ describe '#get_leads_by_list' do
5
+ let(:list_id) { '1001' }
6
+ let(:response_stub) do
7
+ {
8
+ requestId: 'ab12#12d6ab65024',
9
+ result: [
10
+ {
11
+ id: 1,
12
+ firstName: nil,
13
+ lastName: nil,
14
+ email: 'sample@example.com',
15
+ updatedAt: '2015-05-19 13:50:57',
16
+ createdAt: '2015-05-19 13:50:57'
17
+ }
18
+ ],
19
+ success: true
20
+ }
21
+ end
22
+
23
+ subject { client.get_leads_by_list(list_id) }
24
+
25
+ before do
26
+ stub_request(:get, "https://#{host}/rest/v1/list/#{list_id}/leads.json")
27
+ .with(query: {})
28
+ .to_return(json_stub(response_stub))
29
+ end
30
+
31
+ it { is_expected.to eq(response_stub) }
32
+ end
33
+
34
+ describe '#add_leads_to_list' do
35
+ let(:list_id) { '1001' }
36
+ let(:lead_ids) { ['1'] }
37
+ let(:request_body) do
38
+ {
39
+ input: [
40
+ { id: '1' }
41
+ ]
42
+ }
43
+ end
44
+ let(:response_stub) do
45
+ {
46
+ requestId: '16d3f#14d6da7449f',
47
+ result: [
48
+ {
49
+ id: 1,
50
+ status: 'added'
51
+ }
52
+ ],
53
+ success: true
54
+ }
55
+ end
56
+ subject { client.add_leads_to_list(list_id, lead_ids) }
57
+
58
+ before do
59
+ stub_request(:post, "https://#{host}/rest/v1/lists/#{list_id}/leads.json")
60
+ .with(json_stub(request_body))
61
+ .to_return(json_stub(response_stub))
62
+ end
63
+
64
+ it { is_expected.to eq(response_stub) }
65
+ end
66
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,7 +4,7 @@ if ENV['COVERAGE']
4
4
  end
5
5
 
6
6
  if ENV['CODECLIMATE_REPO_TOKEN']
7
- require "codeclimate-test-reporter"
7
+ require 'codeclimate-test-reporter'
8
8
  CodeClimate::TestReporter.start
9
9
  end
10
10
 
@@ -10,7 +10,7 @@ RSpec.configure do |config|
10
10
 
11
11
  if ENV['CODECLIMATE_REPO_TOKEN']
12
12
  config.after(:suite) do
13
- WebMock.disable_net_connect!(allow: 'codeclimate.com')
13
+ WebMock.disable_net_connect!(allow: 'codeclimate.com')
14
14
  end
15
15
  end
16
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mrkt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - KARASZI István
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-21 00:00:00.000000000 Z
12
+ date: 2015-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday_middleware
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: 0.4.7
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.32.1
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 0.32.1
126
140
  description: This gem helps you to use the Marketo REST API
127
141
  email:
128
142
  - github@spam.raszi.hu
@@ -133,6 +147,7 @@ extra_rdoc_files: []
133
147
  files:
134
148
  - ".gitignore"
135
149
  - ".rspec"
150
+ - ".rubocop.yml"
136
151
  - ".travis.yml"
137
152
  - Gemfile
138
153
  - Gemfile.lock
@@ -142,7 +157,10 @@ files:
142
157
  - lib/mrkt.rb
143
158
  - lib/mrkt/concerns/authentication.rb
144
159
  - lib/mrkt/concerns/connection.rb
160
+ - lib/mrkt/concerns/crud_campaigns.rb
161
+ - lib/mrkt/concerns/crud_helpers.rb
145
162
  - lib/mrkt/concerns/crud_leads.rb
163
+ - lib/mrkt/concerns/crud_lists.rb
146
164
  - lib/mrkt/concerns/import_leads.rb
147
165
  - lib/mrkt/errors.rb
148
166
  - lib/mrkt/faraday_middleware.rb
@@ -150,7 +168,9 @@ files:
150
168
  - lib/mrkt/version.rb
151
169
  - mrkt.gemspec
152
170
  - spec/concerns/authentication_spec.rb
171
+ - spec/concerns/crud_campaigns_spec.rb
153
172
  - spec/concerns/crud_leads_spec.rb
173
+ - spec/concerns/crud_lists_spec.rb
154
174
  - spec/concerns/import_leads_spec.rb
155
175
  - spec/errors_spec.rb
156
176
  - spec/mkto_rest_spec.rb
@@ -177,13 +197,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
197
  version: '0'
178
198
  requirements: []
179
199
  rubyforge_project:
180
- rubygems_version: 2.4.3
200
+ rubygems_version: 2.4.8
181
201
  signing_key:
182
202
  specification_version: 4
183
203
  summary: Marketo REST API Facade
184
204
  test_files:
185
205
  - spec/concerns/authentication_spec.rb
206
+ - spec/concerns/crud_campaigns_spec.rb
186
207
  - spec/concerns/crud_leads_spec.rb
208
+ - spec/concerns/crud_lists_spec.rb
187
209
  - spec/concerns/import_leads_spec.rb
188
210
  - spec/errors_spec.rb
189
211
  - spec/mkto_rest_spec.rb