mongo_cache_store 0.2.1 → 0.2.2

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
@@ -50,6 +50,10 @@ configured or used.
50
50
  then serialize the entry.
51
51
  [+:never+ - Never serialize]
52
52
  Only save the entry if it can be saved natively by MongoDB.
53
+ [+:collection_opts+]
54
+ Hash of options passed directly to MongoDB::Collection.
55
+
56
+ Useful for write conditions and read preferences
53
57
 
54
58
 
55
59
  == Backends
@@ -2,6 +2,7 @@
2
2
  require "mongo_cache_store/version"
3
3
  require "mongo"
4
4
  require "active_support/cache"
5
+ require "logger"
5
6
 
6
7
  module ActiveSupport
7
8
  module Cache
@@ -32,6 +33,10 @@ module ActiveSupport
32
33
  # then serialize the entry.
33
34
  # [+:never+ - Never serialize]
34
35
  # Only save the entry if it can be saved natively by MongoDB.
36
+ # [+:collection_opts+ ]
37
+ # Hash of options passed directly to MongoDB::Collection.
38
+ #
39
+ # Useful for write conditions and read preferences
35
40
  #
36
41
  # === Examples
37
42
  # @store = ActiveSupport::Cache::MongoCacheStore.new(:TTL, :db => Mongo::DB.new('db_name',Mongo::Connection.new))
@@ -45,15 +50,19 @@ module ActiveSupport
45
50
  :db => nil,
46
51
  :namespace => nil,
47
52
  :connection => nil,
48
- :serialize => :always
53
+ :serialize => :always,
54
+ :collection_opts => {}
49
55
  }.merge(options)
50
56
 
51
57
  @db = options.delete :db
58
+ @logger = options.delete :logger
52
59
 
53
60
  if (@db.nil?)
54
61
  @db = Mongo::DB.new(options[:db_name], options[:connection] || Mongo::Connection.new)
55
62
  end
56
63
 
64
+
65
+
57
66
  extend ActiveSupport::Cache::MongoCacheStore::Backend.const_get(backend)
58
67
 
59
68
  build_backend(options)
@@ -61,6 +70,23 @@ module ActiveSupport
61
70
  super(options)
62
71
 
63
72
  end
73
+
74
+ def logger
75
+ return @logger unless @logger.nil?
76
+
77
+ slogger = super
78
+ case
79
+ when !slogger.nil?
80
+ @logger = slogger
81
+ when defined?(Rails) && Rails.logger
82
+ @logger = Rails.logger
83
+ else
84
+ @logger = Logger.new(STDOUT)
85
+ end
86
+
87
+ @logger
88
+ end
89
+
64
90
  end
65
91
  end
66
92
  end
@@ -61,7 +61,6 @@ module ActiveSupport
61
61
  :serialized => serialize,
62
62
  :value => serialize ? BSON::Binary.new(entry.raw_value) : entry.value
63
63
  }.merge(options[:xentry] || {})
64
- #puts save_doc.inspect
65
64
 
66
65
  safe_rescue do
67
66
  begin
@@ -88,11 +87,14 @@ module ActiveSupport
88
87
  name_parts = ['cache']
89
88
  name_parts.push(backend_name)
90
89
  name_parts.push options[:namespace] unless options[:namespace].nil?
91
- return name_parts.join('.')
90
+ name = name_parts.join('.')
91
+ return name
92
92
  end
93
93
 
94
94
  def get_collection(options)
95
95
  return options[:collection] if options[:collection].is_a? Mongo::Collection
96
+
97
+ @db.collection(get_collection_name(options),options[:collection_opts])
96
98
  end
97
99
 
98
100
  def safe_rescue
@@ -100,7 +102,7 @@ module ActiveSupport
100
102
  yield
101
103
  rescue => e
102
104
  warn e
103
- logger.error("FileStoreError (#{e}): #{e.message}") if logger
105
+ logger.error("MongoCacheStoreError (#{e}): #{e.message}") if logger
104
106
  false
105
107
  end
106
108
  end
@@ -48,8 +48,6 @@ module ActiveSupport
48
48
  module MultiTTL
49
49
  include Base
50
50
 
51
- alias :get_collection_prefix :get_collection_name
52
-
53
51
  def clear(options = {})
54
52
  @db.collection_names.each do |cname|
55
53
  prefix = get_collection_prefix
@@ -86,6 +84,7 @@ module ActiveSupport
86
84
  ki.save({
87
85
  :_id => key,
88
86
  :collection => options[:collection].name,
87
+ :expires_in => options[:expires_in].nil? ? nil : options[:expires_in].to_i,
89
88
  :expires_at => entry.expires_at
90
89
  })
91
90
  end
@@ -101,24 +100,36 @@ module ActiveSupport
101
100
 
102
101
  private
103
102
 
103
+ alias :super_get_collection_name :get_collection_name
104
+
104
105
  def backend_name
105
106
  "multi_ttl"
106
107
  end
107
108
 
109
+
108
110
  def get_collection(options)
109
111
 
110
- col = super
112
+ col = @collection_map[get_collection_name(options)]
111
113
  return col unless col.nil?
112
114
 
115
+ col = super
116
+ expires_in = options[:expires_in]
117
+ col.ensure_index('created_at',{ expireAfterSeconds: expires_in.to_i }) unless expires_in.nil?
118
+ @collection_map[col.name] = col
119
+
120
+ return col
121
+ end
122
+
123
+ def get_collection_name(options)
113
124
  name_parts = [get_collection_prefix(options)]
114
125
  expires_in = options[:expires_in]
115
126
  name_parts.push expires_in.nil? ? 'forever' : expires_in.to_i
116
127
  collection_name = name_parts.join('.')
128
+ return collection_name
129
+ end
117
130
 
118
- collection = @collection_map[collection_name]
119
-
120
- collection ||= create_collection(collection_name, expires_in)
121
- return collection
131
+ def get_collection_prefix(options = {})
132
+ super_get_collection_name(options)
122
133
  end
123
134
 
124
135
 
@@ -132,6 +143,7 @@ module ActiveSupport
132
143
  return col
133
144
  end
134
145
 
146
+
135
147
  def get_collection_from_index(key,options)
136
148
  if (options[:use_index])
137
149
  ki = get_key_index_collection(options)
@@ -142,19 +154,14 @@ module ActiveSupport
142
154
  })
143
155
  return nil if response.nil?
144
156
 
145
- return @db[response['collection']]
157
+ options[:expires_in] = response['expires_in']
158
+ return get_collection(options)
146
159
  end
147
160
  end
148
161
  nil
149
162
  end
150
163
 
151
164
 
152
- def create_collection(name, expires_in)
153
- collection = @db[name]
154
- collection.ensure_index('created_at',{ expireAfterSeconds: expires_in.to_i }) unless expires_in.nil?
155
- return collection
156
- end
157
-
158
165
  def build_backend(options)
159
166
  options.replace({
160
167
  :use_index => true
@@ -54,9 +54,6 @@ module ActiveSupport
54
54
  "standard"
55
55
  end
56
56
 
57
- def get_collection(options)
58
- @db[get_collection_name(options)]
59
- end
60
57
 
61
58
  def write_entry(key, entry, options)
62
59
  ret = super
@@ -58,9 +58,6 @@ module ActiveSupport
58
58
  def get_collection(options)
59
59
  return @collection if @collection.is_a? Mongo::Collection
60
60
  collection = super
61
- return collection unless collection.nil?
62
-
63
- collection = @db[get_collection_name(options)]
64
61
  collection.ensure_index('expires_at',{ expireAfterSeconds: 0 })
65
62
  @collection = collection
66
63
  end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module MongoCacheStore
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
@@ -154,6 +154,25 @@ module ActiveSupport
154
154
  @store = ActiveSupport::Cache::MongoCacheStore.new(:Standard, :db => db, :serialize => :on_fail)
155
155
  end
156
156
  end
157
+
158
+ describe "Pass Collection Options" do
159
+ before(:all) do
160
+ db = Mongo::DB.new('mongo_cache_store_test', Mongo::Connection.new)
161
+ @store = ActiveSupport::Cache::MongoCacheStore.new(
162
+ :Standard,
163
+ :db => db,
164
+ :collection_opts => {
165
+ :read => :nearest
166
+ }
167
+ )
168
+ end
169
+
170
+ it "can set collection opts" do
171
+ col = @store.send(:get_collection,{:collection_opts => {:read => :nearest}})
172
+ col.instance_eval { @read }.should == :nearest
173
+ end
174
+
175
+ end
157
176
  end
158
177
  end
159
178
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_cache_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
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-01-14 00:00:00.000000000 Z
12
+ date: 2013-01-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo