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 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