dim-tokyo-cache-store 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Dimitrij Denissenko
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,42 @@
1
+ Tokyo Cache Store
2
+ =================
3
+
4
+ An ActiveSupport (Rails) cache-store plugin for Tokyo Tyrant.
5
+
6
+ Overview
7
+
8
+ * File based cache engine
9
+ * Lightning fast - performance comparable to memcached
10
+ http://www.mikeperham.com/2009/03/08/tokyo-cabinet-vs-memcached/
11
+ * High compression rates
12
+ * Excellent replication capabilities
13
+
14
+ Requirements
15
+
16
+ Tokyo Cabinet:
17
+ http://1978th.net/tokyocabinet/
18
+
19
+ Tokyo Tyrant:
20
+ http://1978th.net/tokyotyrant/
21
+
22
+ (Fast) Ruby Bindings:
23
+ sudo gem install actsasflinn-ruby-tokyotyrant --source=http://gems.github.com
24
+
25
+ Installation
26
+
27
+ As a rails plugin:
28
+ script/plugin install git://github.com/dim/tokyo-cache-store.git
29
+
30
+ As a GEM:
31
+ sudo gem install dim-tokyo-cache-store --source=http://gems.github.com
32
+
33
+ Usage (simplified)
34
+
35
+ Create a new cache store:
36
+ tchmgr create ./tmp/cache/tt_store.tch # See 'man tchmgr' for a full list of options
37
+
38
+ Start the tokyo-tyrant server:
39
+ ttserver ./tmp/cache/tt_store.tch # See 'man ttserver' for a full list of options
40
+
41
+ Configure the Rails cache store (in environment.rb):
42
+ config.cache_store = :tokyo_cache_store, 'localhost', 1978
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'rake'
2
+ require 'spec/rake/spectask'
3
+
4
+ task :default => :spec
5
+
6
+ desc "Run the extension specs"
7
+ Spec::Rake::SpecTask.new(:spec) do |t|
8
+ t.spec_files = FileList["spec/**/*_spec.rb"]
9
+ end
10
+
11
+ begin
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |spec|
14
+ spec.name = "tokyo-cache-store"
15
+ spec.summary = "Tokyo Tyrant Cache Store"
16
+ spec.email = "contact@dvisionfactory.com"
17
+ spec.homepage = "http://github.com/dim/tokyo-cache-store"
18
+ spec.description = "Tokyo Tyrant cache store for ActiveSupport/Rails."
19
+ spec.authors = ["Dimitrij Denissenko"]
20
+ spec.test_files = Dir.glob('spec/**')
21
+ spec.add_dependency('activesupport', '>= 2.3.0')
22
+ spec.add_dependency('actsasflinn-ruby-tokyotyrant', '>= 0.2.0')
23
+ end
24
+ rescue LoadError
25
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
26
+ end
27
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'active_support/cache/tokyo_store'
@@ -0,0 +1,53 @@
1
+ gem 'actsasflinn-ruby-tokyotyrant', '>= 0.2.0'
2
+ require 'tokyo_tyrant'
3
+
4
+ module ActiveSupport
5
+ module Cache
6
+ class TokyoStore < Store
7
+
8
+ def initialize(host = 'localhost', port = 1978)
9
+ super()
10
+ @data = ::TokyoTyrant::DB.new(host, port)
11
+ end
12
+
13
+ def read(key, options = nil)
14
+ super
15
+ @data[key]
16
+ rescue TokyoTyrantError
17
+ nil
18
+ end
19
+
20
+ def write(key, value, options = nil)
21
+ super
22
+ @data[key] = value
23
+ rescue TokyoTyrantError
24
+ nil
25
+ end
26
+
27
+ def delete(key, options = nil)
28
+ super
29
+ @data.delete(key)
30
+ end
31
+
32
+ def delete_matched(matcher, options = nil)
33
+ super
34
+ @data.each_key { |k| @data.delete(k) if k =~ matcher }
35
+ end
36
+
37
+ def exist?(key, options = nil)
38
+ super
39
+ @data.key?(key)
40
+ end
41
+
42
+ def clear
43
+ log("clear", @data.keys.size, nil)
44
+ @data.clear
45
+ end
46
+
47
+ def keys
48
+ @data.keys
49
+ end
50
+
51
+ end
52
+ end
53
+ end
data/pkg/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
@@ -0,0 +1,65 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'spec'
4
+
5
+ $LOAD_PATH << File.dirname(__FILE__) + '/../lib'
6
+ require File.dirname(__FILE__) + '/../init'
7
+
8
+ describe ActiveSupport::Cache::TokyoStore do
9
+ DB_FILE = File.expand_path(File.dirname(__FILE__) + '/../tmp/cache.tch')
10
+ PID_FILE = File.expand_path(File.dirname(__FILE__) + '/../tmp/cache.pid')
11
+
12
+ before :all do
13
+ `tchmgr create #{DB_FILE.to_str}`
14
+ `ttserver -dmn -le -pid #{PID_FILE.to_str} #{DB_FILE.to_str}`
15
+ end
16
+
17
+ after :all do
18
+ Process.kill('TERM', File.read(PID_FILE).to_i)
19
+ FileUtils.rm [DB_FILE, PID_FILE], :force => true
20
+ end
21
+
22
+ def write(*keys)
23
+ keys.each do |key|
24
+ @store.write key, "Plan #{key}"
25
+ end
26
+ end
27
+
28
+ before do
29
+ @store = ActiveSupport::Cache::TokyoStore.new
30
+ @store.clear
31
+ write 'A', 'B'
32
+ end
33
+
34
+ it 'should perform basic operations' do
35
+ @store.read('A').should == 'Plan A'
36
+ @store.exist?('A').should be(true)
37
+
38
+ @store.read('C').should be_nil
39
+ @store.exist?('C').should be(false)
40
+
41
+ @store.write 'C', 'Plan C'
42
+ @store.read('C').should == 'Plan C'
43
+
44
+ @store.delete('A').should be(true)
45
+ @store.delete('D').should be(false)
46
+ @store.read('A').should be_nil
47
+ end
48
+
49
+ it "should 'fetch' as evey other store" do
50
+ @store.exist?('C').should be(false)
51
+ @store.fetch('C').should be_nil
52
+ @store.fetch('C') do
53
+ 'Plan C'
54
+ end.should == 'Plan C'
55
+ @store.fetch('C').should == 'Plan C'
56
+ end
57
+
58
+ it "should be able to delete matching records" do
59
+ write 'c'
60
+ @store.keys.should == ['A', 'B', 'c']
61
+ @store.delete_matched /[A-Z]/
62
+ @store.keys.should == ['c']
63
+ end
64
+
65
+ end
data/tmp/.gitignore ADDED
@@ -0,0 +1 @@
1
+ cache.*
@@ -0,0 +1,54 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{tokyo-cache-store}
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Dimitrij Denissenko"]
12
+ s.date = %q{2009-09-19}
13
+ s.description = %q{Tokyo Tyrant cache store for ActiveSupport/Rails.}
14
+ s.email = %q{contact@dvisionfactory.com}
15
+ s.extra_rdoc_files = [
16
+ "README"
17
+ ]
18
+ s.files = [
19
+ "MIT-LICENSE",
20
+ "README",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "init.rb",
24
+ "lib/active_support/cache/tokyo_store.rb",
25
+ "pkg/.gitignore",
26
+ "spec/tokyo_cache_store_spec.rb",
27
+ "tmp/.gitignore",
28
+ "tokyo-cache-store.gemspec"
29
+ ]
30
+ s.homepage = %q{http://github.com/dim/tokyo-cache-store}
31
+ s.rdoc_options = ["--charset=UTF-8"]
32
+ s.require_paths = ["lib"]
33
+ s.rubygems_version = %q{1.3.5}
34
+ s.summary = %q{Tokyo Tyrant Cache Store}
35
+ s.test_files = [
36
+ "spec/tokyo_cache_store_spec.rb"
37
+ ]
38
+
39
+ if s.respond_to? :specification_version then
40
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3.0"])
45
+ s.add_runtime_dependency(%q<actsasflinn-ruby-tokyotyrant>, [">= 0.2.0"])
46
+ else
47
+ s.add_dependency(%q<activesupport>, [">= 2.3.0"])
48
+ s.add_dependency(%q<actsasflinn-ruby-tokyotyrant>, [">= 0.2.0"])
49
+ end
50
+ else
51
+ s.add_dependency(%q<activesupport>, [">= 2.3.0"])
52
+ s.add_dependency(%q<actsasflinn-ruby-tokyotyrant>, [">= 0.2.0"])
53
+ end
54
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dim-tokyo-cache-store
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Dimitrij Denissenko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-19 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: actsasflinn-ruby-tokyotyrant
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ version:
35
+ description: Tokyo Tyrant cache store for ActiveSupport/Rails.
36
+ email: contact@dvisionfactory.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README
43
+ files:
44
+ - MIT-LICENSE
45
+ - README
46
+ - Rakefile
47
+ - VERSION
48
+ - init.rb
49
+ - lib/active_support/cache/tokyo_store.rb
50
+ - pkg/.gitignore
51
+ - spec/tokyo_cache_store_spec.rb
52
+ - tmp/.gitignore
53
+ - tokyo-cache-store.gemspec
54
+ has_rdoc: false
55
+ homepage: http://github.com/dim/tokyo-cache-store
56
+ licenses:
57
+ post_install_message:
58
+ rdoc_options:
59
+ - --charset=UTF-8
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project:
77
+ rubygems_version: 1.3.5
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: Tokyo Tyrant Cache Store
81
+ test_files:
82
+ - spec/tokyo_cache_store_spec.rb