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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7c057e8f11b8952ddb14c27276cb9e653ee15e5c85d85562b5298f82ab9dd06
4
- data.tar.gz: fc0538aef4b5d3ad5c4ce4cc34c723b84620c1d09b07dc3dd1faf4f2caa4ab5a
3
+ metadata.gz: 4eb23e13b909473e539162d5f64a66484a8f011755bd682396dfb2d8ad887061
4
+ data.tar.gz: ff100d61bdacb3905ce6af220b0ea0db99e48ea95220a918b85d4db635179235
5
5
  SHA512:
6
- metadata.gz: 6edcc8eb8ac4eb3e2930716be839e2b787237a2506549392853f830ffe8dc75c10bf816295827b783415a39962cb4916e051cd985d39a031aa1a076856777474
7
- data.tar.gz: '0865032bbeb7b83eaf19cf83e1ba56a7d33d3027325d30b20aa37884760a0fb4586fbdbc236f00a933e4c388dee9fe78b4e8176cfaab3257f36f140983a53039'
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(:prefix, :field, :klass) do
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
- prefix: base.exid_prefix_name,
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
- Exid.configuration.validate_prefix(prefix)
39
+ prefixes = Array(prefix)
40
+ prefixes.each { |item| Exid.configuration.validate_prefix(item) }
33
41
 
34
- @module_static = build_module_static(prefix, field)
35
- @module_value = build_module_value(prefix, field)
36
- @module_shared = build_module_shared(prefix, field)
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 == prefix } or
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(prefix, field)
108
+ def build_module_shared(prefixes, field)
101
109
  Module.new do
102
110
  define_method :exid_prefix_name do
103
- prefix
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(prefix, field)
124
+ def build_module_static(prefixes, field)
113
125
  Module.new do
114
126
  define_method :exid_loader do |eid|
115
- Coder.decode(eid) => ^prefix, value
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Exid
4
- VERSION = "0.2.3"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Doe