activerecord_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 +5 -0
- data/Gemfile +4 -0
- data/README.md +67 -0
- data/Rakefile +1 -0
- data/activerecord_uuid.gemspec +24 -0
- data/lib/activerecord_uuid/active_record_extension.rb +26 -0
- data/lib/activerecord_uuid/version.rb +3 -0
- data/lib/activerecord_uuid.rb +17 -0
- data/spec/active_record_extension_spec.rb +48 -0
- data/spec/migrations/20121004135939_create_countries.rb +7 -0
- data/spec/migrations/20121004135940_create_languages.rb +7 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/models/country.rb +3 -0
- data/spec/support/models/language.rb +3 -0
- metadata +103 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# ActiveRecordUUID
|
2
|
+
|
3
|
+
UUID extension for ActiveRecord
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'activerecord_uuid'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install activerecord_uuid
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
### Migrations
|
22
|
+
|
23
|
+
Define attribute as UUID
|
24
|
+
|
25
|
+
class CreateCountries < ActiveRecord::Migration
|
26
|
+
def change
|
27
|
+
create_table :countries do |t|
|
28
|
+
t.uuid :key
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Define primary key as UUID
|
34
|
+
|
35
|
+
class CreateLanguages < ActiveRecord::Migration
|
36
|
+
def change
|
37
|
+
create_table :languages do |t|
|
38
|
+
t.uuid :id, primary_key: true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
### Models
|
44
|
+
|
45
|
+
For automatic generation of UUID before creation
|
46
|
+
|
47
|
+
class Country < ActiveRecord::Base
|
48
|
+
attr_uuid :key
|
49
|
+
end
|
50
|
+
|
51
|
+
For change primary key to UUID
|
52
|
+
|
53
|
+
class Language < ActiveRecord::Base
|
54
|
+
pk_uuid
|
55
|
+
end
|
56
|
+
|
57
|
+
### Manually creation of UUIDs
|
58
|
+
|
59
|
+
ActiveRecordUUID.random
|
60
|
+
|
61
|
+
## Contributing
|
62
|
+
|
63
|
+
1. Fork it
|
64
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
65
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
66
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
67
|
+
5. Create new Pull Request
|
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 "activerecord_uuid/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'activerecord_uuid'
|
7
|
+
s.version = ActiveRecordUUID::VERSION
|
8
|
+
s.authors = ['Gabriel Naiman']
|
9
|
+
s.email = ['gabynaiman@gmail.com']
|
10
|
+
s.homepage = 'https://github.com/gabynaiman/activerecord_uuid'
|
11
|
+
s.summary = 'UUID extension for ActiveRecord'
|
12
|
+
s.description = 'UUID extension for ActiveRecord'
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_dependency 'rails', '>= 3.2.0'
|
20
|
+
s.add_dependency 'uuidtools'
|
21
|
+
|
22
|
+
s.add_development_dependency 'sqlite3'
|
23
|
+
s.add_development_dependency 'rspec'
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActiveRecordUUID
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
def pk_uuid
|
5
|
+
self.primary_key = :id
|
6
|
+
self.sequence_name = nil
|
7
|
+
before_create do
|
8
|
+
self.id = ActiveRecordUUID.random unless self.id
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def attr_uuid(name)
|
13
|
+
before_create do
|
14
|
+
self.send("#{name}=", ActiveRecordUUID.random) unless self.send("#{name}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module TableDefinition
|
20
|
+
def uuid(name, options={})
|
21
|
+
@columns.delete @columns_hash.delete('id') if options[:primary_key]
|
22
|
+
column(name, :string, limit: 36, null: options[:null] || !options[:primary_key], primary: options[:primary_key])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'uuidtools'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
require 'activerecord_uuid/version'
|
6
|
+
require 'activerecord_uuid/active_record_extension'
|
7
|
+
|
8
|
+
ActiveRecord::Base.send :extend, ActiveRecordUUID::ActiveRecord
|
9
|
+
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, ActiveRecordUUID::TableDefinition
|
10
|
+
|
11
|
+
module ActiveRecordUUID
|
12
|
+
|
13
|
+
def self.random
|
14
|
+
UUIDTools::UUID.random_create.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'ActiveRecord extension' do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ":memory:"
|
7
|
+
ActiveRecord::Base.connection
|
8
|
+
ActiveRecord::Migrator.migrate ActiveRecord::Migrator.migrations_path
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'Attribute uuid' do
|
12
|
+
|
13
|
+
it 'Migration type' do
|
14
|
+
Country.primary_key.should eq 'id'
|
15
|
+
uuid_column = Country.columns_hash['key']
|
16
|
+
uuid_column.type.should eq :string
|
17
|
+
uuid_column.limit.should eq 36
|
18
|
+
uuid_column.null.should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'ActiveRecord generation' do
|
22
|
+
model = Country.create!
|
23
|
+
model.key.should be_a String
|
24
|
+
model.key.size.should eq 36
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'Primary key uuid' do
|
30
|
+
|
31
|
+
it 'Migration type' do
|
32
|
+
Language.primary_key.should eq 'id'
|
33
|
+
uuid_column = Language.columns_hash['id']
|
34
|
+
uuid_column.type.should eq :string
|
35
|
+
uuid_column.limit.should eq 36
|
36
|
+
uuid_column.primary.should be_true
|
37
|
+
uuid_column.null.should be_false
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'ActiveRecord generation' do
|
41
|
+
model = Language.create!
|
42
|
+
model.id.should be_a String
|
43
|
+
model.id.size.should eq 36
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'activerecord_uuid'
|
2
|
+
|
3
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
4
|
+
|
5
|
+
TEMP_PATH = ENV['TMP'].gsub("\\", '/')
|
6
|
+
|
7
|
+
ActiveRecord::Base.logger = Logger.new($stdout)
|
8
|
+
ActiveRecord::Migrator.migrations_path = "#{File.dirname(__FILE__)}/migrations"
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activerecord_uuid
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Gabriel Naiman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &2175168 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2175168
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: uuidtools
|
27
|
+
requirement: &2174436 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2174436
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sqlite3
|
38
|
+
requirement: &2173824 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2173824
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &2173296 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2173296
|
58
|
+
description: UUID extension for ActiveRecord
|
59
|
+
email:
|
60
|
+
- gabynaiman@gmail.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- Gemfile
|
67
|
+
- README.md
|
68
|
+
- Rakefile
|
69
|
+
- activerecord_uuid.gemspec
|
70
|
+
- lib/activerecord_uuid.rb
|
71
|
+
- lib/activerecord_uuid/active_record_extension.rb
|
72
|
+
- lib/activerecord_uuid/version.rb
|
73
|
+
- spec/active_record_extension_spec.rb
|
74
|
+
- spec/migrations/20121004135939_create_countries.rb
|
75
|
+
- spec/migrations/20121004135940_create_languages.rb
|
76
|
+
- spec/spec_helper.rb
|
77
|
+
- spec/support/models/country.rb
|
78
|
+
- spec/support/models/language.rb
|
79
|
+
homepage: https://github.com/gabynaiman/activerecord_uuid
|
80
|
+
licenses: []
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.8.16
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: UUID extension for ActiveRecord
|
103
|
+
test_files: []
|