praxis-mapper 3.4.0 → 4.0

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.
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe Praxis::Mapper::SequelCompat do
5
+
6
+ context 'class methods' do
7
+
8
+ subject(:model) { PostModel }
9
+ its(:identities) { should eq [:id] }
10
+ its(:repository_name) { should be :sequel}
11
+
12
+ it 'handles composite primary keys' do
13
+ CommentModel.identities.should eq [[:author_id, :post_id]]
14
+ end
15
+
16
+ end
17
+
18
+ context 'instances loaded through an identity map' do
19
+
20
+ let!(:comment) { create(:comment) }
21
+ let(:user) { comment.author }
22
+ let(:post) { comment.post }
23
+
24
+ let(:identity_map) { Praxis::Mapper::IdentityMap.new }
25
+
26
+ let(:loaded_comment) { identity_map.get(CommentModel, [:author_id, :post_id] => [comment.author_id, comment.post_id]) }
27
+ let(:loaded_post) { identity_map.get(PostModel, id: post.id) }
28
+ let(:loaded_user) { identity_map.get(UserModel, id: user.id) }
29
+
30
+ before do
31
+ identity_map.load(CommentModel) do
32
+ track :author, :post
33
+ end
34
+ identity_map.finalize!
35
+ end
36
+
37
+
38
+ it 'are actually loaded properly' do
39
+ loaded_comment.should eq comment
40
+ loaded_post.should eq post
41
+ loaded_user.should eq user
42
+ end
43
+
44
+ it 'are not modified' do
45
+ loaded_comment.modified?.should be false
46
+ loaded_post.modified?.should be false
47
+ loaded_user.modified?.should be false
48
+ end
49
+
50
+ context 'association accessors' do
51
+ it 'are wired up correctly' do
52
+ loaded_comment.author.should be loaded_user
53
+ loaded_comment.post.should be loaded_post
54
+ end
55
+ end
56
+
57
+ context 'that have composite keys' do
58
+ let!(:composite_record) { create(:composite) }
59
+ let!(:other_records) { create_list(:other, 5, composite: composite_record) }
60
+
61
+ context 'tracking a one_to_many association' do
62
+ before do
63
+ identity_map.load(CompositeIdSequelModel) do
64
+ track :others
65
+ end
66
+ identity_map.finalize!
67
+ end
68
+
69
+ let(:loaded_composite) do
70
+ identity_map.get(
71
+ CompositeIdSequelModel,
72
+ [:id, :type] => [composite_record.id, composite_record.type])
73
+ end
74
+
75
+
76
+
77
+ it 'loads and handles associations properly' do
78
+ identity_map.all(OtherSequelModel).should =~ other_records
79
+ loaded_composite.others.should =~ other_records
80
+ end
81
+
82
+ end
83
+
84
+ context 'tracking a many_to_one association' do
85
+ before do
86
+ identity_map.load(OtherSequelModel) do
87
+ track :composite
88
+ end
89
+ identity_map.finalize!
90
+ end
91
+
92
+ let(:loaded_others) { identity_map.all(OtherSequelModel) }
93
+
94
+ it 'loads and handles associations properly' do
95
+ identity_map.all(CompositeIdSequelModel).should =~ [composite_record]
96
+ loaded_others.all? do |loaded_other|
97
+ loaded_other.composite == composite_record
98
+ end.should be true
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+ end
@@ -14,14 +14,12 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
14
 
15
15
 
16
16
 
17
- Bundler.setup
18
-
19
- #Bundler.require(:default, :development, :test)
20
-
21
17
 
22
18
  require 'praxis-mapper'
23
19
  require 'active_support/core_ext/kernel'
24
20
 
21
+
22
+ require_relative 'support/spec_sequel_models'
25
23
  require_relative 'support/spec_models'
26
24
  require_relative 'support/spec_resources'
27
25
  require_relative 'spec_fixtures'
@@ -29,9 +27,11 @@ require_relative 'spec_fixtures'
29
27
  require 'praxis-mapper/support'
30
28
 
31
29
  require 'randexp'
30
+ require 'factory_girl'
32
31
 
33
32
  require 'pry'
34
33
 
34
+
35
35
  RSpec.configure do |config|
36
36
  config.backtrace_exclusion_patterns = [
37
37
  /\/lib\d*\/ruby\//,
@@ -42,7 +42,15 @@ RSpec.configure do |config|
42
42
  /org\/jruby\/.*.java/
43
43
  ]
44
44
 
45
+ config.include FactoryGirl::Syntax::Methods
46
+
45
47
  config.before(:suite) do
48
+ FactoryGirl.find_definitions
49
+ Sequel::Model.db.transaction do
50
+ FactoryGirl.lint
51
+ raise Sequel::Rollback
52
+ end
53
+
46
54
  Praxis::Mapper.finalize!
47
55
 
48
56
  Praxis::Mapper::ConnectionManager.repository(:default, query: Praxis::Mapper::Support::MemoryQuery) do
@@ -60,4 +68,11 @@ RSpec.configure do |config|
60
68
  Praxis::Mapper::IdentityMap.current.clear!
61
69
  end
62
70
 
71
+ config.around(:each) do |example|
72
+ Sequel::Model.db.transaction do
73
+ example.run
74
+ raise Sequel::Rollback
75
+ end
76
+ end
77
+
63
78
  end
@@ -0,0 +1,110 @@
1
+
2
+ #Sequel::Model.db = Sequel.mock
3
+ #Sequel::Model.db.columns = [:id]
4
+
5
+ DB = Sequel.sqlite
6
+
7
+ DB.create_table! :users do
8
+ primary_key :id
9
+
10
+ String :name
11
+ String :email
12
+ end
13
+
14
+
15
+ DB.create_table! :posts do
16
+ primary_key :id
17
+ Integer :author_id
18
+
19
+ String :title
20
+ String :body
21
+ end
22
+
23
+
24
+ DB.create_table! :comments do
25
+
26
+ Integer :author_id
27
+ Integer :post_id
28
+
29
+ String :body
30
+
31
+ primary_key [:author_id, :post_id]
32
+ end
33
+
34
+
35
+ DB.create_table! :composite_ids do
36
+ String :id
37
+ String :type
38
+
39
+ String :name
40
+
41
+ primary_key [:id, :type]
42
+ end
43
+
44
+ DB.create_table! :others do
45
+ primary_key :id
46
+
47
+ String :composite_id
48
+ String :composite_type
49
+ end
50
+
51
+ Praxis::Mapper::ConnectionManager.setup do
52
+ repository(:sequel, query: Praxis::Mapper::Query::Sequel) do
53
+ DB
54
+ end
55
+ end
56
+
57
+ class UserModel < Sequel::Model(:users)
58
+ include Praxis::Mapper::SequelCompat
59
+
60
+ repository_name :sequel
61
+
62
+ one_to_many :posts, class: 'PostModel'
63
+ one_to_many :comments, class: 'CommentModel'
64
+
65
+ many_to_many :commented_posts, class: 'PostModel',
66
+ join_table: 'comments', join_model: 'CommentModel'
67
+ end
68
+
69
+ class PostModel < Sequel::Model(:posts)
70
+ include Praxis::Mapper::SequelCompat
71
+
72
+ repository_name :sequel
73
+
74
+ many_to_one :author, class: 'UserModel'
75
+ one_to_many :comments, class: 'CommentModel'
76
+ end
77
+
78
+ class CommentModel < Sequel::Model(:comments)
79
+ include Praxis::Mapper::SequelCompat
80
+
81
+ repository_name :sequel
82
+
83
+ set_primary_key [:author_id, :post_id]
84
+
85
+ many_to_one :author, class: 'UserModel'
86
+ many_to_one :post, class: 'PostModel'
87
+ end
88
+
89
+
90
+ class CompositeIdSequelModel < Sequel::Model(:composite_ids)
91
+ include Praxis::Mapper::SequelCompat
92
+
93
+ repository_name :sequel
94
+
95
+ set_primary_key [:id, :type]
96
+
97
+ one_to_many :others,
98
+ class: 'OtherSequelModel',
99
+ key: [:composite_id, :composite_type]
100
+ end
101
+
102
+ class OtherSequelModel < Sequel::Model(:others)
103
+ include Praxis::Mapper::SequelCompat
104
+
105
+ repository_name :sequel
106
+
107
+ many_to_one :composite,
108
+ class: 'CompositeIdSequelModel',
109
+ key: [:composite_id, :composite_type]
110
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: praxis-mapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0
4
+ version: '4.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep M. Blanquer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-22 00:00:00.000000000 Z
12
+ date: 2015-06-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: randexp
@@ -207,6 +207,34 @@ dependencies:
207
207
  - - "~>"
208
208
  - !ruby/object:Gem::Version
209
209
  version: '1'
210
+ - !ruby/object:Gem::Dependency
211
+ name: sqlite3
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ type: :development
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ - !ruby/object:Gem::Dependency
225
+ name: factory_girl
226
+ requirement: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
210
238
  description:
211
239
  email:
212
240
  - blanquer@gmail.com
@@ -226,9 +254,12 @@ files:
226
254
  - Rakefile
227
255
  - lib/praxis-mapper.rb
228
256
  - lib/praxis-mapper/config_hash.rb
257
+ - lib/praxis-mapper/connection_factories/sequel.rb
258
+ - lib/praxis-mapper/connection_factories/simple.rb
229
259
  - lib/praxis-mapper/connection_manager.rb
230
260
  - lib/praxis-mapper/finalizable.rb
231
261
  - lib/praxis-mapper/identity_map.rb
262
+ - lib/praxis-mapper/identity_map_extensions/persistence.rb
232
263
  - lib/praxis-mapper/logging.rb
233
264
  - lib/praxis-mapper/model.rb
234
265
  - lib/praxis-mapper/query/base.rb
@@ -236,6 +267,7 @@ files:
236
267
  - lib/praxis-mapper/query/sql.rb
237
268
  - lib/praxis-mapper/query_statistics.rb
238
269
  - lib/praxis-mapper/resource.rb
270
+ - lib/praxis-mapper/sequel_compat.rb
239
271
  - lib/praxis-mapper/support.rb
240
272
  - lib/praxis-mapper/support/factory_girl.rb
241
273
  - lib/praxis-mapper/support/memory_query.rb
@@ -244,7 +276,11 @@ files:
244
276
  - lib/praxis-mapper/support/schema_loader.rb
245
277
  - lib/praxis-mapper/version.rb
246
278
  - praxis-mapper.gemspec
279
+ - spec/factories/all.rb
280
+ - spec/praxis-mapper/connection_factories/sequel_spec.rb
281
+ - spec/praxis-mapper/connection_factories/simple_spec.rb
247
282
  - spec/praxis-mapper/connection_manager_spec.rb
283
+ - spec/praxis-mapper/identity_map_extensions/persistence_spec.rb
248
284
  - spec/praxis-mapper/identity_map_spec.rb
249
285
  - spec/praxis-mapper/logging_spec.rb
250
286
  - spec/praxis-mapper/memory_repository_spec.rb
@@ -253,11 +289,13 @@ files:
253
289
  - spec/praxis-mapper/query/sequel_spec.rb
254
290
  - spec/praxis-mapper/query/sql_spec.rb
255
291
  - spec/praxis-mapper/resource_spec.rb
292
+ - spec/praxis-mapper/sequel_compat_spec.rb
256
293
  - spec/praxis_mapper_spec.rb
257
294
  - spec/spec_fixtures.rb
258
295
  - spec/spec_helper.rb
259
296
  - spec/support/spec_models.rb
260
297
  - spec/support/spec_resources.rb
298
+ - spec/support/spec_sequel_models.rb
261
299
  homepage: https://github.com/rightscale/praxis-mapper
262
300
  licenses:
263
301
  - MIT
@@ -283,7 +321,11 @@ signing_key:
283
321
  specification_version: 4
284
322
  summary: A multi-datastore library designed for efficiency in loading large datasets.
285
323
  test_files:
324
+ - spec/factories/all.rb
325
+ - spec/praxis-mapper/connection_factories/sequel_spec.rb
326
+ - spec/praxis-mapper/connection_factories/simple_spec.rb
286
327
  - spec/praxis-mapper/connection_manager_spec.rb
328
+ - spec/praxis-mapper/identity_map_extensions/persistence_spec.rb
287
329
  - spec/praxis-mapper/identity_map_spec.rb
288
330
  - spec/praxis-mapper/logging_spec.rb
289
331
  - spec/praxis-mapper/memory_repository_spec.rb
@@ -292,9 +334,11 @@ test_files:
292
334
  - spec/praxis-mapper/query/sequel_spec.rb
293
335
  - spec/praxis-mapper/query/sql_spec.rb
294
336
  - spec/praxis-mapper/resource_spec.rb
337
+ - spec/praxis-mapper/sequel_compat_spec.rb
295
338
  - spec/praxis_mapper_spec.rb
296
339
  - spec/spec_fixtures.rb
297
340
  - spec/spec_helper.rb
298
341
  - spec/support/spec_models.rb
299
342
  - spec/support/spec_resources.rb
343
+ - spec/support/spec_sequel_models.rb
300
344
  has_rdoc: