acts_as_uuid 0.0.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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +51 -0
- data/Rakefile +1 -0
- data/acts_as_uuid.gemspec +24 -0
- data/lib/acts_as_uuid.rb +6 -0
- data/lib/acts_as_uuid/acts_as_uuid.rb +11 -0
- data/lib/acts_as_uuid/railtie.rb +51 -0
- data/lib/acts_as_uuid/version.rb +3 -0
- data/spec/acts_as_uuid/acts_as_uuid.rb +5 -0
- data/spec/spec_helper.rb +1 -0
- metadata +104 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# ActsAsUUID
|
2
|
+
|
3
|
+
Adds (native) UUID support, including support for primary keys and associations , to your ActiveRecord models. Currently only supports PostgreSQL.
|
4
|
+
|
5
|
+
Inspired by https://github.com/jashmenn/activeuuid and the lack of PostgreSQL gems that worked.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this to your `Gemfile`:
|
10
|
+
|
11
|
+
`gem "acts_as_uuid"`
|
12
|
+
|
13
|
+
You can now set the type `uuid` for any attribute in your models.
|
14
|
+
|
15
|
+
## Example: Adding a UUID primary key to your models
|
16
|
+
|
17
|
+
### Step 1a: For new models
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
|
21
|
+
def self.change
|
22
|
+
create_table :emails, :id => false do |t|
|
23
|
+
t.uuid :id, :unique => true
|
24
|
+
end
|
25
|
+
add_index :emails, :id
|
26
|
+
end
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
### Step 1b: Migrating existing models
|
31
|
+
|
32
|
+
For existing models just add:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
|
36
|
+
def self.change
|
37
|
+
remove_column :emails, :id
|
38
|
+
add_column :emails, :id, :uuid
|
39
|
+
add_index :emails, :id
|
40
|
+
end
|
41
|
+
end
|
42
|
+
```
|
43
|
+
Keep in mind that after this all your UUIDs will be set to nil.
|
44
|
+
|
45
|
+
### Step 2: Extend your model
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
class Email < ActiveRecord::Base
|
49
|
+
include ActsAsUUID
|
50
|
+
end
|
51
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "acts_as_uuid/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "acts_as_uuid"
|
7
|
+
s.version = ActsAsUuid::VERSION
|
8
|
+
s.authors = ["Cristiano Betta"]
|
9
|
+
s.email = ["cristiano@emberads.com"]
|
10
|
+
s.homepage = "https://github.com/EmberAds/acts_as_uuid"
|
11
|
+
s.summary = %q{Allows ActiveRecord to use (native) UUIDs }
|
12
|
+
s.description = %q{Allows ActiveRecord to use (native) UUIDs, even as primary keys. Currently only works with PostgreSQL. }
|
13
|
+
|
14
|
+
s.rubyforge_project = "acts_as_uuid"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "uuid"
|
24
|
+
end
|
data/lib/acts_as_uuid.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'acts_as_uuid'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
module ActsAsUUID
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
railtie_name :activeuuid
|
7
|
+
initializer "activeuuid.configure_rails_initialization" do
|
8
|
+
|
9
|
+
module PostgreSQLAdapter
|
10
|
+
def native_database_types_with_uuid_support
|
11
|
+
a = native_database_types_without_uuid_support
|
12
|
+
a[:uuid] = {:name => 'uuid'}
|
13
|
+
return a
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.included klass
|
17
|
+
klass.alias_method_chain :native_database_types, :uuid_support
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module PostgreSQLColumn
|
22
|
+
def simplified_type_with_uuid_support(field_type)
|
23
|
+
if field_type == 'uuid'
|
24
|
+
:uuid
|
25
|
+
else
|
26
|
+
simplified_type_without_uuid_support(field_type)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.included klass
|
31
|
+
klass.alias_method_chain :simplified_type, :uuid_support
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
module TableDefinition
|
36
|
+
def uuid *args
|
37
|
+
options = args.extract_options!
|
38
|
+
column(args[0], 'uuid', options)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Include it all
|
43
|
+
if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
|
44
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition.__send__ :include, ActsAsUUID::Railtie::TableDefinition
|
45
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.__send__ :include, ActsAsUUID::Railtie::PostgreSQLAdapter
|
46
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLColumn.__send__ :include, ActsAsUUID::Railtie::PostgreSQLColumn
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "acts_as_uuid"
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: acts_as_uuid
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Cristiano Betta
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-01-30 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: uuid
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
description: "Allows ActiveRecord to use (native) UUIDs, even as primary keys. Currently only works with PostgreSQL. "
|
49
|
+
email:
|
50
|
+
- cristiano@emberads.com
|
51
|
+
executables: []
|
52
|
+
|
53
|
+
extensions: []
|
54
|
+
|
55
|
+
extra_rdoc_files: []
|
56
|
+
|
57
|
+
files:
|
58
|
+
- .gitignore
|
59
|
+
- Gemfile
|
60
|
+
- README.md
|
61
|
+
- Rakefile
|
62
|
+
- acts_as_uuid.gemspec
|
63
|
+
- lib/acts_as_uuid.rb
|
64
|
+
- lib/acts_as_uuid/acts_as_uuid.rb
|
65
|
+
- lib/acts_as_uuid/railtie.rb
|
66
|
+
- lib/acts_as_uuid/version.rb
|
67
|
+
- spec/acts_as_uuid/acts_as_uuid.rb
|
68
|
+
- spec/spec_helper.rb
|
69
|
+
homepage: https://github.com/EmberAds/acts_as_uuid
|
70
|
+
licenses: []
|
71
|
+
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
version: "0"
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project: acts_as_uuid
|
98
|
+
rubygems_version: 1.8.15
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
summary: Allows ActiveRecord to use (native) UUIDs
|
102
|
+
test_files:
|
103
|
+
- spec/acts_as_uuid/acts_as_uuid.rb
|
104
|
+
- spec/spec_helper.rb
|