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.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/Gemfile.lock +131 -0
  4. data/README.md +207 -0
  5. data/bin/Gemfile +10 -0
  6. data/bin/auth.json +17 -0
  7. data/bin/main.rb +0 -0
  8. data/bin/process.rbx +541 -0
  9. data/examples/all_lead_changes.rb +119 -0
  10. data/examples/all_leads.rb +249 -0
  11. data/examples/lead_changes_to_ads.rb +63 -0
  12. data/gooddata_marketo.gemspec +24 -0
  13. data/gooddata_marketo_gem.zip +0 -0
  14. data/lib/gooddata_marketo.rb +24 -0
  15. data/lib/gooddata_marketo/adapters/rest.rb +287 -0
  16. data/lib/gooddata_marketo/client.rb +373 -0
  17. data/lib/gooddata_marketo/data/activity_types.rb +104 -0
  18. data/lib/gooddata_marketo/data/reserved_sql_keywords.rb +205 -0
  19. data/lib/gooddata_marketo/helpers/s3.rb +141 -0
  20. data/lib/gooddata_marketo/helpers/stringwizard.rb +32 -0
  21. data/lib/gooddata_marketo/helpers/table.rb +323 -0
  22. data/lib/gooddata_marketo/helpers/webdav.rb +118 -0
  23. data/lib/gooddata_marketo/loads.rb +235 -0
  24. data/lib/gooddata_marketo/models/campaigns.rb +57 -0
  25. data/lib/gooddata_marketo/models/channels.rb +30 -0
  26. data/lib/gooddata_marketo/models/child/activity.rb +104 -0
  27. data/lib/gooddata_marketo/models/child/criteria.rb +17 -0
  28. data/lib/gooddata_marketo/models/child/lead.rb +118 -0
  29. data/lib/gooddata_marketo/models/child/mobj.rb +68 -0
  30. data/lib/gooddata_marketo/models/etl.rb +75 -0
  31. data/lib/gooddata_marketo/models/leads.rb +493 -0
  32. data/lib/gooddata_marketo/models/load.rb +17 -0
  33. data/lib/gooddata_marketo/models/mobjects.rb +121 -0
  34. data/lib/gooddata_marketo/models/streams.rb +137 -0
  35. data/lib/gooddata_marketo/models/tags.rb +35 -0
  36. data/lib/gooddata_marketo/models/validate.rb +46 -0
  37. 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
+