Class: Bookbinder::CodeExampleReader

Inherits:
Object
  • Object
show all
Defined in:
lib/bookbinder/code_example_reader.rb

Defined Under Namespace

Classes: InvalidSnippet

Instance Method Summary collapse

Constructor Details

#initialize(logger) ⇒ CodeExampleReader

Returns a new instance of CodeExampleReader.



11
12
13
# File 'lib/bookbinder/code_example_reader.rb', line 11

def initialize(logger)
  @logger = logger
end

Instance Method Details

#get_snippet_and_language_at(marker, path_to_repository, copied, repo_name) ⇒ Object

Raises:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/bookbinder/code_example_reader.rb', line 15

def get_snippet_and_language_at(marker, path_to_repository, copied, repo_name)
  unless copied
    logger.log '  skipping (not found) '.magenta + repo_name
    return ''
  end

  snippet = ''
  FileUtils.cd(path_to_repository) { locale = 'LC_CTYPE=C LANG=C' # Quiets 'sed: RE error: illegal byte sequence'
  result = `#{locale} find . -exec sed -ne '/code_snippet #{marker} start/,/code_snippet #{marker} end/ p' {} \\; 2> /dev/null`
  result = "" unless result.lines.last && result.lines.last.match(/code_snippet #{marker} end/)
  scrape_for_value = result
  snippet = scrape_for_value }

  raise InvalidSnippet.new(repo_name, marker) if snippet.empty?
  lines = snippet.split("\n")
  language_match = lines[0].match(/code_snippet #{Regexp.escape(marker)} start (\w+)/)
  language = language_match[1] if language_match
  [lines[1..-2].join("\n"), language]
end