endeca 1.3.8 → 1.4.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/.gitignore +7 -0
- data/Rakefile +20 -28
- data/endeca.gemspec +71 -12
- data/lib/core_ext.rb +15 -1
- data/lib/endeca.rb +3 -19
- data/lib/endeca/benchmarking.rb +0 -2
- data/lib/endeca/breadcrumb.rb +0 -4
- data/lib/endeca/dimension.rb +0 -1
- data/lib/endeca/document.rb +2 -3
- data/lib/endeca/document_collection.rb +4 -5
- data/lib/endeca/refinement.rb +2 -3
- data/lib/endeca/refinement_dimension.rb +0 -1
- data/lib/endeca/request.rb +36 -34
- data/lib/endeca/transformer.rb +1 -3
- data/spec/core_ext_spec.rb +26 -0
- data/spec/endeca/breadcrumb_spec.rb +0 -7
- data/spec/endeca/request_spec.rb +32 -29
- data/spec/endeca_spec.rb +0 -18
- metadata +25 -29
- data/History.txt +0 -4
- data/lib/class_to_proc.rb +0 -5
- data/tasks/ann.rake +0 -80
- data/tasks/bones.rake +0 -20
- data/tasks/gem.rake +0 -201
- data/tasks/git.rake +0 -40
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -50
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -300
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
data/.gitignore
ADDED
data/Rakefile
CHANGED
@@ -1,22 +1,10 @@
|
|
1
|
-
|
2
|
-
# configured in this Rakefile. The .rake files in the tasks directory
|
3
|
-
# are where the options are used.
|
1
|
+
require 'rubygems'
|
4
2
|
|
5
|
-
|
6
|
-
require 'bones'
|
7
|
-
Bones.setup
|
8
|
-
rescue LoadError
|
9
|
-
begin
|
10
|
-
load 'tasks/setup.rb'
|
11
|
-
rescue LoadError
|
12
|
-
raise RuntimeError, '### please install the "bones" gem ###'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
begin; require 'metric_fu'; rescue LoadError; end
|
3
|
+
require File.join(File.dirname(__FILE__),'lib', 'endeca')
|
17
4
|
|
18
|
-
|
19
|
-
|
5
|
+
desire('rake')
|
6
|
+
desire('rcov')
|
7
|
+
desire('spec/rake/spectask')
|
20
8
|
|
21
9
|
task :default => 'rcov'
|
22
10
|
|
@@ -39,14 +27,18 @@ Spec::Rake::SpecTask.new(:rcov) do |t|
|
|
39
27
|
t.rcov_opts = IO.readlines("spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
|
40
28
|
end
|
41
29
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
30
|
+
begin
|
31
|
+
require 'jeweler'
|
32
|
+
Jeweler::Tasks.new do |gemspec|
|
33
|
+
gemspec.name = "endeca"
|
34
|
+
gemspec.version = Endeca.version
|
35
|
+
gemspec.summary = "Endeca adapter for use with the Endeca Bridge"
|
36
|
+
gemspec.email = ""
|
37
|
+
gemspec.homepage = 'http://github.com/primedia/endeca-ruby'
|
38
|
+
gemspec.authors = ["Primedia Team"]
|
39
|
+
gemspec.add_development_dependency('rspec')
|
40
|
+
end
|
41
|
+
Jeweler::GemcutterTasks.new
|
42
|
+
rescue LoadError
|
43
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
44
|
+
end
|
data/endeca.gemspec
CHANGED
@@ -1,33 +1,92 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{endeca}
|
5
|
-
s.version = "1.
|
8
|
+
s.version = "1.4.0"
|
6
9
|
|
7
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["
|
9
|
-
s.date = %q{
|
10
|
-
s.description = %q{An Endeca client library for Ruby.}
|
11
|
+
s.authors = ["Primedia Team"]
|
12
|
+
s.date = %q{2010-02-19}
|
11
13
|
s.email = %q{}
|
12
|
-
s.extra_rdoc_files = [
|
13
|
-
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"README.rdoc"
|
16
|
+
]
|
17
|
+
s.files = [
|
18
|
+
".gitignore",
|
19
|
+
"Manifest.txt",
|
20
|
+
"README.rdoc",
|
21
|
+
"Rakefile",
|
22
|
+
"endeca.gemspec",
|
23
|
+
"example/benchmark.rb",
|
24
|
+
"example/listing.rb",
|
25
|
+
"lib/core_ext.rb",
|
26
|
+
"lib/endeca.rb",
|
27
|
+
"lib/endeca/benchmarking.rb",
|
28
|
+
"lib/endeca/breadcrumb.rb",
|
29
|
+
"lib/endeca/breadcrumbs.rb",
|
30
|
+
"lib/endeca/dimension.rb",
|
31
|
+
"lib/endeca/document.rb",
|
32
|
+
"lib/endeca/document_collection.rb",
|
33
|
+
"lib/endeca/logging.rb",
|
34
|
+
"lib/endeca/map.rb",
|
35
|
+
"lib/endeca/readers.rb",
|
36
|
+
"lib/endeca/refinement.rb",
|
37
|
+
"lib/endeca/refinement_dimension.rb",
|
38
|
+
"lib/endeca/request.rb",
|
39
|
+
"lib/endeca/transformer.rb",
|
40
|
+
"spec/core_ext_spec.rb",
|
41
|
+
"spec/endeca/benchmarking_spec.rb",
|
42
|
+
"spec/endeca/breadcrumb_spec.rb",
|
43
|
+
"spec/endeca/dimension_spec.rb",
|
44
|
+
"spec/endeca/document_collection_spec.rb",
|
45
|
+
"spec/endeca/document_spec.rb",
|
46
|
+
"spec/endeca/map_spec.rb",
|
47
|
+
"spec/endeca/readers_spec.rb",
|
48
|
+
"spec/endeca/refinement_dimension_spec.rb",
|
49
|
+
"spec/endeca/refinement_spec.rb",
|
50
|
+
"spec/endeca/request_spec.rb",
|
51
|
+
"spec/endeca/transformer_spec.rb",
|
52
|
+
"spec/endeca_spec.rb",
|
53
|
+
"spec/rcov.opts",
|
54
|
+
"spec/spec.opts",
|
55
|
+
"spec/spec_helper.rb"
|
56
|
+
]
|
14
57
|
s.homepage = %q{http://github.com/primedia/endeca-ruby}
|
15
|
-
s.rdoc_options = ["--
|
58
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
16
59
|
s.require_paths = ["lib"]
|
17
|
-
s.rubyforge_project = %q{endeca}
|
18
60
|
s.rubygems_version = %q{1.3.5}
|
19
|
-
s.summary = %q{
|
61
|
+
s.summary = %q{Endeca adapter for use with the Endeca Bridge}
|
62
|
+
s.test_files = [
|
63
|
+
"spec/endeca_spec.rb",
|
64
|
+
"spec/core_ext_spec.rb",
|
65
|
+
"spec/endeca/document_collection_spec.rb",
|
66
|
+
"spec/endeca/readers_spec.rb",
|
67
|
+
"spec/endeca/request_spec.rb",
|
68
|
+
"spec/endeca/transformer_spec.rb",
|
69
|
+
"spec/endeca/breadcrumb_spec.rb",
|
70
|
+
"spec/endeca/document_spec.rb",
|
71
|
+
"spec/endeca/refinement_spec.rb",
|
72
|
+
"spec/endeca/map_spec.rb",
|
73
|
+
"spec/endeca/refinement_dimension_spec.rb",
|
74
|
+
"spec/endeca/dimension_spec.rb",
|
75
|
+
"spec/endeca/benchmarking_spec.rb",
|
76
|
+
"spec/spec_helper.rb"
|
77
|
+
]
|
20
78
|
|
21
79
|
if s.respond_to? :specification_version then
|
22
80
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
81
|
s.specification_version = 3
|
24
82
|
|
25
83
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
-
s.add_development_dependency(%q<
|
84
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
27
85
|
else
|
28
|
-
s.add_dependency(%q<
|
86
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
29
87
|
end
|
30
88
|
else
|
31
|
-
s.add_dependency(%q<
|
89
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
32
90
|
end
|
33
91
|
end
|
92
|
+
|
data/lib/core_ext.rb
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
+
module Kernel
|
2
|
+
def desire(library)
|
3
|
+
require library
|
4
|
+
true
|
5
|
+
rescue LoadError
|
6
|
+
STDERR.puts "warning: #{library} gem desired but not found."
|
7
|
+
false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
1
11
|
class Object
|
12
|
+
def self.ruby_version
|
13
|
+
RUBY_VERSION
|
14
|
+
end
|
15
|
+
|
2
16
|
def blank?
|
3
17
|
respond_to?(:empty?) ? empty? : !self
|
4
18
|
end
|
@@ -13,7 +27,7 @@ end
|
|
13
27
|
require 'benchmark'
|
14
28
|
class << Benchmark
|
15
29
|
# Earlier Ruby had a slower implementation.
|
16
|
-
if
|
30
|
+
if ruby_version < '1.8.7'
|
17
31
|
remove_method :realtime
|
18
32
|
|
19
33
|
def realtime
|
data/lib/endeca.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require 'json'
|
1
|
+
require 'curb'
|
2
|
+
require 'yajl'
|
4
3
|
require 'logger'
|
5
4
|
|
6
5
|
$:.unshift(File.dirname(__FILE__))
|
7
6
|
require 'core_ext'
|
8
|
-
require 'class_to_proc'
|
9
7
|
require 'endeca/logging'
|
10
8
|
require 'endeca/benchmarking'
|
11
9
|
require 'endeca/readers'
|
@@ -26,7 +24,7 @@ module Endeca
|
|
26
24
|
extend Logging
|
27
25
|
|
28
26
|
# :stopdoc:
|
29
|
-
VERSION = '1.
|
27
|
+
VERSION = '1.4.0'
|
30
28
|
# :startdoc:
|
31
29
|
|
32
30
|
# Returns the version string for the library.
|
@@ -46,19 +44,6 @@ module Endeca
|
|
46
44
|
debug && logger && benchmark
|
47
45
|
end
|
48
46
|
|
49
|
-
def timer
|
50
|
-
@timer ||= get_timer
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def get_timer
|
56
|
-
require 'system_timer'
|
57
|
-
SystemTimer
|
58
|
-
rescue LoadError
|
59
|
-
require 'timeout'
|
60
|
-
Timeout
|
61
|
-
end
|
62
47
|
end
|
63
48
|
|
64
49
|
self.logger = Logger.new(STDOUT)
|
@@ -66,7 +51,6 @@ module Endeca
|
|
66
51
|
self.benchmark = false
|
67
52
|
self.timeout = 8
|
68
53
|
|
69
|
-
|
70
54
|
# Endeca URIs require colons to be escaped
|
71
55
|
def self.escape(str)
|
72
56
|
URI.escape(str, /[^-_.!~*'()a-zA-Z\d;\/?@&=+$,\[\]]/n)
|
data/lib/endeca/benchmarking.rb
CHANGED
data/lib/endeca/breadcrumb.rb
CHANGED
data/lib/endeca/dimension.rb
CHANGED
data/lib/endeca/document.rb
CHANGED
@@ -7,7 +7,6 @@ module Endeca
|
|
7
7
|
# typecasting) and a few basic examples are provided (i.e. +integer_reader+).
|
8
8
|
class Document
|
9
9
|
include Readers
|
10
|
-
extend ClassToProc
|
11
10
|
extend Transformer
|
12
11
|
|
13
12
|
inherited_accessor :mappings, {}
|
@@ -52,7 +51,7 @@ DefaultParams:\n\t#{get_default_params.collect{|k,v| "#{k}: #{v.inspect}\n\t"}.t
|
|
52
51
|
@dimensions = {}
|
53
52
|
(raw['Dimensions'] || {}).each do |name, values|
|
54
53
|
values = [values] unless Array === values
|
55
|
-
@dimensions[name] = values.map(
|
54
|
+
@dimensions[name] = values.map{|value| Dimension.new(value)}
|
56
55
|
end
|
57
56
|
@dimensions
|
58
57
|
end
|
@@ -87,7 +86,7 @@ DefaultParams:\n\t#{get_default_params.collect{|k,v| "#{k}: #{v.inspect}\n\t"}.t
|
|
87
86
|
# Listing.find(:first, :available => true)
|
88
87
|
def self.find(what, query_options={})
|
89
88
|
case what
|
90
|
-
when Integer, /^[A-
|
89
|
+
when Integer, /^[A-Za-z\d]+$/
|
91
90
|
by_id(what, query_options)
|
92
91
|
when String
|
93
92
|
all(what)
|
@@ -18,7 +18,6 @@ module Endeca
|
|
18
18
|
# borrowed from Rake::FileList)
|
19
19
|
class DocumentCollection
|
20
20
|
include Readers
|
21
|
-
extend ClassToProc
|
22
21
|
|
23
22
|
attr_reader :raw
|
24
23
|
def initialize(raw, document_klass=Document)
|
@@ -59,9 +58,9 @@ module Endeca
|
|
59
58
|
# The internal collection of Document objects. Array methods are delegated here.
|
60
59
|
def documents
|
61
60
|
if @raw['Records']
|
62
|
-
@documents ||= @raw['Records'].map(
|
61
|
+
@documents ||= @raw['Records'].map{|record| @document_klass.new(record)}
|
63
62
|
elsif aggregate?
|
64
|
-
@documents ||= @raw['AggrRecords'].map{|aggregate| aggregate['Records'].first}.map(
|
63
|
+
@documents ||= @raw['AggrRecords'].map{|aggregate| aggregate['Records'].first}.map{|record| @document_klass.new(record)}
|
65
64
|
else
|
66
65
|
[]
|
67
66
|
end
|
@@ -73,12 +72,12 @@ module Endeca
|
|
73
72
|
|
74
73
|
# The collection of Refinement objects for the collection.
|
75
74
|
def refinements
|
76
|
-
@refinements ||= (@raw['Refinements'] || []).map(
|
75
|
+
@refinements ||= (@raw['Refinements'] || []).map{|data| Refinement.new(data)}
|
77
76
|
end
|
78
77
|
|
79
78
|
# The collection of Breadcrumb objects for the collection.
|
80
79
|
def breadcrumbs
|
81
|
-
@breadcrumbs ||= (@raw['Breadcrumbs'] || []).map(
|
80
|
+
@breadcrumbs ||= (@raw['Breadcrumbs'] || []).map{|data| Breadcrumb.create(data)}
|
82
81
|
end
|
83
82
|
|
84
83
|
# Return the refinement by name
|
data/lib/endeca/refinement.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module Endeca
|
2
2
|
class Refinement
|
3
3
|
include Readers
|
4
|
-
extend ClassToProc
|
5
4
|
|
6
5
|
reader 'DimensionName' => :name,
|
7
6
|
'ExpansionLink' => :expansion_link,
|
@@ -10,11 +9,11 @@ module Endeca
|
|
10
9
|
integer_reader 'DimensionID' => :id
|
11
10
|
|
12
11
|
reader('DimensionValues' => :dimension_values) do |values|
|
13
|
-
values.map(
|
12
|
+
values.map{|value| Dimension.new(value)} if values
|
14
13
|
end
|
15
14
|
|
16
15
|
reader('Dimensions' => :dimensions) do |values|
|
17
|
-
values.map(
|
16
|
+
values.map{|value| RefinementDimension.new(value)} if values
|
18
17
|
end
|
19
18
|
|
20
19
|
attr_reader :raw
|
data/lib/endeca/request.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'uri'
|
2
1
|
|
3
2
|
module Endeca
|
4
3
|
class RequestError < ::StandardError; end
|
@@ -27,10 +26,8 @@ module Endeca
|
|
27
26
|
def uri
|
28
27
|
return @uri if @uri
|
29
28
|
|
30
|
-
|
31
|
-
@uri
|
32
|
-
@uri = URI.parse("#{@path}#{@query}") if @query && @query.include?("/_/")
|
33
|
-
@uri
|
29
|
+
path_query = query_string
|
30
|
+
@uri = path_query ? "#{@path}?#{path_query}" : @path
|
34
31
|
end
|
35
32
|
|
36
33
|
private
|
@@ -51,38 +48,43 @@ module Endeca
|
|
51
48
|
end
|
52
49
|
|
53
50
|
def get_response #:nodoc:
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
51
|
+
Endeca.log "ENDECA ADAPTER REQUEST"
|
52
|
+
Endeca.log " parameters => " + @query.inspect
|
53
|
+
Endeca.log " uri => " + uri.to_s
|
54
|
+
Endeca.bm(:request_time, "#{@path} #{@query.inspect}") do
|
55
|
+
begin
|
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
|
62
63
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# Raises exception Net::XXX (http error code) if an http error occured
|
67
|
-
def handle_response(response) #:nodoc:
|
68
|
-
case response
|
69
|
-
when Net::HTTPSuccess
|
70
|
-
Endeca.bm :parse_time do
|
71
|
-
@json = JSON.parse(response.body)
|
72
|
-
end
|
73
|
-
else
|
74
|
-
response.error! # raises exception corresponding to http error Net::XXX
|
75
|
-
end
|
64
|
+
return @response
|
65
|
+
end
|
76
66
|
|
77
|
-
|
78
|
-
|
79
|
-
|
67
|
+
def handle_response(response) #:nodoc:
|
68
|
+
case response.response_code.to_s
|
69
|
+
when "200"
|
70
|
+
Endeca.bm :parse_time do
|
71
|
+
begin
|
72
|
+
@json = Yajl::Parser.parse(response.body_str)
|
73
|
+
rescue Yajl::ParseError => e
|
74
|
+
raise RequestError, "JSON Parse error: #{e}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
else
|
78
|
+
raise RequestError, "#{response.response_code} HTTP Error"
|
79
|
+
end
|
80
|
+
end
|
80
81
|
|
81
|
-
|
82
|
-
|
83
|
-
|
82
|
+
def query_string
|
83
|
+
@path.match(/\?(.*)$/)
|
84
|
+
query_string_parts = [$1, @query.to_endeca_params]
|
85
|
+
query_string_parts.reject!{ |s| s.nil? || s.empty? }
|
84
86
|
|
85
|
-
|
86
|
-
|
87
|
+
query_string_parts.empty? ? nil : query_string_parts.join('&')
|
88
|
+
end
|
87
89
|
end
|
88
90
|
end
|