Class: CodeBlockParser

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

Constant Summary collapse

CODE_BLOCK_START_PATTERN =

Code block header pattern: “‘language options Supports both “`language and “`language options formats

/^```(\w+)(?:\s*\{(.*)\})?$/i
RUBY_RESULT_BLOCK_PATTERN =
/^```ruby\s+RESULT$/i
BLOCK_END_PATTERN =
"```"

Instance Method Summary collapse

Constructor Details

#initialize(frontmatter_parser, language_resolver) ⇒ CodeBlockParser

Returns a new instance of CodeBlockParser.



10
11
12
13
# File 'lib/code_block_parser.rb', line 10

def initialize(frontmatter_parser, language_resolver)
  @frontmatter_parser = frontmatter_parser
  @language_resolver = language_resolver
end

Instance Method Details

#is_block_end?(line) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/code_block_parser.rb', line 35

def is_block_end?(line)
  line.strip == BLOCK_END_PATTERN
end

#is_ruby_result_block?(line) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/code_block_parser.rb', line 31

def is_ruby_result_block?(line)
  line.match?(RUBY_RESULT_BLOCK_PATTERN)
end

#parse_code_block_header(line) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/code_block_parser.rb', line 15

def parse_code_block_header(line)
  match_data = line.match(CODE_BLOCK_START_PATTERN)
  return nil unless match_data

  lang = match_data[1].downcase
  options_string = match_data[2]
  resolved_lang = resolve_language(lang)

  {
    original_lang: lang,
    resolved_lang: resolved_lang,
    options_string: options_string,
    is_supported: SUPPORTED_LANGUAGES.key?(resolved_lang)
  }
end

#parse_explain_option(options_string, language = nil) ⇒ Object



49
50
51
52
# File 'lib/code_block_parser.rb', line 49

def parse_explain_option(options_string, language = nil)
  default_value = @frontmatter_parser.get_default_value("explain", language, false)
  parse_boolean_option(options_string, "explain", default_value)
end

#parse_flamegraph_option(options_string, language = nil) ⇒ Object



54
55
56
57
# File 'lib/code_block_parser.rb', line 54

def parse_flamegraph_option(options_string, language = nil)
  default_value = @frontmatter_parser.get_default_value("flamegraph", language, false)
  parse_boolean_option(options_string, "flamegraph", default_value)
end

#parse_rerun_option(options_string, language = nil) ⇒ Object



44
45
46
47
# File 'lib/code_block_parser.rb', line 44

def parse_rerun_option(options_string, language = nil)
  default_value = @frontmatter_parser.get_default_value("rerun", language, false)
  parse_boolean_option(options_string, "rerun", default_value)
end

#parse_result_option(options_string, language = nil) ⇒ Object



59
60
61
62
# File 'lib/code_block_parser.rb', line 59

def parse_result_option(options_string, language = nil)
  default_value = @frontmatter_parser.get_default_value("result", language, true)
  parse_boolean_option(options_string, "result", default_value)
end

#parse_run_option(options_string, language = nil) ⇒ Object



39
40
41
42
# File 'lib/code_block_parser.rb', line 39

def parse_run_option(options_string, language = nil)
  default_value = @frontmatter_parser.get_default_value("run", language, true)
  parse_boolean_option(options_string, "run", default_value)
end