sized_list 0.1.0 → 0.2.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/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: