dcm_dict 0.27.0 → 0.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -0
  3. data/LICENSE +1 -1
  4. data/README.md +78 -60
  5. data/bin/dcm_dict_converter.rb +3 -3
  6. data/lib/dcm_dict.rb +1 -1
  7. data/lib/dcm_dict/dictionary/base_dictionary.rb +1 -1
  8. data/lib/dcm_dict/dictionary/base_record.rb +1 -1
  9. data/lib/dcm_dict/dictionary/data_element_dictionary.rb +1 -1
  10. data/lib/dcm_dict/dictionary/data_element_record.rb +1 -1
  11. data/lib/dcm_dict/dictionary/uid_dictionary.rb +2 -4
  12. data/lib/dcm_dict/dictionary/uid_record.rb +6 -1
  13. data/lib/dcm_dict/encoder/data_to_code.rb +2 -2
  14. data/lib/dcm_dict/error/dictionary_error.rb +1 -1
  15. data/lib/dcm_dict/ext/object_extension.rb +1 -1
  16. data/lib/dcm_dict/refine/array_refine.rb +1 -1
  17. data/lib/dcm_dict/refine/data_element_refine.rb +1 -1
  18. data/lib/dcm_dict/refine/internal/array_refine_internal.rb +1 -1
  19. data/lib/dcm_dict/refine/internal/hash_refine_internal.rb +14 -1
  20. data/lib/dcm_dict/refine/internal/string_refine_internal.rb +1 -1
  21. data/lib/dcm_dict/refine/string_refine.rb +1 -1
  22. data/lib/dcm_dict/refine/symbol_refine.rb +2 -1
  23. data/lib/dcm_dict/refine/uid_refine.rb +1 -1
  24. data/lib/dcm_dict/rubies/rb_ext.rb +1 -1
  25. data/lib/dcm_dict/source_data/data_elements_data.rb +96 -7
  26. data/lib/dcm_dict/source_data/detached_data.rb +1 -1
  27. data/lib/dcm_dict/source_data/uid_values_data.rb +447 -427
  28. data/lib/dcm_dict/version.rb +3 -3
  29. data/lib/dcm_dict/xml/constant.rb +3 -2
  30. data/lib/dcm_dict/xml/field_data.rb +1 -1
  31. data/lib/dcm_dict/xml/nokogiri_tool.rb +1 -1
  32. data/lib/dcm_dict/xml/rexml_tool.rb +1 -1
  33. data/lib/dcm_dict/xml/tag_field_data.rb +1 -1
  34. data/lib/dcm_dict/xml/uid_field_data.rb +14 -4
  35. data/lib/dcm_dict/xml/xml_tool.rb +1 -1
  36. data/spec/data_element_sample_spec_helper.rb +12 -2
  37. data/spec/data_element_shared_example_spec_helper.rb +1 -1
  38. data/spec/dcm_dict/dictionary/data_element_dictionary_spec.rb +1 -1
  39. data/spec/dcm_dict/dictionary/data_element_record_spec.rb +1 -1
  40. data/spec/dcm_dict/dictionary/uid_dictionary_spec.rb +62 -17
  41. data/spec/dcm_dict/dictionary/uid_record_spec.rb +8 -4
  42. data/spec/dcm_dict/encoder/data_to_code_spec.rb +2 -2
  43. data/spec/dcm_dict/ext/object_extension_spec.rb +1 -1
  44. data/spec/dcm_dict/refine/array_refine_spec.rb +1 -1
  45. data/spec/dcm_dict/refine/internal/array_refine_internal_spec.rb +1 -1
  46. data/spec/dcm_dict/refine/internal/hash_refine_internal_spec.rb +19 -1
  47. data/spec/dcm_dict/refine/internal/string_refine_internal_spec.rb +1 -1
  48. data/spec/dcm_dict/refine/string_refine_spec.rb +4 -4
  49. data/spec/dcm_dict/refine/symbol_refine_spec.rb +26 -1
  50. data/spec/dcm_dict/rubies/rb_ext_spec.rb +1 -1
  51. data/spec/dcm_dict/source_data/data_elements_data_spec.rb +1 -1
  52. data/spec/dcm_dict/source_data/detached_data_spec.rb +1 -1
  53. data/spec/dcm_dict/source_data/uid_values_data_spec.rb +1 -1
  54. data/spec/dcm_dict/version_spec.rb +1 -1
  55. data/spec/dcm_dict/xml/tag_field_data_spec.rb +1 -1
  56. data/spec/dcm_dict/xml/uid_field_data_spec.rb +1 -1
  57. data/spec/dictionary_shared_example_spec_helper.rb +1 -1
  58. data/spec/refine_shared_example_spec_helper.rb +1 -1
  59. data/spec/spec_helper.rb +1 -1
  60. data/spec/xml_sample_spec_helper.rb +80 -32
  61. metadata +24 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3aabbee194362f1003d72cf3513dd85261cb63d93b83802c1fb0b767c1f0c1a2
4
- data.tar.gz: 12b19236ebf0658ea4016be747951963bc9a636fd1264543987f6d6685541b14
3
+ metadata.gz: da806de4712543a1c065339de2ae39f8e8a8a3b25b52450083725a36b020ff74
4
+ data.tar.gz: 48ad0c8dfa7cc09e7d7766a050a23034ef0d54e3f0f6924c59529c9e4b2ab4c5
5
5
  SHA512:
6
- metadata.gz: 738fdcf5e5ebf3b920c8b906a54bf0575a50b9c707038d9bd13efa57f193dbff2ed16b06191dc88d808aee6fca211fb3ba4c0c28680265abb53ab77c39cddf79
7
- data.tar.gz: 97ebf73cfe6dd4ae93ed04afd7794c9ee110e91ad97bd908af5b55cd87e7fcc27fae081ff2cf7038a7615adb7a57dd44cba92e6d46e56f334bdc2c99e10cd1c5
6
+ metadata.gz: 6cbffc01a7cbacb2eb158ea46ed033903312ad693a2239fbaa72fc19016b3fb5ea0278beb5c1ba3158239fa73c997367054a400fde4335d812a3a4e4332d11ee
7
+ data.tar.gz: bf951880ff8f85df390301a5f9984b99d2d3487248153b8b5ea8e6735268162179c39de69614b521f42b4ac07ec71fa2b1421346b94c082521cc02eccae77ece
data/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # DcmDict project Changelog
2
2
 
3
+ ## v0.32.0 (2021-02-07)
4
+ * Update to 2021a Base Standard
5
+ ___
6
+ ## v0.31.0 (2020-12-07)
7
+ * Update to 2020e Base Standard
8
+ ___
9
+ ## v0.30.0 (2020-10-03)
10
+ * Update to 2020d Base Standard
11
+ * Add keywords support for standard UIDs
12
+ ___
13
+ ## v0.29.0 (2020-07-21)
14
+ * Update to 2020c Base Standard
15
+ ___
16
+ ## v0.28.1 (2020-03-18)
17
+ * Updated dcm_dict.gemspec due to a security vulnerabilities into the Rake gem as defined into gemspec (>=10.3 to >=12.3.3)
18
+ #### Note for gemspec security report:
19
+ >rake vulnerability found in dcm_dict.gemspec:
20
+ >CVE-2020-8130 (moderate severity)
21
+ >Vulnerable versions: <= 12.3.2
22
+ >Patched version: 12.3.3
23
+ >There is an OS command injection vulnerability in Ruby Rake before 12.3.3 in Rake::FileList when supplying a filename that begins with the pipe character |.
24
+ >
25
+ >Remediation:
26
+ >Upgrade rake to version 12.3.3 or later.
27
+ >
28
+ >["OS Command Injection in Rake"](https://github.com/advisories/GHSA-jppv-gw3r-w3q8)
29
+ >["CVE-2020-8130 Detail"](https://nvd.nist.gov/vuln/detail/CVE-2020-8130)
30
+ ___
31
+ ## v0.28.0 (2020-03-18)
32
+ * Update to 2020b Base Standard
33
+ * Remove warning for deprecated method 'Kernel#open'
34
+ ___
3
35
  ## v0.27.0 (2020-02-05)
4
36
  * Update to 2020a Base Standard
5
37
  ___
data/LICENSE CHANGED
@@ -1,7 +1,7 @@
1
1
  DcmDict is a Ruby gem (dcm_dict) to handle
2
2
  in a simple way the Data defined within the DICOM Standard.
3
3
 
4
- Copyright (C) 2014-2020 Enrico Rivarola
4
+ Copyright (C) 2014-2021 Enrico Rivarola
5
5
 
6
6
  DcmDict is free software: you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
data/README.md CHANGED
@@ -46,6 +46,14 @@ as well for UIDs
46
46
  => :transfer_syntax
47
47
  > "Implicit VR Little Endian: Default Transfer Syntax for DICOM".uid_value
48
48
  => "1.2.840.10008.1.2"
49
+ > "Verification SOP Class".uid_value
50
+ => "1.2.840.10008.1.1"
51
+ > "1.2.840.10008.1.1".uid_type
52
+ => :sop_class
53
+ > "Verification".uid
54
+ => "1.2.840.10008.1.1"
55
+ > :verification.uid
56
+ => "1.2.840.10008.1.1"
49
57
  ```
50
58
 
51
59
  let see all features in detail:
@@ -92,33 +100,33 @@ For these objects is possible to access to Tag (group/element), Name, Keyword, V
92
100
 
93
101
  The main methods supported are:
94
102
 
95
- |Method | Note| Type||
96
- |:------|:------------:|:---:|:---:|
97
- |**tag** | tag as Array| Array of two Fixnum|(alias of *tag_ary*)|
98
- |**tag_name** | name of tag| String|
99
- |**tag_keyword** | keyword| String|
100
- |**tag_key** | keyword| String|
101
- |**tag_vr** | Value Representation| Array of Symbol|
102
- |**tag_vm** | Value Multiplicity| Array of Symbol|
103
- |**tag_ps** | tag as string (as standard doc)| String|
104
- |**tag_ary** | tag as Array|Array of two Fixnum|
105
- |**tag_sym** | tag as Symbol|Symbol|
106
- |**tag_ndm** | tag as in Native DICOM Model|String|
107
- |**tag_str** | tag as string (similar to tag_ps)|String|
108
- |**tag_note** | tag note|String|
109
- |**tag_multiple?** | is a multiple tag ? |boolean|(useful for 'multi tag' attribute)|
103
+ | Method | Note | Type | |
104
+ |:------------------|:---------------------------------:|:-------------------:|:----------------------------------:|
105
+ | **tag** | tag as Array | Array of two Fixnum | (alias of *tag_ary*) |
106
+ | **tag_name** | name of tag | String | |
107
+ | **tag_keyword** | keyword | String | |
108
+ | **tag_key** | keyword | String | |
109
+ | **tag_vr** | Value Representation | Array of Symbol | |
110
+ | **tag_vm** | Value Multiplicity | Array of Symbol | |
111
+ | **tag_ps** | tag as string (as standard doc) | String | |
112
+ | **tag_ary** | tag as Array | Array of two Fixnum | |
113
+ | **tag_sym** | tag as Symbol | Symbol | |
114
+ | **tag_ndm** | tag as in Native DICOM Model | String | |
115
+ | **tag_str** | tag as string (similar to tag_ps) | String | |
116
+ | **tag_note** | tag note | String | |
117
+ | **tag_multiple?** | is a multiple tag ? | boolean | (useful for 'multi tag' attribute) |
110
118
 
111
119
  each data element is indexed by these fields:
112
120
 
113
- |Field|Type|
114
- |:----|:-----:|
115
- |**tag_key** | String|
116
- |**tag_ps** | String|
117
- |**tag_ary** | Array|
118
- |**tag_sym** | Symbol|
119
- |**tag_ndm** | String|
120
- |**tag_str** | String|
121
- |**tag_name** | String|
121
+ | Field | Type |
122
+ |:-------------|:------:|
123
+ | **tag_key** | String |
124
+ | **tag_ps** | String |
125
+ | **tag_ary** | Array |
126
+ | **tag_sym** | Symbol |
127
+ | **tag_ndm** | String |
128
+ | **tag_str** | String |
129
+ | **tag_name** | String |
122
130
 
123
131
  By these fields is possible to access to data element informations.
124
132
  Consider the case of the tag (0010,1005) (*Patient's Birth Name*), the primary fields are:
@@ -170,21 +178,21 @@ will produce
170
178
  The library also manage 'multiple tags' such as *(0020,31XX)* (*Source Image IDs*).
171
179
  As an example for this data element the default tag in array form is [0x0020,0x3122] and all fields are expressed as:
172
180
 
173
- |Method/field | Value|
174
- |:------|:------------:|
175
- |**tag** | [0x0020,0x3122]|
176
- |**tag_name** | "Source Image IDs"|
177
- |**tag_keyword** | 'SourceImageIDs'|
178
- |**tag_key** | 'SourceImageIDs'|
179
- |**tag_vr** | [:CS]|
180
- |**tag_vm** | ["1-n"]|
181
- |**tag_ps** | '(0020,31XX)'|
182
- |**tag_ary** | [0x0020,0x3122]|
183
- |**tag_sym** | :source_image_ids|
184
- |**tag_ndm** | '00203122'
185
- |**tag_str** | '(0020,3122)'|
186
- |**tag_note** | 'RET'|
187
- |**tag_multiple?** | true|
181
+ | Method/field | Value |
182
+ |:------------------|:------------------:|
183
+ | **tag** | [0x0020,0x3122] |
184
+ | **tag_name** | "Source Image IDs" |
185
+ | **tag_keyword** | 'SourceImageIDs' |
186
+ | **tag_key** | 'SourceImageIDs' |
187
+ | **tag_vr** | [:CS] |
188
+ | **tag_vm** | ["1-n"] |
189
+ | **tag_ps** | '(0020,31XX)' |
190
+ | **tag_ary** | [0x0020,0x3122] |
191
+ | **tag_sym** | :source_image_ids |
192
+ | **tag_ndm** | '00203122' |
193
+ | **tag_str** | '(0020,3122)' |
194
+ | **tag_note** | 'RET' |
195
+ | **tag_multiple?** | true |
188
196
 
189
197
  [0x0020,0x3122] is the default value for group/element pair (*[32, 12578]*), but any valid pair of numbers for this tag will be refers that information:
190
198
 
@@ -210,38 +218,44 @@ As an example for this data element the default tag in array form is [0x0020,0x3
210
218
  and so on.
211
219
 
212
220
  ## UID data in detail
213
- Any UID features can be accessed from a *String* object.
221
+ Any UID features can be accessed from a *String* or a *Symbol* object.
214
222
 
215
223
  ### UID Values
216
224
  For these objects is possible to access to value, name and type values for any single uid.
217
225
  Main methods supported are:
218
226
 
219
- |Method | Note| Type||
220
- |:------|:------------:|:---:|:---:|
221
- |**uid** | value of uid| String|(alias of *uid_value*)|
222
- |**uid_value** | value of uid| String|
223
- |**uid_name** | name of uid| String|
224
- |**uid_type** | type of uid| Symbol|
227
+ | Method | Note | Type | |
228
+ |:--------------|:------------------------:|:------:|:----------------------:|
229
+ | **uid** | value of uid | String | (alias of *uid_value*) |
230
+ | **uid_value** | value of uid | String | |
231
+ | **uid_name** | name of uid | String | |
232
+ | **uid_key** | keyword of uid | String | |
233
+ | **uid_sym** | keyword as symbol of uid | Symbol | |
234
+ | **uid_type** | type of uid | Symbol | |
225
235
 
226
236
  each uid is indexed by:
227
237
 
228
- |Field|Type|
229
- |:----|:-----|
230
- |**uid_value** | String|
231
- |**uid_name** | String|
238
+ | Field | Type |
239
+ |:--------------|:-------|
240
+ | **uid_value** | String |
241
+ | **uid_name** | String |
242
+ | **uid_key** | String |
243
+ | **uid_sym** | Symbol |
232
244
 
233
245
  From these fields is possible to access to all uid informations.
234
- Consider the case of the uid *1.2.840.10008.1.1* (*Verification SOP Class*), the primary fields are the strings **'1.2.840.10008.1.1'** and **"Verification SOP Class"**.
235
- - As String key you may use the standard value **'1.2.840.10008.1.1'** and the uid name **"Verification SOP Class"**
246
+ Consider the case of the uid *1.2.840.10008.1.1* (*Verification SOP Class*), the primary fields are the strings **'1.2.840.10008.1.1'**, **"Verification SOP Class"**, **"Verification"**.
247
+ - As key you may use the standard value **'1.2.840.10008.1.1'**, the uid name **"Verification SOP Class"**, the uid keyword **"Verification"** and the symbol **:verification**
236
248
 
237
249
  For this uid all fields are expressed as:
238
250
 
239
- |Method/field | Value|
240
- |:------|:------------:|
241
- |**uid** | '1.2.840.10008.1.1'|
242
- |**uid_value** | '1.2.840.10008.1.1'|
243
- |**uid_name** | "Verification SOP Class"|
244
- |**uid_type** | :sop_class|
251
+ | Method/field | Value |
252
+ |:--------------|:------------------------:|
253
+ | **uid** | '1.2.840.10008.1.1' |
254
+ | **uid_value** | '1.2.840.10008.1.1' |
255
+ | **uid_name** | "Verification SOP Class" |
256
+ | **uid_key** | "Verification" |
257
+ | **uid_sym** | :verification |
258
+ | **uid_type** | :sop_class |
245
259
 
246
260
  ### example:
247
261
 
@@ -254,6 +268,10 @@ For this uid all fields are expressed as:
254
268
  => "Verification SOP Class"
255
269
  > "Verification SOP Class".uid
256
270
  => "1.2.840.10008.1.1"
271
+ > "Verification".uid
272
+ => "1.2.840.10008.1.1"
273
+ > :verification.uid
274
+ => "1.2.840.10008.1.1"
257
275
  ```
258
276
 
259
277
  ## How data is extracted
@@ -269,7 +287,7 @@ Note: the script use the [Nokogiri][3] as XML parser if installed as gem, otherw
269
287
  Check the file for other details.
270
288
 
271
289
  ## Note
272
- Current library version is aligned to *DICOM Base Standard* **2020a**
290
+ Current library version is aligned to *DICOM Base Standard* **2021a**
273
291
 
274
292
  ## Install
275
293
 
@@ -292,7 +310,7 @@ There are many possible *candidates* for inclusion in the *dictionary*, here are
292
310
  TBD
293
311
 
294
312
  ## License
295
- Copyright (C) 2014-2020 Enrico Rivarola.
313
+ Copyright (C) 2014-2021 Enrico Rivarola.
296
314
  See the `LICENSE` and `COPYING` files for license details.
297
315
 
298
316
  ## Ruby Gem
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- ruby -*-
3
3
  #
4
- # Copyright (C) 2014-2020 Enrico Rivarola
4
+ # Copyright (C) 2014-2021 Enrico Rivarola
5
5
  #
6
6
  # This file is part of DcmDict gem (dcm_dict).
7
7
  #
@@ -29,7 +29,7 @@ require 'dcm_dict'
29
29
  require 'dcm_dict/xml/xml_tool'
30
30
 
31
31
  LICENSE_TEXT=<<END_LICENSE
32
- Copyright (C) 2014-2020 Enrico Rivarola
32
+ Copyright (C) 2014-2021 Enrico Rivarola
33
33
 
34
34
  This file is part of DcmDict gem (dcm_dict).
35
35
 
@@ -89,7 +89,7 @@ class DcmDictConverter
89
89
  def pull_standard_draft(url, output)
90
90
  buffer_size = 256 * 1_024
91
91
  trace("Downloading #{url}\n")
92
- open(url, "r",
92
+ URI.open(url, "r",
93
93
  :content_length_proc => lambda {|content_length| trace("Content Length: #{content_length} bytes\n.") },
94
94
  :progress_proc => lambda { |size| trace(".") }) do |src|
95
95
  while (buffer = src.read(buffer_size))
data/lib/dcm_dict.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -25,7 +25,7 @@ module DcmDict
25
25
  module Dictionary
26
26
  using DcmDict::Refine::Internal::StringRefineInternal
27
27
 
28
- UidIndexKey = [:uid_value, :uid_name]
28
+ UidIndexKey = [:uid_value, :uid_name, :uid_key, :uid_sym]
29
29
 
30
30
  # Main class to handle uid data as dictionary
31
31
  class UidDictionary < BaseDictionary
@@ -70,9 +70,7 @@ module DcmDict
70
70
 
71
71
  def try_to_find_unknown_uid(uid)
72
72
  raise "Unknown UID value" unless uid.uid_value?
73
- UidRecord.new({ uid_value: uid,
74
- uid_name: 'Unknown UID',
75
- uid_type: :unknown })
73
+ UidRecord.new({ uid_value: uid })
76
74
  end
77
75
  end
78
76
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -25,8 +25,12 @@ require_relative 'base_record'
25
25
 
26
26
  module DcmDict
27
27
  module Dictionary
28
+ using DcmDict::Refine::Internal::HashRefineInternal
29
+
28
30
  UidMethodMap = {uid_value: :uid_value,
29
31
  uid: :uid_value,
32
+ uid_key: :uid_key,
33
+ uid_sym: :uid_sym,
30
34
  uid_name: :uid_name,
31
35
  uid_type: :uid_type }.freeze
32
36
 
@@ -35,6 +39,7 @@ module DcmDict
35
39
  # Class to handle uid record from source dictionary data
36
40
  class UidRecord < BaseRecord
37
41
  def initialize(data)
42
+ data.check_base_data_uid_field!
38
43
  super
39
44
  end
40
45
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -72,7 +72,7 @@ END
72
72
  # Convert uid +data+ to Ruby code using +indent+ spaces indentation
73
73
  def self.uid_data_to_code(data, indent=4)
74
74
  indent = 4 unless indent
75
- "#{' '*indent}{ uid_value: '#{data[:uid_value]}', uid_name: \"#{data[:uid_name]}\", uid_type: #{data[:uid_type].inspect}},"
75
+ "#{' '*indent}{ uid_value: '#{data[:uid_value]}', uid_name: '#{data[:uid_name]}', uid_key: '#{data[:uid_key]}', uid_sym: #{data[:uid_sym].inspect}, uid_type: #{data[:uid_type].inspect}},"
76
76
  end
77
77
  end
78
78
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (C) 2014-2020 Enrico Rivarola
2
+ # Copyright (C) 2014-2021 Enrico Rivarola
3
3
  #
4
4
  # This file is part of DcmDict gem (dcm_dict).
5
5
  #
@@ -25,6 +25,7 @@ module DcmDict
25
25
  module Refine
26
26
  module Internal
27
27
  module HashRefineInternal
28
+ using DcmDict::Refine::Internal::StringRefineInternal
28
29
 
29
30
  refine Hash do
30
31
  # Check/update content for data tag field
@@ -57,6 +58,18 @@ module DcmDict
57
58
  fill_nil_or_empty_value(:tag_vm) { ['1'] }
58
59
  end
59
60
 
61
+ def check_base_data_uid_field!
62
+ uid_value = self[:uid_value]
63
+ raise "Missing uid_value field" if uid_value.nil_or_empty?
64
+ fill_nil_or_empty_value(:uid_key) do
65
+ new_key = uid_value.gsub('.','_')
66
+ "UID_#{new_key}"
67
+ end
68
+ fill_nil_or_empty_value(:uid_sym) { self[:uid_key].tag_key_to_sym }
69
+ fill_nil_or_empty_value(:uid_name) { "#{self[:uid_value]} (Unknown UID)" }
70
+ fill_nil_or_empty_value(:uid_type) { :unknown }
71
+ end
72
+
60
73
  private
61
74
  def fill_nil_or_empty_value(key)
62
75
  if self[key].nil_or_empty?