reader_writer_cache_store 0.1.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/Manifest +6 -0
- data/README +0 -0
- data/README.rdoc +0 -0
- data/Rakefile +21 -0
- data/lib/reader_writer_cache_store/active_support/cache/reader_writer_cache_store.rb +85 -0
- data/lib/reader_writer_cache_store.rb +0 -0
- data/reader_writer_cache_store.gemspec +29 -0
- metadata +82 -0
data/Manifest
ADDED
data/README
ADDED
File without changes
|
data/README.rdoc
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
Echoe.new('reader_writer_cache_store', '0.1.0') do |p|
|
7
|
+
p.description = "Reader/Writer Cache Store"
|
8
|
+
p.url = "https://github.com/bkimble"
|
9
|
+
p.author = "Billy Kimble"
|
10
|
+
p.email = "basslines@gmail.com"
|
11
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
12
|
+
p.development_dependencies = []
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
16
|
+
|
17
|
+
Rake::TestTask.new(:test) do |t|
|
18
|
+
t.libs << 'test'
|
19
|
+
t.test_files = FileList['test/**/*_test.rb']
|
20
|
+
t.verbose = true
|
21
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module ActiveSupport
|
2
|
+
module Cache
|
3
|
+
class ReaderWriterCacheStore
|
4
|
+
attr_accessor :readers,:writers
|
5
|
+
class NoReadersDefinedError < StandardError; end
|
6
|
+
class NoWritersDefinedError < StandardError; end
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
self.writers = []
|
10
|
+
self.readers = []
|
11
|
+
|
12
|
+
raise NoReadersDefinedError if options[:writers] && !options[:readers]
|
13
|
+
raise NoWritersDefinedError if options[:readers] && !options[:writers]
|
14
|
+
|
15
|
+
if !options[:writers] && !options[:readers]
|
16
|
+
self.writers << ActiveSupport::Cache.lookup_store(options)
|
17
|
+
self.readers << ActiveSupport::Cache.lookup_store(options)
|
18
|
+
else
|
19
|
+
options[:readers].each{|reader| self.readers << ActiveSupport::Cache.lookup_store(reader.to_a)}
|
20
|
+
options[:writers].each{|writer| self.writers << ActiveSupport::Cache.lookup_store(writer.to_a)}
|
21
|
+
end
|
22
|
+
|
23
|
+
@reader_size = readers.size
|
24
|
+
@writer_size = writers.size
|
25
|
+
@current_reader = 1
|
26
|
+
@current_writer = 1
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(method,*args, &block)
|
30
|
+
if reader_methods.include?(method)
|
31
|
+
define_reader_delegator(method,*args,&block)
|
32
|
+
send(method,*args,&block)
|
33
|
+
elsif writer_methods.include?(method)
|
34
|
+
define_writer_delegator(method,*args,&block)
|
35
|
+
send(method,*args,&block)
|
36
|
+
else
|
37
|
+
super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def respond_to?(method,include_private=false)
|
42
|
+
(reader_methods+writer_methods+methods).include?(method)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
|
48
|
+
def reader
|
49
|
+
returning readers[@current_reader-1] do
|
50
|
+
@current_reader = @current_reader+1 > @reader_size ? 1 : @current_reader+1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def writer
|
55
|
+
returning writers[@current_writer-1] do
|
56
|
+
@current_writer = @current_writer+1 > @writer_size ? 1 : @current_writer+1
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def reader_methods
|
61
|
+
[:fetch,:read,:exist?,:stats,:read_multi,:read_entry,:key_matcher]
|
62
|
+
end
|
63
|
+
|
64
|
+
def writer_methods
|
65
|
+
[:write,:delete,:delete_matched,:decrement,:clear,:increment,:write_entry,:delete_entry]
|
66
|
+
end
|
67
|
+
|
68
|
+
def define_writer_delegator(method,*args,&block)
|
69
|
+
self.class_eval do
|
70
|
+
define_method method do |*args,&block|
|
71
|
+
writer.send(method,*args,&block)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def define_reader_delegator(method,*args,&block)
|
77
|
+
self.class_eval do
|
78
|
+
define_method method do |*args,&block|
|
79
|
+
reader.send(method,*args,&block)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{reader_writer_cache_store}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Billy Kimble"]
|
9
|
+
s.date = %q{2011-03-02}
|
10
|
+
s.description = %q{Reader/Writer Cache Store}
|
11
|
+
s.email = %q{basslines@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["README", "README.rdoc", "lib/reader_writer_cache_store.rb", "lib/reader_writer_cache_store/active_support/cache/reader_writer_cache_store.rb"]
|
13
|
+
s.files = ["Manifest", "README", "README.rdoc", "Rakefile", "lib/reader_writer_cache_store.rb", "lib/reader_writer_cache_store/active_support/cache/reader_writer_cache_store.rb", "reader_writer_cache_store.gemspec"]
|
14
|
+
s.homepage = %q{https://github.com/bkimble}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Reader_writer_cache_store", "--main", "README"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{reader_writer_cache_store}
|
18
|
+
s.rubygems_version = %q{1.4.2}
|
19
|
+
s.summary = %q{Reader/Writer Cache Store}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
s.specification_version = 3
|
23
|
+
|
24
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
+
else
|
26
|
+
end
|
27
|
+
else
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reader_writer_cache_store
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Billy Kimble
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-03-02 00:00:00 -08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: Reader/Writer Cache Store
|
23
|
+
email: basslines@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- README
|
30
|
+
- README.rdoc
|
31
|
+
- lib/reader_writer_cache_store.rb
|
32
|
+
- lib/reader_writer_cache_store/active_support/cache/reader_writer_cache_store.rb
|
33
|
+
files:
|
34
|
+
- Manifest
|
35
|
+
- README
|
36
|
+
- README.rdoc
|
37
|
+
- Rakefile
|
38
|
+
- lib/reader_writer_cache_store.rb
|
39
|
+
- lib/reader_writer_cache_store/active_support/cache/reader_writer_cache_store.rb
|
40
|
+
- reader_writer_cache_store.gemspec
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: https://github.com/bkimble
|
43
|
+
licenses: []
|
44
|
+
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options:
|
47
|
+
- --line-numbers
|
48
|
+
- --inline-source
|
49
|
+
- --title
|
50
|
+
- Reader_writer_cache_store
|
51
|
+
- --main
|
52
|
+
- README
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
hash: 11
|
70
|
+
segments:
|
71
|
+
- 1
|
72
|
+
- 2
|
73
|
+
version: "1.2"
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project: reader_writer_cache_store
|
77
|
+
rubygems_version: 1.4.2
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Reader/Writer Cache Store
|
81
|
+
test_files: []
|
82
|
+
|