Every tag method in Markaby returns a Fragment. If any method gets called on the Fragment, the tag is removed from the Markaby stream and given back as a string. Usually the fragment is never used, though, and the stream stays intact.
For a more practical explanation, check out the README.
# File lib/markaby/builder.rb, line 281 def initialize(*args) @stream, @start, @length = args @transformed_stream = false end
# File lib/markaby/builder.rb, line 292 def method_missing(*args, &block) transform_stream unless transformed_stream? @str.__send__(*args, &block) end
# File lib/markaby/builder.rb, line 297 def transform_stream @transformed_stream = true # We can't do @stream.slice!(@start, @length), # as it would invalidate the @starts and @lengths of other Fragment instances. @str = @stream[@start, @length].to_s @stream[@start, @length] = [nil] * @length end
# File lib/markaby/builder.rb, line 306 def transformed_stream? @transformed_stream end