store 0.0.5 → 0.0.6

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: df33306fe8b122660bed78924798dd868aaec454
4
- data.tar.gz: 14080358cdeb12d1144c083814c4c43f508edfa5
3
+ metadata.gz: 6f95b1ab0e7baa12a07c3b53d297f42da47440ac
4
+ data.tar.gz: 0dcaa59a8fe5af7d4678bb9ab714c335cd95894d
5
5
  SHA512:
6
- metadata.gz: d9f5547caeec781e7091141718d101b7d132c4d7bd684c7c5d6025b430c8154d181fb8ee3b56a696239ba4d68be4bb177634d4152029e8cc0594a4a114d68693
7
- data.tar.gz: f009c4f56c166c52b66295a84f217dadb5f2636f4f18fe2e312cc0a4b04877bdfb06360dad5e69421f57e0571523f1a487b9017a9d186ecb446876ac9d7ca68d
6
+ metadata.gz: a224bbb8c5330b40ae561c85e65c3fc05669afd2eb2b026acc40eddc2b099ca0719fde7e9acad7227afbc309ae3840beb4d559d82ffc0fc881c3145776e4334d
7
+ data.tar.gz: 4c9595417be360e5b12d35bb6bbcc4f8c36037071027d32af0bdefd513775a4d932198aceeda1f55fdbd2914dce12dea8d92ba8191813eb2f8b32cd8666228c1
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  doc
2
2
  pkg
3
3
  coverage
4
+ Gemfile.lock
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - jruby-19mode
6
+ - rbx-19mode
data/README.md CHANGED
@@ -1,7 +1,12 @@
1
- # Store [![Gem Version](https://badge.fury.io/rb/store.png)](http://badge.fury.io/rb/store)
1
+ # Store
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/store.png)](http://badge.fury.io/rb/store) [![Build Status](https://api.travis-ci.org/holderbaum/store.png)](https://travis-ci.org/holderbaum/store)
2
4
 
3
5
  Implementations for using the Repository- and Data Mapper Pattern in ruby
4
6
 
7
+ **Important:** We are still ignoring dirty tracking, so this is not for
8
+ heavy-load environments! [Issue](https://github.com/holderbaum/store/issues/1)
9
+
5
10
  ## Installation
6
11
 
7
12
  Add this line to your application's Gemfile:
data/example.rb CHANGED
@@ -18,7 +18,15 @@ class Catalog
18
18
  end
19
19
 
20
20
  class Product
21
- attr_accessor :name, :price
21
+ attr_accessor :name, :price, :discount
22
+
23
+ def discounted_price
24
+ price * (1 - discount)
25
+ end
26
+
27
+ def discount
28
+ @discount || 0
29
+ end
22
30
  end
23
31
 
24
32
  # EntityMappers ################################################################
@@ -59,15 +67,17 @@ class ProductEntityMapper < Store::EntityMapper
59
67
  def map(product)
60
68
  {
61
69
  'name' => product.name,
62
- 'price' => product.price
70
+ 'price' => product.price,
71
+ 'discount' => product.discount
63
72
  }
64
73
  end
65
74
 
66
75
  def unmap(cls, mapped)
67
- user = cls.new
68
- user.name = mapped['name']
69
- user.price = mapped['price']
70
- user
76
+ product = cls.new
77
+ product.name = mapped['name']
78
+ product.price = mapped['price']
79
+ product.discount = mapped['discount']
80
+ product
71
81
  end
72
82
  end
73
83
 
@@ -95,12 +105,12 @@ class MemoryDataMapper < Store::DataMapper
95
105
  id
96
106
  end
97
107
 
98
- def single_find(reference)
99
- dup(@items[reference])
108
+ def single_find(id)
109
+ dup(@items[id])
100
110
  end
101
111
 
102
- def bulk_find(references)
103
- @items.values_at(*references).map do |data|
112
+ def bulk_find(ids)
113
+ @items.values_at(*ids).map do |data|
104
114
  dup data
105
115
  end
106
116
  end
@@ -171,6 +181,12 @@ class Repo < Store::Repo
171
181
  end
172
182
  end
173
183
 
184
+ class DiscountedProductFactory < Struct.new(:repo)
185
+ def build(name, price = 100)
186
+ repo.build 'Product', :name => name, :price => price, :discount => 0.25
187
+ end
188
+ end
189
+
174
190
  repo = Repo.new(entities, data_mappers, entity_mappers)
175
191
 
176
192
  # Usage ########################################################################
@@ -179,8 +195,11 @@ editor = repo.build 'User', :name => 'Mr. Repo'
179
195
 
180
196
  catalog = repo.build 'Catalog', :name => 'Catalog 1', :editor => editor
181
197
 
198
+ factory = DiscountedProductFactory.new(repo)
199
+
182
200
  catalog.add_product repo.build('Product', :name => 'Pickaxe', :price => 100)
183
201
  catalog.add_product repo.build('Product', :name => 'Scredriver', :price => 400)
202
+ catalog.add_product factory.build('Pair of shoes')
184
203
 
185
204
  p 'save call'
186
205
  repo.save(catalog)
@@ -2,14 +2,15 @@ require 'store/repo'
2
2
  require 'store/ref'
3
3
  require 'store/entity_mapper'
4
4
  require 'store/data_mapper'
5
+ require 'store/resolver'
6
+ require 'store/entity_references'
5
7
 
6
8
  class Store
7
9
  def initialize(entity_classes, data_mapping, entity_mapping)
8
- @entity_classes = entity_classes
9
- @data_mapping = data_mapping
10
- @entity_mapping = entity_mapping
11
-
12
- @entity_references = Hash.new
10
+ @entity_classes = entity_classes
11
+ @resolver_data_mapper = Resolver::DataMapper.new(data_mapping)
12
+ @resolver_entity_mapper = Resolver::EntityMapper.new(self, entity_mapping)
13
+ @entity_references = EntityReferences.new
13
14
  end
14
15
 
15
16
  def build(entity_class_name, attributes = {})
@@ -34,7 +35,7 @@ class Store
34
35
  end
35
36
 
36
37
  def remove(entity)
37
- data_mapper = data_mapper_for_entity(entity)
38
+ data_mapper = data_mapper(entity)
38
39
  raise_unless_data_mapper_found(entity, data_mapper)
39
40
 
40
41
  reference = find_entity_reference(entity)
@@ -44,8 +45,7 @@ class Store
44
45
  end
45
46
 
46
47
  def query(query)
47
- data_mapper = data_mapper_for_query(query)
48
- entity_mapper = entity_mapper_for_query(query)
48
+ data_mapper = data_mapper(query)
49
49
  entity_class = @entity_classes[query.entity]
50
50
 
51
51
  raise_unless_data_mapper_found(query, data_mapper)
@@ -53,7 +53,7 @@ class Store
53
53
  mapped_entities_with_references = data_mapper.select(query) || {}
54
54
 
55
55
  mapped_entities_with_references.map do |reference, mapped_entity|
56
- entity = entity_mapper.new(self).unmap(entity_class, mapped_entity)
56
+ entity = entity_mapper(query).unmap(entity_class, mapped_entity)
57
57
  save_entity_reference reference, entity
58
58
  entity
59
59
  end
@@ -68,21 +68,19 @@ class Store
68
68
  end
69
69
 
70
70
  def single_load(ref)
71
- data_mapper = data_mapper_for_ref(ref)
72
- entity_mapper = entity_mapper_for_ref(ref)
71
+ data_mapper = data_mapper(ref)
73
72
  entity_class = @entity_classes[ref.entity_type]
74
73
  reference = ref.reference
75
74
 
76
75
  mapped_entity = data_mapper.single_find(reference)
77
76
 
78
- entity = entity_mapper.new(self).unmap(entity_class, mapped_entity)
77
+ entity = entity_mapper(ref).unmap(entity_class, mapped_entity)
79
78
  save_entity_reference reference, entity
80
79
  entity
81
80
  end
82
81
 
83
82
  def bulk_load(refs)
84
- data_mapper = data_mapper_for_ref(refs.first)
85
- entity_mapper = entity_mapper_for_ref(refs.first)
83
+ data_mapper = data_mapper(refs.first)
86
84
  entity_class = @entity_classes[refs.first.entity_type]
87
85
 
88
86
  references = refs.map(&:reference)
@@ -93,7 +91,7 @@ class Store
93
91
  references.each_with_index do |reference, i|
94
92
  mapped_entity = mapped_entities[i]
95
93
 
96
- entity = entity_mapper.new(self).unmap(entity_class, mapped_entity)
94
+ entity = entity_mapper(refs.first).unmap(entity_class, mapped_entity)
97
95
  save_entity_reference reference, entity
98
96
  entities << entity
99
97
  end
@@ -105,82 +103,50 @@ class Store
105
103
  def save_entity(entity)
106
104
  return nil unless entity
107
105
 
108
- data_mapper = data_mapper_for_entity(entity)
106
+ data_mapper = data_mapper(entity)
109
107
  raise_unless_data_mapper_found(entity, data_mapper)
110
108
 
111
109
  reference = find_entity_reference(entity)
112
110
  if reference.nil?
113
- reference = data_mapper.insert(map_entity entity)
111
+ reference = data_mapper.insert(extract_entity_attributes(entity))
114
112
  save_entity_reference(reference, entity)
115
113
  else
116
- data_mapper.update(reference, map_entity(entity))
114
+ data_mapper.update(reference, extract_entity_attributes(entity))
117
115
  end
118
116
 
119
- Ref.new(entity_type(entity), reference)
117
+ Ref.new(extract_entity_class_name(entity), reference)
120
118
  end
121
119
 
122
120
  def raise_unless_data_mapper_found(source, data_mapper)
123
121
  raise "No data_mapper for #{source.inspect} found" unless data_mapper
124
122
  end
125
123
 
126
- def map_entity(entity)
127
- entity_mapper = entity_mapper_for_entity(entity)
128
- entity_mapper.new(self).map(entity)
129
- end
130
-
131
- def entity_mapper_for_entity(entity)
132
- type = entity_type(entity)
133
- entity_mapper_for_type(type)
134
- end
135
-
136
- def entity_mapper_for_query(query)
137
- type = query.entity
138
- entity_mapper_for_type(type)
139
- end
140
-
141
- def entity_mapper_for_ref(ref)
142
- type = ref.entity_type
143
- entity_mapper_for_type(type)
144
- end
145
-
146
- def entity_mapper_for_type(type)
147
- @entity_mapping[type]
148
- end
149
-
150
- def entity_type(entity)
151
- entity_class = entity.class
152
- entity_class.name.split('::').last
153
- end
154
-
155
- def data_mapper_for_entity(entity)
156
- type = entity_type(entity)
157
- data_mapper_for_type type
124
+ def data_mapper(obj)
125
+ @resolver_data_mapper.resolve_data_mapper(obj)
158
126
  end
159
127
 
160
- def data_mapper_for_query(query)
161
- type = query.entity
162
- data_mapper_for_type type
128
+ def entity_mapper(obj)
129
+ @resolver_entity_mapper.resolve_entity_mapper(obj)
163
130
  end
164
131
 
165
- def data_mapper_for_ref(ref)
166
- type = ref.entity_type
167
- data_mapper_for_type type
132
+ def extract_entity_attributes(entity)
133
+ entity_mapper(entity).map(entity)
168
134
  end
169
135
 
170
- def data_mapper_for_type(type)
171
- @data_mapping[type]
136
+ def extract_entity_class_name(obj)
137
+ @resolver_entity_mapper.extract_entity_class_name_from_object(obj)
172
138
  end
173
139
 
174
140
  def find_entity_reference(entity)
175
- @entity_references[entity.object_id]
141
+ @entity_references.find(entity)
176
142
  end
177
143
 
178
144
  def save_entity_reference(reference, entity)
179
- @entity_references[entity.object_id] = reference
145
+ @entity_references.save(reference, entity)
180
146
  end
181
147
 
182
148
  def remove_entity_reference(entity)
183
- @entity_references.delete entity.object_id
149
+ @entity_references.remove entity
184
150
  end
185
151
 
186
152
  end
@@ -0,0 +1,17 @@
1
+ class EntityReferences
2
+ def initialize
3
+ @hash = Hash.new
4
+ end
5
+
6
+ def save(id, entity)
7
+ @hash[entity.object_id] = id
8
+ end
9
+
10
+ def find(entity)
11
+ @hash[entity.object_id]
12
+ end
13
+
14
+ def remove(entity)
15
+ @hash.delete entity.object_id
16
+ end
17
+ end
@@ -10,11 +10,16 @@ class Store
10
10
  @store.build(entity, *args)
11
11
  end
12
12
 
13
- def save(entites)
14
- @store.save(entites)
13
+ def save(entities)
14
+ @store.save(entities)
15
15
  true
16
16
  end
17
17
 
18
+ def save_and_load(entities)
19
+ refs = @store.save(entities)
20
+ @store.load(refs)
21
+ end
22
+
18
23
  def remove(entity)
19
24
  @store.remove(entity)
20
25
  true
@@ -0,0 +1,18 @@
1
+ require 'store/resolver/entity_mapper'
2
+ require 'store/resolver/data_mapper'
3
+
4
+ module Resolver
5
+
6
+ def extract_entity_class_name_from_ref(ref)
7
+ ref.entity_type
8
+ end
9
+
10
+ def extract_entity_class_name_from_query(query)
11
+ query.entity
12
+ end
13
+
14
+ def extract_entity_class_name_from_object(obj)
15
+ obj.class.name.split('::').last
16
+ end
17
+
18
+ end
@@ -0,0 +1,22 @@
1
+ module Resolver
2
+ class DataMapper
3
+ include Resolver
4
+
5
+ def initialize(mapping)
6
+ @mapping = mapping
7
+ end
8
+
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
+ ]
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module Resolver
2
+ class EntityMapper
3
+ include Resolver
4
+
5
+ def initialize(store, mapping)
6
+ @store = store
7
+ @mapping = mapping
8
+ end
9
+
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)
20
+ end
21
+
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  class Store
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,39 @@
1
+ require 'helper'
2
+
3
+ describe 'entity references' do
4
+
5
+ subject { EntityReferences.new }
6
+ let(:id) { 43 }
7
+ let(:object_id) { 42 }
8
+ let(:entity) { Struct.new(:object_id).new(object_id) }
9
+
10
+ describe 'save' do
11
+ it 'returns the passed id' do
12
+ assert_equal id, subject.save(id, entity)
13
+ end
14
+ end
15
+
16
+ describe 'find' do
17
+ it 'returns the passed id' do
18
+ subject.save(id, entity)
19
+ assert_equal id, subject.find(entity)
20
+ end
21
+ end
22
+
23
+ describe 'remove' do
24
+ it 'returns the passed id' do
25
+ subject.save(id, entity)
26
+ assert_equal id, subject.remove(entity)
27
+ end
28
+ end
29
+
30
+ describe 'integration' do
31
+ it 'saves an entity, finds it and removes it after that' do
32
+ subject.save(id, entity)
33
+ assert_equal id, subject.find(entity)
34
+ subject.remove(entity)
35
+ assert_nil subject.find(entity)
36
+ end
37
+ end
38
+
39
+ end
@@ -10,3 +10,17 @@ require 'ostruct'
10
10
 
11
11
  require 'store'
12
12
 
13
+ class MiniTest::Spec
14
+
15
+ def faked_class(class_name)
16
+ faked_class = Class.new do
17
+ class << self
18
+ attr_accessor :name
19
+ end
20
+ end
21
+
22
+ faked_class.name = class_name
23
+ faked_class
24
+ end
25
+
26
+ end
@@ -0,0 +1,50 @@
1
+ require 'helper'
2
+
3
+ describe Resolver::DataMapper do
4
+
5
+ subject { Resolver::DataMapper.new(mapping) }
6
+
7
+ # entites
8
+ let(:foo) { faked_class('Foo').new }
9
+ let(:bar) { faked_class('Nested::Bar').new }
10
+
11
+ # data mapper
12
+ FooDataMapper = Class.new(Store::DataMapper)
13
+ BarDataMapper = Class.new(Store::DataMapper)
14
+
15
+ let(:mapping) do
16
+ {
17
+ 'Foo' => FooDataMapper,
18
+ 'Bar' => BarDataMapper,
19
+ }
20
+ end
21
+
22
+ it 'validates the subject' do
23
+ assert_instance_of Resolver::DataMapper, subject
24
+ end
25
+
26
+ it 'resolves data mapper class from Store::Ref' do
27
+ ref = Store::Ref.new('Foo', 42)
28
+ assert_equal FooDataMapper, subject.resolve_data_mapper(ref)
29
+ end
30
+
31
+ it 'resolves data mapper class from Store::Query' do
32
+ query = Store::Query.new('Foo', :query_name, :some, :args)
33
+ assert_equal FooDataMapper, subject.resolve_data_mapper(query)
34
+ end
35
+
36
+ it 'resolves data mapper class from object' do
37
+ assert_equal FooDataMapper, subject.resolve_data_mapper(foo)
38
+ end
39
+
40
+ it 'resolves data mapper class from namespaced object' do
41
+ assert_equal BarDataMapper, subject.resolve_data_mapper(bar)
42
+ end
43
+
44
+ it 'includes Resolver module' do
45
+ assert subject.respond_to? :extract_entity_class_name_from_ref
46
+ assert subject.respond_to? :extract_entity_class_name_from_query
47
+ assert subject.respond_to? :extract_entity_class_name_from_object
48
+ end
49
+
50
+ end
@@ -0,0 +1,51 @@
1
+ require 'helper'
2
+
3
+ describe Resolver::EntityMapper do
4
+ subject { Resolver::EntityMapper.new(store, mapping) }
5
+
6
+ # entites
7
+ let(:foo) { faked_class('Foo').new }
8
+ let(:bar) { faked_class('Nested::Bar').new }
9
+
10
+ # entity mapper
11
+ FooEntityMapper = Class.new(Store::EntityMapper)
12
+ BarEntityMapper = Class.new(Store::EntityMapper)
13
+
14
+ let(:mapping) do
15
+ {
16
+ 'Foo' => FooEntityMapper,
17
+ 'Bar' => BarEntityMapper,
18
+ }
19
+ end
20
+
21
+ let(:store) { Object.new }
22
+
23
+ it 'validates the subject' do
24
+ assert_instance_of Resolver::EntityMapper, subject
25
+ end
26
+
27
+ it 'resolves entity mapper instance from Store::Ref' do
28
+ ref = Store::Ref.new('Foo', 42)
29
+ assert_instance_of FooEntityMapper, subject.resolve_entity_mapper(ref)
30
+ end
31
+
32
+ it 'resolves entity mapper instance from Store::Query' do
33
+ query = Store::Query.new('Foo', :query_name, :some, :args)
34
+ assert_instance_of FooEntityMapper, subject.resolve_entity_mapper(query)
35
+ end
36
+
37
+ it 'resolves entity mapper instance from object' do
38
+ assert_instance_of FooEntityMapper, subject.resolve_entity_mapper(foo)
39
+ end
40
+
41
+ it 'resolves entity mapper instance from namespaced object' do
42
+ assert_instance_of BarEntityMapper, subject.resolve_entity_mapper(bar)
43
+ end
44
+
45
+ it 'includes Resolver module' do
46
+ assert subject.respond_to? :extract_entity_class_name_from_ref
47
+ assert subject.respond_to? :extract_entity_class_name_from_query
48
+ assert subject.respond_to? :extract_entity_class_name_from_object
49
+ end
50
+
51
+ end
@@ -0,0 +1,30 @@
1
+ require 'helper'
2
+
3
+ describe Resolver do
4
+
5
+ let(:subject_class) { Class.new { include Resolver } }
6
+ subject { subject_class.new }
7
+
8
+ # entites
9
+ let(:foo) { faked_class('Foo').new }
10
+ let(:bar) { faked_class('Nested::Bar').new }
11
+
12
+ it 'extracts entity class name from Store::Ref' do
13
+ ref = Store::Ref.new('Foo', 42)
14
+ assert_equal 'Foo', subject.extract_entity_class_name_from_ref(ref)
15
+ end
16
+
17
+ it 'extracts entity class name from Store::Query' do
18
+ query = Store::Query.new('Foo', :query_name, :some, :args)
19
+ assert_equal 'Foo', subject.extract_entity_class_name_from_query(query)
20
+ end
21
+
22
+ it 'extracts entity class name from Object' do
23
+ assert_equal 'Foo', subject.extract_entity_class_name_from_object(foo)
24
+ end
25
+
26
+ it 'extracts entity class from Nested::Object' do
27
+ assert_equal 'Bar', subject.extract_entity_class_name_from_object(bar)
28
+ end
29
+
30
+ end
@@ -15,19 +15,48 @@ describe 'Store::Repo' do
15
15
 
16
16
  it 'delegeates save to @store and swallows result' do
17
17
  store.expect :save, :result, [:arg]
18
- assert_equal true, repo.save(:arg)
18
+
19
+ result = repo.save(:arg)
20
+
21
+ assert store.verify
22
+ assert_equal true, result
19
23
  end
20
24
 
21
25
  it 'delegates remove to @store and swallows result' do
22
26
  store.expect :remove, :result, [:arg]
23
- assert_equal true, repo.remove(:arg)
27
+
28
+ result = repo.remove(:arg)
29
+
30
+ assert store.verify
31
+ assert_equal true, result
24
32
  end
25
33
 
26
- it 'delegates build to @store and returns result' do
34
+ it 'delegates build to @store and returns result without args' do
27
35
  store.expect :build, :result, [:arg]
28
- assert_equal :result, repo.build(:arg)
29
36
 
37
+ result = repo.build(:arg)
38
+
39
+ assert store.verify
40
+ assert_equal :result, result
41
+ end
42
+
43
+ it 'delegates build to @store and returns result with args' do
30
44
  store.expect :build, :result, [:arg, :a, :b]
31
- assert_equal :result, repo.build(:arg, :a, :b)
45
+
46
+ result = repo.build(:arg, :a, :b)
47
+
48
+ assert store.verify
49
+ assert_equal :result, result
50
+ end
51
+
52
+ it 'delegates save_and_load to @store' do
53
+ store.expect :save, :refs, [:arg]
54
+ store.expect :load, :entities, [:refs]
55
+
56
+ result = repo.save_and_load(:arg)
57
+
58
+ assert store.verify
59
+ assert_equal :entities, result
32
60
  end
61
+
33
62
  end
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.3"
21
21
  spec.add_development_dependency "rake"
22
22
  spec.add_development_dependency "simplecov"
23
+ spec.add_development_dependency "minitest", "~> 5.0"
23
24
  end
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.5
4
+ version: 0.0.6
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-29 00:00:00.000000000 Z
11
+ date: 2013-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
55
69
  description:
56
70
  email:
57
71
  - jakob@featurefabrik.de
@@ -60,6 +74,7 @@ extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
76
  - .gitignore
77
+ - .travis.yml
63
78
  - Gemfile
64
79
  - README.md
65
80
  - Rakefile
@@ -67,11 +82,19 @@ files:
67
82
  - lib/store.rb
68
83
  - lib/store/data_mapper.rb
69
84
  - lib/store/entity_mapper.rb
85
+ - lib/store/entity_references.rb
70
86
  - lib/store/query.rb
71
87
  - lib/store/ref.rb
72
88
  - lib/store/repo.rb
89
+ - lib/store/resolver.rb
90
+ - lib/store/resolver/data_mapper.rb
91
+ - lib/store/resolver/entity_mapper.rb
73
92
  - lib/store/version.rb
93
+ - spec/entity_references_spec.rb
74
94
  - spec/helper.rb
95
+ - spec/resolver/data_mapper_spec.rb
96
+ - spec/resolver/entity_mapper_spec.rb
97
+ - spec/resolver/resolver_spec.rb
75
98
  - spec/store_query_spec.rb
76
99
  - spec/store_ref_spec.rb
77
100
  - spec/store_repo_spec.rb
@@ -102,7 +125,11 @@ signing_key:
102
125
  specification_version: 4
103
126
  summary: Repository Pattern and Data-Mapper Pattern
104
127
  test_files:
128
+ - spec/entity_references_spec.rb
105
129
  - spec/helper.rb
130
+ - spec/resolver/data_mapper_spec.rb
131
+ - spec/resolver/entity_mapper_spec.rb
132
+ - spec/resolver/resolver_spec.rb
106
133
  - spec/store_query_spec.rb
107
134
  - spec/store_ref_spec.rb
108
135
  - spec/store_repo_spec.rb