endeca_on_demand 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/endeca_on_demand.gemspec +4 -0
  2. data/lib/endeca_on_demand/client.rb +24 -0
  3. data/lib/endeca_on_demand/collection.rb +41 -0
  4. data/lib/endeca_on_demand/pp.rb +48 -0
  5. data/lib/endeca_on_demand/proxy.rb +58 -8
  6. data/lib/endeca_on_demand/query.rb +187 -0
  7. data/lib/endeca_on_demand/response/applied_filters/keyword_redirect.rb +42 -0
  8. data/lib/endeca_on_demand/response/applied_filters/search_report/search.rb +42 -0
  9. data/lib/endeca_on_demand/response/applied_filters/search_report.rb +50 -0
  10. data/lib/endeca_on_demand/response/applied_filters/selected_dimension_value_id.rb +32 -0
  11. data/lib/endeca_on_demand/response/applied_filters.rb +39 -0
  12. data/lib/endeca_on_demand/response/breadcrumb/bread.rb +42 -0
  13. data/lib/endeca_on_demand/response/breadcrumb.rb +35 -0
  14. data/lib/endeca_on_demand/response/business_rules_result/business_rule.rb +54 -0
  15. data/lib/endeca_on_demand/response/business_rules_result.rb +31 -0
  16. data/lib/endeca_on_demand/response/dimension/dimension_value.rb +50 -0
  17. data/lib/endeca_on_demand/response/dimension.rb +50 -0
  18. data/lib/endeca_on_demand/response/property.rb +36 -0
  19. data/lib/endeca_on_demand/response/records_set/record.rb +53 -0
  20. data/lib/endeca_on_demand/response/records_set.rb +50 -0
  21. data/lib/endeca_on_demand/response.rb +62 -0
  22. data/lib/endeca_on_demand/version.rb +1 -1
  23. data/lib/endeca_on_demand.rb +251 -243
  24. metadata +69 -17
  25. data/lib/endeca_on_demand/bread_crumb.rb +0 -12
  26. data/lib/endeca_on_demand/business_rules_result/property.rb +0 -14
  27. data/lib/endeca_on_demand/business_rules_result.rb +0 -33
  28. data/lib/endeca_on_demand/dimension/dimension_value.rb +0 -14
  29. data/lib/endeca_on_demand/dimension.rb +0 -24
  30. data/lib/endeca_on_demand/keyword_redirect.rb +0 -12
  31. data/lib/endeca_on_demand/record_set/record.rb +0 -14
  32. data/lib/endeca_on_demand/record_set.rb +0 -24
  33. data/lib/endeca_on_demand/search_report/search.rb +0 -14
  34. data/lib/endeca_on_demand/search_report.rb +0 -21
  35. data/lib/endeca_on_demand/selected_dimension_value_id.rb +0 -12
@@ -0,0 +1,54 @@
1
+ class EndecaOnDemand::Response::BusinessRulesResult::BusinessRule < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :options, :properties, :records_set ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :options, :properties, :records_set
10
+
11
+ def initialize(records_set, xml)
12
+ @records_set, @xml = records_set, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::BusinessRulesResult::BusinessRule
19
+ end
20
+
21
+ ##
22
+
23
+ ## associations ##
24
+
25
+ def properties
26
+ @properties ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::Property, xml.children.css('properties'), self)
27
+ end
28
+
29
+ def records_set
30
+ @records_set ||= EndecaOnDemand::Response::RecordsSet.new(self, xml.children.css('RecordsSet'))
31
+ end
32
+
33
+ ##
34
+
35
+ ## data ##
36
+
37
+ def options
38
+ xml.xpath('child::node()[not(local-name() = "properties" or local-name() = "RecordsSet")]').inject({}.with_indifferent_access) do |hash,child|
39
+ hash.tap do
40
+ hash[child.name] = child.content
41
+ end
42
+ end
43
+ end
44
+
45
+ ##
46
+
47
+ protected
48
+
49
+ def method_missing(method, *args, &block)
50
+ return options[method] if options.has_key?(method)
51
+ super(method, *args, &block)
52
+ end
53
+
54
+ end
@@ -0,0 +1,31 @@
1
+ class EndecaOnDemand::Response::BusinessRulesResult < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :business_rules ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :business_rules, :response
10
+
11
+ def initialize(response, xml)
12
+ @response, @xml = response, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::BusinessRulesResult
19
+ end
20
+
21
+ ##
22
+
23
+ ## associations ##
24
+
25
+ def business_rules
26
+ @business_rules ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::BusinessRulesResult::BusinessRule, xml.children.css('BusinessRule'), self)
27
+ end
28
+
29
+ ##
30
+
31
+ end
@@ -0,0 +1,50 @@
1
+ class EndecaOnDemand::Response::Dimension::DimensionValue < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :options ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :dimension, :options
10
+
11
+ def initialize(dimension, xml)
12
+ @dimension, @xml = dimension, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::Dimension::DimensionValue
19
+ end
20
+
21
+ # def inspection
22
+ # options.sort_by(&:first).map { |k,v| "#{k}: #{v.inspect}" }
23
+ # end
24
+
25
+ def inspection
26
+ Hash[*options.sort_by(&:first).flatten]
27
+ end
28
+
29
+ ##
30
+
31
+ ## data ##
32
+
33
+ def options
34
+ xml.children.inject({}.with_indifferent_access) do |hash,child|
35
+ hash.tap do
36
+ hash[child.name] = child.content
37
+ end
38
+ end
39
+ end
40
+
41
+ ##
42
+
43
+ protected
44
+
45
+ def method_missing(method, *args, &block)
46
+ return options[method] if options.has_key?(method)
47
+ super(method, *args, &block)
48
+ end
49
+
50
+ end
@@ -0,0 +1,50 @@
1
+ class EndecaOnDemand::Response::Dimension < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :dimension_values, :options ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :dimension_values, :options, :response
10
+
11
+ def initialize(response, xml)
12
+ @response, @xml = response, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::Dimension
19
+ end
20
+
21
+ ##
22
+
23
+ ## associations ##
24
+
25
+ def dimension_values
26
+ @dimension_values ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::Dimension::DimensionValue, xml.children.css('DimensionValues > DimensionValue'), self)
27
+ end
28
+
29
+ ##
30
+
31
+ ## data ##
32
+
33
+ def options
34
+ xml.xpath('child::node()[not(local-name() = "DimensionValues")]').inject({}.with_indifferent_access) do |hash,child|
35
+ hash.tap do
36
+ hash[child.name] = child.content
37
+ end
38
+ end
39
+ end
40
+
41
+ ##
42
+
43
+ protected
44
+
45
+ def method_missing(method, *args, &block)
46
+ return options[method] if options.has_key?(method)
47
+ super(method, *args, &block)
48
+ end
49
+
50
+ end
@@ -0,0 +1,36 @@
1
+ class EndecaOnDemand::Response::Property < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :label, :value ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :parent
10
+
11
+ def initialize(parent, xml)
12
+ @parent, @xml = parent, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::Property
19
+ end
20
+
21
+ ##
22
+
23
+ ## data ##
24
+
25
+ def label
26
+ xml.name.to_s.gsub(/^p_/, '')
27
+ end
28
+
29
+ def to_s
30
+ xml.content
31
+ end
32
+ alias :value :to_s
33
+
34
+ ##
35
+
36
+ end
@@ -0,0 +1,53 @@
1
+ class EndecaOnDemand::Response::RecordsSet::Record < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :properties ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :properties, :records_set
10
+
11
+ def initialize(records_set, xml)
12
+ @records_set, @xml = records_set, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::RecordsSet::Record
19
+ end
20
+
21
+ ##
22
+
23
+ ## associations ##
24
+
25
+ def properties
26
+ @properties ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::Property, xml.children, self)
27
+ end
28
+
29
+ ##
30
+
31
+ ## data ##
32
+
33
+ def keys
34
+ properties.map { |property| property.name }
35
+ end
36
+
37
+ def serializable_hash
38
+ properties.inject({}.with_indifferent_access) { |hash,property| hash.tap { hash[property.name] = property } }
39
+ end
40
+ alias :to_hash :serializable_hash
41
+
42
+ ##
43
+
44
+ protected
45
+
46
+ def method_missing(method, *args, &block)
47
+ if @properties.present? and (property = properties.where(label: method.to_s).first || properties.where(name: method.to_s).first).present?
48
+ return property
49
+ end
50
+ super(method, *args, &block)
51
+ end
52
+
53
+ end
@@ -0,0 +1,50 @@
1
+ class EndecaOnDemand::Response::RecordsSet < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :options, :records ]; end
6
+
7
+ ## fields ##
8
+
9
+ attr_reader :parent, :records
10
+
11
+ def initialize(parent, xml)
12
+ @parent, @xml = parent, xml
13
+ end
14
+
15
+ ## override proxy ##
16
+
17
+ def class
18
+ EndecaOnDemand::Response::RecordsSet
19
+ end
20
+
21
+ ##
22
+
23
+ ## associations ##
24
+
25
+ def records
26
+ @records ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::RecordsSet::Record, xml.children.css('Record'), self)
27
+ end
28
+
29
+ ##
30
+
31
+ ## data ##
32
+
33
+ def options
34
+ xml.xpath('child::node()[not(local-name() = "Record")]').inject({}.with_indifferent_access) do |hash,child|
35
+ hash.tap do
36
+ hash[child.name] = child.content
37
+ end
38
+ end
39
+ end
40
+
41
+ ##
42
+
43
+ protected
44
+
45
+ def method_missing(method, *args, &block)
46
+ return options[method] if options.has_key?(method)
47
+ super(method, *args, &block)
48
+ end
49
+
50
+ end
@@ -0,0 +1,62 @@
1
+ class EndecaOnDemand::Response < EndecaOnDemand::Proxy
2
+
3
+ include EndecaOnDemand::PP
4
+
5
+ def inspect_attributes; [ :applied_filters, :breadcrumbs, :business_rules_result, :dimensions, :records_set ]; end
6
+
7
+ ## fields ##
8
+ attr_reader :errors, :query, :result, :xml
9
+
10
+ def initialize(query, result)
11
+ @query, @result = query, result
12
+ end
13
+
14
+ ## override proxy ##
15
+
16
+ def class
17
+ EndecaOnDemand::Response
18
+ end
19
+
20
+ ##
21
+
22
+ ## associations ##
23
+
24
+ def records_set
25
+ @records_set ||= EndecaOnDemand::Response::RecordsSet.new(self, xml.root.children.css('RecordsSet'))
26
+ end
27
+
28
+ def breadcrumbs
29
+ @breadcrumbs ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::Breadcrumb, xml.root.children.css('Breadcrumbs > Breads'), self)
30
+ end
31
+
32
+ def dimensions
33
+ @dimensions ||= EndecaOnDemand::Collection.new(EndecaOnDemand::Response::Dimension, xml.root.children.css('Dimensions > Dimension'), self)
34
+ end
35
+
36
+ def business_rules_result
37
+ @business_rules_result ||= EndecaOnDemand::Response::BusinessRulesResult.new(self, xml.root.children.css('BusinessRulesResult > BusinessRules'))
38
+ end
39
+
40
+ def applied_filters
41
+ @applied_filters ||= EndecaOnDemand::Response::AppliedFilters.new(self, xml.root.children.css('AppliedFilters'))
42
+ end
43
+
44
+ ##
45
+
46
+ ## data ##
47
+
48
+ def xml
49
+ @xml ||= Nokogiri::XML.parse(result.body) { |config| config.strict.noblanks }
50
+ end
51
+
52
+ ##
53
+
54
+ ## flags ##
55
+
56
+ def valid?
57
+ errors.blank?
58
+ end
59
+
60
+ ##
61
+
62
+ end
@@ -1,3 +1,3 @@
1
1
  class EndecaOnDemand
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end