Class: Metanorma::Release::ReleaseMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/metanorma/release/release_metadata.rb

Constant Summary collapse

SCHEMA_VERSION =
1

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ ReleaseMetadata

Returns a new instance of ReleaseMetadata.



49
50
51
52
# File 'lib/metanorma/release/release_metadata.rb', line 49

def initialize(data)
  @data = data
  freeze
end

Class Method Details

.from_document(metadata, channels:) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/metanorma/release/release_metadata.rb', line 10

def self.from_document(, channels:)
  data = {
    'version' => SCHEMA_VERSION,
    'id' => .id.to_s,
    'title' => .title,
    'edition' => .version.edition,
    'stage' => .version.stage.to_s,
    'doctype' => .doctype.to_s,
    'revdate' => .revdate,
    'formats' => .formats,
    'channels' => channels.map(&:to_s),
    'flavor' => .flavor,
    'sourcePath' => .source_path
  }
  new(data)
end

.from_json(json_string) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
# File 'lib/metanorma/release/release_metadata.rb', line 27

def self.from_json(json_string)
  data = JSON.parse(json_string)
  raise ArgumentError, 'Missing required field: id' unless data['id']
  raise ArgumentError, 'Missing required field: title' unless data['title']

  new(data)
end

.from_release_body(body) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/metanorma/release/release_metadata.rb', line 35

def self.from_release_body(body)
  return nil if body.nil? || body.empty?

  match = body.match(/<!--\s*mn-release-metadata\s*\n(.*?)\n-->/m)
  return nil unless match

  json_str = match[1]
  begin
    from_json(json_str)
  rescue JSON::ParserError
    nil
  end
end

Instance Method Details

#channelsObject



74
# File 'lib/metanorma/release/release_metadata.rb', line 74

def channels   = @data['channels'] || []

#doctypeObject



71
# File 'lib/metanorma/release/release_metadata.rb', line 71

def doctype    = @data['doctype']

#editionObject



69
# File 'lib/metanorma/release/release_metadata.rb', line 69

def edition    = @data['edition']

#flavorObject



75
# File 'lib/metanorma/release/release_metadata.rb', line 75

def flavor     = @data['flavor']

#formatsObject



73
# File 'lib/metanorma/release/release_metadata.rb', line 73

def formats    = @data['formats'] || []

#idObject



67
# File 'lib/metanorma/release/release_metadata.rb', line 67

def id         = @data['id']

#revdateObject



72
# File 'lib/metanorma/release/release_metadata.rb', line 72

def revdate    = @data['revdate']

#source_pathObject



76
# File 'lib/metanorma/release/release_metadata.rb', line 76

def source_path = @data['sourcePath']

#stageObject



70
# File 'lib/metanorma/release/release_metadata.rb', line 70

def stage      = @data['stage']

#titleObject



68
# File 'lib/metanorma/release/release_metadata.rb', line 68

def title      = @data['title']

#to_hObject



63
64
65
# File 'lib/metanorma/release/release_metadata.rb', line 63

def to_h
  @data.dup
end

#to_json(*_args) ⇒ Object



54
55
56
# File 'lib/metanorma/release/release_metadata.rb', line 54

def to_json(*_args)
  JSON.generate(@data)
end

#to_release_bodyObject



58
59
60
61
# File 'lib/metanorma/release/release_metadata.rb', line 58

def to_release_body
  json_str = JSON.generate(@data)
  "<!-- mn-release-metadata\n#{json_str}\n-->"
end