gooddata_marketo 0.0.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 +7 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +131 -0
- data/README.md +207 -0
- data/bin/Gemfile +10 -0
- data/bin/auth.json +17 -0
- data/bin/main.rb +0 -0
- data/bin/process.rbx +541 -0
- data/examples/all_lead_changes.rb +119 -0
- data/examples/all_leads.rb +249 -0
- data/examples/lead_changes_to_ads.rb +63 -0
- data/gooddata_marketo.gemspec +24 -0
- data/gooddata_marketo_gem.zip +0 -0
- data/lib/gooddata_marketo.rb +24 -0
- data/lib/gooddata_marketo/adapters/rest.rb +287 -0
- data/lib/gooddata_marketo/client.rb +373 -0
- data/lib/gooddata_marketo/data/activity_types.rb +104 -0
- data/lib/gooddata_marketo/data/reserved_sql_keywords.rb +205 -0
- data/lib/gooddata_marketo/helpers/s3.rb +141 -0
- data/lib/gooddata_marketo/helpers/stringwizard.rb +32 -0
- data/lib/gooddata_marketo/helpers/table.rb +323 -0
- data/lib/gooddata_marketo/helpers/webdav.rb +118 -0
- data/lib/gooddata_marketo/loads.rb +235 -0
- data/lib/gooddata_marketo/models/campaigns.rb +57 -0
- data/lib/gooddata_marketo/models/channels.rb +30 -0
- data/lib/gooddata_marketo/models/child/activity.rb +104 -0
- data/lib/gooddata_marketo/models/child/criteria.rb +17 -0
- data/lib/gooddata_marketo/models/child/lead.rb +118 -0
- data/lib/gooddata_marketo/models/child/mobj.rb +68 -0
- data/lib/gooddata_marketo/models/etl.rb +75 -0
- data/lib/gooddata_marketo/models/leads.rb +493 -0
- data/lib/gooddata_marketo/models/load.rb +17 -0
- data/lib/gooddata_marketo/models/mobjects.rb +121 -0
- data/lib/gooddata_marketo/models/streams.rb +137 -0
- data/lib/gooddata_marketo/models/tags.rb +35 -0
- data/lib/gooddata_marketo/models/validate.rb +46 -0
- metadata +177 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
|
2
|
+
class ActivityTypes
|
3
|
+
|
4
|
+
attr_accessor :edited
|
5
|
+
attr_accessor :values
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@values = [
|
9
|
+
"Activity Pruning",
|
10
|
+
"Add to List",
|
11
|
+
"Add to Nurture",
|
12
|
+
"Add to Opportunity",
|
13
|
+
"Add to Segment",
|
14
|
+
"Add to SFDC Campaign",
|
15
|
+
"Add to Smart Campaign",
|
16
|
+
"Assign Nurture Content",
|
17
|
+
"Attend Event",
|
18
|
+
"Capture Activity History",
|
19
|
+
"Capture Campaign Membership History",
|
20
|
+
"Capture List Membership History",
|
21
|
+
"Change Account Owner",
|
22
|
+
"Change Attribute Datatype",
|
23
|
+
"Change CRM User",
|
24
|
+
"Change Custom Object",
|
25
|
+
"Change Data Value",
|
26
|
+
"Change Nurture Cadence",
|
27
|
+
"Change Nurture Exhausted",
|
28
|
+
"Change Nurture Track",
|
29
|
+
"Change Owner",
|
30
|
+
"Change Program Data",
|
31
|
+
"Change Revenue Stage",
|
32
|
+
"Change Revenue Stage Manually",
|
33
|
+
"Change Score",
|
34
|
+
"Change Segment",
|
35
|
+
"Change Status in Progression",
|
36
|
+
"Change Status in SFDC Campaign",
|
37
|
+
"Click Email",
|
38
|
+
"Click Link",
|
39
|
+
"Click Sales Email",
|
40
|
+
"Click Shared Link",
|
41
|
+
"Compute Data Value",
|
42
|
+
"Convert Lead",
|
43
|
+
"Create Task",
|
44
|
+
"Decide Test Group Winner",
|
45
|
+
"Delete Lead from SFDC",
|
46
|
+
"Email Bounced",
|
47
|
+
"Email Bounced Soft",
|
48
|
+
"Email Delivered",
|
49
|
+
"Enrich with Data.com",
|
50
|
+
"Field Reparent",
|
51
|
+
"Fill Out Form",
|
52
|
+
"Interesting Moment",
|
53
|
+
"Lead Assigned",
|
54
|
+
"Lead Pruning",
|
55
|
+
"Merge Attributes",
|
56
|
+
"Merge Leads",
|
57
|
+
"New Lead",
|
58
|
+
"New SFDC Opportunity",
|
59
|
+
"Nurture Deploy",
|
60
|
+
"Open Email",
|
61
|
+
"Open Sales Email",
|
62
|
+
"Receive Sales Email",
|
63
|
+
"Received Forward to Friend Email",
|
64
|
+
"Register for Event",
|
65
|
+
"Remove from Flow",
|
66
|
+
"Remove from List",
|
67
|
+
"Remove from Opportunity",
|
68
|
+
"Remove from SFDC Campaign",
|
69
|
+
"Request Campaign",
|
70
|
+
"Resolve Conflicts",
|
71
|
+
"Resolve Ruleset",
|
72
|
+
"Revenue Stage Initial Assignment",
|
73
|
+
"Reward Test Group Variant",
|
74
|
+
"Run Sub-flow",
|
75
|
+
"Sales Email Bounced",
|
76
|
+
"Schedule Test Variants",
|
77
|
+
"Segmentation Approval",
|
78
|
+
"Send Alert",
|
79
|
+
"Send Email",
|
80
|
+
"Send Sales Email",
|
81
|
+
"Sent Forward to Friend Email",
|
82
|
+
"SFDC Activity",
|
83
|
+
"SFDC Activity Updated",
|
84
|
+
"SFDC Merge Leads",
|
85
|
+
"Share Content",
|
86
|
+
"Sync Lead to SFDC",
|
87
|
+
"Sync Lead Updates to SFDC",
|
88
|
+
"Touch Complete",
|
89
|
+
"Unsubscribe Email",
|
90
|
+
"Update Opportunity",
|
91
|
+
"Visit Webpage",
|
92
|
+
"Wait"
|
93
|
+
]
|
94
|
+
end
|
95
|
+
|
96
|
+
def set_types array_types
|
97
|
+
self.edited = true
|
98
|
+
self.values = array_types
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
|
@@ -0,0 +1,205 @@
|
|
1
|
+
|
2
|
+
class ReservedSqlKeywords
|
3
|
+
|
4
|
+
attr_accessor :edited
|
5
|
+
attr_accessor :values
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@values = [
|
9
|
+
'ADD',
|
10
|
+
'EXTERNAL',
|
11
|
+
'PROCEDURE',
|
12
|
+
'ALL',
|
13
|
+
'FETCH',
|
14
|
+
'PUBLIC',
|
15
|
+
'ALTER',
|
16
|
+
'FILE',
|
17
|
+
'RAISERROR',
|
18
|
+
'AND',
|
19
|
+
'FILLFACTOR',
|
20
|
+
'READ',
|
21
|
+
'ANY',
|
22
|
+
'FOR',
|
23
|
+
'READTEXT',
|
24
|
+
'AS',
|
25
|
+
'FOREIGN',
|
26
|
+
'RECONFIGURE',
|
27
|
+
'ASC',
|
28
|
+
'FREETEXT',
|
29
|
+
'REFERENCES',
|
30
|
+
'AUTHORIZATION',
|
31
|
+
'FREETEXTTABLE',
|
32
|
+
'REPLICATION',
|
33
|
+
'BACKUP',
|
34
|
+
'FROM',
|
35
|
+
'RESTORE',
|
36
|
+
'BEGIN',
|
37
|
+
'FULL',
|
38
|
+
'RESTRICT',
|
39
|
+
'BETWEEN',
|
40
|
+
'FUNCTION',
|
41
|
+
'RETURN',
|
42
|
+
'BREAK',
|
43
|
+
'GOTO',
|
44
|
+
'REVERT',
|
45
|
+
'BROWSE',
|
46
|
+
'GRANT',
|
47
|
+
'REVOKE',
|
48
|
+
'BULK',
|
49
|
+
'GROUP',
|
50
|
+
'RIGHT',
|
51
|
+
'BY',
|
52
|
+
'HAVING',
|
53
|
+
'ROLLBACK',
|
54
|
+
'CASCADE',
|
55
|
+
'HOLDLOCK',
|
56
|
+
'ROWCOUNT',
|
57
|
+
'CASE',
|
58
|
+
'IDENTITY',
|
59
|
+
'ROWGUIDCOL',
|
60
|
+
'CHECK',
|
61
|
+
'IDENTITY_INSERT',
|
62
|
+
'RULE',
|
63
|
+
'CHECKPOINT',
|
64
|
+
'IDENTITYCOL',
|
65
|
+
'SAVE',
|
66
|
+
'CLOSE',
|
67
|
+
'IF',
|
68
|
+
'SCHEMA',
|
69
|
+
'CLUSTERED',
|
70
|
+
'IN',
|
71
|
+
'SECURITYAUDIT',
|
72
|
+
'COALESCE',
|
73
|
+
'INDEX',
|
74
|
+
'SELECT',
|
75
|
+
'COLLATE',
|
76
|
+
'INNER',
|
77
|
+
'SEMANTICKEYPHRASETABLE',
|
78
|
+
'COLUMN',
|
79
|
+
'INSERT',
|
80
|
+
'SEMANTICSIMILARITYDETAILSTABLE',
|
81
|
+
'COMMIT',
|
82
|
+
'INTERSECT',
|
83
|
+
'SEMANTICSIMILARITYTABLE',
|
84
|
+
'COMPUTE',
|
85
|
+
'INTO',
|
86
|
+
'SESSION_USER',
|
87
|
+
'CONSTRAINT',
|
88
|
+
'IS',
|
89
|
+
'SET',
|
90
|
+
'CONTAINS',
|
91
|
+
'JOIN',
|
92
|
+
'SETUSER',
|
93
|
+
'CONTAINSTABLE',
|
94
|
+
'KEY',
|
95
|
+
'SHUTDOWN',
|
96
|
+
'CONTINUE',
|
97
|
+
'KILL',
|
98
|
+
'SOME',
|
99
|
+
'CONVERT',
|
100
|
+
'LEFT',
|
101
|
+
'STATISTICS',
|
102
|
+
'CREATE',
|
103
|
+
'LIKE',
|
104
|
+
'SYSTEM_USER',
|
105
|
+
'CROSS',
|
106
|
+
'LINENO',
|
107
|
+
'TABLE',
|
108
|
+
'CURRENT',
|
109
|
+
'LOAD',
|
110
|
+
'TABLESAMPLE',
|
111
|
+
'CURRENT_DATE',
|
112
|
+
'MERGE',
|
113
|
+
'TEXTSIZE',
|
114
|
+
'CURRENT_TIME',
|
115
|
+
'NATIONAL',
|
116
|
+
'THEN',
|
117
|
+
'CURRENT_TIMESTAMP',
|
118
|
+
'NOCHECK',
|
119
|
+
'TO',
|
120
|
+
'CURRENT_USER',
|
121
|
+
'NONCLUSTERED',
|
122
|
+
'TOP',
|
123
|
+
'CURSOR',
|
124
|
+
'NOT',
|
125
|
+
'TRAN',
|
126
|
+
'DATABASE',
|
127
|
+
'NULL',
|
128
|
+
'TRANSACTION',
|
129
|
+
'DBCC',
|
130
|
+
'NULLIF',
|
131
|
+
'TRIGGER',
|
132
|
+
'DEALLOCATE',
|
133
|
+
'OF',
|
134
|
+
'TRUNCATE',
|
135
|
+
'DECLARE',
|
136
|
+
'OFF',
|
137
|
+
'TRY_CONVERT',
|
138
|
+
'DEFAULT',
|
139
|
+
'OFFSETS',
|
140
|
+
'TSEQUAL',
|
141
|
+
'DELETE',
|
142
|
+
'ON',
|
143
|
+
'UNION',
|
144
|
+
'DENY',
|
145
|
+
'OPEN',
|
146
|
+
'UNIQUE',
|
147
|
+
'DESC',
|
148
|
+
'OPENDATASOURCE',
|
149
|
+
'UNPIVOT',
|
150
|
+
'DISK',
|
151
|
+
'OPENQUERY',
|
152
|
+
'UPDATE',
|
153
|
+
'DISTINCT',
|
154
|
+
'OPENROWSET',
|
155
|
+
'UPDATETEXT',
|
156
|
+
'DISTRIBUTED',
|
157
|
+
'OPENXML',
|
158
|
+
'USE',
|
159
|
+
'DOUBLE',
|
160
|
+
'OPTION',
|
161
|
+
'USER',
|
162
|
+
'DROP',
|
163
|
+
'OR',
|
164
|
+
'VALUES',
|
165
|
+
'DUMP',
|
166
|
+
'ORDER',
|
167
|
+
'VARYING',
|
168
|
+
'ELSE',
|
169
|
+
'OUTER',
|
170
|
+
'VIEW',
|
171
|
+
'END',
|
172
|
+
'OVER',
|
173
|
+
'WAITFOR',
|
174
|
+
'ERRLVL',
|
175
|
+
'PERCENT',
|
176
|
+
'WHEN',
|
177
|
+
'ESCAPE',
|
178
|
+
'PIVOT',
|
179
|
+
'WHERE',
|
180
|
+
'EXCEPT',
|
181
|
+
'PLAN',
|
182
|
+
'WHILE',
|
183
|
+
'EXEC',
|
184
|
+
'PRECISION',
|
185
|
+
'WITH',
|
186
|
+
'EXECUTE',
|
187
|
+
'PRIMARY',
|
188
|
+
'WITHIN GROUP',
|
189
|
+
'EXISTS',
|
190
|
+
'PRINT',
|
191
|
+
'WRITETEXT',
|
192
|
+
'EXIT',
|
193
|
+
'PROC'
|
194
|
+
]
|
195
|
+
end
|
196
|
+
|
197
|
+
def set_types array_types
|
198
|
+
self.edited = true
|
199
|
+
self.values = array_types
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
class S3Helper
|
5
|
+
|
6
|
+
attr_accessor :bucket_name
|
7
|
+
attr_accessor :bucket
|
8
|
+
|
9
|
+
def initialize config = {}
|
10
|
+
|
11
|
+
public_key = config[:public_key]
|
12
|
+
private_key = config[:private_key] || config[:secret_key]
|
13
|
+
self.bucket_name = config[:bucket] || 'marketo_connector'
|
14
|
+
|
15
|
+
AWS.config(:access_key_id => public_key, :secret_access_key => private_key)
|
16
|
+
|
17
|
+
@s3 = AWS::S3::Client.new(region: 'us-east-1')
|
18
|
+
|
19
|
+
bucket_exists = @s3.list_buckets.include? @bucket_name
|
20
|
+
|
21
|
+
if bucket_exists == false
|
22
|
+
bucket = @s3.create_bucket(:bucket_name => @bucket_name)
|
23
|
+
else
|
24
|
+
bucket = bucket_exists
|
25
|
+
end
|
26
|
+
|
27
|
+
raise 'ERROR! :public_key, :private_key must be passed for configuration.' unless public_key && private_key
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def test
|
32
|
+
begin
|
33
|
+
self.exists? 'tmp_dumb_file'
|
34
|
+
puts "#{Time.now} => SETUP: Connect to AWS S3 Bucket:#{self.bucket_name}...success!" if GoodDataMarketo.logging
|
35
|
+
true
|
36
|
+
rescue
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def upload file
|
42
|
+
puts "#{Time.now} => Uploading:S3_Bucket#{@bucket_name}: \"#{file}\"" if GoodDataMarketo.logging
|
43
|
+
resp = @s3.put_object(
|
44
|
+
data: IO.read(file),
|
45
|
+
bucket_name: @bucket_name,
|
46
|
+
key: file
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def download file
|
51
|
+
begin
|
52
|
+
puts "#{Time.now} => Downloading:S3_Bucket#{@bucket_name}: \"#{file}\"" if GoodDataMarketo.logging
|
53
|
+
resp = @s3.get_object(bucket_name: @bucket_name, key:file)
|
54
|
+
resp[:data]
|
55
|
+
rescue
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_config config = {}
|
61
|
+
|
62
|
+
file = config[:file] || 'marketo_connector_config.json'
|
63
|
+
|
64
|
+
if self.exists? file
|
65
|
+
json = JSON.parse(self.download(file), :symbolize_names => true)
|
66
|
+
|
67
|
+
File.open(file,'w'){ |f| JSON.dump(json, f) }
|
68
|
+
|
69
|
+
self.download(file)
|
70
|
+
|
71
|
+
json
|
72
|
+
|
73
|
+
else
|
74
|
+
|
75
|
+
json = {
|
76
|
+
:updated => Time.now.to_s,
|
77
|
+
:initial_load_get_multiple => false,
|
78
|
+
:initial_load_get_changes => false
|
79
|
+
}
|
80
|
+
|
81
|
+
File.open(file,'w'){ |f| JSON.dump(json, f) }
|
82
|
+
|
83
|
+
self.upload(file)
|
84
|
+
|
85
|
+
json
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
def set_config config = {}
|
92
|
+
|
93
|
+
if config[:file]
|
94
|
+
file = config.delete(:file)
|
95
|
+
else
|
96
|
+
file = 'marketo_connector_config.json'
|
97
|
+
end
|
98
|
+
|
99
|
+
if self.exists? file
|
100
|
+
json = JSON.parse(self.download(file), :symbolize_names => true)
|
101
|
+
else
|
102
|
+
json = Hash.new
|
103
|
+
end
|
104
|
+
|
105
|
+
new_json = json.merge(config)
|
106
|
+
|
107
|
+
new_json[:updated] = Time.now.to_s
|
108
|
+
|
109
|
+
File.open(file,'w'){ |f| JSON.dump(new_json, f) }
|
110
|
+
|
111
|
+
self.upload(file)
|
112
|
+
|
113
|
+
new_json
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
def latest_config
|
118
|
+
if File.exists?('marketo_connector_config.json')
|
119
|
+
File.delete('marketo_connector_config.json')
|
120
|
+
end
|
121
|
+
self.download('marketo_connector_config.json')
|
122
|
+
end
|
123
|
+
|
124
|
+
def exists? file
|
125
|
+
begin
|
126
|
+
@s3.get_object(bucket_name: @bucket_name, key:file)
|
127
|
+
true
|
128
|
+
rescue AWS::S3::Errors::NoSuchKey
|
129
|
+
false
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
alias :include? :exists?
|
134
|
+
|
135
|
+
def delete file
|
136
|
+
@s3.delete_object(bucket_name: @bucket_name, key: file)
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
end
|
141
|
+
|