class Nexmo::Markdown::DocFinder
Constants
- EXCLUSIONS
Attributes
dictionary[RW]
paths[RW]
Public Class Methods
build_doc(root:, language:, key:)
click to toggle source
rubocop:enable Metrics/ParameterLists
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 58 def self.build_doc(root:, language:, key:) if root.start_with?('app/views') DocFinder::Doc.new(path: dictionary.fetch(key) && key, available_languages: ['en']) else available_languages = dictionary.fetch(key) available_language = available_languages.fetch(language, ::I18n.default_locale.to_s) DocFinder::Doc.new(path: build_doc_path(root, key, available_language), available_languages: available_languages.keys) end end
build_doc_path(root, doc, language)
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 79 def self.build_doc_path(root, doc, language) doc.gsub(root, "#{root}/#{language}") end
build_key(root:, document:, product: nil, format: nil)
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 69 def self.build_key(root:, document:, product: nil, format: nil) path = if Pathname.new(document).extname.blank? [root, product, document].compact.join("/").concat(".#{format}") else [root, product, document].compact.join("/") end path.gsub(%r{\/\/\/|\/\/}, '/') end
code_languages_for_tutorial(path:)
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 125 def self.code_languages_for_tutorial(path:) key = strip_root_and_language(root: '/', document: path, language: ::I18n.default_locale) dictionary.keys.select { |k| k.include?(key) } end
configure() { |self| ... }
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 83 def self.configure self.paths = [] self.dictionary = Hash.new { |hash, key| hash[key] = {} } yield(self) load_english load_languages end
find(root:, document:, language: nil, product: nil, code_language: nil, format: 'md', strip_root_and_language: false)
click to toggle source
rubocop:disable Metrics/ParameterLists
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 14 def self.find(root:, document:, language: nil, product: nil, code_language: nil, format: 'md', strip_root_and_language: false) if strip_root_and_language document = strip_root_and_language(root: root, language: "(#{language}|#{::I18n.default_locale})", document: document) end begin if code_language.present? linkable_code_language( root: root, language: language.to_s, product: product, document: document, code_language: code_language, format: format ) else non_linkable( root: root, language: language.to_s, product: product, document: document, format: format ) end rescue KeyError => e raise MissingDoc, e.message end end
linkable_code_language(root:, language:, document:, product: nil, code_language: nil, format: nil)
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 42 def self.linkable_code_language(root:, language:, document:, product: nil, code_language: nil, format: nil) key = [ build_key(root: root, product: product, document: "#{document}/#{code_language}", format: format), build_key(root: root, product: product, document: document, format: format), ].select { |k| dictionary.key?(k) }.first build_doc(root: root, language: language, key: key) end
load_english()
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 93 def self.load_english paths.each do |path| if defined?(Rails::Application) && path.start_with?("#{Rails.root}/app/views") Dir["#{path}/**/*.*"].each do |file| dictionary[file.gsub("#{Rails.root}/", '')][::I18n.default_locale.to_s] = ::I18n.default_locale.to_s end else path_with_locale = "#{path}/#{::I18n.default_locale}" Dir["#{path_with_locale}/**/{*.*,.config.yml}"].each do |file| key = "#{path}/#{file.gsub("#{path_with_locale}/", '')}" dictionary[key][::I18n.default_locale.to_s] = ::I18n.default_locale.to_s end end end end
load_languages()
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 109 def self.load_languages paths.each do |path| Dir.foreach(path).reject { |d| EXCLUSIONS.include? d }.each do |language| Dir.glob("#{path}/#{language}/**/{*.*,.config.yml}").each do |file| doc_name = strip_root_and_language(root: path, language: language, document: file) key = "#{path}/#{doc_name}" dictionary[key][language] = language end end end end
non_linkable(root:, language:, document:, product: nil, format: nil)
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 51 def self.non_linkable(root:, language:, document:, product: nil, format: nil) key = build_key(root: root, product: product, document: document, format: format) build_doc(root: root, language: language, key: key) end
strip_root_and_language(root:, language:, document:)
click to toggle source
# File lib/nexmo_markdown_renderer/services/doc_finder.rb, line 121 def self.strip_root_and_language(root:, language:, document:) document.sub(%r{#{root}\/}, '').sub(%r{#{language}\/}, '') end