Class: Pubid::Core::Identifier
- Inherits:
-
Object
- Object
- Pubid::Core::Identifier
- Defined in:
- lib/pubid/core/identifier.rb
Instance Attribute Summary collapse
-
#amendments ⇒ Object
Returns the value of attribute amendments.
-
#copublisher ⇒ Object
Returns the value of attribute copublisher.
-
#corrigendums ⇒ Object
Returns the value of attribute corrigendums.
-
#edition ⇒ Object
Returns the value of attribute edition.
-
#language ⇒ Object
Returns the value of attribute language.
-
#number ⇒ Object
Returns the value of attribute number.
-
#part ⇒ Object
Returns the value of attribute part.
-
#publisher ⇒ Object
Returns the value of attribute publisher.
-
#type ⇒ Object
Returns the value of attribute type.
-
#year ⇒ Object
Returns the value of attribute year.
Class Method Summary collapse
- .get_amendment_class ⇒ Object
- .get_corrigendum_class ⇒ Object
- .get_renderer_class ⇒ Object
- .get_transformer_class ⇒ Object
-
.get_update_codes ⇒ Hash?
Replacement patterns.
-
.parse(code_or_params) ⇒ Pubid::Core::Identifier
Parses given identifier.
- .update_old_code(code) ⇒ Object
Instance Method Summary collapse
- #get_params ⇒ Object
-
#initialize(publisher:, number:, copublisher: nil, part: nil, type: nil, year: nil, edition: nil, language: nil, amendments: nil, corrigendums: nil) ⇒ Identifier
constructor
Creates new identifier from options provided:.
-
#to_s ⇒ Object
Render identifier using default renderer.
-
#urn ⇒ String
Rendered URN identifier.
Constructor Details
#initialize(publisher:, number:, copublisher: nil, part: nil, type: nil, year: nil, edition: nil, language: nil, amendments: nil, corrigendums: nil) ⇒ Identifier
Creates new identifier from options provided:
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/pubid/core/identifier.rb', line 21 def initialize(publisher:, number:, copublisher: nil, part: nil, type: nil, year: nil, edition: nil, language: nil, amendments: nil, corrigendums: nil) if amendments @amendments = if amendments.is_a?(Array) amendments.map do |amendment| self.class.get_amendment_class.new(**amendment) end else [self.class.get_amendment_class.new(**amendments)] end end if corrigendums @corrigendums = if corrigendums.is_a?(Array) corrigendums.map do |corrigendum| self.class.get_corrigendum_class.new(**corrigendum) end else [self.class.get_corrigendum_class.new(**corrigendums)] end end @publisher = publisher.to_s @number = number @copublisher = copublisher if copublisher @part = part.to_s if part @type = type.to_s if type @year = year.to_i if year @edition = edition.to_i if edition @language = language.to_s if language end |
Instance Attribute Details
#amendments ⇒ Object
Returns the value of attribute amendments.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def amendments @amendments end |
#copublisher ⇒ Object
Returns the value of attribute copublisher.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def copublisher @copublisher end |
#corrigendums ⇒ Object
Returns the value of attribute corrigendums.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def corrigendums @corrigendums end |
#edition ⇒ Object
Returns the value of attribute edition.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def edition @edition end |
#language ⇒ Object
Returns the value of attribute language.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def language @language end |
#number ⇒ Object
Returns the value of attribute number.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def number @number end |
#part ⇒ Object
Returns the value of attribute part.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def part @part end |
#publisher ⇒ Object
Returns the value of attribute publisher.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def publisher @publisher end |
#type ⇒ Object
Returns the value of attribute type.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def type @type end |
#year ⇒ Object
Returns the value of attribute year.
3 4 5 |
# File 'lib/pubid/core/identifier.rb', line 3 def year @year end |
Class Method Details
.get_amendment_class ⇒ Object
100 101 102 |
# File 'lib/pubid/core/identifier.rb', line 100 def get_amendment_class Amendment end |
.get_corrigendum_class ⇒ Object
104 105 106 |
# File 'lib/pubid/core/identifier.rb', line 104 def get_corrigendum_class Corrigendum end |
.get_renderer_class ⇒ Object
108 109 110 |
# File 'lib/pubid/core/identifier.rb', line 108 def get_renderer_class Renderer::Base end |
.get_transformer_class ⇒ Object
112 113 114 |
# File 'lib/pubid/core/identifier.rb', line 112 def get_transformer_class Transformer end |
.get_update_codes ⇒ Hash?
Returns replacement patterns.
117 118 119 |
# File 'lib/pubid/core/identifier.rb', line 117 def get_update_codes nil end |
.parse(code_or_params) ⇒ Pubid::Core::Identifier
Parses given identifier
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/pubid/core/identifier.rb', line 72 def parse(code_or_params) params = code_or_params.is_a?(String) ? get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params # Parslet returns an array when match any copublisher # otherwise it's hash if params.is_a?(Array) new( **( params.inject({}) do |r, i| result = r i.map {|k, v| get_transformer_class.new.apply(k => v).to_a.first }.each do |k, v| result = result.merge(k => r.key?(k) ? [v, r[k]] : v) end result end ) ) else new(**params.map do |k, v| get_transformer_class.new.apply(k => v).to_a.first end.to_h) end # merge values repeating keys into array (for copublishers) rescue Parslet::ParseFailed => failure raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}" end |
.update_old_code(code) ⇒ Object
121 122 123 124 125 126 127 128 |
# File 'lib/pubid/core/identifier.rb', line 121 def update_old_code(code) return code unless get_update_codes get_update_codes.each do |from, to| code = code.gsub(from.match?(/^\/.*\/$/) ? Regexp.new(from[1..-2]) : /^#{Regexp.escape(from)}$/, to) end code end |
Instance Method Details
#get_params ⇒ Object
58 59 60 |
# File 'lib/pubid/core/identifier.rb', line 58 def get_params instance_variables.map { |var| [var.to_s.gsub("@", "").to_sym, instance_variable_get(var)] }.to_h end |
#to_s ⇒ Object
Render identifier using default renderer
63 64 65 |
# File 'lib/pubid/core/identifier.rb', line 63 def to_s self.class.get_renderer_class.new(get_params).render end |
#urn ⇒ String
Returns Rendered URN identifier.
54 55 56 |
# File 'lib/pubid/core/identifier.rb', line 54 def urn Renderer::Urn.new(get_params).render end |