primedia-endeca 1.1.0 → 1.2.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 -4
- data/lib/endeca.rb +1 -1
- data/lib/endeca/caching.rb +25 -19
- data/lib/endeca/request.rb +4 -1
- data/spec/endeca/caching_spec.rb +28 -4
- data/spec/endeca/request_spec.rb +1 -1
- metadata +3 -3
data/endeca.gemspec
CHANGED
@@ -2,20 +2,19 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{endeca}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.2.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-
|
9
|
+
s.date = %q{2009-05-13}
|
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
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
|
-
s.has_rdoc = true
|
15
14
|
s.homepage = %q{http://github.com/primedia/endeca-ruby}
|
16
15
|
s.rdoc_options = ["--main", "README.rdoc"]
|
17
16
|
s.require_paths = ["lib"]
|
18
17
|
s.rubyforge_project = %q{endeca}
|
19
|
-
s.rubygems_version = %q{1.3.
|
18
|
+
s.rubygems_version = %q{1.3.3}
|
20
19
|
s.summary = %q{An Endeca client library for Ruby}
|
21
20
|
end
|
data/lib/endeca.rb
CHANGED
data/lib/endeca/caching.rb
CHANGED
@@ -10,16 +10,29 @@ require 'endeca'
|
|
10
10
|
module Endeca #:nodoc:
|
11
11
|
|
12
12
|
class << self
|
13
|
-
def perform_caching
|
14
|
-
|
13
|
+
def perform_caching?
|
14
|
+
!cache_store.nil?
|
15
|
+
end
|
16
|
+
|
17
|
+
def cache_store
|
18
|
+
@cache_store
|
19
|
+
end
|
20
|
+
|
21
|
+
def disable_caching
|
22
|
+
@cache_store = nil
|
23
|
+
end
|
15
24
|
|
16
25
|
# Defines the storage option for cached queries
|
26
|
+
#
|
27
|
+
# ActiveSupport::Cache.lookup_store will return MemoryStore
|
28
|
+
# if nil is passed in and we don't want that.
|
17
29
|
def cache_store=(store_option)
|
18
|
-
|
30
|
+
if store_option
|
31
|
+
@cache_store = ActiveSupport::Cache.lookup_store(store_option)
|
32
|
+
end
|
19
33
|
end
|
20
34
|
end
|
21
35
|
|
22
|
-
|
23
36
|
# Caching is a way to speed up slow Endeca queries by keeping the result of
|
24
37
|
# an Endeca request around to be reused by subequest requests. Caching is
|
25
38
|
# turned off by default.
|
@@ -39,26 +52,19 @@ module Endeca #:nodoc:
|
|
39
52
|
# Endeca.cache_store = :drb_store, "druby://localhost:9192"
|
40
53
|
# Endeca.cache_store = :mem_cache_store, "localhost"
|
41
54
|
# Endeca.cache_store = MyOwnStore.new("parameter")
|
42
|
-
module Caching
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
fetch(cache_key) { get_response_without_caching }
|
55
|
+
module Caching
|
56
|
+
def self.included(base)
|
57
|
+
base.alias_method_chain :get_response, :caching
|
47
58
|
end
|
48
59
|
|
49
60
|
private
|
50
61
|
|
51
|
-
def
|
52
|
-
Endeca.
|
62
|
+
def get_response_with_caching #:nodoc:
|
63
|
+
return get_response_without_caching unless Endeca.perform_caching?
|
64
|
+
fetch { get_response_without_caching }
|
53
65
|
end
|
54
66
|
|
55
|
-
def cache_key
|
56
|
-
|
57
|
-
end
|
67
|
+
def cache_key; Digest::SHA1.hexdigest uri.to_s end
|
68
|
+
def fetch(&block); Endeca.cache_store.fetch(cache_key, &block) end
|
58
69
|
end
|
59
70
|
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
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'uri'
|
2
|
+
require 'lib/endeca/caching'
|
3
|
+
|
2
4
|
module Endeca
|
3
5
|
class RequestError < ::StandardError; end
|
4
6
|
|
5
7
|
class Request
|
6
|
-
|
7
8
|
def self.perform(path, query=nil)
|
8
9
|
raise RequestError, "Must provide a path" unless path
|
9
10
|
new(path, query).perform
|
@@ -77,5 +78,7 @@ module Endeca
|
|
77
78
|
|
78
79
|
query_string_parts.empty? ? nil : query_string_parts.join('&')
|
79
80
|
end
|
81
|
+
|
82
|
+
include Caching
|
80
83
|
end
|
81
84
|
end
|
data/spec/endeca/caching_spec.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), %w[.. spec_helper])
|
2
2
|
|
3
3
|
describe Endeca::Request do
|
4
|
-
before(:all)
|
5
|
-
|
4
|
+
before(:all) do
|
5
|
+
Endeca.cache_store = :memory_store
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:all) do
|
9
|
+
Endeca.disable_caching
|
10
|
+
end
|
11
|
+
|
6
12
|
before do
|
7
13
|
@path = "http://example.com"
|
8
14
|
@query = "foo=bar"
|
@@ -14,7 +20,7 @@ describe Endeca::Request do
|
|
14
20
|
@request.stub!(:cache_key).and_return(@cache_key)
|
15
21
|
end
|
16
22
|
|
17
|
-
|
23
|
+
describe "When a cached response is available" do
|
18
24
|
before do
|
19
25
|
Endeca.cache_store.write(@cache_key, @response)
|
20
26
|
end
|
@@ -29,7 +35,7 @@ describe Endeca::Request do
|
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
32
|
-
|
38
|
+
describe "When a cached response is not available" do
|
33
39
|
before do
|
34
40
|
Endeca.cache_store.delete(@cache_key)
|
35
41
|
end
|
@@ -47,3 +53,21 @@ describe Endeca::Request do
|
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
56
|
+
|
57
|
+
|
58
|
+
describe Endeca::Caching do
|
59
|
+
it "should return false when cache store is not set" do
|
60
|
+
Endeca.perform_caching?.should be_false
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should return false when if disable_caching has been set" do
|
64
|
+
Endeca.cache_store = :memory_store
|
65
|
+
Endeca.disable_caching
|
66
|
+
Endeca.perform_caching?.should be_false
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return memory store" do
|
70
|
+
Endeca.cache_store = :memory_store
|
71
|
+
Endeca.cache_store.class.should == ActiveSupport::Cache::MemoryStore
|
72
|
+
end
|
73
|
+
end
|
data/spec/endeca/request_spec.rb
CHANGED
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: 1.
|
4
|
+
version: 1.2.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-
|
13
|
+
date: 2009-05-13 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -66,7 +66,7 @@ files:
|
|
66
66
|
- spec/rcov.opts
|
67
67
|
- spec/spec.opts
|
68
68
|
- spec/spec_helper.rb
|
69
|
-
has_rdoc:
|
69
|
+
has_rdoc: false
|
70
70
|
homepage: http://github.com/primedia/endeca-ruby
|
71
71
|
post_install_message:
|
72
72
|
rdoc_options:
|