endeca_xml 0.7.5 → 0.8.0
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.
- data/README.rdoc +40 -20
- data/lib/endeca_xml.rb +281 -128
- data/lib/endeca_xml/crumb.rb +3 -1
- data/lib/endeca_xml/dimension.rb +4 -2
- data/lib/endeca_xml/dimension_value_id.rb +16 -0
- data/lib/endeca_xml/record.rb +3 -1
- data/lib/endeca_xml/rule.rb +1 -1
- data/lib/endeca_xml/search_report.rb +16 -0
- data/lib/endeca_xml/version.rb +2 -2
- metadata +4 -3
- data/lib/endeca_xml/filter.rb +0 -0
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ endeca_xml provides an interface between your web application and the thanxmedia
|
|
4
4
|
|
5
5
|
== Features
|
6
6
|
|
7
|
-
* Builds an XML query, formatted to thanxmedia specifications,
|
7
|
+
* Builds an XML query, formatted to thanxmedia specifications, from a query string
|
8
8
|
* Parses the settings parameters and sends a completed XML query to thanxmedia API
|
9
9
|
* Handles the response XML and exposes methods to retrieve response data
|
10
10
|
|
@@ -28,27 +28,47 @@ Then bundle install:
|
|
28
28
|
|
29
29
|
== Usage
|
30
30
|
|
31
|
-
A
|
32
|
-
|
33
|
-
<
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
31
|
+
A restructure has been done since previous versions. endeca_xml now constructs an XML query to send to thanxmedia via a query string:
|
32
|
+
|
33
|
+
<a href='.../url?search-key=primary&search-term=name&DimensionValueIds=1,2,3,4&sort-key=name&sort-direction=descending&RecordOffset=0&RecordsPerPage=9&AggregationKey=name&UserProfiles=1,2,3,4&filter=between'>FULL ENDECA REQUEST</a>
|
34
|
+
|
35
|
+
The following is an example of an empty 'options' hash that would then need to be constructed from a query string, and sent to the module (any static values are added before, and not from a query string):
|
36
|
+
|
37
|
+
host = 'your/thanxmedia/api/url'
|
38
|
+
options = {
|
39
|
+
'add_base' => {'RecordsSet' => false, 'Dimensions' => true, 'BusinessRulesResult' => false, 'AppliedFilters' => true},
|
40
|
+
'add_keyword_search' => {},
|
41
|
+
'add_dimension_value_id_navigation' => {},
|
42
|
+
'add_category_navigation_query' => "current_category_id",
|
43
|
+
'add_sorting' => {},
|
44
|
+
'add_paging' => {},
|
45
|
+
'add_advanced_parameters' => {},
|
46
|
+
'add_profiles' => {},
|
47
|
+
'add_filters' => {}
|
48
|
+
}
|
49
|
+
|
50
|
+
The following is what a prepared 'options' hash would look like, that is then passed into the module, using the above example query string:
|
51
|
+
|
52
|
+
options = {
|
53
|
+
'add_base' => {'RecordsSet' => true, 'Dimensions' => true, 'BusinessRulesResult' => true, 'AppliedFilters' => true},
|
54
|
+
'add_keyword_search' => {'searh-key => 'key', search-term => 'term'},
|
55
|
+
'add_dimension_value_id_navigation' => {[1, 2, 3, 4]},
|
56
|
+
'add_category_navigation_query' => 1,
|
57
|
+
'add_sorting' => {'sort-key' => 'key', 'sort-direction' => 'Descending'},
|
58
|
+
'add_paging' => {'RecordOffset' => 0, 'RecordsPerPage' => 9},
|
59
|
+
'add_advanced_parameters' => {'AggregationKey' => 'key'},
|
60
|
+
'add_profiles' => {[1, 2, 3, 4]},
|
61
|
+
'add_filters' => {}
|
62
|
+
}
|
63
|
+
|
64
|
+
NOTE: add_dimension_value_id_navigation and add_category_navigation_query are mutually exclusive (the example doesn't reflect that)
|
65
|
+
|
66
|
+
This example is a complete example. It is not necessary to include anything that you don't intend to use (ie. blank or empty hash's/values). If you don't need an option, don't include the query string, and if you don't need a value within an option don't include it.
|
47
67
|
|
48
|
-
This is the command that would send the above request:
|
49
|
-
EndecaXml.
|
68
|
+
This is the command that would then send the above request:
|
69
|
+
EndecaXml.new(host, options)
|
50
70
|
|
51
|
-
Below are examples of how you could access the response data:
|
71
|
+
Below are (ruby/rails) examples of how you could access the response data:
|
52
72
|
|
53
73
|
Records:
|
54
74
|
|
data/lib/endeca_xml.rb
CHANGED
@@ -6,80 +6,81 @@ require 'crackoid'
|
|
6
6
|
require 'net/http'
|
7
7
|
require 'uri'
|
8
8
|
|
9
|
-
#
|
10
|
-
# each input name corresponds to a function that is called when building the XML. It is important that the names stay the same (for now)!
|
11
|
-
#
|
12
|
-
# <form action="/endeca" method="post">
|
13
|
-
# <input type="hidden" name="endeca[host]" value="{'host' => ''}">
|
14
|
-
# <input type="hidden" name="endeca[base]" value="{'RecordsSet' => true, 'Dimensions' => true, 'BusinessRulesResult' => true, 'AppliedFilters' => true}" />
|
15
|
-
# <input type="hidden" name="endeca[nav]" value="{'type' => 'category [or] dimension', 'ids' => [1, 2, 3, 4]}" />
|
16
|
-
# <input type="hidden" name="endeca[search]" value="{'search-key' => 'key', 'search-term' => 'term'}" />
|
17
|
-
# <input type="hidden" name="endeca[sort]" value="{'sort-key' => 'key', 'direction' => 'direction'}" />
|
18
|
-
# <input type="hidden" name="endeca[paging]" value="{'RecordsOffset' => 0, 'RecordsPerPage' => 10}" />
|
19
|
-
# <input type="hidden" name="endeca[parameters]" value="{'AggregationKey' => 'key'}" />
|
20
|
-
# <input type="hidden" name="endeca[profiles]" value="{'profiles' => [1, 2, 3, 4]}" />
|
21
|
-
# <input type="hidden" name="endeca[filters]" value="{'Between' => {'lower-bound' => 1, 'upper-bound' => 2, 'attribute-name' => 'test', 'lat-long' => 123.4, 'distance' => 100}, 'LessThan' => {}, 'LessThanOrEqual' => {}, 'GreaterThan' => {}, 'GreaterThanOrEqual' => {}, 'GeocodeLessThan' => {}, 'GeocodeGreaterThan' => {}, 'GeocodeBetween' => {}}" />
|
22
|
-
# <input type="submit" />
|
23
|
-
# </form>
|
9
|
+
# <a href='.../url?search-key=primary&search-term=name&DimensionValueIds=1,2,3,4&sort-key=name&sort-direction=descending&RecordOffset=0&RecordsPerPage=9&AggregationKey=name&UserProfiles=1,2,3,4&filter=between'>FULL ENDECA REQUEST</a>
|
24
10
|
|
25
|
-
|
11
|
+
# host = 'http://eodhc.endecaondemand.net:30858/ws/main'
|
12
|
+
# options = {
|
13
|
+
# 'add_base' => {'RecordsSet' => true, 'Dimensions' => true, 'BusinessRulesResult' => true, 'AppliedFilters' => true},
|
14
|
+
# 'add_keyword_search' => {'searh-key => 'key', search-term => 'term'},
|
15
|
+
# 'add_dimension_value_id_navigation' => {[1, 2, 3, 4]},
|
16
|
+
# 'add_category_navigation_query' => 1,
|
17
|
+
# 'add_sorting' => {'sort-key' => 'key', 'sort-direction' => 'Descending'},
|
18
|
+
# 'add_paging' => {'RecordOffset' => 0, 'RecordsPerPage' => 9},
|
19
|
+
# 'add_advanced_parameters' => {'AggregationKey' => 'key'},
|
20
|
+
# 'add_profiles' => {[1, 2, 3, 4]},
|
21
|
+
# 'add_filters' => {}
|
22
|
+
# }
|
26
23
|
|
27
|
-
|
28
|
-
@body = Builder::XmlMarkup.new(:indent => 2)
|
29
|
-
|
30
|
-
# puts "PARAMS: #{params}"
|
31
|
-
|
32
|
-
# take the parameters past in a form post and creates the options hash out of each key|value pair, using the key as root key in a new hash, and the value as that hash's value
|
33
|
-
options = {}
|
34
|
-
params.each do |key, value|
|
35
|
-
options.update(Hash[key, eval(value)])
|
36
|
-
end
|
24
|
+
class EndecaXml
|
37
25
|
|
38
|
-
|
39
|
-
|
40
|
-
|
26
|
+
def initialize(host, options)
|
27
|
+
@body = Builder::XmlMarkup.new(:indent => 2)
|
28
|
+
|
29
|
+
#
|
30
|
+
set_host(host)
|
31
|
+
|
32
|
+
puts "OPTIONS: #{options}"
|
33
|
+
|
34
|
+
#
|
41
35
|
options.each do |key, value|
|
42
|
-
self.send(key.to_sym, value)
|
36
|
+
self.send(key.to_sym, value) unless value.empty?
|
43
37
|
end
|
44
|
-
|
45
|
-
#
|
38
|
+
|
39
|
+
#
|
46
40
|
send_request
|
47
41
|
end
|
48
|
-
|
49
|
-
|
42
|
+
|
43
|
+
### API
|
44
|
+
|
45
|
+
def records
|
50
46
|
@records
|
51
47
|
end
|
52
48
|
|
53
|
-
def
|
49
|
+
def breadcrumbs
|
54
50
|
@breadcrumbs
|
55
51
|
end
|
56
52
|
|
57
|
-
def
|
53
|
+
def dimensions
|
58
54
|
@dimensions
|
59
55
|
end
|
60
56
|
|
61
|
-
def
|
57
|
+
def rules
|
62
58
|
@business_rules
|
63
59
|
end
|
64
60
|
|
65
|
-
def
|
66
|
-
@
|
61
|
+
def search_reports
|
62
|
+
@search_reports
|
63
|
+
end
|
64
|
+
|
65
|
+
def selected_dimension_value_ids
|
66
|
+
@selected_dimension_value_ids
|
67
67
|
end
|
68
68
|
|
69
69
|
private
|
70
70
|
|
71
71
|
### XML REQUEST ###
|
72
72
|
|
73
|
-
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
end
|
73
|
+
##
|
74
|
+
def set_host(host)
|
75
|
+
# puts "HOST: #{host}"
|
76
|
+
@uri = URI.parse(host)
|
78
77
|
@http = Net::HTTP.new(@uri.host, @uri.port)
|
78
|
+
# puts "URI: #{@uri}"
|
79
|
+
# puts "HTTP: #{@http}"
|
79
80
|
end
|
80
81
|
|
81
|
-
|
82
|
-
def
|
82
|
+
##
|
83
|
+
def add_base(options)
|
83
84
|
# puts "BASE: #{options}"
|
84
85
|
options.each do |key, value|
|
85
86
|
@body.tag!(key, value)
|
@@ -87,30 +88,30 @@ module EndecaXml
|
|
87
88
|
# print @body.target!
|
88
89
|
end
|
89
90
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
99
|
-
end
|
100
|
-
when 'dimension'
|
101
|
-
@body.SelectedDimensionalValueIds do
|
102
|
-
options['ids'].each do |id|
|
103
|
-
@body.tag!('DimensionValueId', id)
|
104
|
-
end
|
91
|
+
## BUILD REQUEST BODY
|
92
|
+
|
93
|
+
# mutually exclusive to add_category_navigation_query
|
94
|
+
def add_dimension_value_id_navigation(options)
|
95
|
+
# puts "DIMENSIONS: #{options}"
|
96
|
+
@body.SelectedDimensionValueIds do
|
97
|
+
options.each do |dimension|
|
98
|
+
@body.tag!('DimensionValueId', dimension)
|
105
99
|
end
|
106
|
-
else
|
107
|
-
#
|
108
100
|
end
|
109
101
|
# puts @body.target!
|
110
102
|
end
|
111
103
|
|
112
|
-
#
|
113
|
-
def
|
104
|
+
# mutually exclusive to dimension_value_id_navigation
|
105
|
+
def add_category_navigation_query(options)
|
106
|
+
# puts "CATEGORY: #{options}"
|
107
|
+
@body.Category do
|
108
|
+
@body.tag!('CategoryId', options)
|
109
|
+
end
|
110
|
+
# puts @body.target!
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
def add_keyword_search(options)
|
114
115
|
# puts "SEARCH: #{options}"
|
115
116
|
@body.Searches do
|
116
117
|
@body.Search do
|
@@ -122,8 +123,8 @@ module EndecaXml
|
|
122
123
|
# puts @body.target!
|
123
124
|
end
|
124
125
|
|
125
|
-
#
|
126
|
-
def
|
126
|
+
#
|
127
|
+
def add_sorting(options)
|
127
128
|
# puts "SORT: #{options}"
|
128
129
|
@body.Sorts do
|
129
130
|
@body.Sort do
|
@@ -135,8 +136,8 @@ module EndecaXml
|
|
135
136
|
# puts @body.target!
|
136
137
|
end
|
137
138
|
|
138
|
-
#
|
139
|
-
def
|
139
|
+
#
|
140
|
+
def add_paging(options)
|
140
141
|
# puts "PAGING: #{options}"
|
141
142
|
options.each do |key, value|
|
142
143
|
@body.tag!(key, value)
|
@@ -144,8 +145,8 @@ module EndecaXml
|
|
144
145
|
# puts @body.target!
|
145
146
|
end
|
146
147
|
|
147
|
-
#
|
148
|
-
def
|
148
|
+
#
|
149
|
+
def add_advanced_parameters(options)
|
149
150
|
# puts "PARAMETERS: #{options}"
|
150
151
|
options.each do |key, value|
|
151
152
|
@body.tag!(key, value)
|
@@ -153,22 +154,19 @@ module EndecaXml
|
|
153
154
|
# puts @body.target!
|
154
155
|
end
|
155
156
|
|
156
|
-
#
|
157
|
-
def
|
157
|
+
#
|
158
|
+
def add_profiles(options)
|
158
159
|
# puts "PROFILES: #{options}"
|
159
160
|
@body.UserProfiles do
|
160
|
-
options.each do |
|
161
|
-
|
162
|
-
value.each do |profile|
|
163
|
-
@body.tag!('UserProfile', profile)
|
164
|
-
end
|
161
|
+
options.each do |profile|
|
162
|
+
@body.tag!('UserProfile', profile)
|
165
163
|
end
|
166
164
|
end
|
167
165
|
# puts @body.target!
|
168
166
|
end
|
169
167
|
|
170
|
-
#
|
171
|
-
def
|
168
|
+
#
|
169
|
+
def add_filters(options)
|
172
170
|
# puts "FILTERS: #{options}"
|
173
171
|
@body.RangeFilters do
|
174
172
|
options.each do |key, value|
|
@@ -182,16 +180,16 @@ module EndecaXml
|
|
182
180
|
end
|
183
181
|
# puts @body.target!
|
184
182
|
end
|
185
|
-
|
183
|
+
|
186
184
|
# complete the endeca XML reqeust and send the request to the endeca API
|
187
|
-
def
|
185
|
+
def send_request
|
188
186
|
# insert all of the XML blocks that have been included in the request into the endeca Query XML tag
|
189
187
|
query = Builder::XmlMarkup.new(:indent => 2)
|
190
188
|
query.Query do
|
191
189
|
query << @body.target!
|
192
190
|
end
|
193
191
|
|
194
|
-
|
192
|
+
puts "QUERY: #{query.target!}"
|
195
193
|
|
196
194
|
begin
|
197
195
|
request, response = @http.post(@uri.path, query.target!, 'Content-type' => 'application/xml')
|
@@ -202,72 +200,227 @@ module EndecaXml
|
|
202
200
|
end
|
203
201
|
|
204
202
|
# get the request response and parse it into an hash
|
205
|
-
def
|
206
|
-
|
203
|
+
def handle_response(response)
|
204
|
+
puts "RESPONSE: #{response}"
|
207
205
|
@response = response['Final']
|
208
206
|
|
209
|
-
|
207
|
+
build_data
|
210
208
|
end
|
211
209
|
|
212
|
-
def
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
210
|
+
def build_data
|
211
|
+
build_records
|
212
|
+
build_breadcrumbs
|
213
|
+
build_dimensions
|
214
|
+
build_business_rules
|
215
|
+
build_search_reports
|
216
|
+
build_selected_dimension_value_ids
|
218
217
|
end
|
219
218
|
|
220
219
|
# builds the RECORDS hash
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
220
|
+
def build_records
|
221
|
+
puts "RECORDS SET: #{@response['RecordsSet']}"
|
222
|
+
|
223
|
+
# NOTE: this may need to be reworked a little. look in recordset for nodes that our outside of records...
|
224
|
+
@records = []
|
225
|
+
unless @response['RecordsSet'].nil?
|
226
|
+
if @response['RecordsSet']['Record'].instance_of?(Hash)
|
227
|
+
@records.push(EndecaXml::Record.new(@response['RecordsSet']))
|
228
|
+
elsif @response['RecordsSet']['Record'].instance_of?(Array)
|
229
|
+
@response['RecordsSet']['Record'].each do |record|
|
230
|
+
@records.push(EndecaXml::Record.new(record))
|
231
|
+
end
|
232
|
+
else
|
233
|
+
puts "This record is a(n): #{@response['RecordsSet'].class}"
|
234
|
+
end
|
235
|
+
else
|
236
|
+
puts 'There are no records with this response!'
|
237
|
+
end
|
226
238
|
end
|
227
239
|
|
228
240
|
# builds the BREADCRUMBS hash
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
241
|
+
def build_breadcrumbs
|
242
|
+
@breadcrumbs = []
|
243
|
+
|
244
|
+
# puts "BREADCRUMBS: #{@response['Breadcrumbs'}"
|
245
|
+
breadcrumbs = @response['Breadcrumbs']
|
246
|
+
unless breadcrumbs.nil?
|
247
|
+
|
248
|
+
# puts "BREADS: #{@response['Breadcrumbs']['Breads']}"
|
249
|
+
breads = @response['Breadcrumbs']['Breads']
|
250
|
+
|
251
|
+
if breads.instance_of?(Hash)
|
252
|
+
# puts "HASH 1: #{breads}"
|
253
|
+
if breads.instance_of?(Hash)
|
254
|
+
# puts "HASH 2: #{breads}"
|
255
|
+
@breadcrumbs.push(EndecaXml::Crumb.new(breads))
|
256
|
+
elsif bread.instance_of?(Array)
|
257
|
+
# puts "ARRAY 1: #{breads}"
|
258
|
+
breads.each do |crumb|
|
259
|
+
# puts "CRUMB: #{crumb}"
|
260
|
+
@breadcrumbs.push(EndecaXml::Crumb.new(crumb))
|
261
|
+
end
|
262
|
+
end
|
263
|
+
elsif breads.instance_of?(Array)
|
264
|
+
# puts "ARRAY 1: #{breads}"
|
265
|
+
breads.each do |bread|
|
266
|
+
# puts "BREAD: #{bread}"
|
267
|
+
if bread.instance_of?(Hash)
|
268
|
+
# puts "HASH 1: #{bread}"
|
269
|
+
if bread['Bread'].instance_of?(Hash)
|
270
|
+
# puts "HASH 2: #{bread}"
|
271
|
+
bread['Bread'].each do |key, value|
|
272
|
+
# puts "#{key} :: #{value}"
|
273
|
+
@breadcrumbs.push(EndecaXml::Crumb.new(bread['Bread']))
|
274
|
+
end
|
275
|
+
elsif bread['Bread'].instance_of?(Array)
|
276
|
+
# puts "ARRAY 2: #{bread}"
|
277
|
+
bread['Bread'].each do |crumb|
|
278
|
+
# puts "CRUMB 2: #{crumb}"
|
279
|
+
@breadcrumbs.push(EndecaXml::Crumb.new(crumb))
|
280
|
+
end
|
281
|
+
end
|
282
|
+
elsif bread.instance_of?(Array)
|
283
|
+
# puts "ARRAY 3: #{bread}"
|
284
|
+
bread['Bread'].each do |crumb|
|
285
|
+
# puts "CRUMB 3: #{crumb}"
|
286
|
+
@breadcrumbs.push(EndecaXml::Crumb.new(crumb))
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
else
|
292
|
+
puts 'There are no breadcrumbs with this response!'
|
293
|
+
end
|
234
294
|
end
|
235
295
|
|
236
296
|
# builds the DIMENSIONS hash
|
237
|
-
|
238
|
-
def
|
239
|
-
@
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
297
|
+
# NOTE: do what breadcrumbs is doing in terms of vars
|
298
|
+
def build_dimensions
|
299
|
+
@dimensions = []
|
300
|
+
|
301
|
+
puts "DIMENSIONS: #{@response['Dimensions']}"
|
302
|
+
dimensions = @response['Dimensions']
|
303
|
+
unless @response['Dimensions'].nil?
|
304
|
+
|
305
|
+
dimension = @response['Dimensions']['Dimension']
|
306
|
+
if dimension.instance_of?(Hash)
|
307
|
+
@dimension = EndecaXml::Dimension.new(dimensions)
|
308
|
+
unless dimension['DimensionValues'].nil?
|
309
|
+
if dimension['DimensionValues']['DimensionValue'].instance_of?(Hash)
|
310
|
+
@dimension.dimension_values.push(EndecaXml::Dimension.new(dimension['DimensionValues']))
|
311
|
+
elsif dimension['DimensionValues']['DimensionValue'].instance_of?(Array)
|
312
|
+
dimension['DimensionValues']['DimensionValue'].each do |dimension_value|
|
313
|
+
@dimension.dimension_values.push(EndecaXml::Dimension.new(dimension_value))
|
314
|
+
end
|
315
|
+
else
|
316
|
+
puts "This dimension value is a(n): #{dimension['DimensionValues']['DimensionValue'].class}"
|
317
|
+
end
|
318
|
+
@dimensions.push(@dimension)
|
319
|
+
else
|
320
|
+
puts "There are no dimension values on this dimension!"
|
321
|
+
end
|
322
|
+
elsif dimension.instance_of?(Array)
|
323
|
+
dimension.each do |dimension|
|
324
|
+
@dimension = EndecaXml::Dimension.new(dimension)
|
325
|
+
unless dimension['DimensionValues'].nil?
|
326
|
+
if dimension['DimensionValues']['DimensionValue'].instance_of?(Hash)
|
327
|
+
@dimension.dimension_values.push(EndecaXml::Dimension.new(dimension['DimensionValues']))
|
328
|
+
elsif dimension['DimensionValues']['DimensionValue'].instance_of?(Array)
|
329
|
+
dimension['DimensionValues']['DimensionValue'].each do |dimension_value|
|
330
|
+
@dimension.dimension_values.push(EndecaXml::Dimension.new(dimension_value))
|
331
|
+
end
|
332
|
+
else
|
333
|
+
puts "This dimension value is a(n): #{dimension['DimensionValues']['DimensionValue'].class}"
|
334
|
+
end
|
335
|
+
@dimensions.push(@dimension)
|
336
|
+
else
|
337
|
+
puts 'There are no dimension values on this dimension!'
|
338
|
+
end
|
339
|
+
end
|
340
|
+
else
|
341
|
+
puts "This dimension is a(n): #{dimensions.class}"
|
245
342
|
end
|
246
|
-
|
247
|
-
|
343
|
+
else
|
344
|
+
puts 'There are no dimensions with this response!'
|
345
|
+
end
|
248
346
|
end
|
249
347
|
|
250
348
|
# builds the BUSINESS RULES hash
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
349
|
+
def build_business_rules
|
350
|
+
puts "BUSINESS RULES: #{@response['BusinessRulesResult']}"
|
351
|
+
|
352
|
+
# NOTE: needs to be looked at again. look at where the array is being pushed
|
353
|
+
@business_rules = []
|
354
|
+
unless @response['BusinessRulesResult'].nil?
|
355
|
+
if @response['BusinessRulesResult']['BusinessRules'].instance_of?(Hash)
|
356
|
+
@business_rule = EndecaXml::Rule.new(@response['BusinessRulesResult']['BusinessRules'])
|
357
|
+
@response['BusinessRulesResult']['BusinessRules'].each do |key, value|
|
358
|
+
@business_rule.properties_array.push(EndecaXml::Rule.new(value)) if key == 'properties'
|
359
|
+
if key == 'RecordSet'
|
360
|
+
@business_rule.records.push(EndecaXml::Record.new(value['Record'])) unless value.nil?
|
361
|
+
end
|
259
362
|
end
|
363
|
+
elsif @response['BusinessRulesResult']['BusinessRules'].instance_of?(Array)
|
364
|
+
@response['BusinessRulesResult']['BusinessRules']['BusinessRule'].each do |rule|
|
365
|
+
@business_rule = EndecaXml::Rule.new(rule)
|
366
|
+
rule.each do |key, value|
|
367
|
+
@business_rule.properties_array.push(EndecaXml::Rule.new(value)) if key == 'properties'
|
368
|
+
if key == 'RecordSet'
|
369
|
+
@business_rule.records.push(EndecaXml::Record.new(value['Record'])) unless value.nil?
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
else
|
374
|
+
puts "This busniess rule is a(n): #{@response['RecordsSet'].class}"
|
260
375
|
end
|
261
376
|
@business_rules.push(@business_rule)
|
262
|
-
|
377
|
+
else
|
378
|
+
puts 'There are no business rules with this response!'
|
379
|
+
end
|
263
380
|
end
|
264
381
|
|
265
|
-
# builds the
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
382
|
+
# builds the SEARCH REPORTS hash
|
383
|
+
def build_search_reports
|
384
|
+
@search_reports = []
|
385
|
+
|
386
|
+
# puts "APPLIED FILTERS: #{@response['AppliedFilters']}"
|
387
|
+
applied_filters = @response['AppliedFilters']
|
388
|
+
unless applied_filters.nil?
|
389
|
+
|
390
|
+
# puts "SEARCH REPORTS: #{@response['AppliedFilters']['SearchReports']}"
|
391
|
+
search_reports = @response['AppliedFilters']['SearchReports']
|
392
|
+
unless search_reports.nil?
|
393
|
+
#do stuff
|
394
|
+
else
|
395
|
+
puts 'There are no search reports with this response!'
|
396
|
+
end
|
397
|
+
|
398
|
+
else
|
399
|
+
puts 'There were not applied filters with this response!'
|
400
|
+
end
|
271
401
|
end
|
272
|
-
|
402
|
+
|
403
|
+
# builds the SELECTED DIMENSION VALUE IDS hash
|
404
|
+
def build_selected_dimension_value_ids
|
405
|
+
@selected_dimension_value_ids = []
|
406
|
+
|
407
|
+
# puts "SELECTED DIMENSION VALUE IDS: #{@response['AppliedFilters']['SelectedDimensionValueIds']}"
|
408
|
+
selected_dimension_value_ids = @response['AppliedFilters']['SelectedDimensionValueIds']
|
409
|
+
unless selected_dimension_value_ids.nil?
|
410
|
+
|
411
|
+
if selected_dimension_value_ids.instance_of?(Hash)
|
412
|
+
selected_dimension_value_id = EndecaXml::DimensionValueId.new(selected_dimension_value_ids)
|
413
|
+
elsif selected_dimension_value_ids.instance_of?(Array)
|
414
|
+
selected_dimension_value_ids.each do |key, value|
|
415
|
+
selected_dimension_value_id = EndecaXml::DimensionValueId.new(value)
|
416
|
+
end
|
417
|
+
end
|
418
|
+
|
419
|
+
@selected_dimension_value_ids.push(selected_dimension_value_id)
|
420
|
+
|
421
|
+
else
|
422
|
+
puts "There are no selected dimension value ids with this response!"
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
273
426
|
end
|
data/lib/endeca_xml/crumb.rb
CHANGED
data/lib/endeca_xml/dimension.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
|
1
|
+
class EndecaXml
|
2
2
|
class Dimension
|
3
3
|
|
4
4
|
def initialize(dimension)
|
5
|
+
# puts "DIMENSION: #{dimension}"
|
5
6
|
dimension.each do |key, value|
|
7
|
+
# puts "#{key} | #{value}"
|
6
8
|
self.instance_variable_set(:"@#{key.downcase}", value)
|
7
9
|
end
|
8
10
|
|
@@ -10,7 +12,7 @@ module EndecaXml
|
|
10
12
|
end
|
11
13
|
|
12
14
|
# is there anyway to do this dynamically?
|
13
|
-
attr_reader :name, :id, :group_name, :hasmore, :dimensionvalues, :dimension_values
|
15
|
+
attr_reader :name, :id, :group_name, :hasmore, :count, :dimensionvalues, :dimension_values
|
14
16
|
|
15
17
|
end
|
16
18
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class EndecaXml
|
2
|
+
class DimensionValueId
|
3
|
+
|
4
|
+
def initialize(id)
|
5
|
+
# puts "ID: #{id}"
|
6
|
+
id.each do |key, value|
|
7
|
+
# puts "#{key} | #{value}"
|
8
|
+
self.instance_variable_set(:"@#{key.downcase}", value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# is there anyway to do this dynamically?
|
13
|
+
attr_reader :dimensionvalueid
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/endeca_xml/record.rb
CHANGED
data/lib/endeca_xml/rule.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
class EndecaXml
|
2
|
+
class SearchReport
|
3
|
+
|
4
|
+
def initialize(report)
|
5
|
+
# puts "REPORT: #{report}"
|
6
|
+
report.each do |key, value|
|
7
|
+
# puts "#{key} | #{value}"
|
8
|
+
self.instance_variable_set(:"@#{key.downcase}", value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# is there anyway to do this dynamically?
|
13
|
+
attr_reader :none
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/endeca_xml/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.
|
1
|
+
class EndecaXml
|
2
|
+
VERSION = "0.8.0"
|
3
3
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: endeca_xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.8.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- sdomino
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-19 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: crackoid
|
@@ -53,9 +53,10 @@ files:
|
|
53
53
|
- lib/endeca_xml.rb
|
54
54
|
- lib/endeca_xml/crumb.rb
|
55
55
|
- lib/endeca_xml/dimension.rb
|
56
|
-
- lib/endeca_xml/
|
56
|
+
- lib/endeca_xml/dimension_value_id.rb
|
57
57
|
- lib/endeca_xml/record.rb
|
58
58
|
- lib/endeca_xml/rule.rb
|
59
|
+
- lib/endeca_xml/search_report.rb
|
59
60
|
- lib/endeca_xml/version.rb
|
60
61
|
homepage: http://github.com/sdomino/endeca_xml
|
61
62
|
licenses: []
|
data/lib/endeca_xml/filter.rb
DELETED
File without changes
|