pubid-iec 1.15.2 → 1.15.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1b77f83fe6b839f117353b6ec3f3026f99f773f839f5b56b1583c37b8207762
4
- data.tar.gz: eaf3606ee424e5e7d6c69b536b37c8ed736da1bace78a21286ae5f554cd88384
3
+ metadata.gz: aa29819fc4a1cad852d67cca964e337d037c62e97a892d7f6c8014ee1b4d8c32
4
+ data.tar.gz: ba87e4f5864db19984ee047c383fc6a95853125ea969fb3469e271efcd1e808c
5
5
  SHA512:
6
- metadata.gz: e9fa4025f04ba91fc9c543f417642fead2c9239392a5a097873ca70d02b48cf78c44166c11b22d9ec5bdb92fbb15376810219887a96c185291a40ca1b0427bea
7
- data.tar.gz: 89d3c5363ef867ac104f61a7d20a0f5d1b99c9387e2cd0de0efa9ae52d5aa1c3792ba5dc1c84f936b67e1fe4997cba0da8de4e356d6b224757547bc6aea73c23
6
+ metadata.gz: 1aa588350ceac542006896b4dd6828f9030394665e2b7dfc0db13057c2388a6f9837196178c2256264137f11b8463d4d1a6bb50b66b2c73038896cc88520858d
7
+ data.tar.gz: 45bd6a9d164e7a958a974e994891c2df91bb6ddcde3bdb76e82933c5983c6b9f643fc9b99206d9ad3cc3af7d6f37c644f9b0c2b8c569cbabc24132efdc97bd75
@@ -19,22 +19,22 @@ module Pubid::Iec
19
19
  edition: nil, type: nil, month: nil, day: nil,
20
20
  language: nil, stage: nil, sheet: nil, **args)
21
21
 
22
- @vap = vap.to_s if vap
22
+ @vap = Array(vap).map(&:to_s) if vap
23
23
  @database = database if database
24
- @fragment = fragment if fragment
24
+ @fragment = fragment.to_s if fragment
25
25
  @version = version if version
26
26
  @decision_sheet = decision_sheet if decision_sheet
27
- @conjuction_part = conjuction_part if conjuction_part
27
+ @conjuction_part = Array(conjuction_part).map(&:to_s) if conjuction_part
28
28
  @part_version = part_version if part_version
29
29
  @trf_publisher = trf_publisher.to_s if trf_publisher
30
30
  @trf_series = trf_series if trf_series
31
31
  @trf_version = trf_version.to_s if trf_version
32
32
  @test_type = test_type if test_type
33
33
  @edition = edition.to_s if edition
34
- @month = month if month
35
- @day = day if day
36
- @language = language if language
37
- @sheet = sheet if sheet
34
+ @month = month.to_s if month
35
+ @day = day.to_s if day
36
+ @language = Array(language).map(&:to_s) if language
37
+ @sheet = sheet.transform_values(&:to_s) if sheet
38
38
 
39
39
  if stage
40
40
  @stage = self.class.has_project_stage?(stage) ? self.class.resolve_project_stage(stage) : resolve_stage(stage)
@@ -72,6 +72,10 @@ module Pubid::Iec
72
72
  self.class.get_renderer_class.new(renderer_data).render(with_edition_month_date: with_edition_month_date)
73
73
  end
74
74
 
75
+ def to_yaml
76
+ to_h(deep: true).to_yaml
77
+ end
78
+
75
79
  class << self
76
80
  def has_project_stage?(project_stage)
77
81
  self::PROJECT_STAGES.any? { |k, v| v[:abbr] == project_stage }
@@ -7,8 +7,8 @@ module Pubid::Iec
7
7
  { key: :cs, title: "Component Specification", short: "CS" }
8
8
  end
9
9
 
10
- def to_h(deep: false)
11
- super.merge(type: "CS")
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "CS")
12
12
  end
13
13
  end
14
14
  end
@@ -7,8 +7,8 @@ module Pubid::Iec
7
7
  { key: :ca, title: "Conformity Assessment", short: "CA" }
8
8
  end
9
9
 
10
- def to_h(deep: false)
11
- super.merge(type: "CA")
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "CA")
12
12
  end
13
13
  end
14
14
  end
@@ -20,8 +20,8 @@ module Pubid::Iec
20
20
  { key: :guide, title: "Guide", short: %w[Guide GUIDE] }
21
21
  end
22
22
 
23
- def to_h(deep: false)
24
- super.merge(type: "Guide")
23
+ def to_h(deep: true)
24
+ super(deep: deep).merge(type: "Guide")
25
25
  end
26
26
  end
27
27
  end
@@ -7,8 +7,8 @@ module Pubid::Iec
7
7
  { key: :od, title: "Operational Document", short: "OD" }
8
8
  end
9
9
 
10
- def to_h(deep: false)
11
- super.merge(type: "OD")
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "OD")
12
12
  end
13
13
  end
14
14
  end
@@ -28,8 +28,8 @@ module Pubid::Iec
28
28
  { key: :pas, title: "Publicly Available Specification", short: "PAS" }
29
29
  end
30
30
 
31
- def to_h(deep: false)
32
- super.merge(type: "PAS")
31
+ def to_h(deep: true)
32
+ super(deep: deep).merge(type: "PAS")
33
33
  end
34
34
  end
35
35
  end
@@ -8,8 +8,8 @@ module Pubid::Iec
8
8
  { key: :sttr, title: "Societal and Technology Trend Report", short: "Trend Report" }
9
9
  end
10
10
 
11
- def to_h(deep: false)
12
- super.merge(type: "Trend Report")
11
+ def to_h(deep: true)
12
+ super(deep: deep).merge(type: "Trend Report")
13
13
  end
14
14
  end
15
15
  end
@@ -6,6 +6,10 @@ module Pubid::Iec
6
6
  @year = year&.to_i
7
7
  end
8
8
 
9
+ def to_h(deep: true, add_type: true)
10
+ { number: number, year: year }.compact
11
+ end
12
+
9
13
  def <=>(other)
10
14
  return 0 if year.nil? && other.year
11
15
 
@@ -7,8 +7,8 @@ module Pubid::Iec
7
7
  { key: :srd, title: "Systems Reference Document", short: "SRD" }
8
8
  end
9
9
 
10
- def to_h(deep: false)
11
- super.merge(type: "SRD")
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "SRD")
12
12
  end
13
13
  end
14
14
  end
@@ -48,8 +48,8 @@ module Pubid::Iec
48
48
  { key: :tr, title: "Technical Report", short: "TR" }
49
49
  end
50
50
 
51
- def to_h(deep: false)
52
- super.merge(type: "TR")
51
+ def to_h(deep: true)
52
+ super(deep: deep).merge(type: "TR")
53
53
  end
54
54
  end
55
55
  end
@@ -49,7 +49,7 @@ module Pubid::Iec
49
49
  end
50
50
 
51
51
  def to_h(deep: true)
52
- super.merge(type: "TS")
52
+ super(deep: deep).merge(type: "TS")
53
53
  end
54
54
  end
55
55
  end
@@ -0,0 +1,15 @@
1
+ module Pubid::Iec
2
+ module Identifier
3
+ class TechnologyAndMarketOutlookPaper < Base
4
+ def_delegators 'Pubid::Iec::Identifier::TechnologyAndMarketOutlookPaper', :type
5
+
6
+ def self.type
7
+ { key: :tmop, title: "Technology and Market Outlook Paper", short: "Technology and Market Outlook Paper" }
8
+ end
9
+
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "Technology and Market Outlook Paper")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -7,8 +7,8 @@ module Pubid::Iec
7
7
  { key: :tec, title: "Technology Report", short: "Technology Report" }
8
8
  end
9
9
 
10
- def to_h(deep: false)
11
- super.merge(type: "Technology Report")
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "Technology Report")
12
12
  end
13
13
  end
14
14
  end
@@ -7,8 +7,8 @@ module Pubid::Iec
7
7
  { key: :wp, title: "Write Paper", short: "White Paper" }
8
8
  end
9
9
 
10
- def to_h(deep: false)
11
- super.merge(type: "White Paper")
10
+ def to_h(deep: true)
11
+ super(deep: deep).merge(type: "White Paper")
12
12
  end
13
13
  end
14
14
  end
@@ -17,7 +17,7 @@ module Pubid::Iec
17
17
 
18
18
  rule(:part) do
19
19
  (str("-") | str("/")) >> space? >>
20
- (str("Amd") | str("Cor")).absent? >> (match['[\dA-Za-z]'] | str("-")).repeat(1).as(:part)
20
+ (str("Amd") | str("AMD") | str("Cor") | str("COR") | str("FRAG")).absent? >> (match['[\dA-Za-z]'] | str("-")).repeat(1).as(:part)
21
21
  end
22
22
 
23
23
  rule(:version) { digits >> (dot >> digits).maybe }
@@ -63,7 +63,7 @@ module Pubid::Iec
63
63
 
64
64
  rule(:number) do
65
65
  (digits | str("SYMBOL") | str("SYCSMARTENERGY") | str("SyCLVDC") |
66
- str("SYCLVDC") | str("SyCCOMM") | str("SyCAAL") | str("VIM") | match("[A-Za-z0-9 ]").repeat) >>
66
+ str("SYCLVDC") | str("SyCCOMM") | str("SyCAAL") | str("VIM") | match("[A-Za-z0-9 \\-]").repeat) >>
67
67
  ((str(":") >> match("[A-Z]").repeat(1)) | match("[a-zA-Z]")).maybe
68
68
  end
69
69
 
@@ -74,14 +74,17 @@ module Pubid::Iec
74
74
  part.maybe >>
75
75
  conjuction_part.maybe >>
76
76
  (space? >> str(":") >> year >> (str("-") >> month_digits.as(:month) >>
77
- (str("-") >> day_digits.as(:day)).maybe).maybe).maybe >> sheet.maybe >>
77
+ (str("-") >> day_digits.as(:day)).maybe).maybe).maybe >> str("-").maybe >> sheet.maybe >>
78
78
  ((amendment >> vap.maybe >> corrigendum.maybe) | corrigendum).repeat >>
79
79
  interpretation_sheet.maybe >> fragment.maybe
80
80
  end
81
81
 
82
+ rule(:vap_code) do
83
+ str("CSV") | str("SER") | str("RLV") | str("CMV") | str("EXV") | str("PAC") | str("PRV")
84
+ end
85
+
82
86
  rule(:vap) do
83
- space >> (str("CSV") | str("SER") | str("RLV") | str("CMV") | str("EXV") |
84
- str("PAC") | str("PRV")).as(:vap)
87
+ space >> vap_code.as(:vap) >> (str("-") >> vap_code.as(:vap)).repeat
85
88
  end
86
89
 
87
90
  rule(:database) do
@@ -97,7 +100,7 @@ module Pubid::Iec
97
100
  rule(:identifier) do
98
101
  (originator.maybe >> (space.maybe >> stage.as(:stage)).maybe >>
99
102
  std_document_body >>
100
- vap.maybe >> database.maybe >>
103
+ vap.maybe >> corrigendum.maybe >> database.maybe >>
101
104
  edition.maybe >>
102
105
  (str(":") >> year).maybe >>
103
106
  language.maybe)
@@ -1,14 +1,26 @@
1
1
  module Pubid::Iec::Renderer
2
2
  class Pubid < Pubid::Core::Renderer::Base
3
3
  def render_identifier(params)
4
- "%{publisher}%{type}%{typed_stage}%{stage} %{number}%{part}%{conjuction_part}"\
5
- "%{part_version}%{version}%{iteration}"\
6
- "%{year}%{month}%{day}%{sheet}%{amendments}%{corrigendums}%{fragment}%{vap}%{edition}%{database}" % params
4
+ # VAP (CSV, CMV, RLV, EXV) always comes before corrigendums
5
+ # e.g., "IEC 60529:1989+AMD1:1999 CSV/COR2:2007"
6
+ format_string = "%{publisher}%{copublisher}%{type}%{typed_stage}%{stage} %{number}%{part}%{conjuction_part}"\
7
+ "%{part_version}%{version}%{iteration}"\
8
+ "%{year}%{month}%{day}%{sheet}%{amendments}%{vap}%{corrigendums}"\
9
+ "%{fragment}%{edition}%{database}"
10
+ format_string % params
7
11
  end
8
12
  def render_typed_stage(typed_stage, _opts, _params)
9
13
  " #{typed_stage}"
10
14
  end
11
15
 
16
+ def render_publisher(publisher, _opts, _params)
17
+ publisher
18
+ end
19
+
20
+ def render_copublisher(copublisher, _opts, _params)
21
+ "/" + Array(copublisher).join("/")
22
+ end
23
+
12
24
  def render_type(type, _opts, params)
13
25
  return if params[:stage].is_a?(::Pubid::Core::TypedStage)
14
26
 
@@ -16,7 +28,7 @@ module Pubid::Iec::Renderer
16
28
  end
17
29
 
18
30
  def render_vap(vap, _opts, _params)
19
- " #{vap}"
31
+ " #{vap.join('-')}"
20
32
  end
21
33
 
22
34
  def render_stage(stage, _opts, params)
@@ -29,8 +41,9 @@ module Pubid::Iec::Renderer
29
41
  "/FRAG#{fragment}"
30
42
  end
31
43
 
32
- def render_sheet(sheet, _opts, _params)
33
- "/#{sheet[:number]}" + (sheet[:year] ? ":#{sheet[:year]}" : "")
44
+ def render_sheet(sheet, _opts, params)
45
+ prefix = params[:part] ? "" : "-"
46
+ "#{prefix}/#{sheet[:number]}" + (sheet[:year] ? ":#{sheet[:year]}" : "")
34
47
  end
35
48
 
36
49
  def render_database(database, _opts, _params)
@@ -38,15 +51,15 @@ module Pubid::Iec::Renderer
38
51
  end
39
52
 
40
53
  def supplement_prefix(params)
41
- params[:vap] == "CSV" && "+" || "/"
54
+ params[:vap]&.include?("CSV") ? "+" : "/"
42
55
  end
43
56
 
44
- def render_amendments(amendments, _opts, _params)
57
+ def render_amendments(amendments, _opts, params)
45
58
  supplement_prefix(params) + amendments.sort.map(&:to_s).join("+")
46
59
  end
47
60
 
48
61
  def render_corrigendums(corrigendums, _opts, _params)
49
- supplement_prefix(params) + corrigendums.sort.map(&:to_s).join("+")
62
+ "/" + corrigendums.sort.map(&:to_s).join("+")
50
63
  end
51
64
 
52
65
  def render_version(version, _opts, params)
@@ -57,8 +70,8 @@ module Pubid::Iec::Renderer
57
70
  " ED#{edition}" unless params[:version]
58
71
  end
59
72
 
60
- def render_conjuction_part(conjuction_parts, _opts, _params)
61
- conjunction_symbol = case _params[:publisher]
73
+ def render_conjuction_part(conjuction_parts, _opts, params)
74
+ conjunction_symbol = case params[:publisher]
62
75
  when "IECEE"
63
76
  # IECEE TRFs use '&' as parts separator (IECEE OD-2020)
64
77
  "&"
@@ -64,7 +64,7 @@ module Pubid::Iec::Renderer
64
64
  end
65
65
 
66
66
  def render_vap(vap, _opts, _params)
67
- ":#{vap.downcase}"
67
+ ":#{vap.map(&:downcase).join('-')}"
68
68
  end
69
69
 
70
70
  def render_fragment(fragment, _opts, _params)
@@ -107,5 +107,9 @@ module Pubid::Iec::Renderer
107
107
  ":" + (language.is_a?(Array) ? language.join("-") : language)
108
108
  end
109
109
 
110
+ def render_copublisher(copublisher, _opts, _params)
111
+ "-" + Array(copublisher).map { |c| c.to_s.downcase }.join("-")
112
+ end
113
+
110
114
  end
111
115
  end
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Iec
3
- VERSION = "1.15.2".freeze
3
+ VERSION = "1.15.3".freeze
4
4
  end
5
5
  end
data/lib/pubid/iec.rb CHANGED
@@ -37,6 +37,7 @@ require_relative "iec/identifier/amendment"
37
37
  require_relative "iec/identifier/corrigendum"
38
38
  require_relative "iec/identifier/white_paper"
39
39
  require_relative "iec/identifier/technology_report"
40
+ require_relative "iec/identifier/technology_and_market_outlook_paper"
40
41
  require_relative "iec/identifier/societal_technology_trend_report"
41
42
  require_relative "iec/identifier/interpretation_sheet"
42
43
  require_relative "iec/working_document_parser"
@@ -62,6 +63,7 @@ config.types = [Pubid::Iec::Identifier::InternationalStandard,
62
63
  Pubid::Iec::Identifier::TestReportForm,
63
64
  Pubid::Iec::Identifier::WritePaper,
64
65
  Pubid::Iec::Identifier::TechnologyReport,
66
+ Pubid::Iec::Identifier::TechnologyAndMarketOutlookPaper,
65
67
  Pubid::Iec::Identifier::SocietalTechnologyTrendReport,
66
68
  Pubid::Iec::Identifier::InterpretationSheet]
67
69
 
data/update_codes.yaml CHANGED
@@ -60,4 +60,8 @@ IECEE TRF 60601-1-2CEMC:2011: IECEE TRF 60601-1-2C_EMC:2011
60
60
  "CISPR 14-2:2015/AMD1/FRAG3:": CISPR 14-2:2015/AMD1/FRAG3 ED2
61
61
  "IEC 60309-3:1994/FRAG1:": IEC 60309-3:1994/FRAG1 ED1
62
62
  "CISPR 14-1:2016/AMD1/FRAG5:": CISPR 14-1:2016/AMD1/FRAG5 ED5
63
- "IEC 60285-/1:1989": IEC 60285-1:1989
63
+ "IEC 61360-C00168:": IEC 61360-C00168
64
+ "IEC 61360-C00169:": IEC 61360-C00169
65
+ "IEC 61360-C00172:": IEC 61360-C00172
66
+ "IEC 61360-C00174:": IEC 61360-C00174
67
+ "IEC 61360-C00178:": IEC 61360-C00178
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubid-iec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.2
4
+ version: 1.15.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-11-27 00:00:00.000000000 Z
11
+ date: 2026-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.15.2
33
+ version: 1.15.3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 1.15.2
40
+ version: 1.15.3
41
41
  description: Library to generate, parse and manipulate IEC PubID.
42
42
  email:
43
43
  - open.source@ribose.com
@@ -69,6 +69,7 @@ files:
69
69
  - lib/pubid/iec/identifier/systems_reference_document.rb
70
70
  - lib/pubid/iec/identifier/technical_report.rb
71
71
  - lib/pubid/iec/identifier/technical_specification.rb
72
+ - lib/pubid/iec/identifier/technology_and_market_outlook_paper.rb
72
73
  - lib/pubid/iec/identifier/technology_report.rb
73
74
  - lib/pubid/iec/identifier/test_report_form.rb
74
75
  - lib/pubid/iec/identifier/white_paper.rb