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.
@@ -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: