glossarist-new 1.0.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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +15 -0
  3. data/.github/workflows/test.yml +34 -0
  4. data/.gitignore +18 -0
  5. data/.hound.yml +3 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +35 -0
  8. data/Gemfile +5 -0
  9. data/LICENSE.txt +23 -0
  10. data/README.adoc +11 -0
  11. data/Rakefile +8 -0
  12. data/config.yml +83 -0
  13. data/glossarist.gemspec +36 -0
  14. data/lib/glossarist/citation.rb +85 -0
  15. data/lib/glossarist/collection.rb +86 -0
  16. data/lib/glossarist/concept.rb +143 -0
  17. data/lib/glossarist/concept_date.rb +20 -0
  18. data/lib/glossarist/concept_manager.rb +44 -0
  19. data/lib/glossarist/concept_source.rb +62 -0
  20. data/lib/glossarist/designation/abbreviation.rb +23 -0
  21. data/lib/glossarist/designation/base.rb +37 -0
  22. data/lib/glossarist/designation/expression.rb +50 -0
  23. data/lib/glossarist/designation/grammar_info.rb +58 -0
  24. data/lib/glossarist/designation/graphical_symbol.rb +17 -0
  25. data/lib/glossarist/designation/letter_symbol.rb +19 -0
  26. data/lib/glossarist/designation/symbol.rb +21 -0
  27. data/lib/glossarist/designation.rb +27 -0
  28. data/lib/glossarist/detailed_definition.rb +31 -0
  29. data/lib/glossarist/glossary_definition.rb +29 -0
  30. data/lib/glossarist/localized_concept.rb +61 -0
  31. data/lib/glossarist/managed_concept.rb +107 -0
  32. data/lib/glossarist/managed_concept_collection.rb +79 -0
  33. data/lib/glossarist/model.rb +29 -0
  34. data/lib/glossarist/non_verb_rep.rb +18 -0
  35. data/lib/glossarist/related_concept.rb +31 -0
  36. data/lib/glossarist/utilities/boolean_attributes.rb +35 -0
  37. data/lib/glossarist/utilities/common_functions.rb +29 -0
  38. data/lib/glossarist/utilities/enum/class_methods.rb +99 -0
  39. data/lib/glossarist/utilities/enum/enum_collection.rb +45 -0
  40. data/lib/glossarist/utilities/enum/instance_methods.rb +55 -0
  41. data/lib/glossarist/utilities/enum.rb +21 -0
  42. data/lib/glossarist/utilities.rb +5 -0
  43. data/lib/glossarist/version.rb +8 -0
  44. data/lib/glossarist.rb +31 -0
  45. metadata +131 -0
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Glossarist
4
+ class RelatedConcept < Model
5
+ include Glossarist::Utilities::Enum
6
+
7
+ register_enum :type, Glossarist::GlossaryDefinition::RELATED_CONCEPT_TYPES
8
+
9
+ # @return [String]
10
+ attr_accessor :content
11
+
12
+ # Reference to the related concept.
13
+ # @return [Citation]
14
+ attr_reader :ref
15
+
16
+ def ref=(ref)
17
+ @ref = Citation.new(ref)
18
+ end
19
+
20
+ def to_h
21
+ reference = ref&.to_h
22
+ reference&.merge!(reference&.delete("ref"))
23
+
24
+ {
25
+ "type" => type.to_s,
26
+ "content" => content,
27
+ "ref" => reference,
28
+ }.compact
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
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
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Glossarist
4
+ module Utilities
5
+ module CommonFunctions
6
+ # Hash#transform_keys is not available in Ruby 2.4
7
+ # so we have to do this ourselves :(
8
+ # symbolize hash keys
9
+ def symbolize_keys(hash)
10
+ result = {}
11
+ hash.each_pair do |key, value|
12
+ result[key.to_sym] = value
13
+ end
14
+ result
15
+ end
16
+
17
+ # Hash#slice is not available in Ruby 2.4
18
+ # so we have to do this ourselves :(
19
+ # slice hash keys
20
+ def slice_keys(hash, keys)
21
+ result = {}
22
+ keys.each do |key|
23
+ result[key] = hash[key] if hash.key?(key)
24
+ end
25
+ result
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,99 @@
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
@@ -0,0 +1,45 @@
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
@@ -0,0 +1,55 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "utilities/enum"
4
+ require_relative "utilities/boolean_attributes"
5
+ require_relative "utilities/common_functions"
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (c) Copyright 2021 Ribose Inc.
4
+ #
5
+
6
+ module Glossarist
7
+ VERSION = "1.0.0"
8
+ end
data/lib/glossarist.rb ADDED
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (c) Copyright 2021 Ribose Inc.
4
+ #
5
+
6
+ require "psych"
7
+
8
+ require_relative "glossarist/utilities"
9
+ require_relative "glossarist/version"
10
+ require_relative "glossarist/glossary_definition"
11
+
12
+ require_relative "glossarist/model"
13
+ require_relative "glossarist/concept_date"
14
+ require_relative "glossarist/detailed_definition"
15
+ require_relative "glossarist/related_concept"
16
+ require_relative "glossarist/citation"
17
+ require_relative "glossarist/concept_source"
18
+ require_relative "glossarist/collection"
19
+ require_relative "glossarist/designation"
20
+ require_relative "glossarist/concept"
21
+ require_relative "glossarist/localized_concept"
22
+ require_relative "glossarist/managed_concept_collection"
23
+ require_relative "glossarist/concept_manager"
24
+ require_relative "glossarist/managed_concept"
25
+ require_relative "glossarist/non_verb_rep"
26
+
27
+ module Glossarist
28
+ class Error < StandardError; end
29
+ class InvalidTypeError < StandardError; end
30
+ # Your code goes here...
31
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: glossarist-new
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ribose
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-05-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.14.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.10'
55
+ description:
56
+ email:
57
+ - open.source@ribose.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".editorconfig"
63
+ - ".github/workflows/test.yml"
64
+ - ".gitignore"
65
+ - ".hound.yml"
66
+ - ".rspec"
67
+ - ".rubocop.yml"
68
+ - Gemfile
69
+ - LICENSE.txt
70
+ - README.adoc
71
+ - Rakefile
72
+ - config.yml
73
+ - glossarist.gemspec
74
+ - lib/glossarist.rb
75
+ - lib/glossarist/citation.rb
76
+ - lib/glossarist/collection.rb
77
+ - lib/glossarist/concept.rb
78
+ - lib/glossarist/concept_date.rb
79
+ - lib/glossarist/concept_manager.rb
80
+ - lib/glossarist/concept_source.rb
81
+ - lib/glossarist/designation.rb
82
+ - lib/glossarist/designation/abbreviation.rb
83
+ - lib/glossarist/designation/base.rb
84
+ - lib/glossarist/designation/expression.rb
85
+ - lib/glossarist/designation/grammar_info.rb
86
+ - lib/glossarist/designation/graphical_symbol.rb
87
+ - lib/glossarist/designation/letter_symbol.rb
88
+ - lib/glossarist/designation/symbol.rb
89
+ - lib/glossarist/detailed_definition.rb
90
+ - lib/glossarist/glossary_definition.rb
91
+ - lib/glossarist/localized_concept.rb
92
+ - lib/glossarist/managed_concept.rb
93
+ - lib/glossarist/managed_concept_collection.rb
94
+ - lib/glossarist/model.rb
95
+ - lib/glossarist/non_verb_rep.rb
96
+ - lib/glossarist/related_concept.rb
97
+ - lib/glossarist/utilities.rb
98
+ - lib/glossarist/utilities/boolean_attributes.rb
99
+ - lib/glossarist/utilities/common_functions.rb
100
+ - lib/glossarist/utilities/enum.rb
101
+ - lib/glossarist/utilities/enum/class_methods.rb
102
+ - lib/glossarist/utilities/enum/enum_collection.rb
103
+ - lib/glossarist/utilities/enum/instance_methods.rb
104
+ - lib/glossarist/version.rb
105
+ homepage: https://github.com/glossarist/glossarist-ruby
106
+ licenses:
107
+ - BSD-2-Clause
108
+ metadata:
109
+ homepage_uri: https://github.com/glossarist/glossarist-ruby
110
+ source_code_uri: https://github.com/glossarist/glossarist-ruby
111
+ bug_tracker_uri: https://github.com/glossarist/glossarist-ruby/issues
112
+ post_install_message:
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 2.4.0
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubygems_version: 3.1.2
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Concept models for terminology glossaries conforming ISO 10241-1.
131
+ test_files: []