acts_as_uuid 0.0.3 → 0.1.1

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/README.md CHANGED
@@ -10,7 +10,7 @@ Add this to your `Gemfile`:
10
10
 
11
11
  `gem "acts_as_uuid"`
12
12
 
13
- You can now set the type `uuid` for any attribute in your models.
13
+ You can now set the type `uuid` for an attribute in your models.
14
14
 
15
15
  ## Example: Adding a UUID primary key to your models
16
16
 
@@ -27,6 +27,8 @@ class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
27
27
  end
28
28
  ```
29
29
 
30
+ *Don't forget:* You will also need to change any foreign keys to the `uuid` type.
31
+
30
32
  ### Step 1b: Migrating existing models
31
33
 
32
34
  For existing models just add:
@@ -40,16 +42,48 @@ class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
40
42
  end
41
43
  end
42
44
  ```
43
- Keep in mind that after this all your UUIDs will be set to nil.
44
45
 
45
- ### Step 2: Extend your model
46
+ *Keep in mind:* after this all your UUIDs will be set to nil.
47
+
48
+ ### Step 2: Extend your model to auto generate UUIDs for a field
46
49
 
47
50
  ```ruby
48
51
  class Email < ActiveRecord::Base
49
52
  include ActsAsUUID
53
+ uuid_on :id, :as => :primary_key
54
+ end
55
+ ```
56
+
57
+ ## Example: Adding a UUID as a separate field
58
+
59
+ ### Step 1: Migrate a model
60
+
61
+ ```ruby
62
+ class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
63
+ def self.change
64
+ add_column :emails, :guid, :uuid
65
+ add_index :emails, :guid, :unique => true
66
+ end
50
67
  end
51
68
  ```
52
69
 
53
- ### License
70
+ *Keep in mind:* after this all your UUIDs will be set to nil.
71
+
72
+ ### Step 2: Extend your model to auto generate UUIDs for a field
73
+
74
+ ```ruby
75
+ class Email < ActiveRecord::Base
76
+ include ActsAsUUID
77
+ uuid_on :guid
78
+ end
79
+ ```
80
+
81
+ ## Important notes
82
+
83
+ * Currently only supports 1 field to be set to auto generate a UUID
84
+ * Integers can't be migrated to UUIDs without losing data
85
+ * If you use a UUID as a primary key you will lose some ActiveRecord features like: `.first`, `.find_each` and `.find_in_batches`. Basically any method that requires the ID to be sorted as an integer.
86
+
87
+ ## License
54
88
 
55
89
  See LICENSE
@@ -1,11 +1,23 @@
1
1
  module ActsAsUUID
2
2
  def self.included klass
3
3
  klass.before_validation :generate_uuid
4
- klass.validates :id, :uniqueness => true
5
- klass.primary_key = :id
4
+ klass.extend ClassMethods
6
5
  end
7
6
 
8
7
  def generate_uuid
9
- self.id ||= UUID.generate
8
+ self[self.class.acts_as_uuid_field] ||= UUID.generate
10
9
  end
10
+
11
+ module ClassMethods
12
+
13
+ def uuid_on field, options = {}
14
+ self.acts_as_uuid_field = field
15
+ self.validates field, :uniqueness => true
16
+ self.primary_key = field if options[:as] == :primary_key
17
+ end
18
+
19
+ attr_accessor :acts_as_uuid_field
20
+ protected :acts_as_uuid_field=
21
+ end
22
+
11
23
  end
@@ -1,3 +1,3 @@
1
1
  module ActsAsUuid
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Cristiano Betta
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-30 00:00:00 Z
18
+ date: 2012-02-01 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec