edoxen 0.8.3 → 0.8.4
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/CHANGELOG.md +51 -0
- data/lib/edoxen/body.rb +7 -0
- data/lib/edoxen/contact.rb +6 -0
- data/lib/edoxen/entity_resolver.rb +2 -8
- data/lib/edoxen/venue.rb +6 -0
- data/lib/edoxen/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fd6f4fc1dd113896010b8f80252e117a63043c3f12014df272155ec1993286dd
|
|
4
|
+
data.tar.gz: 94970c3ea72a99afd9503e7cbb739a136ad4d03a7e6ee008dbfb058682046722
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 33a085d54d260ee198656e3a20ebb81826c15631c324beb026573b807c8f6a8ed60087f9497fecbb07f880860eae971929f4db9ea15ff14f815b6c259d421385
|
|
7
|
+
data.tar.gz: 7e8f1781eb1dd41f6b1dda74eee3b861949cefafe09cf947fb97e0f2045db83007afb275951bb6da26231afd8a012d53966c2931f6c261add4f9a01d02c9e546
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,57 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
* `Edoxen::EntityResolver` no longer duck-types its scoped-collection
|
|
13
|
+
members with `respond_to?(:urn)`. Each resolvable entity
|
|
14
|
+
(`Contact`, `Venue`, `Body`) now exposes `#local_lookup_key`, which
|
|
15
|
+
returns the canonical local identifier for that type (`urn` for
|
|
16
|
+
Contact/Venue, `code` for Body). The resolver calls the polymorphic
|
|
17
|
+
method directly — adding a new resolvable entity type means adding
|
|
18
|
+
the method on the class, not branching in the resolver.
|
|
19
|
+
|
|
20
|
+
## [0.8.3] — 2026-07-18
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
* `Meeting#decisions` is `StructuredIdentifier[]` (reference by
|
|
25
|
+
prefix+number), aligning the Ruby model with the JSON schema and
|
|
26
|
+
every consumer dataset; the attribute had drifted to `Decision`
|
|
27
|
+
during the BS 0 minutes work (mirrors edoxen-model#26).
|
|
28
|
+
* `Edoxen::EntityResolver` document-scoped tier no longer raises
|
|
29
|
+
`NoMethodError` for `Body` — bodies have no `urn`, they are keyed
|
|
30
|
+
by `code` (same semantics as `BodyRegister#find_by_urn`).
|
|
31
|
+
|
|
32
|
+
## [0.8.2] — 2026-07-17
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
* **Three-tier entity resolution** for Contact, Venue, and Body:
|
|
37
|
+
inline (full data, no reference), document-scoped (`local_ref` →
|
|
38
|
+
matching member in the container's scoped collection, e.g.
|
|
39
|
+
`Meeting#contacts[]`, `Meeting#bodies[]`), and global register
|
|
40
|
+
(`ref` → member of a top-level register document).
|
|
41
|
+
* `Contact#local_ref` alongside `ref`; `Contact#reference?` true when
|
|
42
|
+
either is set.
|
|
43
|
+
* New `Body` entity (`code`, localized `name`, `kind`, `parent_ref`,
|
|
44
|
+
`ref`, `local_ref`) and `BodyRegister` top-level document.
|
|
45
|
+
`Meeting#committee` and `Meeting#committee_group` changed from
|
|
46
|
+
`String` to `Body`.
|
|
47
|
+
* `Edoxen::EntityResolver` — pure resolution service walking
|
|
48
|
+
inline → scoped → register.
|
|
49
|
+
* `AgendaItem#urn` + `Edoxen::UrnFor` — hierarchical agenda-item
|
|
50
|
+
URNs (`{meetingUrn}:agenda:{label}`), computable when absent in
|
|
51
|
+
source data.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
* `ContactCollection` renamed to `ContactRegister`;
|
|
56
|
+
`VenueCollection` renamed to `VenueRegister` (a register is
|
|
57
|
+
authoritative and persistent, a collection is just a grouping).
|
|
58
|
+
|
|
8
59
|
## [0.8.1] — 2026-07-14
|
|
9
60
|
|
|
10
61
|
First implementation release of **Edoxen Model 1.0**. The Ruby gem
|
data/lib/edoxen/body.rb
CHANGED
|
@@ -22,5 +22,12 @@ module Edoxen
|
|
|
22
22
|
(!ref.nil? && !ref.to_s.empty?) ||
|
|
23
23
|
(!local_ref.nil? && !local_ref.to_s.empty?)
|
|
24
24
|
end
|
|
25
|
+
|
|
26
|
+
# Key used to resolve a +local_ref+ against a document-scoped
|
|
27
|
+
# collection (e.g. Meeting#bodies[]). Bodies have no urn — they
|
|
28
|
+
# are keyed by code (same semantics as BodyRegister#find_by_urn).
|
|
29
|
+
def local_lookup_key
|
|
30
|
+
code
|
|
31
|
+
end
|
|
25
32
|
end
|
|
26
33
|
end
|
data/lib/edoxen/contact.rb
CHANGED
|
@@ -33,5 +33,11 @@ module Edoxen
|
|
|
33
33
|
(!ref.nil? && !ref.to_s.empty?) ||
|
|
34
34
|
(!local_ref.nil? && !local_ref.to_s.empty?)
|
|
35
35
|
end
|
|
36
|
+
|
|
37
|
+
# Key used to resolve a +local_ref+ against a document-scoped
|
|
38
|
+
# collection (e.g. Meeting#contacts[]). Contacts are keyed by urn.
|
|
39
|
+
def local_lookup_key
|
|
40
|
+
urn
|
|
41
|
+
end
|
|
36
42
|
end
|
|
37
43
|
end
|
|
@@ -8,7 +8,7 @@ module Edoxen
|
|
|
8
8
|
# it as-is (it carries full data).
|
|
9
9
|
# 2. Document-scoped: if +local_ref+ is set, look up in the
|
|
10
10
|
# document-scoped collection (e.g. Meeting#contacts) by matching
|
|
11
|
-
# +
|
|
11
|
+
# the member's +local_lookup_key+ against +local_ref+.
|
|
12
12
|
# 3. Global register: if +ref+ is set, look up in the global
|
|
13
13
|
# register (e.g. ContactRegister) by matching +urn+ against +ref+.
|
|
14
14
|
#
|
|
@@ -39,7 +39,7 @@ module Edoxen
|
|
|
39
39
|
collection = find_scoped_collection(entity.class)
|
|
40
40
|
return nil unless collection
|
|
41
41
|
|
|
42
|
-
collection.find { |member|
|
|
42
|
+
collection.find { |member| member.local_lookup_key == entity.local_ref }
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def resolve_global(entity)
|
|
@@ -60,11 +60,5 @@ module Edoxen
|
|
|
60
60
|
@global_registers[klass] ||
|
|
61
61
|
@global_registers[klass.superclass]
|
|
62
62
|
end
|
|
63
|
-
|
|
64
|
-
def member_key(member)
|
|
65
|
-
# Body has no +urn+ — its local key is +code+ (same lookup
|
|
66
|
-
# semantics as BodyRegister#find_by_urn).
|
|
67
|
-
member.respond_to?(:urn) ? member.urn : member.code
|
|
68
|
-
end
|
|
69
63
|
end
|
|
70
64
|
end
|
data/lib/edoxen/venue.rb
CHANGED
|
@@ -52,6 +52,12 @@ module Edoxen
|
|
|
52
52
|
(!local_ref.nil? && !local_ref.to_s.empty?)
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
+
# Key used to resolve a +local_ref+ against a document-scoped
|
|
56
|
+
# collection (e.g. Meeting#venues[]). Venues are keyed by urn.
|
|
57
|
+
def local_lookup_key
|
|
58
|
+
urn
|
|
59
|
+
end
|
|
60
|
+
|
|
55
61
|
def physical?
|
|
56
62
|
kind == "physical"
|
|
57
63
|
end
|
data/lib/edoxen/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: edoxen
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-07-
|
|
11
|
+
date: 2026-07-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json_schemer
|