endeca 1.4.2 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|