universal_identifiable 0.0.3 → 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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91f7d2b36d371e5ffbc7f20025af65735e6d1c3f
|
4
|
+
data.tar.gz: 48b468318c9352dc9ed4dfc9e833285ea58e3681
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a9c1fbf3d720d8178b3d139b6a7ec51aaa18c5f68352c9b7617a4d6824869f1548167368d78e2eab4aac491f7fb8b306059768967a8ce45203d60d60cd31b67
|
7
|
+
data.tar.gz: 84cb8169e8002633e070fbe634c1af3cc8233ae3a41dadd278eb5e9965e138affbb773f4e0b99e7d00cc3f608f80b962ad759da9d415398162248f8df8b338ca
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require "universal_identifiable/version"
|
2
2
|
require 'active_record'
|
3
|
+
require 'active_support/core_ext/string'
|
3
4
|
|
4
5
|
module UniversalIdentifiable
|
5
|
-
# sample uuid: 'hotel.ritz'
|
6
|
-
# TODO: store underscored modelname as prefix automatically. e.G. '#{modelname}.ritz' when assigning attribute
|
7
6
|
|
8
7
|
NAMESPACER = "."
|
8
|
+
REGEX = Regexp.new("\\#{NAMESPACER}(.*)")
|
9
9
|
|
10
10
|
def self.included(base)
|
11
11
|
base.validates :uuid, :presence => true, :uniqueness => true
|
@@ -16,9 +16,16 @@ module UniversalIdentifiable
|
|
16
16
|
options[:namespaced] ? read_attribute(:uuid) : short_uuid
|
17
17
|
end
|
18
18
|
|
19
|
+
def uuid=(uuid)
|
20
|
+
uuid = "#{self.class.name.underscore}#{NAMESPACER}#{uuid}" if uuid
|
21
|
+
super uuid
|
22
|
+
end
|
23
|
+
|
19
24
|
private
|
20
25
|
|
21
26
|
def short_uuid
|
22
|
-
read_attribute(:uuid)
|
27
|
+
value = read_attribute(:uuid)
|
28
|
+
value.match(REGEX)[1] if value
|
23
29
|
end
|
30
|
+
|
24
31
|
end
|
data/test/test_helper.rb
CHANGED
@@ -6,7 +6,7 @@ require 'universal_identifiable'
|
|
6
6
|
class TestCase < Minitest::Spec
|
7
7
|
end
|
8
8
|
|
9
|
-
class
|
9
|
+
class Airport < ActiveRecord::Base
|
10
10
|
include UniversalIdentifiable
|
11
11
|
end
|
12
12
|
|
@@ -18,7 +18,7 @@ ActiveRecord::Base.establish_connection(
|
|
18
18
|
ActiveRecord::Schema.define do
|
19
19
|
self.verbose = false
|
20
20
|
|
21
|
-
create_table :
|
21
|
+
create_table :airports, :force => true do |t|
|
22
22
|
t.string :uuid
|
23
23
|
end
|
24
24
|
end
|
@@ -5,7 +5,8 @@ module UniversalIdentifiable
|
|
5
5
|
class UniversalIdentifiableTest < TestCase
|
6
6
|
|
7
7
|
before do
|
8
|
-
|
8
|
+
Airport.delete_all
|
9
|
+
@identifiable_model = Airport.new(:uuid => "dortmund")
|
9
10
|
end
|
10
11
|
|
11
12
|
it "is valid" do
|
@@ -18,7 +19,7 @@ module UniversalIdentifiable
|
|
18
19
|
|
19
20
|
it "must have attributes present" do
|
20
21
|
@identifiable_model.uuid = nil
|
21
|
-
@identifiable_model.valid?
|
22
|
+
refute @identifiable_model.valid?
|
22
23
|
|
23
24
|
assert @identifiable_model.errors.full_messages.any? do |message|
|
24
25
|
message.include? "blank"
|
@@ -28,9 +29,9 @@ module UniversalIdentifiable
|
|
28
29
|
it "must be unique" do
|
29
30
|
@identifiable_model.save!
|
30
31
|
|
31
|
-
new_model =
|
32
|
-
new_model.uuid = @identifiable_model.uuid
|
33
|
-
new_model.valid?
|
32
|
+
new_model = Airport.new
|
33
|
+
new_model.uuid = @identifiable_model.uuid(:namespaced => false)
|
34
|
+
refute new_model.valid?
|
34
35
|
|
35
36
|
assert new_model.errors.full_messages.any? do |message|
|
36
37
|
message.include? "taken"
|
@@ -44,6 +45,31 @@ module UniversalIdentifiable
|
|
44
45
|
assert_equal "airport#{UniversalIdentifiable::NAMESPACER}dortmund", @identifiable_model.uuid(:namespaced => true)
|
45
46
|
end
|
46
47
|
|
48
|
+
it "prefixes uuid with class name" do
|
49
|
+
airport = Airport.create(:uuid => "dortmund")
|
50
|
+
|
51
|
+
assert_equal "airport#{UniversalIdentifiable::NAMESPACER}dortmund", airport.uuid(:namespaced => true)
|
52
|
+
airport.uuid = "dusseldorf"
|
53
|
+
assert_equal "airport#{UniversalIdentifiable::NAMESPACER}dusseldorf", airport.uuid(:namespaced => true)
|
54
|
+
airport.update_attribute(:uuid, "dortmund")
|
55
|
+
assert_equal "airport#{UniversalIdentifiable::NAMESPACER}dortmund", airport.uuid(:namespaced => true)
|
56
|
+
airport.update_attributes(:uuid => "dusseldorf")
|
57
|
+
assert_equal "airport#{UniversalIdentifiable::NAMESPACER}dusseldorf", airport.uuid(:namespaced => true)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "anything preceeding first namespacer is considered to be the uuid" do
|
61
|
+
airport = Airport.new(:uuid => "dortmund.foo.bar")
|
62
|
+
|
63
|
+
assert_equal "airport#{UniversalIdentifiable::NAMESPACER}dortmund.foo.bar", airport.uuid(:namespaced => true)
|
64
|
+
assert_equal "dortmund.foo.bar", airport.uuid(:namespaced => false)
|
65
|
+
|
66
|
+
airport.uuid = ""
|
67
|
+
assert_equal "", airport.uuid(:namespaced => false)
|
68
|
+
|
69
|
+
airport.uuid = nil
|
70
|
+
assert_equal nil, airport.uuid(:namespaced => false)
|
71
|
+
end
|
72
|
+
|
47
73
|
end
|
48
74
|
|
49
75
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: universal_identifiable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Busold
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|