Class: RelatonBib::TypedTitleString
- Defined in:
- lib/relaton_bib/typed_title_string.rb
Instance Attribute Summary collapse
- #title ⇒ RelatonBib::FormattedString readonly
- #type ⇒ String readonly
Class Method Summary collapse
- .from_string(title, lang = nil, script = nil) ⇒ Array<self>
- .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_hash ⇒ Hash
- #to_xml(builder) ⇒ Object
Constructor Details
#initialize(**args) ⇒ TypedTitleString
Returns a new instance of TypedTitleString.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/relaton_bib/typed_title_string.rb', line 16 def initialize(**args) 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 do |k, _v| %i[content language script format].include? k end @title = FormattedString.new(fsargs) end end |
Instance Attribute Details
#title ⇒ RelatonBib::FormattedString (readonly)
7 8 9 |
# File 'lib/relaton_bib/typed_title_string.rb', line 7 def title @title end |
#type ⇒ String (readonly)
4 5 6 |
# File 'lib/relaton_bib/typed_title_string.rb', line 4 def type @type end |
Class Method Details
.from_string(title, lang = nil, script = nil) ⇒ Array<self>
36 37 38 39 40 41 42 43 44 |
# File 'lib/relaton_bib/typed_title_string.rb', line 36 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) end |
.intro_or_part(ttls) ⇒ Array<Strin, nil>
60 61 62 63 64 65 66 67 68 |
# File 'lib/relaton_bib/typed_title_string.rb', line 60 def self.intro_or_part(ttls) if /^(Part|Partie) \d+:/ =~ 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>
48 49 50 51 52 53 54 55 56 |
# File 'lib/relaton_bib/typed_title_string.rb', line 48 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 # when 2, 3 then intro_or_part ttls # else [ttls[0], ttls[1], ttls[2..-1].join(" -- ")] end end |
Instance Method Details
#to_hash ⇒ Hash
77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/relaton_bib/typed_title_string.rb', line 77 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
71 72 73 74 |
# File 'lib/relaton_bib/typed_title_string.rb', line 71 def to_xml(builder) builder.parent[:type] = type if type title.to_xml builder end |