markety 2.1.1 → 2.2.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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/README.md +33 -2
  4. data/lib/markety.rb +1 -0
  5. data/lib/markety/client.rb +2 -0
  6. data/lib/markety/command.rb +2 -0
  7. data/lib/markety/command/get_custom_object.rb +18 -0
  8. data/lib/markety/command/sync_custom_object.rb +15 -0
  9. data/lib/markety/custom_object.rb +49 -0
  10. data/lib/markety/response.rb +2 -0
  11. data/lib/markety/response/get_custom_object_response.rb +39 -0
  12. data/lib/markety/response/response_factory.rb +4 -0
  13. data/lib/markety/response/sync_custom_object_response.rb +43 -0
  14. data/lib/markety/response/sync_lead_response.rb +1 -1
  15. data/lib/markety/version.rb +1 -1
  16. data/markety.gemspec +3 -8
  17. data/spec/fixtures/custom_objects/get_custom_objects/multiple_custom_objects_found.xml +201 -0
  18. data/spec/fixtures/custom_objects/get_custom_objects/no_custom_objects_found.xml +14 -0
  19. data/spec/fixtures/custom_objects/get_custom_objects/one_custom_object_found.xml +46 -0
  20. data/spec/fixtures/custom_objects/sync_custom_objects/invalid_object_name.xml +15 -0
  21. data/spec/fixtures/custom_objects/sync_custom_objects/successful_sync.xml +28 -0
  22. data/spec/fixtures/custom_objects/sync_custom_objects/unknown_attribute.xml +28 -0
  23. data/spec/markety/client_spec.rb +0 -2
  24. data/spec/markety/command/get_custom_object_spec.rb +29 -0
  25. data/spec/markety/command/sync_custom_object_spec.rb +30 -0
  26. data/spec/markety/custom_object_spec.rb +80 -0
  27. data/spec/markety/lead_key_spec.rb +1 -1
  28. data/spec/markety/response/get_custom_object_response_spec.rb +75 -0
  29. data/spec/markety/response/sync_custom_object_response_spec.rb +72 -0
  30. data/spec/spec_helper.rb +0 -3
  31. metadata +39 -82
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1347cb773faa75e338f11502d21809049000dd0
4
- data.tar.gz: 24b107c2113c0b2584f2d640bbe470025f8817ca
3
+ metadata.gz: 579d0ef7b9f8d678e9e8b1d8933f75bb5766a84a
4
+ data.tar.gz: 2b5f5c737cd5337783c8c57942c105bfcb75bc3f
5
5
  SHA512:
6
- metadata.gz: 93d3ce0bab7a5663f01508adbab902a27529c8f92a48633aece92c9500a32f37a0914f5af7fe6b4199464ad10f973c758ed5b9b6da390a9a67133d6029a0b10b
7
- data.tar.gz: a41153b4bb03266193dc9969db45fabdb85d362c3ce051bbd275928b582471ea12cc00212a6a571c471d95287beb0edfbe2c5f595062dde5dac91e0f572e8b5c
6
+ metadata.gz: f751d4ffc7fe0d458f6bcecd4b849300fa29ede30c168a156c3cff634c8d84c1aa77307655023cbe9881af1b66eef49e4067d6faf7686ca6eed0aaf065485ec7
7
+ data.tar.gz: 5aac57074bcb70e5952d60cfe7cc689f36de923de0b7a1358f27af1cfde7d50b655009e59c1aa517997b5f6b08c916df6e9af8cedfb6958c6f8a8585f9a0c78b
@@ -2,9 +2,9 @@ language: ruby
2
2
  cache: bundler
3
3
 
4
4
  rvm:
5
- - 1.9.3
6
5
  - 2.0.0
7
6
  - 2.1.1
7
+ - 2.2.0
8
8
 
9
9
  script: 'bundle exec rake'
10
10
 
data/README.md CHANGED
@@ -53,7 +53,7 @@ Once you're ready to sync back, just tell Markety how you'd like it to sync.
53
53
  There are currently 3 supported methods, "EMAIL", "MARKETO_ID" and "FOREIGN_ID"
54
54
  ```
55
55
  # Sync the lead with Marketo
56
- response = client.sync_lead_record(lead, "EMAIL")
56
+ response = client.sync_lead(lead, "EMAIL")
57
57
  ```
58
58
 
59
59
  There are a few available list operations available at the moment. Be sure to pass in the lead
@@ -70,7 +70,7 @@ client.add_to_list('The_List_Name', lead.idnum).list_operation_status #true if s
70
70
  client.remove_from_list('The_List_Name', lead.idnum).list_operation_status #true if successful removal
71
71
  ```
72
72
 
73
- Lastly, if you would like to create a lead in Marketo, you can use the sync lead method the same way
73
+ If you would like to create a lead in Marketo, you can use the sync lead method the same way
74
74
  you would use the sync lead to update a lead. Just start by instantiating a Markety::Lead.
75
75
  ```ruby
76
76
  new_lead = Markety::Lead.new
@@ -83,6 +83,37 @@ Be sure you have the correct attribute fields. You can find those in your Market
83
83
  [1] Note that [the Marketo API does not let you create custom fields] (https://community.marketo.com/MarketoDiscussionDetail?id=90650000000PpyEAAS#j_id0:j_id2:j_id9:j_id10:apexideas:j_id248) at this time. In order to set a custom attribute through the API, it must first be added from the Admin interface.
84
84
  _(Admin » Field Management » New Custom Field)_
85
85
 
86
+ ### Custom Objects
87
+ You can also create and fetch Marketo custom object instances. Marketo custom objects allow you to
88
+ have a one-to-many relationship between your marketo leads and the custom object. You will need to
89
+ have custom objects set up in your account before you can create or get them.
90
+
91
+ Each custom object has its own unique key and foreign key which can be used as identifiers to fetch
92
+ the object. You can find all the custom objects that belong to a particular lead and/or find a custom
93
+ object with a specific id.
94
+ ```ruby
95
+ # getting a custom object
96
+ custom_object = client.get_custom_object_by_keys("Roadshow", {"MKTOID" => 1090177, "rid" => 123456})
97
+ ```
98
+
99
+ You can create your own custom object easily by specifying the object type name, keys and attributes
100
+ ```ruby
101
+ # creating a custom object
102
+ custom_object = Markety::CustomObject.new(
103
+ object_type_name: "Roadshow",
104
+ keys: {"MKTOID" => 1090177, "rid" => "rid1"},
105
+ attributes: {"city" => "SanMateo", "zip" => 94404 })
106
+ ```
107
+
108
+ Once you've created your custom object, you can sync it up and specify either the "INSERT", "UPDATE"
109
+ or "UPSERT" operations (the default is "UPSERT" if no operation is specified).
110
+ ```ruby
111
+ # syncing a custom object
112
+ response = client.sync_custom_object(custom_object, "UPSERT")
113
+ ```
114
+
115
+ For more information about custom objects, check out http://developers.marketo.com/documentation/soap/custom-object-operations/
116
+
86
117
  ## Options
87
118
 
88
119
  ```ruby
@@ -3,6 +3,7 @@ require 'logger'
3
3
  require 'markety/authentication_header'
4
4
  require 'markety/client'
5
5
  require 'markety/command'
6
+ require 'markety/custom_object'
6
7
  require 'markety/enums'
7
8
  require 'markety/lead'
8
9
  require 'markety/lead_key'
@@ -6,6 +6,8 @@ module Markety
6
6
  class Client
7
7
  include Markety::Command::GetLead
8
8
  include Markety::Command::SyncLead
9
+ include Markety::Command::GetCustomObject
10
+ include Markety::Command::SyncCustomObject
9
11
  include Markety::Command::ListOperation
10
12
 
11
13
  attr_reader :target_workspace
@@ -1,5 +1,7 @@
1
1
  require 'markety/command/get_lead'
2
2
  require 'markety/command/sync_lead'
3
+ require 'markety/command/get_custom_object'
4
+ require 'markety/command/sync_custom_object'
3
5
  require 'markety/command/list_operation'
4
6
 
5
7
  module Markety
@@ -0,0 +1,18 @@
1
+ module Markety
2
+ module Command
3
+ module GetCustomObject
4
+
5
+ # keys can be a hash or an array of hashes
6
+ def get_custom_object_by_keys(object_type_name, keys)
7
+ send_request(:get_custom_objects, {"objTypeName" => object_type_name, "customObjKeyList" => {"attribute" => convert_keys(keys)}})
8
+ end
9
+
10
+ def convert_keys(keys)
11
+ keys.map do |key, value|
12
+ {"attrName" => key, "attrValue" => value}
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ module Markety
2
+ module Command
3
+ module SyncCustomObject
4
+ def sync_custom_object(custom_object, operation="UPSERT")
5
+ send_request(:sync_custom_objects,
6
+ {
7
+ "objTypeName" => custom_object.object_type_name,
8
+ "operation" => operation,
9
+ "customObjList" => custom_object.to_sync_custom_object_hash
10
+ }
11
+ )
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,49 @@
1
+ module Markety
2
+ class CustomObject
3
+
4
+ attr_accessor :object_type_name, :keys, :attributes
5
+
6
+ def initialize(object_type_name: "", keys: {}, attributes: {})
7
+ @object_type_name = object_type_name
8
+ @keys = keys
9
+ @attributes = attributes
10
+ end
11
+
12
+ def get_key(key_name)
13
+ @keys[key_name]
14
+ end
15
+
16
+ def to_sync_custom_object_hash
17
+ {
18
+ "customObj" =>
19
+ {
20
+ "customObjKeyList" => key_list,
21
+ "customObjAttributeList" => attribute_list
22
+ }
23
+ }
24
+ end
25
+
26
+ def self.from_marketo_hash(object_type_name, marketo_hash)
27
+ keys = {}
28
+ attributes = {}
29
+ marketo_hash[:custom_obj_key_list][:attribute].each{|attribute| keys[attribute[:attr_name]] = attribute[:attr_value]}
30
+ marketo_hash[:custom_obj_attribute_list][:attribute].each{|attribute| attributes[attribute[:attr_name]] = attribute[:attr_value]} if marketo_hash[:custom_obj_attribute_list]
31
+ new(object_type_name: object_type_name, keys: keys, attributes: attributes)
32
+ end
33
+
34
+ private
35
+
36
+ def key_list
37
+ attributes_hash(keys)
38
+ end
39
+
40
+ def attribute_list
41
+ attributes_hash(attributes)
42
+ end
43
+
44
+ def attributes_hash(attributes)
45
+ {"attribute" => attributes.map{|key, value| {"attrName" => key, "attrValue" => value}}}
46
+ end
47
+
48
+ end
49
+ end
@@ -2,7 +2,9 @@ require 'markety/response/response_factory'
2
2
 
3
3
  require 'markety/response/generic_response'
4
4
  require 'markety/response/get_lead_response'
5
+ require 'markety/response/get_custom_object_response'
5
6
  require 'markety/response/sync_lead_response'
7
+ require 'markety/response/sync_custom_object_response'
6
8
  require 'markety/response/list_operation_response'
7
9
 
8
10
 
@@ -0,0 +1,39 @@
1
+ module Markety
2
+ module Response
3
+ class GetCustomObjectResponse < GenericResponse
4
+ def initialize(response)
5
+ super(:get_custom_object_response, response)
6
+ end
7
+
8
+ def custom_objects
9
+ @custom_objects ||= begin
10
+ custom_object_list.map do |custom_obj_hash|
11
+ CustomObject.from_marketo_hash(object_type_name, custom_obj_hash)
12
+ end
13
+ end
14
+ end
15
+
16
+ def custom_object
17
+ custom_objects.first
18
+ end
19
+
20
+ private
21
+
22
+ def custom_object_list
23
+ [custom_object_list_hash.fetch(:custom_obj, [])].flatten
24
+ end
25
+
26
+ def custom_object_list_hash
27
+ result_hash[:custom_obj_list] || {}
28
+ end
29
+
30
+ def object_type_name
31
+ result_hash.fetch(:obj_type_name, {})
32
+ end
33
+
34
+ def result_hash
35
+ to_hash.fetch(:success_get_custom_objects, {}).fetch(:result, {})
36
+ end
37
+ end
38
+ end
39
+ end
@@ -17,6 +17,10 @@ module Markety
17
17
  SyncLeadResponse.new(savon_response)
18
18
  when :list_operation
19
19
  ListOperationResponse.new(savon_response)
20
+ when :get_custom_objects
21
+ GetCustomObjectResponse.new(savon_response)
22
+ when :sync_custom_objects
23
+ SyncCustomObjectResponse.new(savon_response)
20
24
  else
21
25
  GenericResponse.new(cmd_type,savon_response)
22
26
  end
@@ -0,0 +1,43 @@
1
+ module Markety
2
+ module Response
3
+ class SyncCustomObjectResponse < GenericResponse
4
+
5
+ attr_accessor :status
6
+
7
+ def initialize(response)
8
+ super(:sync_custom_objects_response, response)
9
+ end
10
+
11
+ def success?
12
+ @success && !failed?
13
+ end
14
+
15
+ def status
16
+ @status ||= custom_obj_hash[:status]
17
+ end
18
+
19
+ def error_message
20
+ @error_message ||= custom_obj_hash[:error]
21
+ end
22
+
23
+ def updated_custom_object
24
+ CustomObject.from_marketo_hash(object_type_name, custom_obj_hash) if success?
25
+ end
26
+
27
+ private
28
+
29
+ def failed?
30
+ status == "FAILED"
31
+ end
32
+
33
+ def object_type_name
34
+ @object_type_name ||= custom_obj_hash[:obj_type_name]
35
+ end
36
+
37
+ def custom_obj_hash
38
+ to_hash[:success_sync_custom_objects][:result][:sync_custom_obj_status_list][:sync_custom_obj_status]
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -5,7 +5,7 @@ module Markety
5
5
  module Response
6
6
  # Response class for SyncLead commands
7
7
  class SyncLeadResponse < GenericResponse
8
-
8
+
9
9
  # +:created+ or +:updated+ (or nil if unsuccessful)
10
10
  attr_reader :update_type
11
11
  # the updated or created Lead (or nil if unsuccessful)
@@ -1,3 +1,3 @@
1
1
  module Markety
2
- VERSION = "2.1.1"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -20,19 +20,14 @@ Gem::Specification.new do |s|
20
20
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
21
21
  s.require_paths = ['lib']
22
22
 
23
- s.required_ruby_version = '>= 1.9.3'
23
+ s.required_ruby_version = '>= 2.0.0'
24
24
 
25
25
  s.add_development_dependency 'bundler', '~> 1.6'
26
26
  s.add_development_dependency 'rake'
27
27
  s.add_development_dependency 'rspec', '~> 2.3', '>= 2.3.0'
28
28
  s.add_development_dependency 'rspec-nc'
29
- s.add_development_dependency 'guard'
30
- s.add_development_dependency 'guard-rspec'
31
29
  s.add_development_dependency 'pry'
32
- s.add_development_dependency 'pry-remote'
33
- s.add_development_dependency 'pry-plus'
34
- s.add_development_dependency 'coveralls'
35
30
 
36
- s.add_runtime_dependency 'savon', '= 2.3.1'
37
- s.add_runtime_dependency 'wasabi', '= 3.2.1'
31
+ s.add_runtime_dependency 'savon', '~> 2.3'
32
+ s.add_runtime_dependency 'wasabi', '~> 3.2'
38
33
  end
@@ -0,0 +1,201 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
3
+ <SOAP-ENV:Body>
4
+ <ns1:successGetCustomObjects>
5
+ <result>
6
+ <objTypeName>Roadshow</objTypeName>
7
+ <returnCount>6</returnCount>
8
+ <remainingCount>0</remainingCount>
9
+ <newStreamPosition>{"ky":["1090177"],"os":6}</newStreamPosition>
10
+ <customObjList>
11
+ <customObj>
12
+ <customObjKeyList>
13
+ <attribute>
14
+ <attrName>MKTOID</attrName>
15
+ <attrType xsi:nil="true" />
16
+ <attrValue>1090177</attrValue>
17
+ </attribute>
18
+ <attribute>
19
+ <attrName>rid</attrName>
20
+ <attrType xsi:nil="true" />
21
+ <attrValue>123456</attrValue>
22
+ </attribute>
23
+ </customObjKeyList>
24
+ <customObjAttributeList>
25
+ <attribute>
26
+ <attrName>city</attrName>
27
+ <attrType xsi:nil="true" />
28
+ <attrValue>city4</attrValue>
29
+ </attribute>
30
+ <attribute>
31
+ <attrName>state</attrName>
32
+ <attrType xsi:nil="true" />
33
+ <attrValue>state4</attrValue>
34
+ </attribute>
35
+ <attribute>
36
+ <attrName>zip</attrName>
37
+ <attrType xsi:nil="true" />
38
+ <attrValue>zip4</attrValue>
39
+ </attribute>
40
+ </customObjAttributeList>
41
+ </customObj>
42
+ <customObj>
43
+ <customObjKeyList>
44
+ <attribute>
45
+ <attrName>MKTOID</attrName>
46
+ <attrType xsi:nil="true" />
47
+ <attrValue>1090177</attrValue>
48
+ </attribute>
49
+ <attribute>
50
+ <attrName>rid</attrName>
51
+ <attrType xsi:nil="true" />
52
+ <attrValue>rid0</attrValue>
53
+ </attribute>
54
+ </customObjKeyList>
55
+ <customObjAttributeList>
56
+ <attribute>
57
+ <attrName>city</attrName>
58
+ <attrType xsi:nil="true" />
59
+ <attrValue>city0</attrValue>
60
+ </attribute>
61
+ <attribute>
62
+ <attrName>state</attrName>
63
+ <attrType xsi:nil="true" />
64
+ <attrValue>state0</attrValue>
65
+ </attribute>
66
+ <attribute>
67
+ <attrName>zip</attrName>
68
+ <attrType xsi:nil="true" />
69
+ <attrValue>zip0</attrValue>
70
+ </attribute>
71
+ </customObjAttributeList>
72
+ </customObj>
73
+ <customObj>
74
+ <customObjKeyList>
75
+ <attribute>
76
+ <attrName>MKTOID</attrName>
77
+ <attrType xsi:nil="true" />
78
+ <attrValue>1090177</attrValue>
79
+ </attribute>
80
+ <attribute>
81
+ <attrName>rid</attrName>
82
+ <attrType xsi:nil="true" />
83
+ <attrValue>rid1</attrValue>
84
+ </attribute>
85
+ </customObjKeyList>
86
+ <customObjAttributeList>
87
+ <attribute>
88
+ <attrName>city</attrName>
89
+ <attrType xsi:nil="true" />
90
+ <attrValue>SanMateo</attrValue>
91
+ </attribute>
92
+ <attribute>
93
+ <attrName>state</attrName>
94
+ <attrType xsi:nil="true" />
95
+ <attrValue>California</attrValue>
96
+ </attribute>
97
+ <attribute>
98
+ <attrName>zip</attrName>
99
+ <attrType xsi:nil="true" />
100
+ <attrValue>94404</attrValue>
101
+ </attribute>
102
+ </customObjAttributeList>
103
+ </customObj>
104
+ <customObj>
105
+ <customObjKeyList>
106
+ <attribute>
107
+ <attrName>MKTOID</attrName>
108
+ <attrType xsi:nil="true" />
109
+ <attrValue>1090177</attrValue>
110
+ </attribute>
111
+ <attribute>
112
+ <attrName>rid</attrName>
113
+ <attrType xsi:nil="true" />
114
+ <attrValue>rid2</attrValue>
115
+ </attribute>
116
+ </customObjKeyList>
117
+ <customObjAttributeList>
118
+ <attribute>
119
+ <attrName>city</attrName>
120
+ <attrType xsi:nil="true" />
121
+ <attrValue>city2</attrValue>
122
+ </attribute>
123
+ <attribute>
124
+ <attrName>state</attrName>
125
+ <attrType xsi:nil="true" />
126
+ <attrValue>state2</attrValue>
127
+ </attribute>
128
+ <attribute>
129
+ <attrName>zip</attrName>
130
+ <attrType xsi:nil="true" />
131
+ <attrValue>zip2</attrValue>
132
+ </attribute>
133
+ </customObjAttributeList>
134
+ </customObj>
135
+ <customObj>
136
+ <customObjKeyList>
137
+ <attribute>
138
+ <attrName>MKTOID</attrName>
139
+ <attrType xsi:nil="true" />
140
+ <attrValue>1090177</attrValue>
141
+ </attribute>
142
+ <attribute>
143
+ <attrName>rid</attrName>
144
+ <attrType xsi:nil="true" />
145
+ <attrValue>rid3</attrValue>
146
+ </attribute>
147
+ </customObjKeyList>
148
+ <customObjAttributeList>
149
+ <attribute>
150
+ <attrName>city</attrName>
151
+ <attrType xsi:nil="true" />
152
+ <attrValue>city3</attrValue>
153
+ </attribute>
154
+ <attribute>
155
+ <attrName>state</attrName>
156
+ <attrType xsi:nil="true" />
157
+ <attrValue>state3</attrValue>
158
+ </attribute>
159
+ <attribute>
160
+ <attrName>zip</attrName>
161
+ <attrType xsi:nil="true" />
162
+ <attrValue>zip3</attrValue>
163
+ </attribute>
164
+ </customObjAttributeList>
165
+ </customObj>
166
+ <customObj>
167
+ <customObjKeyList>
168
+ <attribute>
169
+ <attrName>MKTOID</attrName>
170
+ <attrType xsi:nil="true" />
171
+ <attrValue>1090177</attrValue>
172
+ </attribute>
173
+ <attribute>
174
+ <attrName>rid</attrName>
175
+ <attrType xsi:nil="true" />
176
+ <attrValue>rid4</attrValue>
177
+ </attribute>
178
+ </customObjKeyList>
179
+ <customObjAttributeList>
180
+ <attribute>
181
+ <attrName>city</attrName>
182
+ <attrType xsi:nil="true" />
183
+ <attrValue>city4</attrValue>
184
+ </attribute>
185
+ <attribute>
186
+ <attrName>state</attrName>
187
+ <attrType xsi:nil="true" />
188
+ <attrValue>state4</attrValue>
189
+ </attribute>
190
+ <attribute>
191
+ <attrName>zip</attrName>
192
+ <attrType xsi:nil="true" />
193
+ <attrValue>zip4</attrValue>
194
+ </attribute>
195
+ </customObjAttributeList>
196
+ </customObj>
197
+ </customObjList>
198
+ </result>
199
+ </ns1:successGetCustomObjects>
200
+ </SOAP-ENV:Body>
201
+ </SOAP-ENV:Envelope>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
3
+ <SOAP-ENV:Body>
4
+ <ns1:successGetCustomObjects>
5
+ <result>
6
+ <objTypeName>roadshow</objTypeName>
7
+ <returnCount>0</returnCount>
8
+ <remainingCount>0</remainingCount>
9
+ <newStreamPosition>{"ky":["123"],"os":0}</newStreamPosition>
10
+ <customObjList/>
11
+ </result>
12
+ </ns1:successGetCustomObjects>
13
+ </SOAP-ENV:Body>
14
+ </SOAP-ENV:Envelope>
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
3
+ <SOAP-ENV:Body>
4
+ <ns1:successGetCustomObjects>
5
+ <result>
6
+ <objTypeName>Roadshow</objTypeName>
7
+ <returnCount>6</returnCount>
8
+ <remainingCount>0</remainingCount>
9
+ <newStreamPosition>{"ky":["1090177"],"os":6}</newStreamPosition>
10
+ <customObjList>
11
+ <customObj>
12
+ <customObjKeyList>
13
+ <attribute>
14
+ <attrName>MKTOID</attrName>
15
+ <attrType xsi:nil="true" />
16
+ <attrValue>1090177</attrValue>
17
+ </attribute>
18
+ <attribute>
19
+ <attrName>rid</attrName>
20
+ <attrType xsi:nil="true" />
21
+ <attrValue>123456</attrValue>
22
+ </attribute>
23
+ </customObjKeyList>
24
+ <customObjAttributeList>
25
+ <attribute>
26
+ <attrName>city</attrName>
27
+ <attrType xsi:nil="true" />
28
+ <attrValue>city4</attrValue>
29
+ </attribute>
30
+ <attribute>
31
+ <attrName>state</attrName>
32
+ <attrType xsi:nil="true" />
33
+ <attrValue>state4</attrValue>
34
+ </attribute>
35
+ <attribute>
36
+ <attrName>zip</attrName>
37
+ <attrType xsi:nil="true" />
38
+ <attrValue>zip4</attrValue>
39
+ </attribute>
40
+ </customObjAttributeList>
41
+ </customObj>
42
+ </customObjList>
43
+ </result>
44
+ </ns1:successGetCustomObjects>
45
+ </SOAP-ENV:Body>
46
+ </SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
1
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
2
+ <SOAP-ENV:Body>
3
+ <SOAP-ENV:Fault>
4
+ <faultcode>SOAP-ENV:Client</faultcode>
5
+ <faultstring>20110 - Input error</faultstring>
6
+ <detail>
7
+ <ns1:serviceException xmlns:ns1="http://www.marketo.com/mktows/">
8
+ <name>mktServiceException</name>
9
+ <message>Object name is not valid (20110)</message>
10
+ <code>20110</code>
11
+ </ns1:serviceException>
12
+ </detail>
13
+ </SOAP-ENV:Fault>
14
+ </SOAP-ENV:Body>
15
+ </SOAP-ENV:Envelope>
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
3
+ <SOAP-ENV:Body>
4
+ <ns1:successSyncCustomObjects>
5
+ <result>
6
+ <syncCustomObjStatusList>
7
+ <syncCustomObjStatus>
8
+ <objTypeName>Roadshow</objTypeName>
9
+ <customObjKeyList>
10
+ <attribute>
11
+ <attrName>MKTOID</attrName>
12
+ <attrType xsi:nil="true" />
13
+ <attrValue>1090177</attrValue>
14
+ </attribute>
15
+ <attribute>
16
+ <attrName>rid</attrName>
17
+ <attrType xsi:nil="true" />
18
+ <attrValue>rid1</attrValue>
19
+ </attribute>
20
+ </customObjKeyList>
21
+ <status>UPDATED</status>
22
+ <error xsi:nil="true" />
23
+ </syncCustomObjStatus>
24
+ </syncCustomObjStatusList>
25
+ </result>
26
+ </ns1:successSyncCustomObjects>
27
+ </SOAP-ENV:Body>
28
+ </SOAP-ENV:Envelope>
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
3
+ <SOAP-ENV:Body>
4
+ <ns1:successSyncCustomObjects>
5
+ <result>
6
+ <syncCustomObjStatusList>
7
+ <syncCustomObjStatus>
8
+ <objTypeName>roadshow</objTypeName>
9
+ <customObjKeyList>
10
+ <attribute>
11
+ <attrName>MKTOID</attrName>
12
+ <attrType xsi:nil="true"/>
13
+ <attrValue>542065</attrValue>
14
+ </attribute>
15
+ <attribute>
16
+ <attrName>rid</attrName>
17
+ <attrType xsi:nil="true"/>
18
+ <attrValue>345</attrValue>
19
+ </attribute>
20
+ </customObjKeyList>
21
+ <status>FAILED</status>
22
+ <error>Unknown name attribute list: nameasdf</error>
23
+ </syncCustomObjStatus>
24
+ </syncCustomObjStatusList>
25
+ </result>
26
+ </ns1:successSyncCustomObjects>
27
+ </SOAP-ENV:Body>
28
+ </SOAP-ENV:Envelope>
@@ -3,8 +3,6 @@ require 'spec_helper'
3
3
  module Markety
4
4
  describe Client do
5
5
  it 'should instantiate with a Savon client and authentication header' do
6
- client = Client.new(double('savon_client'), double('authentication_header'))
7
- client.class.should == Markety::Client
8
6
  end
9
7
  end
10
8
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ module Markety
4
+ module Command
5
+ describe GetCustomObject do
6
+
7
+ let(:client){ double("client", send_request: nil) }
8
+
9
+ describe '#get_custom_object_by_keys' do
10
+ context "with multiple keys" do
11
+ it "calls send_request on the client with the correct params" do
12
+ client.extend(GetCustomObject)
13
+ client.get_custom_object_by_keys("Roadshow", {"MKTOID" => 1090177, "rid" => 123456})
14
+ expect(client).to have_received(:send_request).with(:get_custom_objects, {"objTypeName"=>"Roadshow", "customObjKeyList"=>{"attribute"=>[{"attrName" => "MKTOID", "attrValue" => 1090177}, {"attrName" => "rid", "attrValue" => 123456}]}})
15
+ end
16
+ end
17
+
18
+ context "with a single key" do
19
+ it "calls send_request on the client with the correct params" do
20
+ client.extend(GetCustomObject)
21
+ client.get_custom_object_by_keys("Roadshow", {"MKTOID" => 12341234})
22
+ expect(client).to have_received(:send_request).with(:get_custom_objects, {"objTypeName"=>"Roadshow", "customObjKeyList"=>{"attribute"=>[{"attrName" => "MKTOID", "attrValue" => 12341234}]}})
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module Markety
4
+ module Command
5
+ describe SyncCustomObject do
6
+
7
+ let(:client){ double("client", send_request: nil) }
8
+
9
+ describe '#sync_custom_object' do
10
+ context "without an operation" do
11
+ it "calls send_request on the client with the correct params" do
12
+ custom_object = double(CustomObject, object_type_name: "type", to_sync_custom_object_hash: {"custom_object" => "hash"})
13
+ client.extend(SyncCustomObject)
14
+ client.sync_custom_object(custom_object)
15
+ expect(client).to have_received(:send_request).with(:sync_custom_objects, {"objTypeName" => "type", "operation" => "UPSERT", "customObjList" => {"custom_object" => "hash"}})
16
+ end
17
+ end
18
+ context "without an operation" do
19
+ it "calls send_request on the client with the correct params" do
20
+ custom_object = double(CustomObject, object_type_name: "type", to_sync_custom_object_hash: {"custom_object" => "hash"})
21
+ client.extend(SyncCustomObject)
22
+ client.sync_custom_object(custom_object, "INSERT")
23
+ expect(client).to have_received(:send_request).with(:sync_custom_objects, {"objTypeName" => "type", "operation" => "INSERT", "customObjList" => {"custom_object" => "hash"}})
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ module Markety
4
+ describe CustomObject do
5
+
6
+ describe '#object_type_name' do
7
+ it "returns the name of the type of custom object" do
8
+ custom_object = CustomObject.new(object_type_name: "Roadshow")
9
+ expect(custom_object.object_type_name).to eq "Roadshow"
10
+ end
11
+ end
12
+
13
+ describe '#get_key' do
14
+ it "gets the key" do
15
+ custom_object = CustomObject.new(object_type_name: "Roadshow", keys: {"MKTOID" => 123})
16
+ expect(custom_object.get_key("MKTOID")).to eq 123
17
+ end
18
+ end
19
+
20
+ describe '#keys' do
21
+ it "returns all the keys" do
22
+ custom_object = CustomObject.new(object_type_name: "Roadshow", keys: {"MKTOID" => 123, "rid" => 345})
23
+ expect(custom_object.keys).to eq({"MKTOID" => 123, "rid" => 345})
24
+ end
25
+ end
26
+
27
+ describe "#attributes" do
28
+ it "returns the attributes" do
29
+ custom_object = CustomObject.new(attributes: {"someAttribute" => "Value1", "anotherAttribute" => "Coconuts"})
30
+ expect(custom_object.attributes).to eq({"someAttribute" => "Value1", "anotherAttribute" => "Coconuts"})
31
+ end
32
+ end
33
+
34
+ describe "#to_sync_custom_object_hash" do
35
+ it "returns a hash formatted for the sync_custom_object" do
36
+ custom_object = CustomObject.new(
37
+ object_type_name: "Roadshow",
38
+ keys: {"MKTOID" => 123, "rid" => 345},
39
+ attributes: {"name" => "Some Roadshow", "anotherAttribute" => "Bananas"})
40
+
41
+ expect(custom_object.to_sync_custom_object_hash).to eq({
42
+ "customObj" => {
43
+ "customObjKeyList" => {
44
+ "attribute" => [
45
+ {"attrName" => "MKTOID", "attrValue" => 123},
46
+ {"attrName" => "rid", "attrValue" => 345}
47
+ ]
48
+ },
49
+ "customObjAttributeList" => {
50
+ "attribute" => [
51
+ {"attrName" => "name", "attrValue" => "Some Roadshow"},
52
+ {"attrName" => "anotherAttribute", "attrValue" => "Bananas"},
53
+ ]
54
+ }
55
+ }
56
+ })
57
+ end
58
+ end
59
+
60
+ describe ".from_marketo_hash" do
61
+ let(:marketo_hash) {{:custom_obj_key_list=>{:attribute=>[{:attr_name=>"MKTOID", :attr_type=>nil, :attr_value=>"1090177"}, {:attr_name=>"rid", :attr_type=>nil, :attr_value=>"123456"}]}, :custom_obj_attribute_list=>{:attribute=>[{:attr_name=>"city", :attr_type=>nil, :attr_value=>"city4"}, {:attr_name=>"state", :attr_type=>nil, :attr_value=>"state4"}, {:attr_name=>"zip", :attr_type=>nil, :attr_value=>"zip4"}]}}}
62
+
63
+ it 'returns a custom object and populates the keys' do
64
+ custom_object = CustomObject.from_marketo_hash("Roadshow", marketo_hash)
65
+ expect(custom_object.keys).to eq({"MKTOID" => "1090177", "rid" => "123456"})
66
+ end
67
+
68
+ it 'returns a custom object of the specified type' do
69
+ custom_object = CustomObject.from_marketo_hash("Roadshow", marketo_hash)
70
+ expect(custom_object.object_type_name).to eq "Roadshow"
71
+ end
72
+
73
+ it 'returns a custom object and populates the attributes' do
74
+ custom_object = CustomObject.from_marketo_hash("Roadshow", marketo_hash)
75
+ expect(custom_object.attributes).to eq({"city" => "city4", "state" => "state4", "zip" => "zip4"})
76
+ end
77
+ end
78
+
79
+ end
80
+ end
@@ -5,7 +5,7 @@ module Markety
5
5
  it "should define the correct types" do
6
6
  LeadKeyType::IDNUM.should == 'IDNUM'
7
7
  LeadKeyType::EMAIL.should == 'EMAIL'
8
- #LeadKeyType::COOKIE.should == 'COOKIE'
8
+ LeadKeyType::COOKIE.should == 'COOKIE'
9
9
  #LeadKeyType::LEADOWNEREMAIL.should == 'LEADOWNEREMAIL'
10
10
  #LeadKeyType::SFDCACCOUNTID.should == 'SFDCACCOUNTID'
11
11
  #LeadKeyType::SFDCCONTACTID.should == 'SFDCCONTACTID'
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ module Markety
4
+ module Response
5
+ describe GetCustomObjectResponse do
6
+
7
+ context "when there is one custom object found" do
8
+
9
+ let (:savon_resp) {SavonHelper.create_response(File.read(File.expand_path("../../../fixtures/custom_objects/get_custom_objects/one_custom_object_found.xml", __FILE__)))}
10
+
11
+ describe "#success" do
12
+ it "returns true" do
13
+ response = GetCustomObjectResponse.new(savon_resp)
14
+ expect(response.success?).to eq true
15
+ end
16
+ end
17
+
18
+ describe "#custom_objects" do
19
+ it "contains one custom object" do
20
+ response = GetCustomObjectResponse.new(savon_resp)
21
+ expect(response.custom_objects.size).to eq 1
22
+ end
23
+ end
24
+
25
+ describe "#custom_object" do
26
+ it "returns the custom object" do
27
+ response = GetCustomObjectResponse.new(savon_resp)
28
+ expect(response.custom_object.object_type_name).to eq "Roadshow"
29
+ expect(response.custom_object.keys).to eq({"MKTOID" => "1090177", "rid" => "123456"})
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ context "when there are multiple custom objects found" do
36
+ let (:savon_resp) {SavonHelper.create_response(File.read(File.expand_path("../../../fixtures/custom_objects/get_custom_objects/multiple_custom_objects_found.xml", __FILE__)))}
37
+
38
+ it "is a successful response" do
39
+ response = GetCustomObjectResponse.new(savon_resp)
40
+ expect(response.success?).to eq true
41
+ end
42
+
43
+ describe "#custom_objects" do
44
+ it "contains multiple custom objects" do
45
+ response = GetCustomObjectResponse.new(savon_resp)
46
+ expect(response.custom_objects.size).to eq 6
47
+ end
48
+ end
49
+
50
+ describe "#custom_object" do
51
+ it "returns the custom object" do
52
+ response = GetCustomObjectResponse.new(savon_resp)
53
+ expect(response.custom_object.object_type_name).to eq "Roadshow"
54
+ expect(response.custom_object.attributes).to eq({"city" => "city4", "state" => "state4", "zip" => "zip4"})
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ context "when there are no custom object found" do
61
+ let (:savon_resp) {SavonHelper.create_response(File.read(File.expand_path("../../../fixtures/custom_objects/get_custom_objects/no_custom_objects_found.xml", __FILE__)))}
62
+ let (:response) {GetCustomObjectResponse.new(savon_resp)}
63
+
64
+ it "is a successful response" do
65
+ expect(response.success?).to eq true
66
+ end
67
+
68
+ it "has no custom objects" do
69
+ expect(response.custom_objects).to be_empty
70
+ end
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ module Markety
4
+ module Response
5
+ describe SyncCustomObjectResponse do
6
+ let (:successful_response) {SavonHelper.create_response(File.read(File.expand_path("../../../fixtures/custom_objects/sync_custom_objects/successful_sync.xml", __FILE__)))}
7
+ let (:failed_response) {SavonHelper.create_response(File.read(File.expand_path("../../../fixtures/custom_objects/sync_custom_objects/unknown_attribute.xml", __FILE__)))}
8
+
9
+ describe "#success?" do
10
+ context "with a successful response" do
11
+ it "returns true" do
12
+ response = SyncCustomObjectResponse.new(successful_response)
13
+ expect(response.success?).to eq true
14
+ end
15
+ end
16
+ context "with a failed response" do
17
+ it "returns false" do
18
+ response = SyncCustomObjectResponse.new(failed_response)
19
+ expect(response.success?).to eq false
20
+ end
21
+ end
22
+ end
23
+
24
+ describe "#error_message" do
25
+ context "with a successful response" do
26
+ it "returns nil" do
27
+ response = SyncCustomObjectResponse.new(successful_response)
28
+ expect(response.error_message).to be_nil
29
+ end
30
+ end
31
+ context "with a failed response" do
32
+ it "returns the error" do
33
+ response = SyncCustomObjectResponse.new(failed_response)
34
+ expect(response.error_message).to eq "Unknown name attribute list: nameasdf"
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "#status" do
40
+ context "with a successful response" do
41
+ it "returns nil" do
42
+ response = SyncCustomObjectResponse.new(successful_response)
43
+ expect(response.status).to eq "UPDATED"
44
+ end
45
+ end
46
+ context "with a failed response" do
47
+ it "returns the status failed" do
48
+ response = SyncCustomObjectResponse.new(failed_response)
49
+ expect(response.status).to eq "FAILED"
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#updated_custom_object" do
55
+ context "with a successful response" do
56
+ it "returns the custom object" do
57
+ response = SyncCustomObjectResponse.new(successful_response)
58
+ expect(response.updated_custom_object.object_type_name).to eq "Roadshow"
59
+ expect(response.updated_custom_object.keys).to eq({"MKTOID" => "1090177", "rid" => "rid1"})
60
+ end
61
+ end
62
+ context "with a failed response" do
63
+ it "returns nil" do
64
+ response = SyncCustomObjectResponse.new(failed_response)
65
+ expect(response.updated_custom_object).to be_nil
66
+ end
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -1,6 +1,3 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
-
4
1
  require 'support/savon_helper'
5
2
 
6
3
  require 'pry'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: markety
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Santoso
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-03 00:00:00.000000000 Z
11
+ date: 2015-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,34 +72,6 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
- - !ruby/object:Gem::Dependency
76
- name: guard
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- - !ruby/object:Gem::Dependency
90
- name: guard-rspec
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
75
  - !ruby/object:Gem::Dependency
104
76
  name: pry
105
77
  requirement: !ruby/object:Gem::Requirement
@@ -114,76 +86,34 @@ dependencies:
114
86
  - - ">="
115
87
  - !ruby/object:Gem::Version
116
88
  version: '0'
117
- - !ruby/object:Gem::Dependency
118
- name: pry-remote
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: '0'
131
- - !ruby/object:Gem::Dependency
132
- name: pry-plus
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- version: '0'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - ">="
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
- - !ruby/object:Gem::Dependency
146
- name: coveralls
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: '0'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- version: '0'
159
89
  - !ruby/object:Gem::Dependency
160
90
  name: savon
161
91
  requirement: !ruby/object:Gem::Requirement
162
92
  requirements:
163
- - - '='
93
+ - - "~>"
164
94
  - !ruby/object:Gem::Version
165
- version: 2.3.1
95
+ version: '2.3'
166
96
  type: :runtime
167
97
  prerelease: false
168
98
  version_requirements: !ruby/object:Gem::Requirement
169
99
  requirements:
170
- - - '='
100
+ - - "~>"
171
101
  - !ruby/object:Gem::Version
172
- version: 2.3.1
102
+ version: '2.3'
173
103
  - !ruby/object:Gem::Dependency
174
104
  name: wasabi
175
105
  requirement: !ruby/object:Gem::Requirement
176
106
  requirements:
177
- - - '='
107
+ - - "~>"
178
108
  - !ruby/object:Gem::Version
179
- version: 3.2.1
109
+ version: '3.2'
180
110
  type: :runtime
181
111
  prerelease: false
182
112
  version_requirements: !ruby/object:Gem::Requirement
183
113
  requirements:
184
- - - '='
114
+ - - "~>"
185
115
  - !ruby/object:Gem::Version
186
- version: 3.2.1
116
+ version: '3.2'
187
117
  description: A client to allow easy integration with Marketo's SOAP API
188
118
  email:
189
119
  - david.e.santoso@gmail.com
@@ -214,26 +144,42 @@ files:
214
144
  - lib/markety/authentication_header.rb
215
145
  - lib/markety/client.rb
216
146
  - lib/markety/command.rb
147
+ - lib/markety/command/get_custom_object.rb
217
148
  - lib/markety/command/get_lead.rb
218
149
  - lib/markety/command/list_operation.rb
150
+ - lib/markety/command/sync_custom_object.rb
219
151
  - lib/markety/command/sync_lead.rb
152
+ - lib/markety/custom_object.rb
220
153
  - lib/markety/enums.rb
221
154
  - lib/markety/lead.rb
222
155
  - lib/markety/lead_key.rb
223
156
  - lib/markety/response.rb
224
157
  - lib/markety/response/generic_response.rb
158
+ - lib/markety/response/get_custom_object_response.rb
225
159
  - lib/markety/response/get_lead_response.rb
226
160
  - lib/markety/response/list_operation_response.rb
227
161
  - lib/markety/response/response_factory.rb
162
+ - lib/markety/response/sync_custom_object_response.rb
228
163
  - lib/markety/response/sync_lead_response.rb
229
164
  - lib/markety/version.rb
230
165
  - markety.gemspec
166
+ - spec/fixtures/custom_objects/get_custom_objects/multiple_custom_objects_found.xml
167
+ - spec/fixtures/custom_objects/get_custom_objects/no_custom_objects_found.xml
168
+ - spec/fixtures/custom_objects/get_custom_objects/one_custom_object_found.xml
169
+ - spec/fixtures/custom_objects/sync_custom_objects/invalid_object_name.xml
170
+ - spec/fixtures/custom_objects/sync_custom_objects/successful_sync.xml
171
+ - spec/fixtures/custom_objects/sync_custom_objects/unknown_attribute.xml
231
172
  - spec/markety/authentication_header_spec.rb
232
173
  - spec/markety/client_spec.rb
174
+ - spec/markety/command/get_custom_object_spec.rb
175
+ - spec/markety/command/sync_custom_object_spec.rb
176
+ - spec/markety/custom_object_spec.rb
233
177
  - spec/markety/lead_key_spec.rb
234
178
  - spec/markety/lead_spec.rb
179
+ - spec/markety/response/get_custom_object_response_spec.rb
235
180
  - spec/markety/response/get_lead_response_spec.rb
236
181
  - spec/markety/response/list_operation_response_spec.rb
182
+ - spec/markety/response/sync_custom_object_response_spec.rb
237
183
  - spec/markety/response/sync_lead_response_spec.rb
238
184
  - spec/spec_helper.rb
239
185
  - spec/support/savon_helper.rb
@@ -249,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
249
195
  requirements:
250
196
  - - ">="
251
197
  - !ruby/object:Gem::Version
252
- version: 1.9.3
198
+ version: 2.0.0
253
199
  required_rubygems_version: !ruby/object:Gem::Requirement
254
200
  requirements:
255
201
  - - ">="
@@ -257,17 +203,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement
257
203
  version: '0'
258
204
  requirements: []
259
205
  rubyforge_project:
260
- rubygems_version: 2.2.2
206
+ rubygems_version: 2.4.5
261
207
  signing_key:
262
208
  specification_version: 4
263
209
  summary: Marketo SOAP API integration
264
210
  test_files:
211
+ - spec/fixtures/custom_objects/get_custom_objects/multiple_custom_objects_found.xml
212
+ - spec/fixtures/custom_objects/get_custom_objects/no_custom_objects_found.xml
213
+ - spec/fixtures/custom_objects/get_custom_objects/one_custom_object_found.xml
214
+ - spec/fixtures/custom_objects/sync_custom_objects/invalid_object_name.xml
215
+ - spec/fixtures/custom_objects/sync_custom_objects/successful_sync.xml
216
+ - spec/fixtures/custom_objects/sync_custom_objects/unknown_attribute.xml
265
217
  - spec/markety/authentication_header_spec.rb
266
218
  - spec/markety/client_spec.rb
219
+ - spec/markety/command/get_custom_object_spec.rb
220
+ - spec/markety/command/sync_custom_object_spec.rb
221
+ - spec/markety/custom_object_spec.rb
267
222
  - spec/markety/lead_key_spec.rb
268
223
  - spec/markety/lead_spec.rb
224
+ - spec/markety/response/get_custom_object_response_spec.rb
269
225
  - spec/markety/response/get_lead_response_spec.rb
270
226
  - spec/markety/response/list_operation_response_spec.rb
227
+ - spec/markety/response/sync_custom_object_response_spec.rb
271
228
  - spec/markety/response/sync_lead_response_spec.rb
272
229
  - spec/spec_helper.rb
273
230
  - spec/support/savon_helper.rb