class ReVIEW::Book::ImageFinder

Public Class Methods

new(chapter) click to toggle source
# File lib/review/book/image_finder.rb, line 16
def initialize(chapter)
  @book = chapter.book
  @basedir = @book.imagedir
  @chapid = chapter.id
  @builder = @book.config['builder']
  @entries = dir_entries.map { |path| entry_object(path) }
end

Public Instance Methods

add_entry(path) click to toggle source
# File lib/review/book/image_finder.rb, line 32
def add_entry(path)
  path.sub!(%r{^\./}, '')
  unless @entries.find { |entry| entry[:path] == path }
    @entries << entry_object(path)
  end
  @entries
end
dir_entries() click to toggle source
# File lib/review/book/image_finder.rb, line 28
def dir_entries
  Dir.glob(File.join(@basedir, '**{,/*/**}/*.*')).uniq.sort.map { |entry| entry.sub(%r{^\./}, '') }
end
entry_object(path) click to toggle source
# File lib/review/book/image_finder.rb, line 24
def entry_object(path)
  { path: path, basename: path.sub(/\.[^.]+$/, ''), downcase: path.sub(/\.[^.]+$/, $&.downcase) }
end
find_path(id) click to toggle source
# File lib/review/book/image_finder.rb, line 40
def find_path(id)
  targets = target_list(id)
  targets.each do |target|
    @book.image_types.each do |ext|
      entries = @entries.select do |entry|
        entry[:basename] == target
      end

      unless entries
        break
      end

      entries.find do |entry|
        if entry[:downcase] == "#{target}#{ext}"
          return entry[:path]
        end
      end
    end
  end

  nil
end
target_list(id) click to toggle source
# File lib/review/book/image_finder.rb, line 63
def target_list(id)
  [
    # 1. <basedir>/<builder>/<chapid>/<id>.<ext>
    "#{@basedir}/#{@builder}/#{@chapid}/#{id}",

    # 2. <basedir>/<builder>/<chapid>-<id>.<ext>
    "#{@basedir}/#{@builder}/#{@chapid}-#{id}",

    # 3. <basedir>/<builder>/<id>.<ext>
    "#{@basedir}/#{@builder}/#{id}",

    # 4. <basedir>/<chapid>/<id>.<ext>
    "#{@basedir}/#{@chapid}/#{id}",

    # 5. <basedir>/<chapid>-<id>.<ext>
    "#{@basedir}/#{@chapid}-#{id}",

    # 6. <basedir>/<id>.<ext>
    "#{@basedir}/#{id}"
  ]
end