tokyo_cache_cow 0.0.6 → 0.0.7

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/README.rdoc CHANGED
@@ -62,7 +62,7 @@ But <i>other_key</i> is still peachy.
62
62
 
63
63
  === Aggregate functions
64
64
 
65
- You can invoke aggregates by using the prefixes <tt>average-</tt>, <tt>count-</tt>, <tt>sum-</tt>, <tt>min-</tt> and <tt>max-</tt>.
65
+ You can invoke aggregates by using the functions <tt>avg()</tt>, <tt>count()</tt>, <tt>sum()</tt>, <tt>min()</tt> and <tt>max()</tt>.
66
66
 
67
67
  >> Rails.cache.write('hello1', '1')
68
68
  => true
@@ -70,9 +70,9 @@ You can invoke aggregates by using the prefixes <tt>average-</tt>, <tt>count-</t
70
70
  => true
71
71
  >> Rails.cache.write('hello3', '3')
72
72
  => true
73
- >> Rails.cache.read('average-hello')
73
+ >> Rails.cache.read('avg(hello)')
74
74
  => "2.0"
75
- >> Rails.cache.read('sum-hello')
75
+ >> Rails.cache.read('sum(hello)')
76
76
  => "6.0"
77
77
 
78
78
 
data/Rakefile CHANGED
@@ -11,6 +11,7 @@ begin
11
11
  s.authors = ["Joshua Hull"]
12
12
  s.files = FileList["[A-Z]*", "{lib,spec,rails,bin}/**/*"]
13
13
  s.executables = ['tokyo_cache_cow']
14
+ s.add_dependency 'eventmachine'
14
15
  end
15
16
  Jeweler::GemcutterTasks.new
16
17
  rescue LoadError
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 0
3
2
  :build:
3
+ :major: 0
4
4
  :minor: 0
5
- :patch: 6
5
+ :patch: 7
@@ -1,11 +1,9 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
1
  class TokyoCacheCow
4
2
  class Cache
5
- self.autoload :Base, 'cache/base'
6
- self.autoload :FileMemcache, 'cache/file_memcache'
7
- self.autoload :TokyoCabinetMemcache, 'cache/tokyo_cabinet_memcache'
8
- self.autoload :HashMemcache, 'cache/hash_memcache'
3
+ self.autoload :Base, File.join('tokyo_cache_cow', 'cache', 'base')
4
+ self.autoload :FileMemcache, File.join('tokyo_cache_cow', 'cache', 'file_memcache')
5
+ self.autoload :TokyoCabinetMemcache, File.join('tokyo_cache_cow', 'cache', 'tokyo_cabinet_memcache')
6
+ self.autoload :HashMemcache, File.join('tokyo_cache_cow', 'cache', 'hash_memcache')
9
7
  end
10
8
  end
11
9
 
@@ -2,6 +2,16 @@ class TokyoCacheCow
2
2
  class Cache
3
3
  class Base
4
4
 
5
+ attr_accessor :marshalling_enabled
6
+
7
+ def marshal(val)
8
+ marshalling_enabled ? Marshal.dump(val) : val
9
+ end
10
+
11
+ def unmarshal(val)
12
+ marshalling_enabled ? Marshal.load(val) : val
13
+ end
14
+
5
15
  def process_time(time)
6
16
  time = case time
7
17
  when 0, nil: 0
@@ -9,35 +19,35 @@ class TokyoCacheCow
9
19
  else time
10
20
  end
11
21
  end
12
-
13
- def average_match(match)
22
+
23
+ def avg_match(match)
14
24
  values = numeric_values_match(match)
15
- values.inject(0.0) { |sum, el| sum + el } / values.size
25
+ marshal(values.inject(0.0) { |sum, el| sum + el } / values.size)
16
26
  end
17
27
 
18
28
  def sum_match(match)
19
29
  values = numeric_values_match(match)
20
- values.inject(0.0) { |sum, el| sum + el }
30
+ marshal(values.inject(0.0) { |sum, el| sum + el })
21
31
  end
22
32
 
23
33
  def count_match(match)
24
34
  values = numeric_values_match(match)
25
- values.size
35
+ marshal(values.size)
26
36
  end
27
37
 
28
38
  def min_match(match)
29
39
  values = numeric_values_match(match)
30
- values.min
40
+ marshal(values.min)
31
41
  end
32
42
 
33
43
  def max_match(match)
34
44
  values = numeric_values_match(match)
35
- values.max
45
+ marshal(values.max)
36
46
  end
37
47
 
38
48
  def numeric_values_match(match)
39
49
  numeric_keys = get_match(match)
40
- numeric_keys.map{|ak| get(ak)}.map{|v| Integer(v[:value]) rescue nil}.compact
50
+ numeric_keys.map{|ak| get(ak)}.map{|v| Integer(unmarshal(v[:value])) rescue nil}.compact
41
51
  end
42
52
 
43
53
  end
@@ -88,12 +88,12 @@ class TokyoCacheCow
88
88
  end
89
89
 
90
90
  def get_raw(key)
91
- File.exists?(path_for_key(key)) ? YAML::load( File.open( path_for_key(key) ) ) : nil
91
+ File.exists?(path_for_key(key)) ? unmarshal(YAML::load( File.open( path_for_key(key)))) : nil
92
92
  end
93
93
 
94
94
  def set_raw(key, data)
95
95
  File.open(path_for_key(key), 'w') do |out|
96
- YAML.dump(data, out)
96
+ YAML.dump(data, marshal(out))
97
97
  end
98
98
  end
99
99
 
@@ -28,7 +28,7 @@ class TokyoCacheCow
28
28
  delete(key)
29
29
  nil
30
30
  else
31
- { :value => data['value'], :expires => expires, :flags => flags }
31
+ { :value => unmarshal(data['value']), :expires => expires, :flags => flags }
32
32
  end
33
33
  end
34
34
  end
@@ -68,7 +68,7 @@ class TokyoCacheCow
68
68
  def generate_data_hash(value, options)
69
69
  expires = options[:expires] && options[:expires].to_s || '0'
70
70
  flags = options[:flags] && options[:flags].to_s || '0'
71
- { 'value' => value, 'expires' => process_time(expires), 'flags' => flags }
71
+ { 'value' => marshal(value), 'expires' => process_time(expires), 'flags' => flags }
72
72
  end
73
73
 
74
74
  def time_expired?(time)
@@ -18,7 +18,8 @@ class TokyoCacheCow
18
18
  :file => '/tmp/tcc-cache',
19
19
  :pid => '/tmp/tcc.pid',
20
20
  :special_delete_prefix => nil,
21
- :daemonize => false
21
+ :daemonize => false,
22
+ :marshalling => true
22
23
  }
23
24
 
24
25
  parse!
@@ -56,13 +57,17 @@ class TokyoCacheCow
56
57
  end
57
58
 
58
59
  opts.on("-P[OPTIONAL]", "--pid", "Pid file (default: #{options[:pid]})") do |v|
59
- options[:pid] = true
60
+ options[:pid] = v
60
61
  end
61
62
 
62
63
  opts.on("-m[OPTIONAL]", "--matcher", "Special flag for doing matched deletes (not enabled by default)") do |v|
63
64
  options[:special_delete_char] = v
64
65
  end
65
66
 
67
+ opts.on("-M[=OPTIONAL]", "--marshalling", "Disable marshalling of values") do |v|
68
+ options[:marshalling] = false
69
+ end
70
+
66
71
  opts.on_tail("-h", "--help", "Show this help message.") { puts opts; exit }
67
72
 
68
73
  end
@@ -79,13 +84,13 @@ class TokyoCacheCow
79
84
  parent.const_get(mod)
80
85
  end
81
86
 
82
-
83
87
  address = @options[:address]
84
88
  port = @options[:port]
85
89
  special_delete_char = @options[:special_delete_char]
86
90
  puts "Starting the tokyo cache cow #{address} #{port}"
87
91
  pid = EM.fork_reactor do
88
92
  cache = clazz.new(:file => @options[:file])
93
+ cache.marshalling_enabled =
89
94
  trap("INT") { EM.stop; puts "\nmoooooooo ya later"; exit(0)}
90
95
  EM.run do
91
96
  EM.start_server(address, port, TokyoCacheCow::Server) do |c|
@@ -101,10 +101,10 @@ class TokyoCacheCow
101
101
  keys = args.split(/\s+/)
102
102
  keys.each do |k|
103
103
  next unless validate_key(k)
104
- if k =~ /^(average|sum|count|min|max)-(.*)/
105
- average = @cache.send(:"#{$1}_match", $2).to_s
106
- send_data(GetValueReply % [k, "0", average.size])
107
- send_data(average)
104
+ if k =~ /^(avg|sum|count|min|max)\((.*?)\)$/
105
+ value = @cache.send(:"#{$1}_match", $2).to_s
106
+ send_data(GetValueReply % [k, "0", value.size])
107
+ send_data(value)
108
108
  send_data(Terminator)
109
109
  else
110
110
  if data = @cache.get(k)
data/spec/cache_spec.rb CHANGED
@@ -26,7 +26,7 @@ require 'lib/tokyo_cache_cow/cache'
26
26
  cache.set("session1-value3","13")
27
27
  cache.set("session1-value4","10")
28
28
  cache.set("session1-value5","14")
29
- cache.average_match('session1').should == 12
29
+ cache.avg_match('session1').should == 12
30
30
  end
31
31
 
32
32
  it "should put & get" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tokyo_cache_cow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Hull
@@ -9,10 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-03-12 00:00:00 -05:00
12
+ date: 2010-03-17 00:00:00 -04:00
13
13
  default_executable: tokyo_cache_cow
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: eventmachine
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
16
25
  description: ""
17
26
  email: joshbuddy@gmail.com
18
27
  executables:
@@ -32,7 +41,6 @@ files:
32
41
  - lib/tokyo_cache_cow/cache/file_memcache.rb
33
42
  - lib/tokyo_cache_cow/cache/hash_memcache.rb
34
43
  - lib/tokyo_cache_cow/cache/tokyo_cabinet_memcache.rb
35
- - lib/tokyo_cache_cow/providers.rb
36
44
  - lib/tokyo_cache_cow/runner.rb
37
45
  - lib/tokyo_cache_cow/server.rb
38
46
  - rails/init.rb
@@ -1,13 +0,0 @@
1
- class TokyoCacheCow
2
-
3
- autoload :TokyoCabinetMemcache, 'lib/tokyo_cache_cow/tokyo_cabinet_memcache'
4
-
5
- class Providers
6
-
7
- def self.provide_cache
8
- #require 'lib/tokyo_cache_cow/tokyo_cabinet_memcache'
9
- @@cache ||= TokyoCacheCow::TokyoCabinetMemcache.new('/tmp/tcc')
10
- end
11
-
12
- end
13
- end