glossarist 0.1.2 → 0.2.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/glossarist.rb +1 -0
- data/lib/glossarist/concept.rb +1 -1
- data/lib/glossarist/designations.rb +82 -0
- data/lib/glossarist/localized_concept.rb +7 -4
- data/lib/glossarist/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15883cde9ccc6f1d81e6851314ef7cae3835fd679c320b961be4310eea0e3384
|
4
|
+
data.tar.gz: b0821aa718dbc0caa858ff5d1ab0723937e4c527d9a98a6a182f4976637d32d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 295691e8f62944ea642ed41861146e0d321ec2c793d519227d1ad1cdde174787d8ad9a219bfbe19a3d4b7eb60395a53c37f6375151cc5a89a707694367614be4
|
7
|
+
data.tar.gz: 6a0c63bfd7b33bc7803e0daa685d677dc6bb061e4bf09be415878f10e72c3c836285d36b38da61628438ea7c9afb0d03eed566a1f8a9af5993990ffc6fe819c3
|
data/lib/glossarist.rb
CHANGED
@@ -10,6 +10,7 @@ require_relative "glossarist/version"
|
|
10
10
|
require_relative "glossarist/model"
|
11
11
|
require_relative "glossarist/concept"
|
12
12
|
require_relative "glossarist/collection"
|
13
|
+
require_relative "glossarist/designations"
|
13
14
|
require_relative "glossarist/localized_concept"
|
14
15
|
|
15
16
|
module Glossarist
|
data/lib/glossarist/concept.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# (c) Copyright 2021 Ribose Inc.
|
4
|
+
#
|
5
|
+
|
6
|
+
module Glossarist
|
7
|
+
module Designations
|
8
|
+
class Base < Model
|
9
|
+
# @note This is not entirely aligned with agreed schema and may be
|
10
|
+
# changed.
|
11
|
+
attr_accessor :designation
|
12
|
+
|
13
|
+
attr_accessor :normative_status
|
14
|
+
attr_accessor :geographical_area
|
15
|
+
|
16
|
+
def self.from_h(hash)
|
17
|
+
type = hash["type"]
|
18
|
+
|
19
|
+
if type.nil? || /\w/ !~ type
|
20
|
+
raise ArgumentError, "designation type is missing"
|
21
|
+
end
|
22
|
+
|
23
|
+
designation_subclass = SERIALIZED_TYPES[type]
|
24
|
+
|
25
|
+
if self == Base
|
26
|
+
# called on Base class, delegate it to proper subclass
|
27
|
+
SERIALIZED_TYPES[type].from_h(hash)
|
28
|
+
else
|
29
|
+
# called on subclass, instantiate object
|
30
|
+
unless SERIALIZED_TYPES[self] == type
|
31
|
+
raise ArgumentError, "unexpected designation type: #{type}"
|
32
|
+
end
|
33
|
+
super(hash.reject { |k, _| k == "type" })
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Expression < Base
|
39
|
+
attr_accessor :gender
|
40
|
+
attr_accessor :part_of_speech
|
41
|
+
attr_accessor :plurality
|
42
|
+
attr_accessor :prefix
|
43
|
+
attr_accessor :usage_info
|
44
|
+
|
45
|
+
def to_h
|
46
|
+
{
|
47
|
+
"type" => "expression",
|
48
|
+
"prefix" => prefix,
|
49
|
+
"normative_status" => normative_status,
|
50
|
+
"usage_info" => usage_info,
|
51
|
+
"designation" => designation,
|
52
|
+
"part_of_speech" => part_of_speech,
|
53
|
+
"geographical_area" => geographical_area,
|
54
|
+
"gender" => gender,
|
55
|
+
"plurality" => plurality,
|
56
|
+
}.compact
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class Symbol < Base
|
61
|
+
attr_accessor :international
|
62
|
+
|
63
|
+
def to_h
|
64
|
+
{
|
65
|
+
"type" => "symbol",
|
66
|
+
"normative_status" => normative_status,
|
67
|
+
"geographical_area" => geographical_area,
|
68
|
+
"designation" => designation,
|
69
|
+
"international" => international,
|
70
|
+
}.compact
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Bi-directional class-to-string mapping for STI-like serialization.
|
75
|
+
SERIALIZED_TYPES = {
|
76
|
+
Expression => "expression",
|
77
|
+
Symbol => "symbol",
|
78
|
+
}
|
79
|
+
.tap { |h| h.merge!(h.invert) }
|
80
|
+
.freeze
|
81
|
+
end
|
82
|
+
end
|
@@ -16,9 +16,7 @@ module Glossarist
|
|
16
16
|
|
17
17
|
# Concept designations.
|
18
18
|
# @todo Alias +terms+ exists only for legacy reasons and will be removed.
|
19
|
-
# @
|
20
|
-
# replaced with dedicated classes.
|
21
|
-
# @return [Array<Hash>]
|
19
|
+
# @return [Array<Designations::Base>]
|
22
20
|
attr_accessor :designations
|
23
21
|
alias :terms :designations
|
24
22
|
alias :terms= :designations=
|
@@ -84,7 +82,7 @@ module Glossarist
|
|
84
82
|
def to_h # rubocop:disable Metrics/MethodLength
|
85
83
|
{
|
86
84
|
"id" => id,
|
87
|
-
"terms" => terms,
|
85
|
+
"terms" => (terms&.map(&:to_h) || []),
|
88
86
|
"definition" => definition,
|
89
87
|
"language_code" => language_code,
|
90
88
|
"notes" => notes,
|
@@ -100,6 +98,11 @@ module Glossarist
|
|
100
98
|
}.compact
|
101
99
|
end
|
102
100
|
|
101
|
+
def self.from_h(hash)
|
102
|
+
terms = hash["terms"]&.map { |h| Designations::Base.from_h(h) } || []
|
103
|
+
super(hash.merge({"terms" => terms}))
|
104
|
+
end
|
105
|
+
|
103
106
|
# @deprecated For legacy reasons only.
|
104
107
|
# Implicit conversion (i.e. {#to_hash} alias) will be removed soon.
|
105
108
|
alias :to_hash :to_h
|
data/lib/glossarist/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glossarist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- lib/glossarist.rb
|
74
74
|
- lib/glossarist/collection.rb
|
75
75
|
- lib/glossarist/concept.rb
|
76
|
+
- lib/glossarist/designations.rb
|
76
77
|
- lib/glossarist/localized_concept.rb
|
77
78
|
- lib/glossarist/model.rb
|
78
79
|
- lib/glossarist/version.rb
|