primedia-endeca 0.14.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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.14.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-06}
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
@@ -20,7 +20,7 @@ module Endeca
20
20
  end
21
21
 
22
22
  def response
23
- handle_response(get_response)
23
+ @response ||= handle_response(get_response)
24
24
  end
25
25
 
26
26
  def uri
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.11.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
@@ -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.14.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-06 00:00:00 -07:00
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