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