glossarist 2.3.0 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,66 @@
|
|
1
|
+
module Glossarist
|
2
|
+
class ConceptData < Lutaml::Model::Serializable
|
3
|
+
include Glossarist::Utilities::CommonFunctions
|
4
|
+
|
5
|
+
attribute :dates, ConceptDate, collection: true
|
6
|
+
attribute :definition, DetailedDefinition, collection: true
|
7
|
+
attribute :examples, DetailedDefinition, collection: true
|
8
|
+
attribute :id, :string
|
9
|
+
attribute :lineage_source_similarity, :integer
|
10
|
+
attribute :notes, DetailedDefinition, collection: true
|
11
|
+
attribute :release, :string
|
12
|
+
attribute :sources, ConceptSource, collection: true
|
13
|
+
attribute :terms, Designation::Base, collection: true
|
14
|
+
attribute :related, RelatedConcept, collection: true
|
15
|
+
attribute :domain, :string
|
16
|
+
attribute :review_date, :date_time
|
17
|
+
attribute :review_decision_date, :date_time
|
18
|
+
attribute :review_decision_event, :string
|
19
|
+
|
20
|
+
# Concept Methods
|
21
|
+
# Language code should be exactly 3 char long.
|
22
|
+
# TODO: use min_length, max_length once added in lutaml-model
|
23
|
+
attribute :language_code, :string, pattern: /^.{3}$/
|
24
|
+
attribute :entry_status, :string
|
25
|
+
|
26
|
+
yaml do
|
27
|
+
map :dates, to: :dates
|
28
|
+
map :definition, to: :definition, render_nil: true
|
29
|
+
map :examples, to: :examples, render_nil: true
|
30
|
+
map :id, to: :id
|
31
|
+
map :lineage_source_similarity, to: :lineage_source_similarity
|
32
|
+
map :notes, to: :notes, render_nil: true
|
33
|
+
map :release, to: :release
|
34
|
+
map :sources, to: :sources
|
35
|
+
map :terms, to: :terms,
|
36
|
+
with: { from: :terms_from_yaml, to: :terms_to_yaml }
|
37
|
+
map :related, to: :related
|
38
|
+
map :domain, to: :domain
|
39
|
+
map :language_code, to: :language_code
|
40
|
+
map :entry_status, to: :entry_status
|
41
|
+
map :review_date, to: :review_date
|
42
|
+
map :review_decision_date, to: :review_decision_date
|
43
|
+
map :review_decision_event, to: :review_decision_event
|
44
|
+
end
|
45
|
+
|
46
|
+
def terms_from_yaml(model, value)
|
47
|
+
model.terms = value.map { |v| Designation::Base.of_yaml(v) }
|
48
|
+
end
|
49
|
+
|
50
|
+
def terms_to_yaml(model, doc)
|
51
|
+
doc["terms"] = model.terms.map(&:to_yaml_hash)
|
52
|
+
end
|
53
|
+
|
54
|
+
def date_accepted
|
55
|
+
return nil unless dates
|
56
|
+
|
57
|
+
dates.find(&:accepted?)
|
58
|
+
end
|
59
|
+
|
60
|
+
def authoritative_source
|
61
|
+
return [] unless sources
|
62
|
+
|
63
|
+
sources.select(&:authoritative?)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -1,20 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Glossarist
|
4
|
-
class ConceptDate < Model
|
5
|
-
include Glossarist::Utilities::Enum
|
6
|
-
|
4
|
+
class ConceptDate < Lutaml::Model::Serializable
|
7
5
|
# Iso8601 date
|
8
6
|
# @return [String]
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
attribute :date, :date_time
|
8
|
+
attribute :type, :string,
|
9
|
+
values: Glossarist::GlossaryDefinition::CONCEPT_DATE_TYPES
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"type" => type,
|
17
|
-
}.compact
|
11
|
+
yaml do
|
12
|
+
map :date, to: :date
|
13
|
+
map :type, to: :type
|
18
14
|
end
|
19
15
|
end
|
20
16
|
end
|
@@ -1,44 +1,35 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
module Glossarist
|
4
|
-
class ConceptManager
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# concepts directory path, either absolute or relative to CWD
|
12
|
-
def initialize(path: nil)
|
13
|
-
@path = path
|
2
|
+
class ConceptManager < Lutaml::Model::Serializable
|
3
|
+
attribute :path, :string
|
4
|
+
attribute :localized_concepts_path, :string
|
5
|
+
|
6
|
+
yaml do
|
7
|
+
map :path, to: :path
|
8
|
+
map :localized_concepts_path, to: :localized_concepts_path
|
14
9
|
end
|
15
10
|
|
16
|
-
# Reads all concepts from files.
|
17
11
|
def load_from_files(collection: nil)
|
18
12
|
collection ||= ManagedConceptCollection.new
|
19
13
|
|
20
14
|
Dir.glob(concepts_glob) do |filename|
|
21
|
-
concept =
|
22
|
-
Glossarist::V1Reader.load_concept_from_file(filename)
|
23
|
-
else
|
24
|
-
load_concept_from_file(filename)
|
25
|
-
end
|
15
|
+
concept = load_concept_from_file(filename)
|
26
16
|
|
27
17
|
collection.store(concept)
|
28
18
|
end
|
29
19
|
end
|
30
20
|
|
31
|
-
# Writes all concepts to files.
|
32
21
|
def save_to_files(managed_concepts)
|
33
|
-
managed_concepts.
|
22
|
+
managed_concepts.each &method(:save_concept_to_file)
|
34
23
|
end
|
35
24
|
|
36
25
|
def load_concept_from_file(filename)
|
37
|
-
concept_hash = Psych.safe_load(File.read(filename),
|
26
|
+
concept_hash = Psych.safe_load(File.read(filename),
|
27
|
+
permitted_classes: [Date, Time])
|
38
28
|
concept_hash["uuid"] = concept_hash["id"] || File.basename(filename, ".*")
|
39
29
|
|
40
|
-
concept = Config.class_for(:managed_concept).
|
41
|
-
|
30
|
+
concept = Config.class_for(:managed_concept).of_yaml(concept_hash)
|
31
|
+
|
32
|
+
concept.data.localized_concepts.each_value do |id|
|
42
33
|
localized_concept = load_localized_concept(id)
|
43
34
|
concept.add_l10n(localized_concept)
|
44
35
|
end
|
@@ -55,7 +46,7 @@ module Glossarist
|
|
55
46
|
)
|
56
47
|
concept_hash["uuid"] = id
|
57
48
|
|
58
|
-
Config.class_for(:localized_concept).
|
49
|
+
Config.class_for(:localized_concept).of_yaml(concept_hash)
|
59
50
|
rescue Psych::SyntaxError => e
|
60
51
|
raise Glossarist::ParseError.new(filename: filename, line: e.line)
|
61
52
|
end
|
@@ -70,16 +61,14 @@ module Glossarist
|
|
70
61
|
Dir.mkdir(localized_concept_dir) unless Dir.exist?(localized_concept_dir)
|
71
62
|
|
72
63
|
filename = File.join(concept_dir, "#{concept.uuid}.yaml")
|
73
|
-
File.write(filename,
|
64
|
+
File.write(filename, concept.to_yaml)
|
74
65
|
|
75
66
|
concept.localized_concepts.each do |lang, uuid|
|
76
67
|
filename = File.join(localized_concept_dir, "#{uuid}.yaml")
|
77
|
-
File.write(filename,
|
68
|
+
File.write(filename, concept.localization(lang).to_yaml)
|
78
69
|
end
|
79
70
|
end
|
80
71
|
|
81
|
-
private
|
82
|
-
|
83
72
|
def concepts_glob
|
84
73
|
if v1_collection?
|
85
74
|
File.join(path, "concept-*.{yaml,yml}")
|
@@ -116,7 +105,8 @@ module Glossarist
|
|
116
105
|
end
|
117
106
|
|
118
107
|
def v1_collection?
|
119
|
-
@v1_collection ||= !Dir.glob(File.join(path,
|
108
|
+
@v1_collection ||= !Dir.glob(File.join(path,
|
109
|
+
"concept-*.{yaml,yml}")).empty?
|
120
110
|
end
|
121
111
|
end
|
122
112
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "set"
|
4
|
+
|
3
5
|
module Glossarist
|
4
6
|
class ConceptSet
|
5
7
|
# a `Glossarist::ManagedConceptCollection` object
|
@@ -40,7 +42,7 @@ module Glossarist
|
|
40
42
|
concept = concept_map[concept_name.strip.downcase]
|
41
43
|
|
42
44
|
if concept.nil?
|
43
|
-
|
45
|
+
puts " [Not Found]: #{concept_name.strip}"
|
44
46
|
else
|
45
47
|
latex_template(concept)
|
46
48
|
end
|
@@ -57,7 +59,7 @@ module Glossarist
|
|
57
59
|
|
58
60
|
def latex_template(concept)
|
59
61
|
<<~TEMPLATE
|
60
|
-
\\newglossaryentry{#{concept.default_designation.
|
62
|
+
\\newglossaryentry{#{concept.default_designation.tr('_', '-')}}
|
61
63
|
{
|
62
64
|
name={#{concept.default_designation.gsub('_', '\_')}}
|
63
65
|
description={#{normalize_definition(concept.default_definition)}}
|
@@ -66,8 +68,8 @@ module Glossarist
|
|
66
68
|
end
|
67
69
|
|
68
70
|
def normalize_definition(definition)
|
69
|
-
definition.gsub(/{{([^}]*)}}/) do |
|
70
|
-
"\\textbf{\\gls{#{Regexp.last_match[1].
|
71
|
+
definition.gsub(/{{([^}]*)}}/) do |_match|
|
72
|
+
"\\textbf{\\gls{#{Regexp.last_match[1].tr('_', '-')}}}"
|
71
73
|
end
|
72
74
|
end
|
73
75
|
|
@@ -1,62 +1,19 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
module Glossarist
|
4
|
-
class ConceptSource < Model
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
self.modification = rel["modification"]
|
20
|
-
end
|
21
|
-
|
22
|
-
self.origin = slice_keys(attributes, ref_param_names)
|
23
|
-
|
24
|
-
remaining_attributes = attributes.dup
|
25
|
-
ref_param_names.each { |k| remaining_attributes.delete(k) }
|
26
|
-
|
27
|
-
super(remaining_attributes)
|
28
|
-
end
|
29
|
-
|
30
|
-
def origin=(origin)
|
31
|
-
@origin = Citation.new(origin)
|
32
|
-
end
|
33
|
-
|
34
|
-
alias_method :ref=, :origin=
|
35
|
-
|
36
|
-
def to_h
|
37
|
-
origin_hash = self.origin.to_h.empty? ? nil : self.origin.to_h
|
38
|
-
|
39
|
-
{
|
40
|
-
"origin" => origin_hash,
|
41
|
-
"type" => type.to_s,
|
42
|
-
"status" => status&.to_s,
|
43
|
-
"modification" => modification,
|
44
|
-
}.compact
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def ref_param_names
|
50
|
-
%w[
|
51
|
-
ref
|
52
|
-
text
|
53
|
-
source
|
54
|
-
id
|
55
|
-
version
|
56
|
-
clause
|
57
|
-
link
|
58
|
-
original
|
59
|
-
]
|
2
|
+
class ConceptSource < Lutaml::Model::Serializable
|
3
|
+
attribute :status, :string,
|
4
|
+
values: Glossarist::GlossaryDefinition::CONCEPT_SOURCE_STATUSES
|
5
|
+
attribute :type, :string,
|
6
|
+
values: Glossarist::GlossaryDefinition::CONCEPT_SOURCE_TYPES
|
7
|
+
attribute :origin, Citation
|
8
|
+
attribute :modification, :string
|
9
|
+
|
10
|
+
yaml do
|
11
|
+
# TODO: change to `map [:ref, :origin], to: :origin
|
12
|
+
# when multiple key mapping is supported in lutaml-model
|
13
|
+
map :origin, to: :origin
|
14
|
+
map :status, to: :status
|
15
|
+
map :type, to: :type
|
16
|
+
map :modification, to: :modification
|
60
17
|
end
|
61
18
|
end
|
62
19
|
end
|
data/lib/glossarist/config.rb
CHANGED
@@ -42,19 +42,19 @@ module Glossarist
|
|
42
42
|
|
43
43
|
class << self
|
44
44
|
def class_for(name)
|
45
|
-
|
45
|
+
instance.class_for(name)
|
46
46
|
end
|
47
47
|
|
48
48
|
def extension_attributes
|
49
|
-
|
49
|
+
instance.extension_attributes
|
50
50
|
end
|
51
51
|
|
52
52
|
def register_class(class_name, klass)
|
53
|
-
|
53
|
+
instance.register_class(class_name, klass)
|
54
54
|
end
|
55
55
|
|
56
56
|
def register_extension_attributes(attributes)
|
57
|
-
|
57
|
+
instance.register_extension_attributes(attributes)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -1,26 +1,25 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "expression"
|
4
|
-
require_relative "../utilities"
|
5
|
-
|
6
1
|
module Glossarist
|
7
2
|
module Designation
|
8
3
|
class Abbreviation < Expression
|
9
|
-
|
10
|
-
|
11
|
-
register_enum :type, Glossarist::GlossaryDefinition::ABBREVIATION_TYPES
|
4
|
+
attribute :international, :boolean
|
5
|
+
attribute :type, :string, default: -> { "abbreviation" }
|
12
6
|
|
13
|
-
|
7
|
+
Glossarist::GlossaryDefinition::ABBREVIATION_TYPES.each do |name|
|
8
|
+
attribute name.to_sym, :boolean
|
9
|
+
end
|
14
10
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
yaml do
|
12
|
+
map :international, to: :international
|
13
|
+
map :type, to: :type, render_default: true
|
14
|
+
Glossarist::GlossaryDefinition::ABBREVIATION_TYPES.each do |name|
|
15
|
+
map name.to_sym, to: name.to_sym
|
16
|
+
end
|
17
|
+
end
|
20
18
|
|
21
|
-
|
19
|
+
def self.of_yaml(hash, options = {})
|
20
|
+
hash["type"] = "abbreviation" unless hash["type"]
|
22
21
|
|
23
|
-
super
|
22
|
+
super
|
24
23
|
end
|
25
24
|
end
|
26
25
|
end
|
@@ -1,35 +1,36 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
module Glossarist
|
4
2
|
module Designation
|
5
|
-
class Base < Model
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
class Base < Lutaml::Model::Serializable
|
4
|
+
attribute :designation, :string
|
5
|
+
attribute :geographical_area, :string
|
6
|
+
attribute :normative_status, :string,
|
7
|
+
values: Glossarist::GlossaryDefinition::DESIGNATION_BASE_NORMATIVE_STATUSES
|
8
|
+
attribute :type, :string
|
11
9
|
|
12
|
-
|
13
|
-
|
10
|
+
yaml do
|
11
|
+
map :type, to: :type
|
12
|
+
map :normative_status, to: :normative_status
|
13
|
+
map :geographical_area, to: :geographical_area
|
14
|
+
map :designation, to: :designation
|
15
|
+
end
|
14
16
|
|
15
|
-
def self.
|
17
|
+
def self.of_yaml(hash, options = {})
|
16
18
|
type = hash["type"]
|
17
19
|
|
18
20
|
if type.nil? || /\w/ !~ type
|
19
21
|
raise ArgumentError, "designation type is missing"
|
20
22
|
end
|
21
23
|
|
22
|
-
designation_subclass = SERIALIZED_TYPES[type]
|
23
|
-
|
24
24
|
if self == Base
|
25
25
|
# called on Base class, delegate it to proper subclass
|
26
|
-
SERIALIZED_TYPES[type].
|
26
|
+
SERIALIZED_TYPES[type].of_yaml(hash)
|
27
27
|
else
|
28
28
|
# called on subclass, instantiate object
|
29
29
|
unless SERIALIZED_TYPES[self] == type
|
30
30
|
raise ArgumentError, "unexpected designation type: #{type}"
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
|
+
super(hash, options)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
@@ -1,24 +1,26 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require_relative "base"
|
2
|
+
require_relative "grammar_info"
|
4
3
|
|
5
4
|
module Glossarist
|
6
5
|
module Designation
|
7
6
|
class Expression < Base
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
attribute :prefix, :string
|
8
|
+
attribute :usage_info, :string
|
9
|
+
|
10
|
+
attribute :gender, :string
|
11
|
+
attribute :plurality, :string
|
12
|
+
attribute :part_of_speech, :string
|
13
|
+
attribute :grammar_info, GrammarInfo, collection: true
|
14
|
+
attribute :type, :string, default: -> { "expression" }
|
15
|
+
|
16
|
+
yaml do
|
17
|
+
map :type, to: :type, render_default: true
|
18
|
+
map :prefix, to: :prefix
|
19
|
+
map :usage_info, to: :usage_info
|
20
|
+
map :grammar_info, to: :grammar_info
|
17
21
|
end
|
18
22
|
|
19
|
-
|
20
|
-
# might be removed in the future.
|
21
|
-
def self.from_h(hash)
|
23
|
+
def self.of_yaml(hash, options = {})
|
22
24
|
gender = hash.delete("gender") || hash.delete(:gender)
|
23
25
|
number = hash.delete("plurality") || hash.delete(:plurality)
|
24
26
|
part_of_speech = hash.delete("part_of_speech") || hash.delete(:part_of_speech)
|
@@ -31,19 +33,9 @@ module Glossarist
|
|
31
33
|
}.compact]
|
32
34
|
end
|
33
35
|
|
34
|
-
|
35
|
-
end
|
36
|
+
hash["type"] = "expression" unless hash["type"]
|
36
37
|
|
37
|
-
|
38
|
-
{
|
39
|
-
"type" => "expression",
|
40
|
-
"prefix" => prefix,
|
41
|
-
"normative_status" => normative_status,
|
42
|
-
"usage_info" => usage_info,
|
43
|
-
"designation" => designation,
|
44
|
-
"geographical_area" => geographical_area,
|
45
|
-
"grammar_info" => grammar_info&.map(&:to_h),
|
46
|
-
}.compact
|
38
|
+
super(hash, options)
|
47
39
|
end
|
48
40
|
end
|
49
41
|
end
|
@@ -1,57 +1,41 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "../utilities"
|
4
|
-
|
5
1
|
module Glossarist
|
6
2
|
module Designation
|
7
|
-
class GrammarInfo
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
3
|
+
class GrammarInfo < Lutaml::Model::Serializable
|
4
|
+
attribute :gender, :string,
|
5
|
+
values: Glossarist::GlossaryDefinition::GRAMMAR_INFO_GENDERS, collection: true
|
6
|
+
attribute :number, :string,
|
7
|
+
values: Glossarist::GlossaryDefinition::GRAMMAR_INFO_NUMBERS, collection: true
|
8
|
+
attribute :part_of_speech, :string,
|
9
|
+
values: Glossarist::GlossaryDefinition::GRAMMAR_INFO_BOOLEAN_ATTRIBUTES
|
10
|
+
|
11
|
+
yaml do
|
12
|
+
map :gender, to: :gender
|
13
|
+
map :number, to: :number
|
14
|
+
|
15
|
+
map :part_of_speech,
|
16
|
+
with: { to: :part_of_speech_to_yaml,
|
17
|
+
from: :part_of_speech_from_yaml }
|
18
|
+
Glossarist::GlossaryDefinition::GRAMMAR_INFO_BOOLEAN_ATTRIBUTES.each do |bool_attr|
|
19
|
+
map bool_attr,
|
20
|
+
with: { to: :"part_of_speech_#{bool_attr}_to_yaml",
|
21
|
+
from: :"part_of_speech_#{bool_attr}_from_yaml" }
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
24
|
-
|
25
|
+
def part_of_speech_from_yaml(model, value)
|
26
|
+
model.part_of_speech = value
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
28
|
-
{
|
29
|
-
"preposition" => preposition?,
|
30
|
-
"participle" => participle?,
|
31
|
-
"adj" => adj?,
|
32
|
-
"verb" => verb?,
|
33
|
-
"adverb" => adverb?,
|
34
|
-
"noun" => noun?,
|
35
|
-
"gender" => gender,
|
36
|
-
"number" => number,
|
37
|
-
}
|
38
|
-
end
|
29
|
+
def part_of_speech_to_yaml(model, doc); end
|
39
30
|
|
40
|
-
|
31
|
+
Glossarist::GlossaryDefinition::GRAMMAR_INFO_BOOLEAN_ATTRIBUTES.each do |bool_attr|
|
32
|
+
define_method(:"part_of_speech_#{bool_attr}_from_yaml") do |model, value|
|
33
|
+
model.public_send("#{bool_attr}=", value)
|
34
|
+
end
|
41
35
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
:gender,
|
46
|
-
:number,
|
47
|
-
:preposition,
|
48
|
-
:participle,
|
49
|
-
:adj,
|
50
|
-
:verb,
|
51
|
-
:adverb,
|
52
|
-
:noun,
|
53
|
-
:part_of_speech,
|
54
|
-
])
|
36
|
+
define_method(:"part_of_speech_#{bool_attr}_to_yaml") do |model, doc|
|
37
|
+
doc[bool_attr] = model.public_send("#{bool_attr}?")
|
38
|
+
end
|
55
39
|
end
|
56
40
|
end
|
57
41
|
end
|
@@ -1,16 +1,20 @@
|
|
1
|
-
|
1
|
+
require_relative "symbol"
|
2
2
|
|
3
3
|
module Glossarist
|
4
4
|
module Designation
|
5
5
|
class GraphicalSymbol < Symbol
|
6
|
-
|
7
|
-
|
6
|
+
attribute :text, :string
|
7
|
+
attribute :image, :string
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
yaml do
|
10
|
+
map :text, to: :text
|
11
|
+
map :image, to: :image
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.of_yaml(hash, options = {})
|
15
|
+
hash["type"] = "graphical_symbol"
|
16
|
+
|
17
|
+
super
|
14
18
|
end
|
15
19
|
end
|
16
20
|
end
|
@@ -1,18 +1,20 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
module Glossarist
|
4
2
|
module Designation
|
5
3
|
class LetterSymbol < Symbol
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
attribute :text, :string
|
5
|
+
attribute :language, :string
|
6
|
+
attribute :script, :string
|
7
|
+
|
8
|
+
yaml do
|
9
|
+
map :text, to: :text
|
10
|
+
map :language, to: :language
|
11
|
+
map :script, to: :script
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.of_yaml(hash, options = {})
|
15
|
+
hash["type"] = "letter_symbol"
|
9
16
|
|
10
|
-
|
11
|
-
super.merge(
|
12
|
-
"text" => text,
|
13
|
-
"language" => language,
|
14
|
-
"script" => script,
|
15
|
-
)
|
17
|
+
super
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -1,20 +1,18 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "base"
|
4
|
-
|
5
1
|
module Glossarist
|
6
2
|
module Designation
|
7
3
|
class Symbol < Base
|
8
|
-
|
4
|
+
attribute :international, :boolean
|
5
|
+
attribute :type, :string
|
6
|
+
|
7
|
+
yaml do
|
8
|
+
map :international, to: :international
|
9
|
+
map :type, to: :type, render_default: true
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.of_yaml(hash, options = {})
|
13
|
+
hash["type"] = "symbol" unless hash["type"]
|
9
14
|
|
10
|
-
|
11
|
-
{
|
12
|
-
"type" => Glossarist::Designation::SERIALIZED_TYPES[self.class],
|
13
|
-
"normative_status" => normative_status,
|
14
|
-
"geographical_area" => geographical_area,
|
15
|
-
"designation" => designation,
|
16
|
-
"international" => international,
|
17
|
-
}.compact
|
15
|
+
super
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|