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.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/relaton_bib/typed_title_string.rb', line 100 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)
93 94 95 |
# File 'lib/relaton_bib/typed_title_string.rb', line 93 def title @title end |
#type ⇒ String (readonly)
90 91 92 |
# File 'lib/relaton_bib/typed_title_string.rb', line 90 def type @type end |
Class Method Details
.from_string(title, lang = nil, script = nil) ⇒ TypedTitleStringCollection
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/relaton_bib/typed_title_string.rb', line 117 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>
140 141 142 143 144 145 146 147 148 |
# File 'lib/relaton_bib/typed_title_string.rb', line 140 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>
130 131 132 133 134 135 136 |
# File 'lib/relaton_bib/typed_title_string.rb', line 130 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
173 174 175 176 177 178 179 |
# File 'lib/relaton_bib/typed_title_string.rb', line 173 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
157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/relaton_bib/typed_title_string.rb', line 157 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
151 152 153 154 |
# File 'lib/relaton_bib/typed_title_string.rb', line 151 def to_xml(builder) builder.parent[:type] = type if type title.to_xml builder end |