Module: Neruda::OrgFileClassMethods

Included in:
OrgFile
Defined in:
lib/neruda/org_file/class_methods.rb

Overview

This module holds class methods for the OrgFile class.

Instance Method Summary collapse

Instance Method Details

#project_for_source(file_name) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/neruda/org_file/class_methods.rb', line 43

def project_for_source(file_name)
  # Look for match in each possible sources. The first found wins.
  Neruda::Config.sources.each do |project|
    project_relative_path = project['path'].sub(/^#{Dir.pwd}\//, '')
    return project if file_name.match?(/^#{project_relative_path}\//)
  end
  nil
end

#slug(title) ⇒ Object



52
53
54
55
56
# File 'lib/neruda/org_file/class_methods.rb', line 52

def slug(title)
  title.downcase.tr(' ', '-')
       .encode('ascii', fallback: ->(k) { translit(k) })
       .gsub(/[^\w-]/, '').delete_suffix('-')
end

#source_for_target(file_name) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/neruda/org_file/class_methods.rb', line 6

def source_for_target(file_name)
  # file_name may be frozen...
  src = file_name.sub(/\.html\z/, '.org')
  pubfolder = Neruda::Config.settings['public_folder']
  src.sub!(/^#{pubfolder}\//, '')
  # Look for match in each possible sources. The first found wins.
  Neruda::Config.sources.each do |project|
    if project['target'] == '.'
      origin = File.join(project['path'], src)
    else
      origin = File.join(
        project['path'], src.sub(/^#{project['target']}\//, '')
      )
    end
    return origin if File.exist?(origin)
  end
  nil
end

#target_for_source(file_name, project, with_public_folder: true) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/neruda/org_file/class_methods.rb', line 25

def target_for_source(file_name, project, with_public_folder: true)
  return nil if file_name.nil?
  # file_name may be frozen...
  target = file_name.sub(/\.org\z/, '.html').sub(/^#{Dir.pwd}\//, '')
  if project.nil?
    subfolder = File.basename(File.dirname(target))
    target = File.basename(target)
    target = "#{subfolder}/#{target}" if subfolder != '.'
  else
    project_relative_path = project['path'].sub(/^#{Dir.pwd}\//, '')
    target.sub!(/^#{project_relative_path}\//, '')
    target = "#{project['target']}/#{target}" if project['target'] != '.'
  end
  return target unless with_public_folder
  pubfolder = Neruda::Config.settings['public_folder']
  "#{pubfolder}/#{target}"
end