Class: Mumukit::Directives::Sections
- Defined in:
- lib/mumukit/directives/sections.rb
Overview
‘Sections` directive allows code to be splitted into zero or more parts, using markup-like delimiter.
The transformed result is a hash that replaces the key’s content with the included sections. For example, if the ‘extra` key has two sections `foo` and `bar`…
“‘ # Input { extra: ’foo /*<baz#/lalala/#baz>*/ ignored /*<bar#/lelele/#bar>*/‘ } “`
… the resultant hash will contain the ‘foo` and `bar` keys, and no `extra` key:
“‘ # Output { baz: ’lalala’, bar: ‘lelele’ } “‘
Alternatively, if the ‘nest_sections` option is enabled…
“‘ Mumukit::Directives::Sections.new nest_sections: true “`
…instead of replacing the original parent section, the new child sections are nested into it:
“‘ # Output { extra: { baz: ’lalala’, bar: ‘lelele’ } } “‘
Instance Attribute Summary
Attributes inherited from Directive
Instance Method Summary collapse
- #build(section, content) ⇒ Object
-
#initialize(options = {}) ⇒ Sections
constructor
A new instance of Sections.
- #interpolate(section) ⇒ Object
- #join(sections) ⇒ Object
- #regexp ⇒ Object
- #split_sections(code) ⇒ Object
- #transform(sections) ⇒ Object
Methods inherited from Directive
Constructor Details
#initialize(options = {}) ⇒ Sections
Returns a new instance of Sections.
35 36 37 |
# File 'lib/mumukit/directives/sections.rb', line 35 def initialize(={}) @nest_sections = !![:nest_sections] end |
Instance Method Details
#build(section, content) ⇒ Object
66 67 68 |
# File 'lib/mumukit/directives/sections.rb', line 66 def build(section, content) "#{comment_type.comment "<#{section}#"}#{content}#{comment_type.comment "##{section}>"}" end |
#interpolate(section) ⇒ Object
70 71 72 |
# File 'lib/mumukit/directives/sections.rb', line 70 def interpolate(section) comment_type.comment("...#{section}...") end |
#join(sections) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/mumukit/directives/sections.rb', line 58 def join(sections) file_declarations, _file_references = sections.map do |section, content| [build(section, content), interpolate(section)] end.transpose file_declarations.join "\n" end |
#regexp ⇒ Object
39 40 41 |
# File 'lib/mumukit/directives/sections.rb', line 39 def regexp /<(.+?)##{comment_type.close_comment}(.*?)#{comment_type.open_comment}#(.+?)>/m end |
#split_sections(code) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/mumukit/directives/sections.rb', line 43 def split_sections(code) sections = code.captures(comment_regexp).map do [$1, $2] end Hash[sections] end |
#transform(sections) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/mumukit/directives/sections.rb', line 50 def transform(sections) result = {} sections.each do |key, code| merge_sections! result, key, code, split_sections(code) end result end |