module Filelang::Language

Private Class Methods

check_format_of_extensions!(extensions) click to toggle source
# File lib/filelang/language.rb, line 48
def check_format_of_extensions!(extensions)
  extensions.each do |ext|
    raise ArgumentError, "Extension '#{ext}' is missing '.'" if ext !~ /^\./
  end
end
check_format_of_language!(language) click to toggle source
# File lib/filelang/language.rb, line 54
def check_format_of_language!(language)
  raise ArgumentError, "Language '#{language}' has whitespace" if language.match(/\s/)
end
get_extensions(path) click to toggle source
# File lib/filelang/language.rb, line 22
def get_extensions(path)
  *_, filename = path.split("/")

  _, *extensions = filename.downcase.split(".")

  extensions.map!.with_index do |segment, index|
    "." + extensions[index..-1].join(".")
  end

  extensions.sort_by(&:length)
end
load_languages() click to toggle source
# File lib/filelang/language.rb, line 35
def load_languages
  languages = YAML.load_file(File.expand_path("../language.yml", __FILE__))

  languages.each do |lang, extensions|
    check_format_of_language! lang
    check_format_of_extensions! extensions

    extensions.each do |ext|
      @@extension_mapping[ext.to_sym] << lang.to_sym
    end
  end
end

Public Instance Methods

file_language(path) click to toggle source
# File lib/filelang/language.rb, line 8
def file_language(path)
  extensions = Filelang::Language.send :get_extensions, path

  languages = []

  extensions.each do |ext|
    languages |= @@extension_mapping[ext.to_sym].to_a unless @@extension_mapping[ext.to_sym].nil?
  end

  languages
end