Class: Metanorma::Release::DocumentStage

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

Constant Summary collapse

PUBLISHED_NAMES =
%w[published in-force approved standard].freeze
STAGE_ABBREVS =
{
  'working-draft' => 'wd',
  'committee-draft' => 'cd',
  'draft-standard' => 'ds',
  'final-draft' => 'fd',
  'proposal' => 'proposal',
  'informational' => 'info',
  'withdrawn' => 'withdrawn',
  'cancelled' => 'cancelled'
}.freeze
ISO_STAGE_MAP =
{
  20 => 'working-draft',
  30 => 'committee-draft',
  40 => 'draft-standard',
  50 => 'final-draft',
  60 => 'published',
  95 => 'withdrawn'
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ DocumentStage

Returns a new instance of DocumentStage.



48
49
50
51
# File 'lib/metanorma/release/document_stage.rb', line 48

def initialize(name)
  @name = name
  freeze
end

Class Method Details

.from_iso_stage(stage, _substage = nil) ⇒ Object



35
36
37
38
# File 'lib/metanorma/release/document_stage.rb', line 35

def self.from_iso_stage(stage, _substage = nil)
  name = ISO_STAGE_MAP[stage.to_i] || ISO_STAGE_MAP.values.first
  new(name)
end

.from_status(status_string) ⇒ Object

Raises:

  • (ArgumentError)


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

def self.from_status(status_string)
  raise ArgumentError, 'Stage cannot be empty' if status_string.nil? || status_string.strip.empty?

  normalized = status_string.to_s.downcase.strip.gsub(/\s+/, '-')
  new(normalized)
end

.publishedObject



40
41
42
# File 'lib/metanorma/release/document_stage.rb', line 40

def self.published
  new('published')
end

.working_draftObject



44
45
46
# File 'lib/metanorma/release/document_stage.rb', line 44

def self.working_draft
  new('working-draft')
end

Instance Method Details

#cancelled?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/metanorma/release/document_stage.rb', line 69

def cancelled?
  @name == 'cancelled'
end

#draft?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/metanorma/release/document_stage.rb', line 61

def draft?
  !published? && @name != 'withdrawn' && @name != 'cancelled'
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/metanorma/release/document_stage.rb', line 77

def eql?(other)
  other.is_a?(self.class) && @name == other.to_s
end

#hashObject



81
82
83
# File 'lib/metanorma/release/document_stage.rb', line 81

def hash
  @name.hash
end

#published?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/metanorma/release/document_stage.rb', line 57

def published?
  PUBLISHED_NAMES.include?(@name)
end

#tag_suffixObject



73
74
75
# File 'lib/metanorma/release/document_stage.rb', line 73

def tag_suffix
  STAGE_ABBREVS[@name].to_s
end

#to_sObject



53
54
55
# File 'lib/metanorma/release/document_stage.rb', line 53

def to_s
  @name
end

#withdrawn?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/metanorma/release/document_stage.rb', line 65

def withdrawn?
  @name == 'withdrawn'
end