primedia-endeca 0.14.0 → 1.0.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 +3 -3
- data/lib/endeca/caching.rb +64 -0
- data/lib/endeca/request.rb +1 -1
- data/lib/endeca.rb +3 -1
- data/spec/endeca/caching_spec.rb +49 -0
- data/spec/endeca/request_spec.rb +6 -0
- metadata +4 -2
data/endeca.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{endeca}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "1.0.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Rein Henrichs", "Andy Stone"]
|
9
|
-
s.date = %q{2009-04-
|
9
|
+
s.date = %q{2009-04-21}
|
10
10
|
s.description = %q{An Endeca client library for Ruby.}
|
11
11
|
s.email = %q{}
|
12
12
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.rdoc"]
|
13
|
-
s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "endeca.gemspec", "example/benchmark.rb", "example/listing.rb", "lib/class_to_proc.rb", "lib/core_ext.rb", "lib/endeca.rb", "lib/endeca/benchmarking.rb", "lib/endeca/breadcrumb.rb", "lib/endeca/breadcrumbs.rb", "lib/endeca/dimension.rb", "lib/endeca/document.rb", "lib/endeca/document_collection.rb", "lib/endeca/logging.rb", "lib/endeca/map.rb", "lib/endeca/readers.rb", "lib/endeca/refinement.rb", "lib/endeca/refinement_dimension.rb", "lib/endeca/request.rb", "lib/endeca/transformer.rb", "spec/core_ext_spec.rb", "spec/endeca/benchmarking_spec.rb", "spec/endeca/breadcrumb_spec.rb", "spec/endeca/dimension_spec.rb", "spec/endeca/document_collection_spec.rb", "spec/endeca/document_spec.rb", "spec/endeca/map_spec.rb", "spec/endeca/readers_spec.rb", "spec/endeca/refinement_dimension_spec.rb", "spec/endeca/refinement_spec.rb", "spec/endeca/request_spec.rb", "spec/endeca/transformer_spec.rb", "spec/endeca_spec.rb", "spec/rcov.opts", "spec/spec.opts", "spec/spec_helper.rb"]
|
13
|
+
s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "endeca.gemspec", "example/benchmark.rb", "example/listing.rb", "lib/class_to_proc.rb", "lib/core_ext.rb", "lib/endeca.rb", "lib/endeca/benchmarking.rb", "lib/endeca/breadcrumb.rb", "lib/endeca/breadcrumbs.rb", "lib/endeca/caching.rb", "lib/endeca/dimension.rb", "lib/endeca/document.rb", "lib/endeca/document_collection.rb", "lib/endeca/logging.rb", "lib/endeca/map.rb", "lib/endeca/readers.rb", "lib/endeca/refinement.rb", "lib/endeca/refinement_dimension.rb", "lib/endeca/request.rb", "lib/endeca/transformer.rb", "spec/core_ext_spec.rb", "spec/endeca/benchmarking_spec.rb", "spec/endeca/breadcrumb_spec.rb", "spec/endeca/caching_spec.rb", "spec/endeca/dimension_spec.rb", "spec/endeca/document_collection_spec.rb", "spec/endeca/document_spec.rb", "spec/endeca/map_spec.rb", "spec/endeca/readers_spec.rb", "spec/endeca/refinement_dimension_spec.rb", "spec/endeca/refinement_spec.rb", "spec/endeca/request_spec.rb", "spec/endeca/transformer_spec.rb", "spec/endeca_spec.rb", "spec/rcov.opts", "spec/spec.opts", "spec/spec_helper.rb"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://github.com/primedia/endeca-ruby}
|
16
16
|
s.rdoc_options = ["--main", "README.rdoc"]
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'digest/sha1'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'active_support/core_ext/module/aliasing'
|
5
|
+
require 'active_support/core_ext/array'
|
6
|
+
require 'active_support/core_ext/class'
|
7
|
+
require 'active_support/cache'
|
8
|
+
require 'endeca'
|
9
|
+
|
10
|
+
module Endeca #:nodoc:
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def perform_caching?; !@@cache_store.nil? end
|
14
|
+
def cache_store; @@cache_store; end
|
15
|
+
|
16
|
+
# Defines the storage option for cached queries
|
17
|
+
def cache_store=(store_option)
|
18
|
+
@@cache_store = ActiveSupport::Cache.lookup_store(store_option)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# Caching is a way to speed up slow Endeca queries by keeping the result of
|
24
|
+
# an Endeca request around to be reused by subequest requests. Caching is
|
25
|
+
# turned off by default.
|
26
|
+
#
|
27
|
+
# Note: To ensure that caching is turned off, set Endeca.cache_store = nil
|
28
|
+
#
|
29
|
+
# == Caching stores
|
30
|
+
#
|
31
|
+
# All the caching stores from ActiveSupport::Cache are available to be used
|
32
|
+
# as backends for Endeca caching. See the Rails rdoc for more information on
|
33
|
+
# these stores
|
34
|
+
#
|
35
|
+
# Configuration examples (MemoryStore is the default):
|
36
|
+
#
|
37
|
+
# Endeca.cache_store = :memory_store
|
38
|
+
# Endeca.cache_store = :file_store, "/path/to/cache/directory"
|
39
|
+
# Endeca.cache_store = :drb_store, "druby://localhost:9192"
|
40
|
+
# Endeca.cache_store = :mem_cache_store, "localhost"
|
41
|
+
# Endeca.cache_store = MyOwnStore.new("parameter")
|
42
|
+
module Caching
|
43
|
+
def get_response_with_caching #:nodoc:
|
44
|
+
return get_response_without_caching unless Endeca.perform_caching?
|
45
|
+
|
46
|
+
fetch(cache_key) { get_response_without_caching }
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def fetch(key, &block)
|
52
|
+
Endeca.cache_store.fetch(key, &block)
|
53
|
+
end
|
54
|
+
|
55
|
+
def cache_key
|
56
|
+
Digest::SHA1.hexdigest uri.to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
Endeca::Request.class_eval do
|
62
|
+
include Endeca::Caching
|
63
|
+
alias_method_chain :get_response, :caching
|
64
|
+
end
|
data/lib/endeca/request.rb
CHANGED
data/lib/endeca.rb
CHANGED
@@ -21,12 +21,14 @@ require 'endeca/request'
|
|
21
21
|
require 'endeca/document_collection'
|
22
22
|
require 'endeca/document'
|
23
23
|
|
24
|
+
require 'endeca/caching'
|
25
|
+
|
24
26
|
module Endeca
|
25
27
|
extend Benchmarking
|
26
28
|
extend Logging
|
27
29
|
|
28
30
|
# :stopdoc:
|
29
|
-
VERSION = '0.
|
31
|
+
VERSION = '1.0.0'
|
30
32
|
# :startdoc:
|
31
33
|
|
32
34
|
# Returns the version string for the library.
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), %w[.. spec_helper])
|
2
|
+
|
3
|
+
describe Endeca::Request do
|
4
|
+
before(:all){ Endeca.cache_store = :memory_store }
|
5
|
+
after(:all){ Endeca.cache_store = nil }
|
6
|
+
before do
|
7
|
+
@path = "http://example.com"
|
8
|
+
@query = "foo=bar"
|
9
|
+
@request = Endeca::Request.new(@path, @query)
|
10
|
+
@response = {"a successful" => "response"}
|
11
|
+
|
12
|
+
@request.stub!(:handle_response).and_return(@response)
|
13
|
+
@cache_key = :key
|
14
|
+
@request.stub!(:cache_key).and_return(@cache_key)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "When a cached response is available" do
|
18
|
+
before do
|
19
|
+
Endeca.cache_store.write(@cache_key, @response)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should not perform the request" do
|
23
|
+
@request.should_not_receive(:get_response_without_caching)
|
24
|
+
@request.perform
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should read from the cache" do
|
28
|
+
@request.perform.should == @response
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "When a cached response is not available" do
|
33
|
+
before do
|
34
|
+
Endeca.cache_store.delete(@cache_key)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should perform the request" do
|
38
|
+
@request.should_receive(:get_response_without_caching)
|
39
|
+
@request.perform
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should cache the response using the caching key" do
|
43
|
+
@request.stub!(:get_response_without_caching).and_return(@response)
|
44
|
+
|
45
|
+
@request.perform
|
46
|
+
Endeca.cache_store.read(@request.send(:cache_key)).should == @response
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/spec/endeca/request_spec.rb
CHANGED
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), %w[.. spec_helper])
|
|
6
6
|
describe Endeca::Request do
|
7
7
|
before do
|
8
8
|
@path = 'http://example.com/foobar'
|
9
|
+
Endeca.cache_store = nil
|
9
10
|
end
|
10
11
|
|
11
12
|
describe '.perform' do
|
@@ -24,6 +25,11 @@ describe Endeca::Request do
|
|
24
25
|
before do
|
25
26
|
@request = Endeca::Request.new(@path)
|
26
27
|
end
|
28
|
+
|
29
|
+
it "should not make more than one request" do
|
30
|
+
@request.should_receive(:handle_response).exactly(1).times.and_return({})
|
31
|
+
@request.perform
|
32
|
+
end
|
27
33
|
|
28
34
|
describe "when successful" do
|
29
35
|
before do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: primedia-endeca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rein Henrichs
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-04-
|
13
|
+
date: 2009-04-21 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -47,6 +47,7 @@ files:
|
|
47
47
|
- lib/endeca/benchmarking.rb
|
48
48
|
- lib/endeca/breadcrumb.rb
|
49
49
|
- lib/endeca/breadcrumbs.rb
|
50
|
+
- lib/endeca/caching.rb
|
50
51
|
- lib/endeca/dimension.rb
|
51
52
|
- lib/endeca/document.rb
|
52
53
|
- lib/endeca/document_collection.rb
|
@@ -60,6 +61,7 @@ files:
|
|
60
61
|
- spec/core_ext_spec.rb
|
61
62
|
- spec/endeca/benchmarking_spec.rb
|
62
63
|
- spec/endeca/breadcrumb_spec.rb
|
64
|
+
- spec/endeca/caching_spec.rb
|
63
65
|
- spec/endeca/dimension_spec.rb
|
64
66
|
- spec/endeca/document_collection_spec.rb
|
65
67
|
- spec/endeca/document_spec.rb
|