mongoid_upk 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - 1.9.2
4
+ - 1.8.7
5
+ - ree
6
+ - ruby-head
7
+ - rbx-18mode
8
+ - rbx-19mode
9
+
10
+ branches:
11
+ only:
12
+ - develop
13
+ - master
14
+
15
+ notifications:
16
+ email:
17
+ - chris@dinarrr.com
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
- Will automatically use `UUID` ([uuid gem](https://github.com/assaf/uuid) by assaf), `:compact` mode per default.
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
- Same as above.
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 an BSON::ObjectId twice.
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
@@ -42,6 +42,16 @@ module Mongoid
42
42
  end
43
43
  end
44
44
 
45
+ def unique_pk
46
+ if block_given?
47
+ key :_id do |origin_bson_id|
48
+ yield
49
+ end
50
+ else
51
+ raise ArgumentError, "No block provided!"
52
+ end
53
+ end
54
+
45
55
  end
46
56
 
47
57
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
3
  module UPK
4
- VERSION = "0.0.2"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mongoid_upk"
8
- s.version = "0.0.2"
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",
@@ -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.2
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: &7357340 !ruby/object:Gem::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: *7357340
24
+ version_requirements: *10032780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mongoid
27
- requirement: &7356860 !ruby/object:Gem::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: *7356860
35
+ version_requirements: *10032300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: uuid
38
- requirement: &7356380 !ruby/object:Gem::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: *7356380
46
+ version_requirements: *10031820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &7355900 !ruby/object:Gem::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: *7355900
57
+ version_requirements: *10031340
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &7355420 !ruby/object:Gem::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: *7355420
68
+ version_requirements: *10030860
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &7354940 !ruby/object:Gem::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: *7354940
79
+ version_requirements: *10030380
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: database_cleaner
82
- requirement: &7354460 !ruby/object:Gem::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: *7354460
90
+ version_requirements: *10046300
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: jeweler
93
- requirement: &7353980 !ruby/object:Gem::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: *7353980
101
+ version_requirements: *10045820
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: pry
104
- requirement: &7353500 !ruby/object:Gem::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: *7353500
112
+ version_requirements: *10045340
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: pry-doc
115
- requirement: &7369420 !ruby/object:Gem::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: *7369420
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: 762031412242489430
159
+ hash: 2358298730515367779
159
160
  required_rubygems_version: !ruby/object:Gem::Requirement
160
161
  none: false
161
162
  requirements: