store 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b8b967c6d3ba58a8051a867938a7b4d27bfafb0
4
- data.tar.gz: de319d311003addd0b4ba4d23a49b2cf6d1bbad5
3
+ metadata.gz: 15236ed7a3059649b7fc2d2a176f301f0f2e86a6
4
+ data.tar.gz: dcd61648154c9dd8ed07ef6109fdfb69a3793020
5
5
  SHA512:
6
- metadata.gz: 90e236478c7c99cfaacc1c31956f1d185a9746c82824cdd59d0ae565e0450311205389dcf5c21a588148e7389eda845d1d1558061875982a68be7f0a6b27cadc
7
- data.tar.gz: e7ce1711703f946ddfd5731ab3d12542c1f0ba26496421cb0c375baadc56998c5c872ff298770ea6814db44d979c304104873dad7850f97a4531c072cf814cdd
6
+ metadata.gz: b72660068c02629603b61c5d866d0372d16bbc1eda9f68ec7d9a884a2586fd109d68e67a40ac3c5db44abfab794b3b370ae3ac073db9ca43cf53f43c726b243a
7
+ data.tar.gz: 7ca0022f25758605563cf494bbe9b65d2fe5fd0cb2baac9873d0414e5e627267cec9411aeaa20ef66e1e188c8fadad875eaa92d19391e2778826b3ec6ecf9f97
data/README.md CHANGED
@@ -27,6 +27,11 @@ Or install it yourself as:
27
27
 
28
28
  See [example.rb](https://github.com/holderbaum/store/blob/master/example.rb) for capabilities of the current implementation.
29
29
 
30
+ ## DataMapper
31
+
32
+ * [Memory](https://github.com/janowiesniak/store-memory)
33
+ * [ActiveRecord](https://github.com/janowiesniak/store-active_record)
34
+
30
35
  ## Contributing
31
36
 
32
37
  1. Fork it
@@ -106,6 +106,12 @@ class Store
106
106
  entities
107
107
  end
108
108
 
109
+ def reference(entity)
110
+ reference = find_entity_reference(entity)
111
+ raise "Unknown entity #{entity.inspect}" unless reference
112
+ build_reference entity, reference if reference
113
+ end
114
+
109
115
  private
110
116
  def save_entity(entity)
111
117
  return nil unless entity
@@ -121,6 +127,10 @@ class Store
121
127
  data_mapper.update(reference, extract_entity_attributes(entity))
122
128
  end
123
129
 
130
+ build_reference entity, reference
131
+ end
132
+
133
+ def build_reference(entity, reference)
124
134
  Ref.new(extract_entity_class_name(entity), reference)
125
135
  end
126
136
 
@@ -33,5 +33,9 @@ class Store
33
33
  def query(query)
34
34
  @store.query(query)
35
35
  end
36
+
37
+ def reference(entity)
38
+ @store.reference(entity)
39
+ end
36
40
  end
37
41
  end
@@ -3,6 +3,16 @@ require 'store/resolver/data_mapper'
3
3
 
4
4
  module Resolver
5
5
 
6
+ def extract_entity_class_name(obj)
7
+ if obj.kind_of? Store::Ref
8
+ extract_entity_class_name_from_ref(obj)
9
+ elsif obj.kind_of? Store::Query
10
+ extract_entity_class_name_from_query(obj)
11
+ else
12
+ extract_entity_class_name_from_object(obj)
13
+ end
14
+ end
15
+
6
16
  def extract_entity_class_name_from_ref(ref)
7
17
  ref.entity_type
8
18
  end
@@ -7,15 +7,7 @@ module Resolver
7
7
  end
8
8
 
9
9
  def resolve_data_mapper(obj)
10
- @mapping[
11
- if obj.kind_of? Store::Ref
12
- extract_entity_class_name_from_ref(obj)
13
- elsif obj.kind_of? Store::Query
14
- extract_entity_class_name_from_query(obj)
15
- else
16
- extract_entity_class_name_from_object(obj)
17
- end
18
- ]
10
+ @mapping[extract_entity_class_name(obj)]
19
11
  end
20
12
 
21
13
  end
@@ -8,15 +8,7 @@ module Resolver
8
8
  end
9
9
 
10
10
  def resolve_entity_mapper(obj)
11
- @mapping[
12
- if obj.kind_of? Store::Ref
13
- extract_entity_class_name_from_ref(obj)
14
- elsif obj.kind_of? Store::Query
15
- extract_entity_class_name_from_query(obj)
16
- else
17
- extract_entity_class_name_from_object(obj)
18
- end
19
- ].new(@store)
11
+ @mapping[extract_entity_class_name(obj)].new(@store)
20
12
  end
21
13
 
22
14
  end
@@ -1,3 +1,3 @@
1
1
  class Store
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -68,4 +68,24 @@ describe 'Store::Repo' do
68
68
  assert_equal :result, result
69
69
  end
70
70
 
71
+ describe 'private' do
72
+ it 'delegeates query to @store' do
73
+ store.expect :query, :result, [:arg]
74
+
75
+ result = repo.send :query, :arg
76
+
77
+ assert store.verify
78
+ assert_equal :result, result
79
+ end
80
+
81
+ it 'delegeates reference to @store' do
82
+ store.expect :reference, :result, [:arg]
83
+
84
+ result = repo.send :reference, :arg
85
+
86
+ assert store.verify
87
+ assert_equal :result, result
88
+ end
89
+ end
90
+
71
91
  end
@@ -134,11 +134,10 @@ describe 'store' do
134
134
 
135
135
  describe 'reload' do
136
136
  it 'delegates to load with reference' do
137
- ref = Store::Ref.new('name', :ref22)
138
- data_mapper.expect(:insert, ref, [entity_hash])
137
+ data_mapper.expect(:insert, :ref22, [entity_hash])
139
138
  store.save(entity)
140
139
 
141
- data_mapper.expect(:single_find, {'email' => '1', 'gender' => '2'}, [ref])
140
+ data_mapper.expect(:single_find, {'email' => '1', 'gender' => '2'}, [:ref22])
142
141
  result = store.reload(entity)
143
142
 
144
143
  assert data_mapper.verify
@@ -194,6 +193,25 @@ describe 'store' do
194
193
  end
195
194
  end
196
195
 
196
+ describe 'reference' do
197
+ it 'returns the reference for the given entity' do
198
+ ref = Store::Ref.new('name', :ref22)
199
+ data_mapper.expect(:insert, :ref22, [entity_hash])
200
+ store.save(entity)
201
+
202
+ result = store.reference(entity)
203
+ assert_equal ref, result
204
+ end
205
+
206
+ it 'raises if reference not known' do
207
+ error = assert_raises RuntimeError do
208
+ store.reference(entity)
209
+ end
210
+
211
+ assert_match(/unknown/i, error.message)
212
+ end
213
+ end
214
+
197
215
  describe 'building' do
198
216
  Project = Struct.new(:name, :due_date)
199
217
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakob Holderbaum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2013-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler