sized_list 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,122 @@
1
+ # Most of the logic here was based on the dalli gem
2
+ module ActiveSupport
3
+ module Cache
4
+ class Lru
5
+ attr_reader :silence, :options
6
+ alias_method :silence?, :silence
7
+
8
+ def initialize(options)
9
+ @options = options
10
+ @sized_list = SizedList.new @options[:max_size]
11
+ end
12
+
13
+ # Silence the logger.
14
+ def silence!
15
+ @silence = true
16
+ self
17
+ end
18
+
19
+ # Silence the logger within a block.
20
+ def mute
21
+ previous_silence, @silence = defined?(@silence) && @silence, true
22
+ yield
23
+ ensure
24
+ @silence = previous_silence
25
+ end
26
+
27
+ def fetch(name, options=nil)
28
+ if block_given?
29
+ entry = instrument(:read, name, options) do |payload|
30
+ payload[:super_operation] = :fetch if payload
31
+ read(name, options)
32
+ end
33
+
34
+ if !entry.nil?
35
+ instrument(:fetch_hit, name, options) { |payload| }
36
+ entry
37
+ else
38
+ result = instrument(:generate, name, options) do |payload|
39
+ yield
40
+ end
41
+ write(name, result, options)
42
+ result
43
+ end
44
+ else
45
+ read(name, options)
46
+ end
47
+ end
48
+
49
+ def read(name, options=nil)
50
+ instrument(:read, name, options) do |payload|
51
+ entry = @sized_list[name]
52
+ payload[:hit] = !!entry if payload
53
+ entry
54
+ end
55
+ end
56
+
57
+ def write(name, value, options=nil)
58
+ instrument(:write, name, options) do |payload|
59
+ @sized_list[name] = value
60
+ end
61
+ end
62
+
63
+ def exist?(name, options=nil)
64
+ @sized_list.exist? name
65
+ end
66
+
67
+ def delete(name, options=nil)
68
+ raise 'not implemented'
69
+ end
70
+
71
+ def read_multi(*names)
72
+ {}.tap do |results|
73
+ names.each do |n|
74
+ if v = @sized_list[n]
75
+ results[n] = v
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ def increment(name, amount = 1, options=nil)
82
+ if v = @sized_list[name]
83
+ @sized_list[name] = v + amount
84
+ end
85
+ end
86
+
87
+ def decrement(name, amount = 1, options=nil)
88
+ if v = @sized_list[name]
89
+ @sized_list[name] = v - amount
90
+ end
91
+ end
92
+
93
+ def reset
94
+ @sized_list = SizedList.new @options[:max_size]
95
+ end
96
+ alias clear reset
97
+
98
+ protected
99
+
100
+ def instrument(operation, key, options=nil)
101
+ log(operation, key, options)
102
+
103
+ if ActiveSupport::Cache::Store.instrument
104
+ payload = { :key => key }
105
+ payload.merge!(options) if options.is_a?(Hash)
106
+ ActiveSupport::Notifications.instrument("cache_#{operation}.active_support", payload){ yield(payload) }
107
+ else
108
+ yield(nil)
109
+ end
110
+ end
111
+
112
+ def log(operation, key, options=nil)
113
+ return unless logger && logger.debug? && !silence?
114
+ logger.debug("Cache #{operation}: #{key}#{options.blank? ? "" : " (#{options.inspect})"}")
115
+ end
116
+
117
+ def logger
118
+ Rails.logger
119
+ end
120
+ end
121
+ end
122
+ end
data/lib/sized_list.rb CHANGED
@@ -43,6 +43,11 @@ class SizedList
43
43
  @items.values
44
44
  end
45
45
 
46
+ def exist?(key)
47
+ @items.has_key? key
48
+ end
49
+ alias exists? exist?
50
+
46
51
  private
47
52
 
48
53
  def used!(key)
@@ -0,0 +1,57 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
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 = "sized_list"
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Doug Youch"]
12
+ s.date = "2013-05-20"
13
+ s.description = "Uses LRU functionality to keep a limited size list of items"
14
+ s.email = "doug@sessionm.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/active_support/cache/lru.rb",
28
+ "lib/sized_list.rb",
29
+ "sized_list.gemspec",
30
+ "spec/sized_list_spec.rb",
31
+ "spec/spec_helper.rb"
32
+ ]
33
+ s.homepage = "http://github.com/dyouch5@yahoo.com/sized_list"
34
+ s.licenses = ["MIT"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = "1.8.23"
37
+ s.summary = "Limited size list"
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
44
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
45
+ s.add_development_dependency(%q<rspec>, [">= 0"])
46
+ else
47
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
48
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
49
+ s.add_dependency(%q<rspec>, [">= 0"])
50
+ end
51
+ else
52
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
53
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
54
+ s.add_dependency(%q<rspec>, [">= 0"])
55
+ end
56
+ end
57
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sized_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-19 00:00:00.000000000 Z
12
+ date: 2013-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
@@ -74,7 +74,9 @@ files:
74
74
  - README.rdoc
75
75
  - Rakefile
76
76
  - VERSION
77
+ - lib/active_support/cache/lru.rb
77
78
  - lib/sized_list.rb
79
+ - sized_list.gemspec
78
80
  - spec/sized_list_spec.rb
79
81
  - spec/spec_helper.rb
80
82
  homepage: http://github.com/dyouch5@yahoo.com/sized_list
@@ -92,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
94
  version: '0'
93
95
  segments:
94
96
  - 0
95
- hash: 1772257885057037827
97
+ hash: 2720490057972214731
96
98
  required_rubygems_version: !ruby/object:Gem::Requirement
97
99
  none: false
98
100
  requirements: