eloqua_api 0.0.9 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzJmNzgwOTEwNjU3OGQ2OGQzZGZlMWVkYWQ0OTUwNjM3ZGM0NjBmOA==
4
+ YTNmYzc1MDdlMzdjMWY2ZmY4Yjc5NjRjN2NkYzQ4MzYyNjYwYTk1ZQ==
5
5
  data.tar.gz: !binary |-
6
- NmFhMDllZWQ5YjBmNGM4ZTMwZGZiNzUxMTk3MGZiYjE3ODhiNjc5OA==
6
+ MDg5ZjU1ZDhjNTg5NzY1YWI5MmNlM2I4NjNlMTQzYTYxNmQ2NDAwYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YThmZGE2MTk2Mzc3MmI5Y2E2NDExMmE3MmZmMzE2NGVmYzdjYmUwZDI5YTE5
10
- MzFkZmUzOTY2YzlhMGY3ODBmZmUxYzBhNWQ4OGQxYzdkYmFmOTFmZGRkYzdh
11
- MTk1NzAyOTZmOWVmMmNmZmZmNzllYTBhNTZmMWNlMDlmODE5MDg=
9
+ MjgxMzZhYzIzOTRkZmRiZDRkNmQ4NjE4NGZjZDZmNGRiMzRkMzJhMWYyMjc3
10
+ MTIxYjU2NDQyMThmNjkwNmI0NjNjNmI5Y2E5ZjhmNzNhMzBjOGI3MWUwMDAz
11
+ ZTcxZjM0ZjJlNjA2M2I3Yjk3ZGJkNjQxMjhhNTZjZWRjNmJkZjk=
12
12
  data.tar.gz: !binary |-
13
- OWU1ZTFiMWEwYmZiODU5NDgxNjdlODBmMWMxMTVjZGEwMTQyZWY3MWIwZTg1
14
- NDA4Mzg3Y2RiMTQwYTlkMGVjYTY1Mzg0NGE0ZjQwMjlmZjUyNGU1NmY0NzVl
15
- ZTE4NmRhOWY0MDczNWZmNDI3ZDA4YmJlZDg4Y2RhN2NjNWRlZDQ=
13
+ Y2VmNDZiMGYzMjkxZDg0OWE5YzA3MGZiMDkyYzA3NmY4NDRjNmY2OTdlYjQx
14
+ Y2RhYjFiMzE2NmMxNmM1MjYxZGUwMWI0ZjA4NTFiZTZlNzFlNGE3MmQ1YTVm
15
+ ODE1NDc5M2MxYzgwYWRjY2ExNTljZmM4Mzg3NTJjZjM0MmE1OTM=
@@ -10,5 +10,28 @@ module Eloqua
10
10
 
11
11
  get("%s/data" % export_uri, options)
12
12
  end
13
+
14
+ #
15
+ # Version 2.0 of the Bulk API
16
+ #
17
+ def define_activity_export(export)
18
+ post("activities/exports", export)
19
+ end
20
+ alias :define_activities_export :define_activity_export
21
+
22
+ def retrieve_activity_export(export_uri, options={})
23
+ options[:limit] ||= 50000
24
+
25
+ get("%s/data" % export_uri, options)
26
+ end
27
+ alias :retrieve_activities_export :retrieve_activity_export
28
+
29
+ def delete_export_definition(export_uri, options={})
30
+ delete(export_uri)
31
+ end
32
+
33
+ def delete_export(export_uri, options={})
34
+ delete("%s/data" % export_uri)
35
+ end
13
36
  end
14
37
  end
@@ -0,0 +1,224 @@
1
+ module Eloqua
2
+ #
3
+ # Usage:
4
+ #
5
+ # client = Eloqua::BulkClient.new({ ... })
6
+ # client.query("My Query/Export Name").
7
+ # select("Activity.Asset.Id AS AssetId", "Activity.Id AS ActivityId").
8
+ # from("activities").
9
+ # where("Activity.CreatedAt > 2014-08-01", "Activity.Type = EmailOpen").
10
+ # limit(3).
11
+ # retain(3600).
12
+ # execute().
13
+ # wait(30).each do |row|
14
+ # puts row
15
+ # end
16
+ #
17
+ # If anything goes wrong (at any stage of the chain) a Query::Error exception will be thrown
18
+ # with a human readable error message, accompanied by the full HTTP request response and code
19
+ # when appropriate.
20
+ #
21
+
22
+ class Query
23
+ class Error < StandardError
24
+ attr_reader :response
25
+
26
+ def initialize(message, response=nil)
27
+ @response = response
28
+ super(message)
29
+ end
30
+ end
31
+
32
+ def initialize(name, client)
33
+ @name = name
34
+ @client = client
35
+ @fields = {}
36
+ @filter = []
37
+ @retain = 0
38
+ @resource = nil
39
+ @limit = 50000
40
+ @uri = nil
41
+ @sync = false
42
+ end
43
+
44
+ def delete
45
+ raise Error, 'Execute must be called before calling delete.' if @uri.nil?
46
+
47
+ @client.delete_export(@uri)
48
+ @client.delete_export_definition(@uri)
49
+
50
+ self
51
+ end
52
+
53
+ def execute
54
+ raise Error, 'Execute cannot be called more than once.' unless @uri.nil?
55
+ raise Error, 'A valid resource must be defined before calling execute.' unless @resource and @client.respond_to?(define_export_method) and @client.respond_to?(retrieve_export_method)
56
+
57
+ response = @client.send(define_export_method, to_h)
58
+ if response.code == 201 and response.parsed_response['uri']
59
+ @uri = response.parsed_response['uri']
60
+ else
61
+ raise Error.new("Could not execute query.", response)
62
+ end
63
+
64
+ self
65
+ end
66
+
67
+ def wait(secs)
68
+ raise Error, 'Execute must be called before wait.' if @uri.nil?
69
+
70
+ response = nil
71
+ @sync_uri ||= nil
72
+
73
+ if @sync_uri.nil?
74
+ response = @client.syncs(@uri)
75
+ if response.code == 201 and response.parsed_response['status'] == 'pending'
76
+ @sync_uri = response.parsed_response['uri']
77
+ else
78
+ raise Error.new("Could not sync.", response)
79
+ end
80
+ end
81
+
82
+ i = 0
83
+ while i < secs
84
+ i += 1
85
+
86
+ response = @client.syncs_status(@sync_uri)
87
+ if response.code == 200 and response.parsed_response['status'] == "success"
88
+ @sync = true
89
+ return self
90
+ end
91
+
92
+ sleep 1
93
+ end
94
+
95
+ raise Error.new("Could not sync in #{secs} seconds.", response)
96
+
97
+ self
98
+ end
99
+
100
+ def count
101
+ raise Error, 'Wait must be called before calling count.' unless @sync
102
+
103
+ response = @client.send(retrieve_export_method, @uri, :limit => @limit)
104
+ if response.code == 200 and response.parsed_response['totalResults']
105
+ response.parsed_response['totalResults'].to_i
106
+ else
107
+ raise Error.new("Failed to get count.", response)
108
+ end
109
+ end
110
+
111
+ def each
112
+ raise Error, 'No block provided.' unless block_given?
113
+ raise Error, 'Wait must be called before calling each.' unless @sync
114
+
115
+ offset = 0
116
+ while true
117
+ response = @client.send(retrieve_export_method, @uri, :offset => offset, :limit => @limit)
118
+ if response.code == 200 and response.parsed_response['totalResults']
119
+ response = response.parsed_response
120
+
121
+ response['items'].each do |item|
122
+ yield item
123
+ end if response['items'].is_a?(Array)
124
+
125
+ if response['hasMore']
126
+ offset += @limit
127
+ else
128
+ break
129
+ end
130
+ else
131
+ raise Error.new("Failed to get rows for each.", response)
132
+ end
133
+ end
134
+
135
+ self
136
+ end
137
+
138
+ def to_h
139
+ hash = {}
140
+ hash['name'] = @name
141
+ hash['fields'] = @fields
142
+ hash['filter'] = @filter.join(' ')
143
+ hash['secondsToRetainData'] = @retain if @retain > 0
144
+ hash
145
+ end
146
+
147
+ def limit(n)
148
+ @limit = n.to_i
149
+ self
150
+ end
151
+
152
+ def from(resource)
153
+ @resource = resource.downcase if resource.is_a?(String)
154
+ self
155
+ end
156
+
157
+ def retain(secs)
158
+ @retain = secs.to_i
159
+ self
160
+ end
161
+
162
+ def select(*selectors)
163
+ fields = {}
164
+
165
+ selectors.each do |field|
166
+ l, op, r = expression(field)
167
+ if not op.nil? and op.upcase == 'AS'
168
+ fields[r] = "{{#{l}}}"
169
+ elsif op.nil?
170
+ fields[field.gsub('.', '')] = "{{#{field}}}"
171
+ end
172
+ end
173
+
174
+ @fields.merge!(fields) if fields.any?
175
+
176
+ self
177
+ end
178
+
179
+ def where(*conditions)
180
+ filter = []
181
+
182
+ conditions.each do |condition|
183
+ l, op, r = expression(condition)
184
+ filter << "'{{#{l}}}'#{op.upcase}'#{r}'" if l
185
+ end
186
+
187
+ if filter.any?
188
+ if block_given?
189
+ @filter << yield(filter.join(" AND "))
190
+ else
191
+ @filter << filter.join(" AND ")
192
+ end
193
+ end
194
+
195
+ self
196
+ end
197
+
198
+ def or(*conditions)
199
+ where(*conditions) do |filter|
200
+ "OR ( #{filter} )"
201
+ end
202
+
203
+ self
204
+ end
205
+
206
+ protected
207
+
208
+ def define_export_method
209
+ @define_export_method ||= :"define_#{@resource}_export"
210
+ end
211
+
212
+ def retrieve_export_method
213
+ @retrieve_export_method ||= :"retrieve_#{@resource}_export"
214
+ end
215
+
216
+ def expression(condition)
217
+ if condition =~ /^(.*?)\s+(.*?)\s+(.*?)$/
218
+ [$1, $2, $3]
219
+ else
220
+ [nil, nil, nil]
221
+ end
222
+ end
223
+ end
224
+ end
@@ -8,5 +8,16 @@ module Eloqua
8
8
  def sync_status(sync_uri, options={})
9
9
  get(sync_uri, options)
10
10
  end
11
+
12
+ #
13
+ # Version 2.0 of the Bulk API changed this endpoint
14
+ # from sync to syncs.
15
+ #
16
+ def syncs(export_uri, options={})
17
+ options[:syncedInstanceUri] ||= export_uri
18
+ post("syncs", options)
19
+ end
20
+
21
+ alias :syncs_status :sync_status
11
22
  end
12
23
  end
@@ -1,11 +1,16 @@
1
1
  require 'eloqua_api/bulk/export'
2
2
  require 'eloqua_api/bulk/sync'
3
+ require 'eloqua_api/bulk/query'
3
4
 
4
5
  module Eloqua
5
6
  class BulkClient < Client
6
7
  include Export
7
8
  include Sync
8
9
 
10
+ def query(name)
11
+ Query.new(name, self)
12
+ end
13
+
9
14
  def build_path(*segments)
10
15
  super('/Bulk/', *segments)
11
16
  end
@@ -28,7 +28,7 @@ module Eloqua
28
28
  qs
29
29
  }
30
30
 
31
- ssl_version :SSLv3
31
+ # ssl_version :SSLv3
32
32
  format :json
33
33
  # debug_output $stdout
34
34
  end
@@ -9,7 +9,7 @@ module Eloqua
9
9
  end
10
10
 
11
11
  def validate_landing_page(id, options={})
12
- get("assets/landingPage/%s/active/validatonErrors" % id)
12
+ get("assets/landingPage/%s/active/validationErrors" % id)
13
13
  end
14
14
 
15
15
  def activate_landing_page(id, options={})
@@ -4,6 +4,10 @@ module Eloqua
4
4
  post("assets/contact/segment", segment)
5
5
  end
6
6
 
7
+ def create_segment_queue(segment)
8
+ post("assets/contact/segment/queue/%s" % segment)
9
+ end
10
+
7
11
  def get_segment(id)
8
12
  get("assets/contact/segment/%s" % id)
9
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eloqua_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nader Akhnoukh
@@ -59,6 +59,7 @@ extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
61
  - lib/eloqua_api/bulk/export.rb
62
+ - lib/eloqua_api/bulk/query.rb
62
63
  - lib/eloqua_api/bulk/sync.rb
63
64
  - lib/eloqua_api/bulk_client.rb
64
65
  - lib/eloqua_api/client.rb