glossarist 2.3.0 → 2.3.1
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/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +65 -0
- data/README.adoc +2 -2
- data/config.yml +1 -1
- data/glossarist.gemspec +1 -0
- data/lib/glossarist/asset.rb +4 -9
- data/lib/glossarist/citation.rb +73 -41
- data/lib/glossarist/collection.rb +2 -11
- data/lib/glossarist/collections/asset_collection.rb +0 -3
- data/lib/glossarist/collections/bibliography_collection.rb +1 -1
- data/lib/glossarist/concept.rb +67 -206
- data/lib/glossarist/concept_data.rb +66 -0
- data/lib/glossarist/concept_date.rb +7 -11
- data/lib/glossarist/concept_manager.rb +19 -29
- data/lib/glossarist/concept_set.rb +6 -4
- data/lib/glossarist/concept_source.rb +15 -58
- data/lib/glossarist/config.rb +4 -4
- data/lib/glossarist/designation/abbreviation.rb +15 -16
- data/lib/glossarist/designation/base.rb +16 -15
- data/lib/glossarist/designation/expression.rb +18 -26
- data/lib/glossarist/designation/grammar_info.rb +29 -45
- data/lib/glossarist/designation/graphical_symbol.rb +12 -8
- data/lib/glossarist/designation/letter_symbol.rb +13 -11
- data/lib/glossarist/designation/symbol.rb +11 -13
- data/lib/glossarist/designation.rb +3 -3
- data/lib/glossarist/detailed_definition.rb +6 -24
- data/lib/glossarist/error.rb +4 -4
- data/lib/glossarist/glossary_definition.rb +6 -3
- data/lib/glossarist/localized_concept.rb +17 -62
- data/lib/glossarist/managed_concept.rb +74 -146
- data/lib/glossarist/managed_concept_collection.rb +15 -24
- data/lib/glossarist/managed_concept_data.rb +47 -0
- data/lib/glossarist/non_verb_rep.rb +10 -13
- data/lib/glossarist/related_concept.rb +14 -21
- data/lib/glossarist/utilities/uuid.rb +10 -5
- data/lib/glossarist/utilities.rb +0 -2
- data/lib/glossarist/version.rb +1 -1
- data/lib/glossarist.rb +10 -9
- metadata +23 -13
- data/lib/glossarist/model.rb +0 -40
- data/lib/glossarist/utilities/boolean_attributes.rb +0 -35
- data/lib/glossarist/utilities/enum/class_methods.rb +0 -99
- data/lib/glossarist/utilities/enum/enum_collection.rb +0 -45
- data/lib/glossarist/utilities/enum/instance_methods.rb +0 -55
- data/lib/glossarist/utilities/enum.rb +0 -21
- data/lib/glossarist/v1_reader.rb +0 -28
@@ -21,12 +21,13 @@ module Glossarist
|
|
21
21
|
#
|
22
22
|
# See RFC 4122 for details of UUID at: https://www.ietf.org/rfc/rfc4122.txt
|
23
23
|
def self.uuid_from_hash(hash_class, namespace, name)
|
24
|
-
if
|
24
|
+
if [Digest::MD5, OpenSSL::Digest::MD5].include?(hash_class)
|
25
25
|
version = 3
|
26
|
-
elsif
|
26
|
+
elsif [Digest::SHA1, OpenSSL::Digest::SHA1].include?(hash_class)
|
27
27
|
version = 5
|
28
28
|
else
|
29
|
-
raise ArgumentError,
|
29
|
+
raise ArgumentError,
|
30
|
+
"Expected OpenSSL::Digest::SHA1 or OpenSSL::Digest::MD5, got #{hash_class.name}."
|
30
31
|
end
|
31
32
|
|
32
33
|
uuid_namespace = pack_uuid_namespace(namespace)
|
@@ -58,12 +59,16 @@ module Glossarist
|
|
58
59
|
end
|
59
60
|
|
60
61
|
def self.pack_uuid_namespace(namespace)
|
61
|
-
if [DNS_NAMESPACE, OID_NAMESPACE, URL_NAMESPACE,
|
62
|
+
if [DNS_NAMESPACE, OID_NAMESPACE, URL_NAMESPACE,
|
63
|
+
X500_NAMESPACE].include?(namespace)
|
62
64
|
namespace
|
63
65
|
else
|
64
66
|
match_data = namespace.match(/\A(\h{8})-(\h{4})-(\h{4})-(\h{4})-(\h{4})(\h{8})\z/)
|
65
67
|
|
66
|
-
|
68
|
+
unless match_data.present?
|
69
|
+
raise ArgumentError,
|
70
|
+
"Only UUIDs are valid namespace identifiers"
|
71
|
+
end
|
67
72
|
|
68
73
|
match_data.captures.map { |s| s.to_i(16) }.pack("NnnnnN")
|
69
74
|
end
|
data/lib/glossarist/utilities.rb
CHANGED
data/lib/glossarist/version.rb
CHANGED
data/lib/glossarist.rb
CHANGED
@@ -5,28 +5,29 @@
|
|
5
5
|
|
6
6
|
require "psych"
|
7
7
|
require "thor"
|
8
|
+
require "lutaml/model"
|
8
9
|
|
9
10
|
require_relative "glossarist/utilities"
|
10
11
|
require_relative "glossarist/version"
|
11
12
|
require_relative "glossarist/glossary_definition"
|
12
13
|
|
14
|
+
require_relative "glossarist/designation"
|
13
15
|
require_relative "glossarist/asset"
|
14
|
-
require_relative "glossarist/model"
|
15
|
-
require_relative "glossarist/concept_date"
|
16
|
-
require_relative "glossarist/detailed_definition"
|
17
|
-
require_relative "glossarist/related_concept"
|
18
16
|
require_relative "glossarist/citation"
|
17
|
+
require_relative "glossarist/collection"
|
18
|
+
require_relative "glossarist/concept_date"
|
19
|
+
require_relative "glossarist/concept_manager"
|
19
20
|
require_relative "glossarist/concept_set"
|
20
21
|
require_relative "glossarist/concept_source"
|
21
|
-
require_relative "glossarist/
|
22
|
-
require_relative "glossarist/
|
22
|
+
require_relative "glossarist/detailed_definition"
|
23
|
+
require_relative "glossarist/related_concept"
|
24
|
+
require_relative "glossarist/concept_data"
|
23
25
|
require_relative "glossarist/concept"
|
24
26
|
require_relative "glossarist/localized_concept"
|
25
|
-
require_relative "glossarist/
|
26
|
-
require_relative "glossarist/concept_manager"
|
27
|
+
require_relative "glossarist/managed_concept_data"
|
27
28
|
require_relative "glossarist/managed_concept"
|
29
|
+
require_relative "glossarist/managed_concept_collection"
|
28
30
|
require_relative "glossarist/non_verb_rep"
|
29
|
-
require_relative "glossarist/v1_reader"
|
30
31
|
|
31
32
|
require_relative "glossarist/collections"
|
32
33
|
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glossarist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lutaml-model
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.5.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.5.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: relaton
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,7 +52,7 @@ dependencies:
|
|
38
52
|
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
|
-
description:
|
55
|
+
description:
|
42
56
|
email:
|
43
57
|
- open.source@ribose.com
|
44
58
|
executables:
|
@@ -53,6 +67,7 @@ files:
|
|
53
67
|
- ".hound.yml"
|
54
68
|
- ".rspec"
|
55
69
|
- ".rubocop.yml"
|
70
|
+
- ".rubocop_todo.yml"
|
56
71
|
- Gemfile
|
57
72
|
- LICENSE.txt
|
58
73
|
- README.adoc
|
@@ -70,6 +85,7 @@ files:
|
|
70
85
|
- lib/glossarist/collections/collection.rb
|
71
86
|
- lib/glossarist/collections/designation_collection.rb
|
72
87
|
- lib/glossarist/concept.rb
|
88
|
+
- lib/glossarist/concept_data.rb
|
73
89
|
- lib/glossarist/concept_date.rb
|
74
90
|
- lib/glossarist/concept_manager.rb
|
75
91
|
- lib/glossarist/concept_set.rb
|
@@ -92,18 +108,12 @@ files:
|
|
92
108
|
- lib/glossarist/localized_concept.rb
|
93
109
|
- lib/glossarist/managed_concept.rb
|
94
110
|
- lib/glossarist/managed_concept_collection.rb
|
95
|
-
- lib/glossarist/
|
111
|
+
- lib/glossarist/managed_concept_data.rb
|
96
112
|
- lib/glossarist/non_verb_rep.rb
|
97
113
|
- lib/glossarist/related_concept.rb
|
98
114
|
- lib/glossarist/utilities.rb
|
99
|
-
- lib/glossarist/utilities/boolean_attributes.rb
|
100
115
|
- lib/glossarist/utilities/common_functions.rb
|
101
|
-
- lib/glossarist/utilities/enum.rb
|
102
|
-
- lib/glossarist/utilities/enum/class_methods.rb
|
103
|
-
- lib/glossarist/utilities/enum/enum_collection.rb
|
104
|
-
- lib/glossarist/utilities/enum/instance_methods.rb
|
105
116
|
- lib/glossarist/utilities/uuid.rb
|
106
|
-
- lib/glossarist/v1_reader.rb
|
107
117
|
- lib/glossarist/version.rb
|
108
118
|
homepage: https://github.com/glossarist/glossarist-ruby
|
109
119
|
licenses:
|
@@ -112,7 +122,7 @@ metadata:
|
|
112
122
|
homepage_uri: https://github.com/glossarist/glossarist-ruby
|
113
123
|
source_code_uri: https://github.com/glossarist/glossarist-ruby
|
114
124
|
bug_tracker_uri: https://github.com/glossarist/glossarist-ruby/issues
|
115
|
-
post_install_message:
|
125
|
+
post_install_message:
|
116
126
|
rdoc_options: []
|
117
127
|
require_paths:
|
118
128
|
- lib
|
@@ -128,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
138
|
version: '0'
|
129
139
|
requirements: []
|
130
140
|
rubygems_version: 3.3.27
|
131
|
-
signing_key:
|
141
|
+
signing_key:
|
132
142
|
specification_version: 4
|
133
143
|
summary: Concept models for terminology glossaries conforming ISO 10241-1.
|
134
144
|
test_files: []
|
data/lib/glossarist/model.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# (c) Copyright 2021 Ribose Inc.
|
4
|
-
#
|
5
|
-
|
6
|
-
module Glossarist
|
7
|
-
class Model
|
8
|
-
def self.new(params = {})
|
9
|
-
return params if params.is_a?(self)
|
10
|
-
|
11
|
-
super
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize(attributes = {})
|
15
|
-
attributes.each_pair { |k, v| set_attribute(k, v) }
|
16
|
-
end
|
17
|
-
|
18
|
-
def set_attribute(name, value)
|
19
|
-
public_send("#{name}=", value)
|
20
|
-
rescue NoMethodError
|
21
|
-
if Config.extension_attributes.include?(name)
|
22
|
-
extension_attributes[name] = value
|
23
|
-
elsif name.match?(/[A-Z]/) # adding support for camel case
|
24
|
-
name = snake_case(name.to_s).to_sym
|
25
|
-
retry
|
26
|
-
else
|
27
|
-
raise ArgumentError, "#{self.class.name} does not have " +
|
28
|
-
"attribute #{name} defined or the attribute is read only."
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.from_h(hash)
|
33
|
-
new(hash)
|
34
|
-
end
|
35
|
-
|
36
|
-
def snake_case(str)
|
37
|
-
str.gsub(/([A-Z])/) { "_#{$1.downcase}" }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Glossarist
|
4
|
-
module Utilities
|
5
|
-
module BooleanAttributes
|
6
|
-
def self.included(base)
|
7
|
-
base.extend(ClassMethods)
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.extended(base)
|
11
|
-
base.extend(ClassMethods)
|
12
|
-
end
|
13
|
-
|
14
|
-
module ClassMethods
|
15
|
-
def register_boolean_attributes(attributes)
|
16
|
-
attributes.each do |attribute|
|
17
|
-
register_boolean_attribute(attribute)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def register_boolean_attribute(attribute)
|
22
|
-
attr_reader attribute
|
23
|
-
|
24
|
-
define_method("#{attribute}=") do |value|
|
25
|
-
instance_variable_set("@#{attribute}", !!value)
|
26
|
-
end
|
27
|
-
|
28
|
-
define_method("#{attribute}?") do
|
29
|
-
!!instance_variable_get("@#{attribute}")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "set"
|
4
|
-
|
5
|
-
module Glossarist
|
6
|
-
module Utilities
|
7
|
-
module Enum
|
8
|
-
module ClassMethods
|
9
|
-
def add_inheritable_attribute(attribute)
|
10
|
-
@inheritable_attributes ||= Set[:inheritable_attributes]
|
11
|
-
@inheritable_attributes << attribute
|
12
|
-
end
|
13
|
-
|
14
|
-
def inherited(subclass)
|
15
|
-
@inheritable_attributes.each do |inheritable_attribute|
|
16
|
-
instance_var = "@#{inheritable_attribute}"
|
17
|
-
subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def enums
|
22
|
-
@enums ||= EnumCollection.new
|
23
|
-
end
|
24
|
-
|
25
|
-
def register_enum(name, values, options = {})
|
26
|
-
values = standardize_values(values)
|
27
|
-
|
28
|
-
enums.add(name, values, options)
|
29
|
-
|
30
|
-
add_inheritable_attribute(:enums)
|
31
|
-
register_type_accessor(name)
|
32
|
-
|
33
|
-
values.each do |value|
|
34
|
-
register_check_method(name, value)
|
35
|
-
register_set_method(name, value)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def registered_enums
|
40
|
-
enums.registered_enums
|
41
|
-
end
|
42
|
-
|
43
|
-
def valid_types(name)
|
44
|
-
enums.valid_types(name)
|
45
|
-
end
|
46
|
-
|
47
|
-
def type_options(name)
|
48
|
-
enums.type_options(name)
|
49
|
-
end
|
50
|
-
|
51
|
-
def register_type_reader(name)
|
52
|
-
define_method(name) do
|
53
|
-
if self.class.type_options(name)[:multiple]
|
54
|
-
selected_type[name].map(&:to_s)
|
55
|
-
else
|
56
|
-
selected_type[name].first&.to_s
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def register_type_writer(name)
|
62
|
-
define_method("#{name}=") do |type|
|
63
|
-
select_type(name, type)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
# Adds a reader and writer for the type name given.
|
68
|
-
def register_type_accessor(name)
|
69
|
-
register_type_reader(name)
|
70
|
-
register_type_writer(name)
|
71
|
-
end
|
72
|
-
|
73
|
-
def register_check_method(name, value)
|
74
|
-
define_method("#{value}?") do
|
75
|
-
!!selected_type[name]&.include?(value.to_sym)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def register_set_method(name, value)
|
80
|
-
define_method("#{value}=") do |input|
|
81
|
-
if input
|
82
|
-
select_type(name, value)
|
83
|
-
else
|
84
|
-
deselect_type(name, value)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def standardize_values(values)
|
90
|
-
if values.is_a?(Array)
|
91
|
-
values.map(&:to_sym)
|
92
|
-
else
|
93
|
-
[values.to_sym]
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Glossarist
|
4
|
-
module Utilities
|
5
|
-
module Enum
|
6
|
-
class EnumCollection
|
7
|
-
include Enumerable
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@collection = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def add(name, values, options = {})
|
14
|
-
@collection[name] = { registered_values: values, options: options }
|
15
|
-
end
|
16
|
-
|
17
|
-
def each(&block)
|
18
|
-
if block_given?
|
19
|
-
@collection.each do |object|
|
20
|
-
block.call(object)
|
21
|
-
end
|
22
|
-
else
|
23
|
-
enum_for(:each)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def registered_enums
|
28
|
-
@collection&.keys || []
|
29
|
-
end
|
30
|
-
|
31
|
-
def valid_types(name)
|
32
|
-
@collection[name][:registered_values]
|
33
|
-
end
|
34
|
-
|
35
|
-
def type_options(name)
|
36
|
-
@collection[name][:options]
|
37
|
-
end
|
38
|
-
|
39
|
-
def [](name)
|
40
|
-
@collection[name]
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Glossarist
|
4
|
-
module Utilities
|
5
|
-
module Enum
|
6
|
-
module InstanceMethods
|
7
|
-
def selected_type
|
8
|
-
initialize_selected_type if @selected_type.nil?
|
9
|
-
|
10
|
-
@selected_type
|
11
|
-
end
|
12
|
-
|
13
|
-
def select_type(type_name, values)
|
14
|
-
values = if values.is_a?(Array)
|
15
|
-
values
|
16
|
-
else
|
17
|
-
[values]
|
18
|
-
end
|
19
|
-
|
20
|
-
values.each do |value|
|
21
|
-
select_type_value(type_name, value)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def deselect_type(type_name, value)
|
26
|
-
selected_type[type_name].delete(value)
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def select_type_value(type_name, value)
|
32
|
-
if !value
|
33
|
-
selected_type[type_name].clear
|
34
|
-
elsif self.class.valid_types(type_name).include?(value.to_sym)
|
35
|
-
selected_type[type_name].clear unless self.class.type_options(type_name)[:multiple]
|
36
|
-
selected_type[type_name] << value.to_sym
|
37
|
-
else
|
38
|
-
raise(
|
39
|
-
Glossarist::InvalidTypeError,
|
40
|
-
"`#{value}` is not a valid #{type_name}. Supported #{type_name} are #{self.class.enums[type_name][:registered_values].to_a.join(", ")}"
|
41
|
-
)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def initialize_selected_type
|
46
|
-
@selected_type = {}
|
47
|
-
|
48
|
-
self.class.registered_enums.each do |type|
|
49
|
-
@selected_type[type] = []
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "enum/enum_collection"
|
4
|
-
require_relative "enum/class_methods"
|
5
|
-
require_relative "enum/instance_methods"
|
6
|
-
|
7
|
-
module Glossarist
|
8
|
-
module Utilities
|
9
|
-
module Enum
|
10
|
-
def self.included(base)
|
11
|
-
base.include(InstanceMethods)
|
12
|
-
base.extend(ClassMethods)
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.extended(base)
|
16
|
-
base.include(InstanceMethods)
|
17
|
-
base.extend(ClassMethods)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/glossarist/v1_reader.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Glossarist
|
4
|
-
# An adapter to read concepts in V1 format, converts them to v2 format and
|
5
|
-
# load into glossarist concept model.
|
6
|
-
class V1Reader
|
7
|
-
def self.load_concept_from_file(filename)
|
8
|
-
new.load_concept_from_file(filename)
|
9
|
-
end
|
10
|
-
|
11
|
-
def load_concept_from_file(filename)
|
12
|
-
concept_hash = Psych.safe_load(File.read(filename), permitted_classes: [Date, Time])
|
13
|
-
Config.class_for(:managed_concept).new(generate_v2_concept_hash(concept_hash))
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def generate_v2_concept_hash(concept_hash)
|
19
|
-
v2_concept = { "groups" => concept_hash["groups"] }
|
20
|
-
v2_concept["data"] = {
|
21
|
-
"identifier" => concept_hash["termid"],
|
22
|
-
"localized_concepts" => concept_hash.values.grep(Hash),
|
23
|
-
}
|
24
|
-
|
25
|
-
v2_concept
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|