mrkt 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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