exid 0.2.3 → 0.3.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 +4 -4
- data/lib/exid/record.rb +24 -11
- data/lib/exid/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4eb23e13b909473e539162d5f64a66484a8f011755bd682396dfb2d8ad887061
|
|
4
|
+
data.tar.gz: ff100d61bdacb3905ce6af220b0ea0db99e48ea95220a918b85d4db635179235
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fe29be83c5e93a28b331004561f183be762ffec8f080787edb6516fa3b277a4a0716822671e1b1e396bb521f89822098b44ea095e957cdf855967876e4bbdd30
|
|
7
|
+
data.tar.gz: 753e4f90ee4a5255bc80673c652a9b0667fda8bf8c1efd6cd797590b6fce17818d586f5b2742fc83acb3c84d8f8af14104e044b4b4a343f4a146ce3202961989
|
data/lib/exid/record.rb
CHANGED
|
@@ -3,7 +3,9 @@ module Exid
|
|
|
3
3
|
MUTEX = Mutex.new
|
|
4
4
|
|
|
5
5
|
Entry =
|
|
6
|
-
Data.define(:
|
|
6
|
+
Data.define(:prefixes, :field, :klass) do
|
|
7
|
+
def prefix = prefixes.first
|
|
8
|
+
|
|
7
9
|
def ==(other) = prefix == other.prefix
|
|
8
10
|
|
|
9
11
|
def hash = prefix.hash
|
|
@@ -21,19 +23,25 @@ module Exid
|
|
|
21
23
|
|
|
22
24
|
self.class.register_module(
|
|
23
25
|
Entry.new(
|
|
24
|
-
|
|
26
|
+
prefixes: base.exid_prefix_names,
|
|
25
27
|
field: base.exid_field,
|
|
26
28
|
klass: base
|
|
27
29
|
)
|
|
28
30
|
)
|
|
29
31
|
end
|
|
30
32
|
|
|
33
|
+
# The prefix can be a single String or an Array of Strings. The first
|
|
34
|
+
# prefix is the canonical one, used to generate external IDs. Any
|
|
35
|
+
# additional prefixes are treated as aliases and are only used to locate
|
|
36
|
+
# records. This allows renaming a prefix without breaking existing IDs.
|
|
37
|
+
|
|
31
38
|
def initialize(prefix, field)
|
|
32
|
-
|
|
39
|
+
prefixes = Array(prefix)
|
|
40
|
+
prefixes.each { |item| Exid.configuration.validate_prefix(item) }
|
|
33
41
|
|
|
34
|
-
@module_static = build_module_static(
|
|
35
|
-
@module_value = build_module_value(
|
|
36
|
-
@module_shared = build_module_shared(
|
|
42
|
+
@module_static = build_module_static(prefixes, field)
|
|
43
|
+
@module_value = build_module_value(prefixes.first, field)
|
|
44
|
+
@module_shared = build_module_shared(prefixes, field)
|
|
37
45
|
|
|
38
46
|
super()
|
|
39
47
|
end
|
|
@@ -63,7 +71,7 @@ module Exid
|
|
|
63
71
|
end
|
|
64
72
|
|
|
65
73
|
def self.find_module(prefix)
|
|
66
|
-
registered_modules.detect { _1.prefix
|
|
74
|
+
registered_modules.detect { _1.prefixes.include?(prefix) } or
|
|
67
75
|
raise Error, "Model for \"#{prefix}\" not found"
|
|
68
76
|
end
|
|
69
77
|
|
|
@@ -97,10 +105,14 @@ module Exid
|
|
|
97
105
|
end
|
|
98
106
|
end
|
|
99
107
|
|
|
100
|
-
def build_module_shared(
|
|
108
|
+
def build_module_shared(prefixes, field)
|
|
101
109
|
Module.new do
|
|
102
110
|
define_method :exid_prefix_name do
|
|
103
|
-
|
|
111
|
+
prefixes.first
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
define_method :exid_prefix_names do
|
|
115
|
+
prefixes
|
|
104
116
|
end
|
|
105
117
|
|
|
106
118
|
define_method :exid_field do
|
|
@@ -109,10 +121,11 @@ module Exid
|
|
|
109
121
|
end
|
|
110
122
|
end
|
|
111
123
|
|
|
112
|
-
def build_module_static(
|
|
124
|
+
def build_module_static(prefixes, field)
|
|
113
125
|
Module.new do
|
|
114
126
|
define_method :exid_loader do |eid|
|
|
115
|
-
Coder.decode(eid) =>
|
|
127
|
+
Coder.decode(eid) => prefix, value
|
|
128
|
+
prefixes.include?(prefix) or raise NoMatchingPatternError
|
|
116
129
|
find_sole_by(field => value)
|
|
117
130
|
end
|
|
118
131
|
end
|
data/lib/exid/version.rb
CHANGED