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,17 @@
|
|
1
|
+
class GoodDataMarketo::LoadFile
|
2
|
+
|
3
|
+
attr_accessor :name
|
4
|
+
attr_accessor :method
|
5
|
+
attr_accessor :type
|
6
|
+
attr_accessor :arguments
|
7
|
+
|
8
|
+
def initialize config = {}
|
9
|
+
@name = config[:name]
|
10
|
+
@type = config[:type]
|
11
|
+
@method = config[:method]
|
12
|
+
@arguments = {
|
13
|
+
:ids => config[:ids] || config[:values],
|
14
|
+
:type => config[:type]
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# http://developers.marketo.com/documentation/soap/getmobjects/
|
3
|
+
require 'gooddata_marketo/models/child/criteria'
|
4
|
+
require 'gooddata_marketo/models/child/mobj'
|
5
|
+
|
6
|
+
class GoodDataMarketo::MObjects
|
7
|
+
|
8
|
+
attr_reader :client
|
9
|
+
|
10
|
+
def initialize config = {}
|
11
|
+
|
12
|
+
@obj_criteria_list = []
|
13
|
+
@client = config[:client]
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def get config = {} # http://developers.marketo.com/documentation/soap/getcampaignsforsource/
|
18
|
+
|
19
|
+
# EXAMPLE CRITERIA
|
20
|
+
# criteria = {
|
21
|
+
# :attr_name => "Id", # See the types of content it can search above.
|
22
|
+
# :comparison => "LE",
|
23
|
+
# :attr_value => "1010"
|
24
|
+
# }
|
25
|
+
|
26
|
+
# EXAMPLE ASSOCIATED OBJECT
|
27
|
+
# # m_associated_object = {
|
28
|
+
# :m_obj_type => '',
|
29
|
+
# :id=> '',
|
30
|
+
# :external_key => '' <-- Optional
|
31
|
+
# }
|
32
|
+
|
33
|
+
# EXAMPLE CRITERIA COMPARISONS
|
34
|
+
# EQ - Equals
|
35
|
+
# NE - Not Equals
|
36
|
+
# LT - Less Than
|
37
|
+
# LE - Less Than or Equals
|
38
|
+
# GT - Greater Than
|
39
|
+
# GE - Greater Than or Equals
|
40
|
+
|
41
|
+
# ACCEPTED ATTRIBUTE VALUE ITEMS
|
42
|
+
# Name: Name of the MObject
|
43
|
+
# Role: The role associated with an OpportunityPersonRole object
|
44
|
+
# Type: The type of an Opportunity object
|
45
|
+
# Stage:- The stage of an Opportunity object
|
46
|
+
# CRM Id: the CRM Id could refer to the Id of the Salesforce campaign connected to a Marketo program. Note: The SFDC Campaign ID needs to be the 18-digit ID.
|
47
|
+
# Created At: Equals, not equals, less than, less than or equal to, greater than, greater than or equal to
|
48
|
+
# Two “created dates” can be specified to create a date range
|
49
|
+
# Updated At or Tag Type (only one can be specified): Equals, not equals, less than, less than or equal to, greater than, greater than or equal to
|
50
|
+
# Two “created dates” can be specified to create a date range
|
51
|
+
# Tag Value: (Only one can be specified)
|
52
|
+
# Workspace Name: (only one can be specified)
|
53
|
+
# Workspace Id: (only one can be specified)
|
54
|
+
# Include Archive: Applicable only with Program MObject. Set it to true if you wish to include archived programs.
|
55
|
+
|
56
|
+
# AVAILABLE TYPES
|
57
|
+
# Program
|
58
|
+
# OpportunityPersonRole
|
59
|
+
# Opportunity
|
60
|
+
|
61
|
+
type = config[:type] || "Program"
|
62
|
+
request = { :type => type }
|
63
|
+
|
64
|
+
criteria = config[:criteria] || @obj_criteria_list
|
65
|
+
request[:m_obj_criteria_list] = criteria if criteria
|
66
|
+
associate = config[:association] || config[:m_obj_association] || config[:associate]
|
67
|
+
|
68
|
+
if associate
|
69
|
+
request[:m_obj_association_list] = Hash.new
|
70
|
+
request[:m_obj_association_list][:m_obj_association] = associate
|
71
|
+
end
|
72
|
+
|
73
|
+
# This field is optional and only present during `type => 'Program'` calls.
|
74
|
+
if type == "Program"
|
75
|
+
request[:include_details] = config[:include_details].to_s || "false"
|
76
|
+
end
|
77
|
+
|
78
|
+
c = client.stream(:get_m_objects, request)
|
79
|
+
|
80
|
+
mobjects_from_call = []
|
81
|
+
c.storage.each do |request|
|
82
|
+
request[:m_object_list][:m_object].each do |mobj|
|
83
|
+
m = GoodDataMarketo::MObject.new mobj
|
84
|
+
mobjects_from_call << m
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
binding.pry
|
89
|
+
mobjects_from_call
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
def add_criteria name, value, comparison
|
94
|
+
|
95
|
+
obj = {}
|
96
|
+
obj[:m_obj_criteria] = {
|
97
|
+
:attr_name => name.to_s,
|
98
|
+
:comparison => comparison.to_s,
|
99
|
+
:attr_value => value.to_s
|
100
|
+
}
|
101
|
+
|
102
|
+
@obj_criteria_list << obj
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
def criteria
|
107
|
+
@obj_criteria_list
|
108
|
+
end
|
109
|
+
|
110
|
+
def remove_criteria query
|
111
|
+
match = @obj_criteria_list.find {|item| item[:m_obj_criteria][:attr_name] == query }
|
112
|
+
@obj_criteria_list.delete(match)
|
113
|
+
end
|
114
|
+
|
115
|
+
alias :remove :remove_criteria
|
116
|
+
|
117
|
+
alias :add :add_criteria
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
|
4
|
+
# http://developers.marketo.com/documentation/soap/stream-position/
|
5
|
+
require 'timeout'
|
6
|
+
require 'date'
|
7
|
+
|
8
|
+
class GoodDataMarketo::Stream
|
9
|
+
|
10
|
+
attr_reader :client
|
11
|
+
|
12
|
+
def initialize(web_method, request, config = {})
|
13
|
+
|
14
|
+
def start_stream(web_method, request, config)
|
15
|
+
|
16
|
+
@timer_start = Time.now
|
17
|
+
puts "#{@timer_start} => Start Streaming:#{web_method}" if GoodDataMarketo.logging
|
18
|
+
|
19
|
+
@client = config[:client]
|
20
|
+
@storage = []
|
21
|
+
|
22
|
+
# Make an initial call to determine what type of stream Marketo will respond with. This is based on the configurations in the initial request.
|
23
|
+
initialized_stream = @client.call(web_method, request)
|
24
|
+
raise "ERROR: No response from Marketo based on query: #{request}" unless initialized_stream
|
25
|
+
|
26
|
+
begin
|
27
|
+
|
28
|
+
# Timeout.timeout(config[:timeout] || 100){
|
29
|
+
@storage << initialized_stream.to_json
|
30
|
+
# }
|
31
|
+
|
32
|
+
if initialized_stream[:new_stream_position].is_a? String
|
33
|
+
@stream_id = initialized_stream[:new_stream_position]
|
34
|
+
@stream_id_monitor = true
|
35
|
+
@offset_monitor = false
|
36
|
+
else
|
37
|
+
initialized_stream.delete(:start_position)
|
38
|
+
@offset_monitor = true
|
39
|
+
@stream_id_monitor = false
|
40
|
+
@offset = initialized_stream[:new_start_position][:offset]
|
41
|
+
end
|
42
|
+
|
43
|
+
@count = initialized_stream[:remaining_count].to_i
|
44
|
+
|
45
|
+
puts "#{Time.now} => Stream:#{web_method}:#{@count} remain." if GoodDataMarketo.logging
|
46
|
+
|
47
|
+
rescue Timeout::Error => e
|
48
|
+
client.load.log('TIMEOUT') if client.load
|
49
|
+
puts e if GoodDataMarketo.logging
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
start_stream(web_method, request, config)
|
55
|
+
|
56
|
+
@timeouts = 0
|
57
|
+
# Begin a loop to iterate by offset or stream id depending on the stream response from Marketo.
|
58
|
+
def next_stream_request web_method, request
|
59
|
+
|
60
|
+
begin
|
61
|
+
|
62
|
+
new_request = {}
|
63
|
+
request = new_request.merge(request)
|
64
|
+
|
65
|
+
if @stream_id
|
66
|
+
request[:stream_position] = @stream_id
|
67
|
+
end
|
68
|
+
|
69
|
+
if @count < 1000
|
70
|
+
request[:batch_size] = @count.to_s
|
71
|
+
end
|
72
|
+
|
73
|
+
chunk_from_stream = @client.call(web_method, request)
|
74
|
+
|
75
|
+
@storage << chunk_from_stream.to_json
|
76
|
+
|
77
|
+
# FOR GET LEAD ACTIVITIES. The return count and remaining count are not stacked. Request 100 and it says 8 remaining, request a batch of 8 and it says 100 remaining. No stream id.
|
78
|
+
if chunk_from_stream[:return_count]
|
79
|
+
@count = @count - chunk_from_stream[:return_count].to_i
|
80
|
+
else
|
81
|
+
@count = chunk_from_stream[:remaining_count].to_i
|
82
|
+
end
|
83
|
+
|
84
|
+
puts "#{Time.now} => Stream:#{web_method}:#{@count} remain." if GoodDataMarketo.logging
|
85
|
+
|
86
|
+
if chunk_from_stream[:new_stream_position].is_a? String
|
87
|
+
@stream_id = chunk_from_stream[:new_stream_position]
|
88
|
+
@stream_id_monitor = true
|
89
|
+
@offset_monitor = false
|
90
|
+
else
|
91
|
+
@offset_monitor = true
|
92
|
+
@stream_id_monitor = false
|
93
|
+
@offset = chunk_from_stream[:new_start_position][:offset]
|
94
|
+
|
95
|
+
# Update Request
|
96
|
+
request[:start_position] = {
|
97
|
+
:offset => @offset
|
98
|
+
}
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
rescue Error => e
|
103
|
+
puts e if GoodDataMarketo.logging
|
104
|
+
retry if @timeouts < 3
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
while @count > 0
|
111
|
+
next_stream_request web_method, request
|
112
|
+
end
|
113
|
+
|
114
|
+
@timer_end = Time.now
|
115
|
+
puts "#{@timer_end} => End Streaming: #{web_method}" if GoodDataMarketo.logging
|
116
|
+
puts "#{Time.now} => Stream duration: #{((@timer_end - @timer_start)/60).round} minutes." if GoodDataMarketo.logging
|
117
|
+
|
118
|
+
storage_index = 0
|
119
|
+
@storage.map! { |m|
|
120
|
+
storage_index += 1
|
121
|
+
puts "#{Time.now} => Hashing streams in storage: #{storage_index}" if GoodDataMarketo.logging
|
122
|
+
JSON.parse(m, :symbolize_names => true)
|
123
|
+
}
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
def storage
|
128
|
+
@storage
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
class GoodDataMarketo::SafeStream
|
134
|
+
def initialize stream
|
135
|
+
@stream = stream
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# http://developers.marketo.com/documentation/soap/gettags/
|
4
|
+
|
5
|
+
class GoodDataMarketo::Client
|
6
|
+
|
7
|
+
attr_reader :client
|
8
|
+
|
9
|
+
def tags config = {} # http://developers.marketo.com/documentation/soap/gettags/
|
10
|
+
|
11
|
+
values = config[:values] || config[:value] || config[:lead]
|
12
|
+
values = [values] if values.is_a? String
|
13
|
+
|
14
|
+
if config[:type]
|
15
|
+
request = {
|
16
|
+
:tag_list => {
|
17
|
+
:tag => {
|
18
|
+
:type => config[:type],
|
19
|
+
:values => {
|
20
|
+
:string_item => values
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
else
|
26
|
+
request = {}
|
27
|
+
end
|
28
|
+
|
29
|
+
response = self.call(:get_tags, request)
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
class GoodDataMarketo::Validate
|
4
|
+
def initialize config
|
5
|
+
|
6
|
+
default = {
|
7
|
+
:backend => 'ads'
|
8
|
+
}
|
9
|
+
config = default.merge(config)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
# require 'rubygems'
|
16
|
+
# require 'sequel'
|
17
|
+
# require 'jdbc/dss'
|
18
|
+
#
|
19
|
+
# results = []
|
20
|
+
# tables = []
|
21
|
+
# final = []
|
22
|
+
#
|
23
|
+
# Jdbc::DSS.load_driver
|
24
|
+
# Java.com.gooddata.dss.jdbc.driver.DssDriver
|
25
|
+
#
|
26
|
+
# url1 = "jdbc:dss://secure.gooddata.com/gdc/dss/instances/df963b44d7b8a90494ad29e978039a52"
|
27
|
+
# username = ''
|
28
|
+
# password = ''
|
29
|
+
#
|
30
|
+
# Sequel.connect url1, :username => username, :password => password do |conn|
|
31
|
+
# results = conn.fetch "select t.table_name, c.column_name, c.data_type
|
32
|
+
# from tables t
|
33
|
+
# join columns c on c.table_name = t.table_name
|
34
|
+
# order by t.table_name"
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# binding.pry
|
38
|
+
# #put results in array, not table thing that I don't understand
|
39
|
+
# results.each do |row|
|
40
|
+
# tables.push([row[:table_name],row[:column_name],row[:data_type]])
|
41
|
+
# end
|
42
|
+
# puts "Printing tables having columns with numeric datatypes"
|
43
|
+
# tables.each do |table|
|
44
|
+
# final << table[0] if table[2].include?('numeric')
|
45
|
+
# end
|
46
|
+
# puts final.uniq
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gooddata_marketo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Patrick McConlogue
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.61.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.61.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubyntlm
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.2
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.7.2
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.7.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pmap
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.2
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.2
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: savon
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.8.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.8.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: gooddata
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.6.11
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.6.11
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: gooddata_datawarehouse
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.0.5
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.0.5
|
111
|
+
description: A gem.
|
112
|
+
email: patrick.mcconlogue@gooddata.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- Gemfile
|
118
|
+
- Gemfile.lock
|
119
|
+
- README.md
|
120
|
+
- bin/Gemfile
|
121
|
+
- bin/auth.json
|
122
|
+
- bin/main.rb
|
123
|
+
- bin/process.rbx
|
124
|
+
- examples/all_lead_changes.rb
|
125
|
+
- examples/all_leads.rb
|
126
|
+
- examples/lead_changes_to_ads.rb
|
127
|
+
- gooddata_marketo.gemspec
|
128
|
+
- gooddata_marketo_gem.zip
|
129
|
+
- lib/gooddata_marketo.rb
|
130
|
+
- lib/gooddata_marketo/adapters/rest.rb
|
131
|
+
- lib/gooddata_marketo/client.rb
|
132
|
+
- lib/gooddata_marketo/data/activity_types.rb
|
133
|
+
- lib/gooddata_marketo/data/reserved_sql_keywords.rb
|
134
|
+
- lib/gooddata_marketo/helpers/s3.rb
|
135
|
+
- lib/gooddata_marketo/helpers/stringwizard.rb
|
136
|
+
- lib/gooddata_marketo/helpers/table.rb
|
137
|
+
- lib/gooddata_marketo/helpers/webdav.rb
|
138
|
+
- lib/gooddata_marketo/loads.rb
|
139
|
+
- lib/gooddata_marketo/models/campaigns.rb
|
140
|
+
- lib/gooddata_marketo/models/channels.rb
|
141
|
+
- lib/gooddata_marketo/models/child/activity.rb
|
142
|
+
- lib/gooddata_marketo/models/child/criteria.rb
|
143
|
+
- lib/gooddata_marketo/models/child/lead.rb
|
144
|
+
- lib/gooddata_marketo/models/child/mobj.rb
|
145
|
+
- lib/gooddata_marketo/models/etl.rb
|
146
|
+
- lib/gooddata_marketo/models/leads.rb
|
147
|
+
- lib/gooddata_marketo/models/load.rb
|
148
|
+
- lib/gooddata_marketo/models/mobjects.rb
|
149
|
+
- lib/gooddata_marketo/models/streams.rb
|
150
|
+
- lib/gooddata_marketo/models/tags.rb
|
151
|
+
- lib/gooddata_marketo/models/validate.rb
|
152
|
+
homepage: https://github.com/thnkr/connectors/tree/master/marketo
|
153
|
+
licenses:
|
154
|
+
- MIT
|
155
|
+
metadata: {}
|
156
|
+
post_install_message:
|
157
|
+
rdoc_options: []
|
158
|
+
require_paths:
|
159
|
+
- lib
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: 1.9.3
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
requirements: []
|
171
|
+
rubyforge_project:
|
172
|
+
rubygems_version: 2.2.2
|
173
|
+
signing_key:
|
174
|
+
specification_version: 4
|
175
|
+
summary: Marketo SOAP/REST wrapper to CSV/GoodData ADS
|
176
|
+
test_files: []
|
177
|
+
has_rdoc:
|