reader_writer_cache_store 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest ADDED
@@ -0,0 +1,6 @@
1
+ Manifest
2
+ README
3
+ README.rdoc
4
+ Rakefile
5
+ lib/reader_writer_cache_store.rb
6
+ lib/reader_writer_cache_store/active_support/cache/reader_writer_cache_store.rb
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
+