Class: LLMed::LiterateProgramming

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

Defined Under Namespace

Classes: Markdown

Class Method Summary collapse

Class Method Details

.execute(code, **application_args) {|contexts, application_args, environment| ... } ⇒ Object

Yields:

  • (contexts, application_args, environment)


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/llmed/literate_programming.rb', line 5

def self.execute(code, **application_args)
  md = LLMed::LiterateProgramming::Markdown.new()
  contexts = []
  environment = {}

  md.parse(code).each do |item|
    context = {}

    if item[:title] == "_default"
      item[:content].each do |item_content|
        case item_content[:type]
        when :environment
          name = item_content[:name].strip.to_sym
          value = item_content[:value].strip
          if [:language, :release, :output_file, :output_dir, :release_dir].include?(name) && !value.empty?
            application_args[name] = value
          else
            environment[name] = value
          end
        end
      end
      next
    end

    case item[:type]
    when :context
      context[:title] = item[:title]
      context[:content] = ''

      item[:content].each do |item_content|
        case item_content[:type]
        when :comment
          next
        when :string
          context[:content] += item_content[:content]
        when :link
          context[:content] += "#{URI.open(item_content[:reference]).read}\n"
        end
      end
    contexts << context
    end
  end

  yield contexts, application_args, environment
end