endeca 1.4.2 → 1.5.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/endeca.gemspec +5 -3
- data/lib/endeca.rb +25 -20
- data/lib/endeca/benchmarking.rb +12 -20
- data/lib/endeca/logging.rb +2 -1
- data/lib/endeca/map.rb +1 -1
- data/lib/endeca/request.rb +62 -31
- data/spec/endeca/document_spec.rb +1 -1
- data/spec/endeca/logging_spec.rb +23 -0
- data/spec/endeca/map_spec.rb +1 -1
- data/spec/endeca_spec.rb +28 -0
- metadata +37 -17
data/endeca.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{endeca}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Primedia Team"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-05-06}
|
13
13
|
s.email = %q{}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.rdoc"
|
@@ -43,6 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
"spec/endeca/dimension_spec.rb",
|
44
44
|
"spec/endeca/document_collection_spec.rb",
|
45
45
|
"spec/endeca/document_spec.rb",
|
46
|
+
"spec/endeca/logging_spec.rb",
|
46
47
|
"spec/endeca/map_spec.rb",
|
47
48
|
"spec/endeca/readers_spec.rb",
|
48
49
|
"spec/endeca/refinement_dimension_spec.rb",
|
@@ -57,7 +58,7 @@ Gem::Specification.new do |s|
|
|
57
58
|
s.homepage = %q{http://github.com/primedia/endeca-ruby}
|
58
59
|
s.rdoc_options = ["--charset=UTF-8"]
|
59
60
|
s.require_paths = ["lib"]
|
60
|
-
s.rubygems_version = %q{1.3.
|
61
|
+
s.rubygems_version = %q{1.3.6}
|
61
62
|
s.summary = %q{Endeca adapter for use with the Endeca Bridge}
|
62
63
|
s.test_files = [
|
63
64
|
"spec/endeca_spec.rb",
|
@@ -67,6 +68,7 @@ Gem::Specification.new do |s|
|
|
67
68
|
"spec/endeca/request_spec.rb",
|
68
69
|
"spec/endeca/transformer_spec.rb",
|
69
70
|
"spec/endeca/breadcrumb_spec.rb",
|
71
|
+
"spec/endeca/logging_spec.rb",
|
70
72
|
"spec/endeca/document_spec.rb",
|
71
73
|
"spec/endeca/refinement_spec.rb",
|
72
74
|
"spec/endeca/map_spec.rb",
|
data/lib/endeca.rb
CHANGED
@@ -1,30 +1,19 @@
|
|
1
1
|
require 'curb'
|
2
2
|
require 'yajl'
|
3
3
|
require 'logger'
|
4
|
+
require 'uri'
|
4
5
|
|
5
6
|
$:.unshift(File.dirname(__FILE__))
|
6
7
|
require 'core_ext'
|
7
8
|
require 'endeca/logging'
|
8
9
|
require 'endeca/benchmarking'
|
9
|
-
require 'endeca/readers'
|
10
|
-
require 'endeca/map'
|
11
|
-
require 'endeca/transformer'
|
12
|
-
require 'endeca/dimension'
|
13
|
-
require 'endeca/refinement_dimension'
|
14
|
-
require 'endeca/refinement'
|
15
|
-
require 'endeca/breadcrumbs'
|
16
|
-
require 'endeca/breadcrumb'
|
17
|
-
require 'endeca/request'
|
18
|
-
require 'endeca/document_collection'
|
19
|
-
require 'endeca/document'
|
20
|
-
|
21
10
|
|
22
11
|
module Endeca
|
23
12
|
extend Benchmarking
|
24
13
|
extend Logging
|
25
14
|
|
26
15
|
# :stopdoc:
|
27
|
-
VERSION = '1.
|
16
|
+
VERSION = '1.5.0'
|
28
17
|
# :startdoc:
|
29
18
|
|
30
19
|
# Returns the version string for the library.
|
@@ -32,23 +21,27 @@ module Endeca
|
|
32
21
|
VERSION
|
33
22
|
end
|
34
23
|
|
35
|
-
# Set
|
36
|
-
# Set
|
24
|
+
# Set ENV['ENDECA_DEBUG'] = true to turn on query logging
|
25
|
+
# Set ENV['ENDECA_BENCHMARK'] = true to turn on query benchmarking
|
37
26
|
class << self
|
38
27
|
attr_accessor :logger
|
39
|
-
attr_accessor :debug
|
40
|
-
attr_accessor :benchmark
|
41
28
|
attr_accessor :timeout
|
42
29
|
|
43
30
|
def analyze?
|
44
|
-
debug &&
|
31
|
+
debug? && benchmark?
|
32
|
+
end
|
33
|
+
|
34
|
+
def debug?
|
35
|
+
ENV['ENDECA_DEBUG'] == 'true'
|
36
|
+
end
|
37
|
+
|
38
|
+
def benchmark?
|
39
|
+
ENV['ENDECA_BENCHMARK'] == 'true'
|
45
40
|
end
|
46
41
|
|
47
42
|
end
|
48
43
|
|
49
44
|
self.logger = Logger.new(STDOUT)
|
50
|
-
self.debug = false
|
51
|
-
self.benchmark = false
|
52
45
|
self.timeout = 8
|
53
46
|
|
54
47
|
# Endeca URIs require colons to be escaped
|
@@ -57,4 +50,16 @@ module Endeca
|
|
57
50
|
end
|
58
51
|
end
|
59
52
|
|
53
|
+
require 'endeca/readers'
|
54
|
+
require 'endeca/map'
|
55
|
+
require 'endeca/transformer'
|
56
|
+
require 'endeca/dimension'
|
57
|
+
require 'endeca/refinement_dimension'
|
58
|
+
require 'endeca/refinement'
|
59
|
+
require 'endeca/breadcrumbs'
|
60
|
+
require 'endeca/breadcrumb'
|
61
|
+
require 'endeca/request'
|
62
|
+
require 'endeca/document_collection'
|
63
|
+
require 'endeca/document'
|
64
|
+
|
60
65
|
puts ">> Using Endeca gem version: #{Endeca::VERSION}"
|
data/lib/endeca/benchmarking.rb
CHANGED
@@ -3,34 +3,26 @@ module Endeca
|
|
3
3
|
# Log and benchmark the workings of a single block. Will only be called if
|
4
4
|
# Endeca.debug and Endeca.benchmark are true.
|
5
5
|
def bm(metric_symbol, detail = nil)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
result
|
13
|
-
else
|
14
|
-
yield
|
15
|
-
end
|
6
|
+
result = nil
|
7
|
+
ms = ::Benchmark.ms { result = yield }
|
8
|
+
add_bm_detail(metric_symbol,ms,detail) if detail.to_s.strip.length > 0
|
9
|
+
increase_metric(metric_symbol, ms)
|
10
|
+
Endeca.logger.debug("#{metric_symbol.to_s}: #{'%.1f' % ms}ms")
|
11
|
+
result
|
16
12
|
end
|
17
13
|
|
18
14
|
def increase_metric(metric_symbol, up_value)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Thread.current[:endeca][metric_symbol] += up_value
|
23
|
-
end
|
15
|
+
Thread.current[:endeca] ||= {}
|
16
|
+
Thread.current[:endeca][metric_symbol] ||= 0
|
17
|
+
Thread.current[:endeca][metric_symbol] += up_value
|
24
18
|
end
|
25
19
|
|
26
20
|
private
|
27
21
|
|
28
22
|
def add_bm_detail(label,time,detail)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
Thread.current[:endeca]["#{label}_detail"] << {:detail => detail, :time => time}
|
33
|
-
end
|
23
|
+
Thread.current[:endeca] ||= {}
|
24
|
+
Thread.current[:endeca]["#{label}_detail"] ||= []
|
25
|
+
Thread.current[:endeca]["#{label}_detail"] << {:detail => detail, :time => time}
|
34
26
|
end
|
35
27
|
end
|
36
28
|
end
|
data/lib/endeca/logging.rb
CHANGED
@@ -3,7 +3,8 @@ module Endeca
|
|
3
3
|
# Log and benchmark the workings of a single block. Will only be called if
|
4
4
|
# Endeca.benchmark is true
|
5
5
|
def log(message)
|
6
|
-
|
6
|
+
logger = Endeca.logger
|
7
|
+
logger.debug(message) if Endeca.debug? && logger
|
7
8
|
end
|
8
9
|
end
|
9
10
|
end
|
data/lib/endeca/map.rb
CHANGED
data/lib/endeca/request.rb
CHANGED
@@ -13,10 +13,17 @@ module Endeca
|
|
13
13
|
@query = query
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
if Endeca.analyze?
|
17
|
+
def perform
|
18
|
+
raise RequestError, endeca_error[:message] if endeca_error?
|
19
|
+
Endeca.increase_metric(:request_count, 1)
|
20
|
+
return response
|
21
|
+
end
|
22
|
+
else
|
23
|
+
def perform
|
24
|
+
raise RequestError, endeca_error[:message] if endeca_error?
|
25
|
+
return response
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
def response
|
@@ -47,37 +54,61 @@ module Endeca
|
|
47
54
|
!endeca_error.nil?
|
48
55
|
end
|
49
56
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@response = Curl::Easy.perform(uri.to_s) do |curl|
|
57
|
-
curl.timeout = Endeca.timeout
|
58
|
-
end
|
59
|
-
rescue => e
|
60
|
-
raise RequestError, e.message
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
return @response
|
65
|
-
end
|
66
|
-
|
67
|
-
def handle_response(response) #:nodoc:
|
68
|
-
case response.response_code.to_s
|
69
|
-
when "200"
|
70
|
-
Endeca.bm :parse_time do
|
57
|
+
if Endeca.analyze?
|
58
|
+
def get_response #:nodoc:
|
59
|
+
Endeca.log "ENDECA ADAPTER REQUEST"
|
60
|
+
Endeca.log " parameters => " + @query.inspect
|
61
|
+
Endeca.log " uri => " + uri.to_s
|
62
|
+
Endeca.bm(:request_time, "#{@path} #{@query.inspect}") do
|
71
63
|
begin
|
72
|
-
|
73
|
-
|
74
|
-
|
64
|
+
Curl::Easy.perform(uri.to_s) do |curl|
|
65
|
+
curl.timeout = Endeca.timeout
|
66
|
+
end
|
67
|
+
rescue => e
|
68
|
+
raise RequestError, e.message
|
75
69
|
end
|
76
70
|
end
|
77
|
-
else
|
78
|
-
raise RequestError, "#{response.response_code} HTTP Error"
|
79
71
|
end
|
80
|
-
|
72
|
+
else
|
73
|
+
def get_response #:nodoc:
|
74
|
+
Curl::Easy.perform(uri.to_s) do |curl|
|
75
|
+
curl.timeout = Endeca.timeout
|
76
|
+
end
|
77
|
+
rescue => e
|
78
|
+
raise RequestError, e.message
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
if Endeca.analyze?
|
83
|
+
|
84
|
+
def handle_response(response) #:nodoc:
|
85
|
+
case response.response_code.to_s
|
86
|
+
when "200"
|
87
|
+
Endeca.bm :parse_time do
|
88
|
+
begin
|
89
|
+
Yajl::Parser.parse(response.body_str)
|
90
|
+
rescue Yajl::ParseError => e
|
91
|
+
raise RequestError, "JSON Parse error: #{e}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
else
|
95
|
+
raise RequestError, "#{response.response_code} HTTP Error"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
else
|
99
|
+
def handle_response(response) #:nodoc:
|
100
|
+
case response.response_code.to_s
|
101
|
+
when "200"
|
102
|
+
begin
|
103
|
+
Yajl::Parser.parse(response.body_str)
|
104
|
+
rescue Yajl::ParseError => e
|
105
|
+
raise RequestError, "JSON Parse error: #{e}"
|
106
|
+
end
|
107
|
+
else
|
108
|
+
raise RequestError, "#{response.response_code} HTTP Error"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
81
112
|
|
82
113
|
def query_string
|
83
114
|
@path.match(/\?(.*)$/)
|
@@ -383,7 +383,7 @@ describe Endeca::Document do
|
|
383
383
|
|
384
384
|
describe "#inspect" do
|
385
385
|
it "should return details of the Document class" do
|
386
|
-
Endeca::Document.inspect.should == "#<Endeca::Document>\nPath: \"http://endeca.example.com\"\nCollection Class: SubDocumentCollection\"\nMappings:\n\tfoo: {:new_foo
|
386
|
+
Endeca::Document.inspect.should == "#<Endeca::Document>\nPath: \"http://endeca.example.com\"\nCollection Class: SubDocumentCollection\"\nMappings:\n\tfoo: {:new_foo=>\"inspect_data\"}\n\t \nDefaultParams:\n\t \n"
|
387
387
|
end
|
388
388
|
end
|
389
389
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Logit
|
4
|
+
include Endeca::Logging
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Endeca::Logging do
|
8
|
+
before do
|
9
|
+
@logit = Logit.new
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.log' do
|
13
|
+
it 'calls endeca logger' do
|
14
|
+
logger = mock('logger')
|
15
|
+
Endeca.should_receive(:debug?).and_return(true)
|
16
|
+
Endeca.should_receive(:logger).and_return(logger)
|
17
|
+
|
18
|
+
logger.should_receive(:debug).with('hiya')
|
19
|
+
|
20
|
+
@logit.log('hiya')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/spec/endeca/map_spec.rb
CHANGED
@@ -116,7 +116,7 @@ describe Endeca::Map do
|
|
116
116
|
map = Endeca::Map.new :foo
|
117
117
|
map.into(:Ntk => :Ntt)
|
118
118
|
map.inspect.should include(":Ntk=>\"foo\"")
|
119
|
-
map.inspect.should include(":Ntt=>\"\"")
|
119
|
+
map.inspect.should include(":Ntt=>\"inspect_data\"")
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
data/spec/endeca_spec.rb
CHANGED
@@ -14,6 +14,34 @@ describe Endeca do
|
|
14
14
|
Endeca.escape(query).should == 'N=5875%205922&Nf=geocode%7CGCLT%2026.121900,-80.143600%2032.18688&Nu=mgtcoid&Ns=searchonly%7C0%7C%7Cisapartment%7C1%7C%7Csortorder%7C0&Ntk=showapartment%7Cmgtcologodisplay&F=cityseopath%3A1%7Cmediummgtcologo%3A1%7Cmgtcodescription%3A1%7Cmgtcoid%3A1%7Cmgtcologo%3A1%7Cmgtcologodisplay%3A1%7Cmgtconame%3A1%7Cmsa_code%3A1%7Cpropertycity%3A1%7Cpropertystatelong%3A1%7Csmallmgtcologo%3A1%7Cwebtollfree%3A1%7Cmvtphone%3A1&Ntt=1%7C1&M=recs_per_page%3A99999%7Cexpand_all_dims%3A0'
|
15
15
|
|
16
16
|
end
|
17
|
+
|
18
|
+
it "#anaylze" do
|
19
|
+
Endeca.should_receive(:debug?).and_return(true)
|
20
|
+
Endeca.should_receive(:benchmark?).and_return(true)
|
21
|
+
|
22
|
+
Endeca.analyze?
|
23
|
+
end
|
24
|
+
|
25
|
+
it "#debug?" do
|
26
|
+
ENV['ENDECA_DEBUG'] = 'true'
|
27
|
+
|
28
|
+
Endeca.debug?.should == true
|
29
|
+
|
30
|
+
ENV['ENDECA_DEBUG'] = 'false'
|
31
|
+
|
32
|
+
Endeca.debug?.should == false
|
33
|
+
end
|
34
|
+
|
35
|
+
it "#benchmark?" do
|
36
|
+
ENV['ENDECA_BENCHMARK'] = 'true'
|
37
|
+
|
38
|
+
Endeca.benchmark?.should == true
|
39
|
+
|
40
|
+
ENV['ENDECA_BENCHMARK'] = 'false'
|
41
|
+
|
42
|
+
Endeca.benchmark?.should == false
|
43
|
+
end
|
44
|
+
|
17
45
|
end
|
18
46
|
|
19
47
|
# EOF
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: endeca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 1.5.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Primedia Team
|
@@ -9,39 +14,50 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-05-06 00:00:00 -04:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: curb
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - "="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 6
|
30
|
+
- 6
|
31
|
+
- 0
|
23
32
|
version: 0.6.6.0
|
24
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: yajl-ruby
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
39
|
requirements:
|
31
40
|
- - "="
|
32
41
|
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
- 7
|
45
|
+
- 1
|
33
46
|
version: 0.7.1
|
34
|
-
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
35
49
|
- !ruby/object:Gem::Dependency
|
36
50
|
name: rspec
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
53
|
requirements:
|
41
54
|
- - ">="
|
42
55
|
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
43
58
|
version: "0"
|
44
|
-
|
59
|
+
type: :development
|
60
|
+
version_requirements: *id003
|
45
61
|
description:
|
46
62
|
email: ""
|
47
63
|
executables: []
|
@@ -79,6 +95,7 @@ files:
|
|
79
95
|
- spec/endeca/dimension_spec.rb
|
80
96
|
- spec/endeca/document_collection_spec.rb
|
81
97
|
- spec/endeca/document_spec.rb
|
98
|
+
- spec/endeca/logging_spec.rb
|
82
99
|
- spec/endeca/map_spec.rb
|
83
100
|
- spec/endeca/readers_spec.rb
|
84
101
|
- spec/endeca/refinement_dimension_spec.rb
|
@@ -102,18 +119,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
119
|
requirements:
|
103
120
|
- - ">="
|
104
121
|
- !ruby/object:Gem::Version
|
122
|
+
segments:
|
123
|
+
- 0
|
105
124
|
version: "0"
|
106
|
-
version:
|
107
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
126
|
requirements:
|
109
127
|
- - ">="
|
110
128
|
- !ruby/object:Gem::Version
|
129
|
+
segments:
|
130
|
+
- 0
|
111
131
|
version: "0"
|
112
|
-
version:
|
113
132
|
requirements: []
|
114
133
|
|
115
134
|
rubyforge_project:
|
116
|
-
rubygems_version: 1.3.
|
135
|
+
rubygems_version: 1.3.6
|
117
136
|
signing_key:
|
118
137
|
specification_version: 3
|
119
138
|
summary: Endeca adapter for use with the Endeca Bridge
|
@@ -125,6 +144,7 @@ test_files:
|
|
125
144
|
- spec/endeca/request_spec.rb
|
126
145
|
- spec/endeca/transformer_spec.rb
|
127
146
|
- spec/endeca/breadcrumb_spec.rb
|
147
|
+
- spec/endeca/logging_spec.rb
|
128
148
|
- spec/endeca/document_spec.rb
|
129
149
|
- spec/endeca/refinement_spec.rb
|
130
150
|
- spec/endeca/map_spec.rb
|