class Jeny::File::WithBlocks
Public Instance Methods
has_jeny_blocks?()
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 5 def has_jeny_blocks? !jeny_blocks.empty? end
instantiate(data)
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 13 def instantiate(data) return path.read unless has_jeny_blocks? _instantiate(data, path.readlines, 0, jeny_blocks, []).join("") end
jeny_blocks()
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 9 def jeny_blocks @jeny_blocks ||= _parse_jeny_blocks(path.readlines, 0, []) end
Private Instance Methods
_instantiate(data, lines, index, blocks, acc)
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 44 def _instantiate(data, lines, index, blocks, acc) block = blocks.first if block.nil? lines[index..-1].each{|l| acc << l } acc elsif block.line_index == index if i = block.instantiate(data) acc << i << "\n" end acc << lines[index] _instantiate(data, lines, index+1, blocks[1..-1], acc) else lines[index...block.line_index].each{|l| acc << l } _instantiate(data, lines, block.line_index, blocks, acc) end end
_parse_jeny_block(lines, index, str = "")
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 32 def _parse_jeny_block(lines, index, str = "") if lines[index] =~ jeny_block_regex _parse_jeny_block(lines, index+1, str + lines[index]) else source = str.split("\n").map{|s| s.gsub(jeny_block_gsub, "") } source = source.size == 1 ? source.first : source.join("\n")+"\n" [source, index] end end
_parse_jeny_blocks(lines, index, blocks)
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 20 def _parse_jeny_blocks(lines, index, blocks) if index >= lines.size blocks elsif lines[index] =~ jeny_block_regex source, new_index = _parse_jeny_block(lines, index) blocks << CodeBlock.new(source, path, index+1, $1) _parse_jeny_blocks(lines, new_index+1, blocks) else _parse_jeny_blocks(lines, index+1, blocks) end end
jeny_block_gsub()
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 65 def jeny_block_gsub @jeny_block_gsub ||= %r{#{config.jeny_block_delimiter}(\([a-z]+\))[ ]?} end
jeny_block_regex()
click to toggle source
# File lib/jeny/file/with_blocks.rb, line 61 def jeny_block_regex @jeny_block_regex ||= %r{^\s*#{config.jeny_block_delimiter}\(([a-z]+)\)}m end