mongoid_identity_map 0.0.1 → 0.1.1

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/.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