mongoid_upk 0.0.2 → 0.1.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.
- data/.travis.yml +17 -0
- data/README.md +32 -6
- data/lib/mongoid_upk.rb +10 -0
- data/lib/mongoid_upk/version.rb +1 -1
- data/mongoid_upk.gemspec +2 -1
- data/spec/mongoid_upk_spec.rb +20 -0
- metadata +23 -22
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -4,6 +4,8 @@ Mongoid::UPK generates more unique `_id` by using UUID.
|
|
4
4
|
|
5
5
|
UPK stands for "unique primary key" or "uuid primary key".
|
6
6
|
|
7
|
+
|
8
|
+
|
7
9
|
## Install
|
8
10
|
|
9
11
|
```bash
|
@@ -16,8 +18,12 @@ gem install mongoid_upk
|
|
16
18
|
gem "mongoid_upk"
|
17
19
|
```
|
18
20
|
|
21
|
+
|
22
|
+
|
19
23
|
## Usage
|
20
24
|
|
25
|
+
**Basic**
|
26
|
+
|
21
27
|
```ruby
|
22
28
|
class MyModel
|
23
29
|
include Mongoid::Document
|
@@ -25,19 +31,18 @@ class MyModel
|
|
25
31
|
end
|
26
32
|
```
|
27
33
|
|
28
|
-
|
29
|
-
|
30
|
-
**Explicit definition**
|
34
|
+
or:
|
31
35
|
|
32
36
|
```ruby
|
33
37
|
class MyModel
|
34
38
|
include Mongoid::Document
|
35
39
|
include Mongoid::UPK
|
36
|
-
uuid_pk
|
40
|
+
uuid_pk # you can leave this out, because it's the default generator
|
37
41
|
end
|
38
42
|
```
|
39
43
|
|
40
|
-
|
44
|
+
|
45
|
+
Will use `UUID` ([uuid gem](https://github.com/assaf/uuid) by assaf), `:compact` mode per default.
|
41
46
|
|
42
47
|
**Pretty UUID**
|
43
48
|
|
@@ -65,9 +70,28 @@ end
|
|
65
70
|
Very long `_id` with both BSON::ObjectId **and** UUID.
|
66
71
|
(Example: `4f2e55a2ee911332c4000001-95faf560320f012f315510e6baa29f2c`)
|
67
72
|
|
73
|
+
**Own pk generator**
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
class MyModel
|
77
|
+
include Mongoid::Document
|
78
|
+
include Mongoid::UPK
|
79
|
+
unique_pk do
|
80
|
+
# code goes here
|
81
|
+
# result must be a string
|
82
|
+
# example:
|
83
|
+
Digest::MD5.hexdigest(Time.now.to_f.to_s)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
```
|
87
|
+
|
88
|
+
Example is self-describing.
|
89
|
+
|
90
|
+
|
91
|
+
|
68
92
|
## Motivation
|
69
93
|
|
70
|
-
While writing very fast to MongoDB it is possible to take
|
94
|
+
While writing very fast to MongoDB it is possible to take a BSON::ObjectId twice.
|
71
95
|
This will lead to big troubles because you never know which document will be returned.
|
72
96
|
|
73
97
|
This gem utilizes the `key` method and overwrites the automatically given default id with the choosen generator on save.
|
@@ -77,6 +101,8 @@ UUID is in most cases more reliable, especially if the app instances are set up
|
|
77
101
|
|
78
102
|
Read more about the [UUID gem and how to set up your project (e.g. using unicorn or other threaded webservers)](https://github.com/assaf/uuid).
|
79
103
|
|
104
|
+
|
105
|
+
|
80
106
|
## License
|
81
107
|
|
82
108
|
MIT/X11
|
data/lib/mongoid_upk.rb
CHANGED
data/lib/mongoid_upk/version.rb
CHANGED
data/mongoid_upk.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mongoid_upk"
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Christoph Grabo"]
|
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".rvmrc",
|
21
|
+
".travis.yml",
|
21
22
|
"Gemfile",
|
22
23
|
"Gemfile.lock",
|
23
24
|
"LICENSE",
|
data/spec/mongoid_upk_spec.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
3
|
+
require "digest/sha1"
|
4
|
+
require "digest/md5"
|
3
5
|
|
4
6
|
class TestDoc
|
5
7
|
include Mongoid::Document
|
6
8
|
include Mongoid::UPK
|
9
|
+
uuid_pk
|
7
10
|
|
8
11
|
field :name
|
9
12
|
end
|
@@ -18,6 +21,8 @@ describe Mongoid::UPK do
|
|
18
21
|
|
19
22
|
it "bson id + uuid" do
|
20
23
|
class TestDoc2 < TestDoc
|
24
|
+
include Mongoid::Document
|
25
|
+
include Mongoid::UPK
|
21
26
|
bson_uuid_pk
|
22
27
|
end
|
23
28
|
|
@@ -34,6 +39,21 @@ describe Mongoid::UPK do
|
|
34
39
|
include Mongoid::UPK
|
35
40
|
end
|
36
41
|
}.to raise_error(Mongoid::UPK::MissingDependency)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "#unique_pk with block" do
|
45
|
+
class TestDoc3
|
46
|
+
include Mongoid::Document
|
47
|
+
include Mongoid::UPK
|
48
|
+
unique_pk do
|
49
|
+
"md5-" + Digest::MD5.hexdigest(Time.now.to_f.to_s)
|
50
|
+
end
|
51
|
+
end
|
37
52
|
|
53
|
+
td = TestDoc3.new
|
54
|
+
old_id = td._id
|
55
|
+
td.save and td.reload
|
56
|
+
td._id.should_not == old_id
|
38
57
|
end
|
58
|
+
|
39
59
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_upk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-05 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bson_ext
|
16
|
-
requirement: &
|
16
|
+
requirement: &10032780 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *10032780
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mongoid
|
27
|
-
requirement: &
|
27
|
+
requirement: &10032300 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *10032300
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: uuid
|
38
|
-
requirement: &
|
38
|
+
requirement: &10031820 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *10031820
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &10031340 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *10031340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &10030860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *10030860
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &10030380 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *10030380
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: database_cleaner
|
82
|
-
requirement: &
|
82
|
+
requirement: &10046300 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *10046300
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: jeweler
|
93
|
-
requirement: &
|
93
|
+
requirement: &10045820 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *10045820
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: pry
|
104
|
-
requirement: &
|
104
|
+
requirement: &10045340 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *10045340
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: pry-doc
|
115
|
-
requirement: &
|
115
|
+
requirement: &10044860 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *10044860
|
124
124
|
description: Mongoid::UPK generates more unique `_id` by using UUID.
|
125
125
|
email: chris@dinarrr.com
|
126
126
|
executables: []
|
@@ -130,6 +130,7 @@ extra_rdoc_files:
|
|
130
130
|
- README.md
|
131
131
|
files:
|
132
132
|
- .rvmrc
|
133
|
+
- .travis.yml
|
133
134
|
- Gemfile
|
134
135
|
- Gemfile.lock
|
135
136
|
- LICENSE
|
@@ -155,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
156
|
version: '0'
|
156
157
|
segments:
|
157
158
|
- 0
|
158
|
-
hash:
|
159
|
+
hash: 2358298730515367779
|
159
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
161
|
none: false
|
161
162
|
requirements:
|