mongoid_identity_map 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - ree
5
+ - rbx
6
+ - jruby
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ Mongoid Identity Map
2
+ ====================
3
+
4
+ ## About [![Build Status](http://travis-ci.org/gcirne/mongoid_identity_map.png)](http://travis-ci.org/gcirne/mongoid_identity_map)
5
+
6
+ Mongoid Identity Map is a simple and transparent Identity Map implementation for the Mongoid ODM.
7
+
8
+ [Mongoid](http://mongoid.org)
9
+
10
+ [Identity Map pattern](http://martinfowler.com/eaaCatalog/identityMap.html)
11
+
12
+ ## Installation
13
+
14
+ In Gemfile:
15
+
16
+ gem "mongoid_identity_map"
17
+
18
+ ## Configuration
19
+
20
+ Add rack middleware `MongoidIdentityMap::ClearMiddleware` for clearing identity map after each request.
21
+
22
+ When using this gem in a Rails app this is done automatically.
23
+
24
+ ## Current Limitations
25
+
26
+ Currently, it's an all or nothing deal. It is not possible to turn the identiy map on or off on a class (Mongoid::Document) basis.
27
+
28
+ Identity map is applied only on Mongoid's Collection find_one method. The find method doesn't have the identity map applied.
data/Rakefile CHANGED
@@ -3,3 +3,5 @@ require 'rspec/core/rake_task'
3
3
 
4
4
  Bundler::GemHelper.install_tasks
5
5
  RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -1,5 +1,5 @@
1
1
  require "mongoid_identity_map/clear_middleware"
2
- require "mongoid_identity_map/current_thread_hash"
2
+ require "mongoid_identity_map/thread_local_hash"
3
3
  require "mongoid_identity_map/identity_map"
4
4
  require "mongoid_identity_map/identity_mappable"
5
-
5
+ require "mongoid_identity_map/railtie" if defined?(Rails)
@@ -6,7 +6,7 @@ module MongoidIdentityMap
6
6
 
7
7
  def call(env)
8
8
  res = @app.call(env)
9
- CurrentThreadHash.clear
9
+ IdentityMap.clear
10
10
  res
11
11
  end
12
12
  end
@@ -3,7 +3,11 @@ module MongoidIdentityMap
3
3
 
4
4
  class << self
5
5
  def fetch(selector)
6
- CurrentThreadHash.get(selector) || CurrentThreadHash.set(selector, yield)
6
+ ThreadLocalHash.get(selector) || ThreadLocalHash.set(selector, yield)
7
+ end
8
+
9
+ def clear
10
+ ThreadLocalHash.clear
7
11
  end
8
12
  end
9
13
 
@@ -0,0 +1,7 @@
1
+ module MongoidIdentityMap
2
+ class Railtie < Rails::Railtie
3
+ initializer "mongoid_identity_map.initializer" do |app|
4
+ app.middleware.use MongoidIdentityMap::ClearMiddleware
5
+ end
6
+ end
7
+ end
@@ -1,12 +1,12 @@
1
1
  module MongoidIdentityMap
2
- class CurrentThreadHash
2
+ class ThreadLocalHash
3
3
  class << self
4
4
  def get(key)
5
- current_thread_hash[key]
5
+ thread_local_hash[key]
6
6
  end
7
7
 
8
8
  def set(key, value)
9
- current_thread_hash[key] = value
9
+ thread_local_hash[key] = value
10
10
  end
11
11
 
12
12
  def clear
@@ -15,7 +15,7 @@ module MongoidIdentityMap
15
15
 
16
16
  private
17
17
 
18
- def current_thread_hash
18
+ def thread_local_hash
19
19
  Thread.current[:mongoid_identity_map_current_thread_hash] ||= Hash.new
20
20
  end
21
21
  end
@@ -1,3 +1,3 @@
1
1
  module MongoidIdentityMap
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -9,13 +9,13 @@ Gem::Specification.new do |s|
9
9
  s.email = ["gcirne@gmail.com"]
10
10
  s.homepage = "http://rubygems.org/gems/mongoid_identity_map"
11
11
  s.summary = "IdentityMap for Mongoid"
12
- s.description = "Simple and transparent IdentityMap implementation for Mongoid"
12
+ s.description = "Simple and transparent Identity Map implementation for Mongoid"
13
13
 
14
14
  s.required_rubygems_version = ">= 1.3.6"
15
15
  s.rubyforge_project = "mongoid_identity_map"
16
16
 
17
- s.add_dependency "activesupport", "~> 3.0.0"
18
- s.add_dependency "mongoid", "~> 2.0.0"
17
+ s.add_dependency "activesupport", "~> 3.0"
18
+ s.add_dependency "mongoid", "~> 2.0"
19
19
 
20
20
  s.add_development_dependency "bson_ext", ">= 1.3.0"
21
21
  s.add_development_dependency "bundler", ">= 1.0.0"
@@ -14,7 +14,7 @@ describe MongoidIdentityMap::ClearMiddleware do
14
14
  end
15
15
 
16
16
  it "should clear identity map" do
17
- MongoidIdentityMap::CurrentThreadHash.should_receive(:clear)
17
+ MongoidIdentityMap::IdentityMap.should_receive(:clear)
18
18
  @clear_middleware.call(@env)
19
19
  end
20
20
  end
@@ -7,9 +7,15 @@ describe MongoidIdentityMap::IdentityMap do
7
7
  end
8
8
 
9
9
  describe ".fetch" do
10
+ let (:fetch) do
11
+ MongoidIdentityMap::IdentityMap.fetch(@selector) do
12
+ Model.collection.find_one_without_identity_map(@selector)
13
+ end
14
+ end
15
+
10
16
  context "when document doesn't exist in identity map" do
11
17
  before do
12
- MongoidIdentityMap::CurrentThreadHash.stub!(:get).with(@selector).and_return(nil)
18
+ MongoidIdentityMap::ThreadLocalHash.stub!(:get).with(@selector).and_return(nil)
13
19
  Model.collection.stub!(:find_one_without_identity_map).with(@selector).and_return(@model)
14
20
  end
15
21
 
@@ -19,14 +25,14 @@ describe MongoidIdentityMap::IdentityMap do
19
25
  end
20
26
 
21
27
  it "should set document in identity map" do
22
- MongoidIdentityMap::CurrentThreadHash.stub!(:set).with(@selector, @model)
28
+ MongoidIdentityMap::ThreadLocalHash.should_receive(:set).with(@selector, @model)
23
29
  fetch
24
30
  end
25
31
  end
26
32
 
27
33
  context "when document exists in identity map" do
28
34
  before do
29
- MongoidIdentityMap::CurrentThreadHash.stub!(:get).with(@selector).and_return(@model)
35
+ MongoidIdentityMap::ThreadLocalHash.stub!(:get).with(@selector).and_return(@model)
30
36
  end
31
37
 
32
38
  it "should return document from identity map" do
@@ -38,11 +44,12 @@ describe MongoidIdentityMap::IdentityMap do
38
44
  fetch
39
45
  end
40
46
  end
47
+ end
41
48
 
42
- def fetch
43
- MongoidIdentityMap::IdentityMap.fetch(@selector) do
44
- Model.collection.find_one_without_identity_map(@selector)
45
- end
49
+ describe ".clear" do
50
+ it "should clear identity map" do
51
+ MongoidIdentityMap::ThreadLocalHash.should_receive(:clear)
52
+ MongoidIdentityMap::IdentityMap.clear
46
53
  end
47
54
  end
48
55
  end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe MongoidIdentityMap::ThreadLocalHash do
4
+ describe ".set and .get" do
5
+ it "should set and get key based value" do
6
+ MongoidIdentityMap::ThreadLocalHash.set(:key, "value")
7
+
8
+ Thread.new do
9
+ MongoidIdentityMap::ThreadLocalHash.set(:key, "value2")
10
+ MongoidIdentityMap::ThreadLocalHash.get(:key).should == "value2"
11
+ end.join
12
+
13
+ MongoidIdentityMap::ThreadLocalHash.get(:key).should == "value"
14
+ end
15
+ end
16
+
17
+ describe ".clear" do
18
+ it "should clear" do
19
+ MongoidIdentityMap::ThreadLocalHash.set(:key, "value")
20
+
21
+ Thread.new do
22
+ MongoidIdentityMap::ThreadLocalHash.set(:key, "value")
23
+ MongoidIdentityMap::ThreadLocalHash.clear
24
+ MongoidIdentityMap::ThreadLocalHash.get(:key).should be_nil
25
+ end.join
26
+
27
+ MongoidIdentityMap::ThreadLocalHash.get(:key).should == "value"
28
+ end
29
+ end
30
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,6 @@ RSpec.configure do |config|
7
7
  config.run_all_when_everything_filtered = true
8
8
 
9
9
  config.before(:each) do
10
- MongoidIdentityMap::CurrentThreadHash.clear
10
+ MongoidIdentityMap::IdentityMap.clear
11
11
  end
12
12
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 0
8
7
  - 1
9
- version: 0.0.1
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Guilherme Cirne
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-29 00:00:00 -03:00
17
+ date: 2011-05-02 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -28,8 +28,7 @@ dependencies:
28
28
  segments:
29
29
  - 3
30
30
  - 0
31
- - 0
32
- version: 3.0.0
31
+ version: "3.0"
33
32
  type: :runtime
34
33
  version_requirements: *id001
35
34
  - !ruby/object:Gem::Dependency
@@ -43,8 +42,7 @@ dependencies:
43
42
  segments:
44
43
  - 2
45
44
  - 0
46
- - 0
47
- version: 2.0.0
45
+ version: "2.0"
48
46
  type: :runtime
49
47
  version_requirements: *id002
50
48
  - !ruby/object:Gem::Dependency
@@ -92,7 +90,7 @@ dependencies:
92
90
  version: 2.5.0
93
91
  type: :development
94
92
  version_requirements: *id005
95
- description: Simple and transparent IdentityMap implementation for Mongoid
93
+ description: Simple and transparent Identity Map implementation for Mongoid
96
94
  email:
97
95
  - gcirne@gmail.com
98
96
  executables: []
@@ -104,19 +102,22 @@ extra_rdoc_files: []
104
102
  files:
105
103
  - .gitignore
106
104
  - .rvmrc
105
+ - .travis.yml
107
106
  - Gemfile
107
+ - README.md
108
108
  - Rakefile
109
109
  - lib/mongoid_identity_map.rb
110
110
  - lib/mongoid_identity_map/clear_middleware.rb
111
- - lib/mongoid_identity_map/current_thread_hash.rb
112
111
  - lib/mongoid_identity_map/identity_map.rb
113
112
  - lib/mongoid_identity_map/identity_mappable.rb
113
+ - lib/mongoid_identity_map/railtie.rb
114
+ - lib/mongoid_identity_map/thread_local_hash.rb
114
115
  - lib/mongoid_identity_map/version.rb
115
116
  - mongoid_identity_map.gemspec
116
117
  - spec/mongoid_identity_map/clear_middleware_spec.rb
117
- - spec/mongoid_identity_map/current_thread_hash_spec.rb
118
118
  - spec/mongoid_identity_map/identity_map_spec.rb
119
119
  - spec/mongoid_identity_map/identity_mappable_spec.rb
120
+ - spec/mongoid_identity_map/thread_local_hash_spec.rb
120
121
  - spec/spec_helper.rb
121
122
  - spec/support/model.rb
122
123
  has_rdoc: true
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe MongoidIdentityMap::CurrentThreadHash do
4
- describe ".set and .get" do
5
- it "should set and get key based value" do
6
- MongoidIdentityMap::CurrentThreadHash.set(:key, "value")
7
-
8
- Thread.new do
9
- MongoidIdentityMap::CurrentThreadHash.set(:key, "value2")
10
- MongoidIdentityMap::CurrentThreadHash.get(:key).should == "value2"
11
- end.join
12
-
13
- MongoidIdentityMap::CurrentThreadHash.get(:key).should == "value"
14
- end
15
- end
16
-
17
- describe ".clear" do
18
- it "should clear" do
19
- MongoidIdentityMap::CurrentThreadHash.set(:key, "value")
20
-
21
- Thread.new do
22
- MongoidIdentityMap::CurrentThreadHash.set(:key, "value")
23
- MongoidIdentityMap::CurrentThreadHash.clear
24
- MongoidIdentityMap::CurrentThreadHash.get(:key).should be_nil
25
- end.join
26
-
27
- MongoidIdentityMap::CurrentThreadHash.get(:key).should == "value"
28
- end
29
- end
30
- end