class Qiita::Markdown::Filters::CodeBlock::Metadata

Detects language from code block metadata.

Public Class Methods

new(text) click to toggle source

@param text [String, nil]

# File lib/qiita/markdown/filters/code_block.rb, line 45
def initialize(text)
  @text = text
end

Public Instance Methods

filename() click to toggle source

@return [String, nil]

# File lib/qiita/markdown/filters/code_block.rb, line 50
def filename
  case
  when empty?
    nil
  when has_only_filename?
    sections[0]
  else
    sections[1]
  end
end
language() click to toggle source

@example

Metadata.new(nil).language #=> nil
Metadata.new("ruby").language #=> "ruby"
Metadata.new("ruby:foo.rb").language #=> "ruby"
Metadata.new("foo.rb").language #=> "ruby"

@return [String, nil]

# File lib/qiita/markdown/filters/code_block.rb, line 67
def language
  case
  when empty?
    nil
  when !has_only_filename?
    sections[0]
  when linguist_language
    linguist_language.default_alias_name
  end
end

Private Instance Methods

empty?() click to toggle source
# File lib/qiita/markdown/filters/code_block.rb, line 80
def empty?
  @text.nil?
end
has_only_filename?() click to toggle source
# File lib/qiita/markdown/filters/code_block.rb, line 84
def has_only_filename?
  sections[1].nil? && sections[0] && sections[0].include?(".")
end
linguist_language() click to toggle source
# File lib/qiita/markdown/filters/code_block.rb, line 88
def linguist_language
  @linguist_language ||= Linguist::Language.find_by_extension(filename).first
end
sections() click to toggle source
# File lib/qiita/markdown/filters/code_block.rb, line 92
def sections
  splited = (@text || "").split(":")
  @sections ||= splited.length <= 2 ? splited : @text.split(":", 2)
end