Module: Torture::Snippet
- Defined in:
- lib/torture/snippet.rb
Class Method Summary collapse
- .extract(input, marker:, collapse: nil, unindent: false, sub: nil) ⇒ Object
- .extract_from(file:, **kws) ⇒ Object
- .sub(code, sub) ⇒ Object
-
.unindent(code, indent) ⇒ Object
Strip indent characters of whitespace from each line beginning.
Class Method Details
.extract(input, marker:, collapse: nil, unindent: false, sub: nil) ⇒ Object
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 |
# File 'lib/torture/snippet.rb', line 9 def self.extract(input, marker:, collapse:nil, unindent:false, sub: nil) code = nil # also acts as a flag if we're within our section. ignore = false indent = 0 input.each_line do |ln| # end of our section? break if ln =~ /\#:#{marker} end/ # beginning of our section? if ln =~ /\#:#{marker}$/ code = "" indent = ln.match(/(^\s+)/) { |m| m[0].size } || 0 end next if code.nil? # not in our section. if ln =~ /#~#{collapse}$/ ignore = true code << ln.sub("#~#{collapse}", "# ...") end if ln =~ /#~#{collapse} end/ ignore = false next end next if ignore next if ln =~ /#~/ next if ln =~ /#:/ code << ln and next end raise "Couldn't find #{marker}" unless code code = unindent(code, indent) if unindent == true code = sub(code, sub) if sub code end |
.extract_from(file:, **kws) ⇒ Object
3 4 5 6 |
# File 'lib/torture/snippet.rb', line 3 def self.extract_from(file:, **kws) input = File.open(file) self.extract(input, **kws) end |
.sub(code, sub) ⇒ Object
55 56 57 |
# File 'lib/torture/snippet.rb', line 55 def self.sub(code, sub) code.sub(sub, "") end |
.unindent(code, indent) ⇒ Object
Strip indent characters of whitespace from each line beginning.
51 52 53 |
# File 'lib/torture/snippet.rb', line 51 def self.unindent(code, indent) code.gsub(/^ {#{indent}}/, "") end |