Class: RelatonBib::TypedTitleString
- Defined in:
- lib/relaton_bib/typed_title_string.rb
Constant Summary collapse
- ARGS =
%i[content language script format].freeze
Instance Attribute Summary collapse
- #title ⇒ RelatonBib::FormattedString readonly
- #type ⇒ String readonly
Class Method Summary collapse
- .from_string(title, lang = nil, script = nil) ⇒ TypedTitleStringCollection
- .intro_or_part(ttls) ⇒ Array<Strin, nil>
- .split_title(title) ⇒ Array<String, nil>
Instance Method Summary collapse
-
#initialize(**args) ⇒ TypedTitleString
constructor
A new instance of TypedTitleString.
- #to_asciibib(prefix = "", count = 1) ⇒ String
- #to_hash ⇒ Hash
- #to_xml(builder) ⇒ Object
Constructor Details
#initialize(**args) ⇒ TypedTitleString
Returns a new instance of TypedTitleString.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/relaton_bib/typed_title_string.rb', line 88 def initialize(**args) # rubocop:disable Metrics/MethodLength unless args[:title] || args[:content] raise ArgumentError, %{Keyword "title" or "content" should be passed.} end @type = args[:type] if args[:title] @title = args[:title] else fsargs = args.select { |k, _v| ARGS.include? k } @title = FormattedString.new(**fsargs) end end |
Instance Attribute Details
#title ⇒ RelatonBib::FormattedString (readonly)
81 82 83 |
# File 'lib/relaton_bib/typed_title_string.rb', line 81 def title @title end |
#type ⇒ String (readonly)
78 79 80 |
# File 'lib/relaton_bib/typed_title_string.rb', line 78 def type @type end |
Class Method Details
.from_string(title, lang = nil, script = nil) ⇒ TypedTitleStringCollection
105 106 107 108 109 110 111 112 113 114 |
# File 'lib/relaton_bib/typed_title_string.rb', line 105 def self.from_string(title, lang = nil, script = nil) types = %w[title-intro title-main title-part] ttls = split_title(title) tts = ttls.map.with_index do |p, i| new type: types[i], content: p, language: lang, script: script if p end.compact tts << new(type: "main", content: ttls.compact.join(" - "), language: lang, script: script) TypedTitleStringCollection.new tts end |
.intro_or_part(ttls) ⇒ Array<Strin, nil>
128 129 130 131 132 133 134 135 136 |
# File 'lib/relaton_bib/typed_title_string.rb', line 128 def self.intro_or_part(ttls) if /^(Part|Partie) \d+:/.match? ttls[1] [nil, ttls[0], ttls[1..-1].join(" -- ")] else parts = ttls.slice(2..-1) part = parts.join " -- " if parts.any? [ttls[0], ttls[1], part] end end |
.split_title(title) ⇒ Array<String, nil>
118 119 120 121 122 123 124 |
# File 'lib/relaton_bib/typed_title_string.rb', line 118 def self.split_title(title) ttls = title.sub(/\w\.Imp\s?\d+\u00A0:\u00A0/, "").split " - " case ttls.size when 0, 1 then [nil, ttls.first.to_s, nil] else intro_or_part ttls end end |
Instance Method Details
#to_asciibib(prefix = "", count = 1) ⇒ String
161 162 163 164 165 166 167 |
# File 'lib/relaton_bib/typed_title_string.rb', line 161 def to_asciibib(prefix = "", count = 1) # rubocop:disable Metrics/AbcSize pref = prefix.empty? ? prefix : prefix + "." out = count > 1 ? "#{pref}title::\n" : "" out += "#{pref}title.type:: #{type}\n" if type out += title.to_asciibib "#{pref}title", 1, !(type.nil? || type.empty?) out end |
#to_hash ⇒ Hash
145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/relaton_bib/typed_title_string.rb', line 145 def to_hash th = title.to_hash return th unless type hash = { "type" => type } if th.is_a? String hash["content"] = th else hash.merge! th end hash end |
#to_xml(builder) ⇒ Object
139 140 141 142 |
# File 'lib/relaton_bib/typed_title_string.rb', line 139 def to_xml(builder) builder.parent[:type] = type if type title.to_xml builder end |