entity_store 0.1.0 → 0.1.3

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.
@@ -12,7 +12,7 @@ module EntityStore
12
12
 
13
13
  def open_store
14
14
  uri = URI.parse(EntityStore.connection_profile)
15
- connection = Connection.from_uri(EntityStore.connection_profile, :connect_timeout => connect_timeout, :safe => true)
15
+ connection = Connection.from_uri(EntityStore.connection_profile, :connect_timeout => connect_timeout)
16
16
  connection.db(uri.path.gsub(/^\//, ''))
17
17
  end
18
18
 
@@ -72,13 +72,14 @@ module EntityStore
72
72
  # Returns an object of the entity type
73
73
  def get_entity(id, raise_exception=false)
74
74
  if attrs = entities.find_one('_id' => BSON::ObjectId.from_string(id))
75
- entity = get_type_constant(attrs['_type']).new(attrs['snapshot'] || {'id' => id, 'version' => attrs['version']})
75
+ entity = EntityStore.load_type(attrs['_type']).new(attrs['snapshot'] || {'id' => id, 'version' => attrs['version']})
76
76
 
77
77
  since_version = attrs['snapshot'] ? attrs['snapshot']['version'] : nil
78
78
 
79
79
  get_events(id, since_version).each do |event|
80
80
  begin
81
81
  event.apply(entity)
82
+ logger.debug { "Applied #{event.inspect} to #{id}" }
82
83
  rescue => e
83
84
  logger.error "Failed to apply #{event.class.name} #{event.attributes} to #{id} with #{e.inspect}", e
84
85
  end
@@ -106,7 +107,7 @@ module EntityStore
106
107
 
107
108
  events.find(query, options).collect do |attrs|
108
109
  begin
109
- get_type_constant(attrs['_type']).new(attrs)
110
+ EntityStore.load_type(attrs['_type']).new(attrs)
110
111
  rescue => e
111
112
  logger.error "Error loading type #{attrs['_type']}", e
112
113
  nil
@@ -114,8 +115,8 @@ module EntityStore
114
115
  end.select { |e| !e.nil? }
115
116
  end
116
117
 
117
- def get_type_constant(type_name)
118
- type_name.split('::').inject(Object) {|obj, name| obj.const_get(name) }
119
- end
118
+ # def get_type_constant(type_name)
119
+ # type_name.split('::').inject(Object) {|obj, name| obj.const_get(name) }
120
+ # end
120
121
  end
121
122
  end
@@ -1,3 +1,3 @@
1
1
  module EntityStore
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.1.3".freeze
3
3
  end
data/lib/entity_store.rb CHANGED
@@ -14,6 +14,7 @@ module EntityStore
14
14
  require 'entity_store/attributes'
15
15
 
16
16
  class << self
17
+
17
18
  def setup
18
19
  yield self
19
20
  end
@@ -48,6 +49,19 @@ module EntityStore
48
49
  @_snapshot_threshold = value
49
50
  end
50
51
 
52
+ # Allows config to pass in a lambda or Proc to use as the type loader in place
53
+ # of the default.
54
+ # Original use case was migration of entity classes to new module namespace when
55
+ # extracting to a shared library
56
+ attr_accessor :type_loader
57
+
58
+ def load_type(type_name)
59
+ if type_loader
60
+ type_loader.call(type_name)
61
+ else
62
+ type_name.split('::').inject(Object) {|obj, name| obj.const_get(name) }
63
+ end
64
+ end
51
65
  end
52
66
 
53
67
 
@@ -1,12 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- module Level1
4
- module Level2
5
- class MyClass
6
- end
7
- end
8
- end
9
-
10
3
  module MongoEntityStoreSpec
11
4
  class DummyEntity
12
5
  include Entity
@@ -103,15 +96,6 @@ describe MongoEntityStore do
103
96
 
104
97
  end
105
98
 
106
- describe "get_type_constant" do
107
-
108
- subject { @store.get_type_constant('Level1::Level2::MyClass') }
109
-
110
- it "should be an Level1::Level2::MyClass" do
111
- subject.should eq(Level1::Level2::MyClass)
112
- end
113
- end
114
-
115
99
  describe "#snapshot_entity" do
116
100
  before(:each) do
117
101
  @entity = MongoEntityStoreSpec::DummyEntity.new(:id => random_object_id, :version => random_integer, :name => random_string)
@@ -1,8 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
+ module Level1
4
+ module Level2
5
+ class MyClass
6
+ end
7
+ class AnotherClass
8
+ end
9
+ end
10
+ end
11
+
3
12
  describe EntityStore do
4
- describe ".setup" do
5
13
 
14
+ describe "load_type" do
15
+
16
+ subject { EntityStore.load_type('Level1::Level2::MyClass') }
17
+
18
+ it "should be an Level1::Level2::MyClass" do
19
+ subject.should eq(Level1::Level2::MyClass)
20
+ end
21
+
22
+ context "when type_loader set" do
23
+ before(:each) do
24
+ EntityStore.type_loader = lambda { |type_name|
25
+ Level1::Level2::AnotherClass
26
+ }
27
+ end
28
+
29
+ it "should return the result of that type loader" do
30
+ subject.should eq(Level1::Level2::AnotherClass)
31
+ end
32
+ end
6
33
  end
7
-
8
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entity_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
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: 2012-11-21 00:00:00.000000000 Z
12
+ date: 2012-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo