marketingcloudsdk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +26 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +92 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE.md +13 -0
  7. data/README.md +130 -0
  8. data/Rakefile +1 -0
  9. data/lib/marketingcloudsdk.rb +74 -0
  10. data/lib/marketingcloudsdk/client.rb +283 -0
  11. data/lib/marketingcloudsdk/http_request.rb +113 -0
  12. data/lib/marketingcloudsdk/objects.rb +757 -0
  13. data/lib/marketingcloudsdk/rest.rb +122 -0
  14. data/lib/marketingcloudsdk/soap.rb +288 -0
  15. data/lib/marketingcloudsdk/targeting.rb +58 -0
  16. data/lib/marketingcloudsdk/utils.rb +47 -0
  17. data/lib/marketingcloudsdk/version.rb +39 -0
  18. data/lib/new.rb +1240 -0
  19. data/marketingcloudsdk.gemspec +30 -0
  20. data/samples/sample-AddSubscriberToList.rb +56 -0
  21. data/samples/sample-CreateAndStartDataExtensionImport.rb +29 -0
  22. data/samples/sample-CreateAndStartListImport.rb +27 -0
  23. data/samples/sample-CreateContentAreas.rb +48 -0
  24. data/samples/sample-CreateDataExtensions.rb +54 -0
  25. data/samples/sample-CreateProfileAttributes.rb +48 -0
  26. data/samples/sample-SendEmailToDataExtension.rb +23 -0
  27. data/samples/sample-SendEmailToList.rb +23 -0
  28. data/samples/sample-SendTriggeredSends.rb +30 -0
  29. data/samples/sample-bounceevent.rb +70 -0
  30. data/samples/sample-campaign.rb +211 -0
  31. data/samples/sample-clickevent.rb +71 -0
  32. data/samples/sample-contentarea.rb +122 -0
  33. data/samples/sample-dataextension.rb +209 -0
  34. data/samples/sample-directverb.rb +55 -0
  35. data/samples/sample-email.rb +122 -0
  36. data/samples/sample-email.senddefinition.rb +134 -0
  37. data/samples/sample-folder.rb +143 -0
  38. data/samples/sample-import.rb +104 -0
  39. data/samples/sample-list.rb +105 -0
  40. data/samples/sample-list.subscriber.rb +97 -0
  41. data/samples/sample-openevent.rb +70 -0
  42. data/samples/sample-profileattribute.rb +57 -0
  43. data/samples/sample-sentevent.rb +70 -0
  44. data/samples/sample-subscriber.rb +136 -0
  45. data/samples/sample-triggeredsend.rb +130 -0
  46. data/samples/sample-unsubevent.rb +72 -0
  47. data/samples/sample_helper.rb.template +8 -0
  48. data/spec/client_spec.rb +210 -0
  49. data/spec/helper_funcs_spec.rb +11 -0
  50. data/spec/http_request_spec.rb +36 -0
  51. data/spec/objects_helper_spec.rb +32 -0
  52. data/spec/objects_spec.rb +484 -0
  53. data/spec/rest_spec.rb +48 -0
  54. data/spec/soap_spec.rb +140 -0
  55. data/spec/spec_helper.rb +14 -0
  56. data/spec/targeting_spec.rb +39 -0
  57. metadata +260 -0
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ describe MarketingCloudSDK::Rest do
3
+ let(:client) { MarketingCloudSDK::Client.new }
4
+
5
+ subject { client }
6
+ it { should respond_to(:rest_get) }
7
+ it { should respond_to(:rest_client) }
8
+ it { should respond_to(:complete_url) }
9
+
10
+ describe '#complete_url' do
11
+ it 'raises an exception when identities are missing' do
12
+ expect { client.complete_url "some_url/%{parent}/%{child}", {parent: 1} }.to raise_exception 'key{child} not found to complete some_url/%{parent}/%{child}'
13
+ end
14
+
15
+ it 'returns url with all identities replaced' do
16
+ expect( client.complete_url "some_url/%{parent}/%{child}", {:parent => 1, :child => 2} ).to eq 'some_url/1/2'
17
+ end
18
+
19
+ it 'handles identities with string keys' do
20
+ expect( client.complete_url "some_url/%{parent}/%{child}", {'parent'=> 1, 'child'=> 2} ).to eq 'some_url/1/2'
21
+ end
22
+
23
+ it 'treats empty values as optional keys' do
24
+ expect( client.complete_url "some_url/%{parent}/%{child}", {'parent'=> 1, 'child'=> ''} ).to eq 'some_url/1'
25
+ end
26
+
27
+ it 'handles extra keys' do
28
+ expect( client.complete_url "some_url/%{parent}/%{child}", {'parent'=> 1, 'child'=> '', 'other' => 1} ).to eq 'some_url/1'
29
+ end
30
+ end
31
+
32
+ describe '#get_url_properties' do
33
+ it 'returns hash of properties in format string' do
34
+ expect( client.get_url_properties "some_url/%{parent}/%{child}", {'parent'=> 1, 'child'=> '', 'other' => 1} ).to eq({'parent' => 1, 'child' => ''})
35
+ end
36
+
37
+ it 'handles missing url properties' do
38
+ expect( client.get_url_properties "some_url/%{parent}/%{child}", {'parent'=> 1, 'other' => 1} ).to eq({'parent' => 1})
39
+ end
40
+
41
+ it 'filters url properties from properties leaving query params' do
42
+ properties = {'parent'=> 1, 'other' => 1}
43
+ client.get_url_properties "some_url/%{parent}/%{child}", properties
44
+ expect(properties).to eq 'other' => 1
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,140 @@
1
+ require 'spec_helper'
2
+
3
+ describe MarketingCloudSDK::Soap do
4
+
5
+ let(:client) { MarketingCloudSDK::Client.new }
6
+
7
+ subject { client }
8
+
9
+ it { should respond_to(:soap_get) }
10
+ it { should respond_to(:soap_post) }
11
+ it { should respond_to(:soap_patch) }
12
+ it { should respond_to(:soap_delete) }
13
+ it { should respond_to(:soap_describe) }
14
+
15
+ it { should respond_to(:header) }
16
+ it { should_not respond_to(:header=) }
17
+
18
+ it { should respond_to(:wsdl) }
19
+ it { should respond_to(:wsdl=) }
20
+
21
+ it { should respond_to(:endpoint) }
22
+ it { should_not respond_to(:endpoint=) }
23
+
24
+ it { should respond_to(:soap_client) }
25
+
26
+ it { should respond_to(:package_name) }
27
+ it { should respond_to(:package_name=) }
28
+
29
+ it { should respond_to(:package_folders) }
30
+ it { should respond_to(:package_folders=) }
31
+
32
+ its(:debug) { should be_false }
33
+ its(:wsdl) { should eq 'https://webservice.exacttarget.com/etframework.wsdl' }
34
+
35
+ describe '#header' do
36
+ it 'raises an exception when internal_token is missing' do
37
+ expect { client.header }.to raise_exception 'Require legacy token for soap header'
38
+ end
39
+
40
+ it 'returns header hash' do
41
+ client.internal_token = 'innerspace'
42
+ expect(client.header).to eq(
43
+ {
44
+ 'oAuth' => { 'oAuthToken' => 'innerspace' },
45
+ :attributes! => {
46
+ 'oAuth' => { 'xmlns' => 'http://exacttarget.com' }
47
+ }
48
+ }
49
+ )
50
+ end
51
+ end
52
+
53
+ describe 'requests' do
54
+ subject {
55
+ client.stub(:soap_request) do |action, message|
56
+ [action, message]
57
+ end
58
+ client
59
+ }
60
+
61
+ it '#soap_describe calls client with :describe and DescribeRequests message' do
62
+ expect(subject.soap_describe 'Subscriber').to eq([:describe,
63
+ {'DescribeRequests' => {'ObjectDefinitionRequest' => {'ObjectType' => 'Subscriber' }}}])
64
+ end
65
+
66
+ describe '#soap_post' do
67
+ subject {
68
+ client.stub(:soap_request) do |action, message|
69
+ [action, message]
70
+ end
71
+
72
+ client.stub_chain(:soap_describe,:editable)
73
+ .and_return(['First Name', 'Last Name', 'Gender'])
74
+ client
75
+ }
76
+ it 'formats soap :create message for single object' do
77
+ expect(subject.soap_post 'Subscriber', 'EmailAddress' => 'test@fuelsdk.com' ).to eq([:create,
78
+ {
79
+ 'Objects' => [{'EmailAddress' => 'test@fuelsdk.com'}],
80
+ :attributes! => {'Objects' => {'xsi:type' => ('tns:Subscriber')}}
81
+ }])
82
+ end
83
+
84
+ it 'formats soap :create message for multiple objects' do
85
+ expect(subject.soap_post 'Subscriber', [{'EmailAddress' => 'first@fuelsdk.com'}, {'EmailAddress' => 'second@fuelsdk.com'}] ).to eq([:create,
86
+ {
87
+ 'Objects' => [{'EmailAddress' => 'first@fuelsdk.com'}, {'EmailAddress' => 'second@fuelsdk.com'}],
88
+ :attributes! => {'Objects' => {'xsi:type' => ('tns:Subscriber')}}
89
+ }])
90
+ end
91
+
92
+ it 'formats soap :create message for single object with an attribute' do
93
+ expect(subject.soap_post 'Subscriber', {'EmailAddress' => 'test@fuelsdk.com', 'Attributes'=> [{'Name'=>'First Name', 'Value'=>'first'}]}).to eq([:create,
94
+ {
95
+ 'Objects' => [{
96
+ 'EmailAddress' => 'test@fuelsdk.com',
97
+ 'Attributes' => [{'Name' => 'First Name', 'Value' => 'first'}],
98
+ }],
99
+ :attributes! => {'Objects' => {'xsi:type' => ('tns:Subscriber')}}
100
+ }])
101
+ end
102
+
103
+ it 'formats soap :create message for single object with multiple attributes' do
104
+ expect(subject.soap_post 'Subscriber', {'EmailAddress' => 'test@fuelsdk.com',
105
+ 'Attributes'=> [{'Name'=>'First Name', 'Value'=>'first'}, {'Name'=>'Last Name', 'Value'=>'subscriber'}]}).to eq([:create,
106
+ {
107
+ 'Objects' => [{
108
+ 'EmailAddress' => 'test@fuelsdk.com',
109
+ 'Attributes' => [
110
+ {'Name' => 'First Name', 'Value' => 'first'},
111
+ {'Name' => 'Last Name', 'Value' => 'subscriber'},
112
+ ],
113
+ }],
114
+ :attributes! => {'Objects' => {'xsi:type' => ('tns:Subscriber')}}
115
+ }])
116
+ end
117
+
118
+ it 'formats soap :create message for multiple objects with multiple attributes' do
119
+ expect(subject.soap_post 'Subscriber', [{'EmailAddress' => 'first@fuelsdk.com', 'Attributes'=> [{'Name'=>'First Name', 'Value'=>'first'}, {'Name'=>'Last Name', 'Value'=>'subscriber'}]},
120
+ {'EmailAddress' => 'second@fuelsdk.com', 'Attributes'=> [{'Name'=>'First Name', 'Value'=>'second'}, {'Name'=>'Last Name', 'Value'=>'subscriber'}]}]).to eq([:create,
121
+ {
122
+ 'Objects' => [
123
+ {'EmailAddress' => 'first@fuelsdk.com',
124
+ 'Attributes' => [
125
+ {'Name' => 'First Name', 'Value' => 'first'},
126
+ {'Name' => 'Last Name', 'Value' => 'subscriber'},
127
+ ]
128
+ },
129
+ {'EmailAddress' => 'second@fuelsdk.com',
130
+ 'Attributes' => [
131
+ {'Name' => 'First Name', 'Value' => 'second'},
132
+ {'Name' => 'Last Name', 'Value' => 'subscriber'},
133
+ ]
134
+ }],
135
+ :attributes! => {'Objects' => {'xsi:type' => ('tns:Subscriber')}}
136
+ }])
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,14 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'marketingcloudsdk'
5
+
6
+ RSpec.configure do |config|
7
+ config.mock_with :rspec
8
+
9
+ # Use color in STDOUT
10
+ config.color_enabled = true
11
+
12
+ # Use the specified formatter
13
+ config.formatter = :documentation
14
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe MarketingCloudSDK::Targeting do
4
+
5
+ subject { Class.new.new.extend(MarketingCloudSDK::Targeting) }
6
+
7
+ it { should respond_to(:endpoint) }
8
+ it { should_not respond_to(:endpoint=) }
9
+ it { should respond_to(:determine_stack) }
10
+ it { should respond_to(:get) }
11
+ it { should respond_to(:post) }
12
+ it { should respond_to(:patch) }
13
+ it { should respond_to(:delete) }
14
+ it { should respond_to(:access_token) }
15
+
16
+ describe '#determine_stack' do
17
+ let(:client) { c = Class.new.new.extend(MarketingCloudSDK::Targeting)
18
+ c.stub(:access_token).and_return('open_sesame')
19
+ c.stub(:get)
20
+ .with('https://www.exacttargetapis.com/platform/v1/endpoints/soap',{'params'=>{'access_token'=>'open_sesame'}})
21
+ .and_return({'url' => 'S#.authentication.target'})
22
+ c
23
+ }
24
+ it 'sets @endpoint' do
25
+ expect(client.send(:determine_stack)).to eq 'S#.authentication.target'
26
+ end
27
+ end
28
+
29
+ describe '#endpoint' do
30
+ let(:client) { c = Class.new.new.extend(MarketingCloudSDK::Targeting)
31
+ c.stub(:get).and_return({'url' => 'S#.authentication.target'})
32
+ c
33
+ }
34
+
35
+ it 'calls determine_stack to find target' do
36
+ expect(client.endpoint).to eq 'S#.authentication.target'
37
+ end
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,260 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: marketingcloudsdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ashok Magar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: savon
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 2.2.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 2.2.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '1.8'
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: 1.8.1
107
+ type: :runtime
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: '1.8'
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.8.1
117
+ - !ruby/object:Gem::Dependency
118
+ name: jwt
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: '1.0'
124
+ - - '>='
125
+ - !ruby/object:Gem::Version
126
+ version: 1.0.0
127
+ type: :runtime
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '1.0'
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: 1.0.0
137
+ description: API wrapper for SOAP and REST API with Salesforce Marketing Cloud (ExactTarget)
138
+ email:
139
+ - amagar@salesforce.com
140
+ executables: []
141
+ extensions: []
142
+ extra_rdoc_files: []
143
+ files:
144
+ - .gitignore
145
+ - Gemfile
146
+ - Gemfile.lock
147
+ - Guardfile
148
+ - LICENSE.md
149
+ - README.md
150
+ - Rakefile
151
+ - lib/marketingcloudsdk.rb
152
+ - lib/marketingcloudsdk/client.rb
153
+ - lib/marketingcloudsdk/http_request.rb
154
+ - lib/marketingcloudsdk/objects.rb
155
+ - lib/marketingcloudsdk/rest.rb
156
+ - lib/marketingcloudsdk/soap.rb
157
+ - lib/marketingcloudsdk/targeting.rb
158
+ - lib/marketingcloudsdk/utils.rb
159
+ - lib/marketingcloudsdk/version.rb
160
+ - lib/new.rb
161
+ - marketingcloudsdk.gemspec
162
+ - samples/sample-AddSubscriberToList.rb
163
+ - samples/sample-CreateAndStartDataExtensionImport.rb
164
+ - samples/sample-CreateAndStartListImport.rb
165
+ - samples/sample-CreateContentAreas.rb
166
+ - samples/sample-CreateDataExtensions.rb
167
+ - samples/sample-CreateProfileAttributes.rb
168
+ - samples/sample-SendEmailToDataExtension.rb
169
+ - samples/sample-SendEmailToList.rb
170
+ - samples/sample-SendTriggeredSends.rb
171
+ - samples/sample-bounceevent.rb
172
+ - samples/sample-campaign.rb
173
+ - samples/sample-clickevent.rb
174
+ - samples/sample-contentarea.rb
175
+ - samples/sample-dataextension.rb
176
+ - samples/sample-directverb.rb
177
+ - samples/sample-email.rb
178
+ - samples/sample-email.senddefinition.rb
179
+ - samples/sample-folder.rb
180
+ - samples/sample-import.rb
181
+ - samples/sample-list.rb
182
+ - samples/sample-list.subscriber.rb
183
+ - samples/sample-openevent.rb
184
+ - samples/sample-profileattribute.rb
185
+ - samples/sample-sentevent.rb
186
+ - samples/sample-subscriber.rb
187
+ - samples/sample-triggeredsend.rb
188
+ - samples/sample-unsubevent.rb
189
+ - samples/sample_helper.rb.template
190
+ - spec/client_spec.rb
191
+ - spec/helper_funcs_spec.rb
192
+ - spec/http_request_spec.rb
193
+ - spec/objects_helper_spec.rb
194
+ - spec/objects_spec.rb
195
+ - spec/rest_spec.rb
196
+ - spec/soap_spec.rb
197
+ - spec/spec_helper.rb
198
+ - spec/targeting_spec.rb
199
+ homepage: https://github.com/ExactTarget/FuelSDK-Ruby
200
+ licenses:
201
+ - ''
202
+ metadata: {}
203
+ post_install_message:
204
+ rdoc_options: []
205
+ require_paths:
206
+ - lib
207
+ required_ruby_version: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - '>='
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ required_rubygems_version: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - '>='
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ requirements: []
218
+ rubyforge_project:
219
+ rubygems_version: 2.0.14.1
220
+ signing_key:
221
+ specification_version: 4
222
+ summary: Fuel Client Library for Ruby
223
+ test_files:
224
+ - samples/sample-AddSubscriberToList.rb
225
+ - samples/sample-CreateAndStartDataExtensionImport.rb
226
+ - samples/sample-CreateAndStartListImport.rb
227
+ - samples/sample-CreateContentAreas.rb
228
+ - samples/sample-CreateDataExtensions.rb
229
+ - samples/sample-CreateProfileAttributes.rb
230
+ - samples/sample-SendEmailToDataExtension.rb
231
+ - samples/sample-SendEmailToList.rb
232
+ - samples/sample-SendTriggeredSends.rb
233
+ - samples/sample-bounceevent.rb
234
+ - samples/sample-campaign.rb
235
+ - samples/sample-clickevent.rb
236
+ - samples/sample-contentarea.rb
237
+ - samples/sample-dataextension.rb
238
+ - samples/sample-directverb.rb
239
+ - samples/sample-email.rb
240
+ - samples/sample-email.senddefinition.rb
241
+ - samples/sample-folder.rb
242
+ - samples/sample-import.rb
243
+ - samples/sample-list.rb
244
+ - samples/sample-list.subscriber.rb
245
+ - samples/sample-openevent.rb
246
+ - samples/sample-profileattribute.rb
247
+ - samples/sample-sentevent.rb
248
+ - samples/sample-subscriber.rb
249
+ - samples/sample-triggeredsend.rb
250
+ - samples/sample-unsubevent.rb
251
+ - samples/sample_helper.rb.template
252
+ - spec/client_spec.rb
253
+ - spec/helper_funcs_spec.rb
254
+ - spec/http_request_spec.rb
255
+ - spec/objects_helper_spec.rb
256
+ - spec/objects_spec.rb
257
+ - spec/rest_spec.rb
258
+ - spec/soap_spec.rb
259
+ - spec/spec_helper.rb
260
+ - spec/targeting_spec.rb