class Prawn::ManualBuilder::ExampleFile
The Prawn::ManualBuilder
ExampleFile
class is a utility class to ease the manipulation and extraction of source code and comments from the actual example files
Attributes
Public Class Methods
Stores the file data, filename and parent, which will be either an ExampleSection
or an ExamplePackage
.
Available boolean options are:
:eval_source
-
Evals the example source code (default: true)
:full_source
-
Extract the full source code when true. Extract
only the code between the generate block when false (default: false)
# File lib/prawn/manual_builder/example_file.rb, line 21 def initialize(parent, filename, options={}) @parent = parent.is_a?(String) ? ExamplePackage.new(parent) : parent @filename = filename @data = read_file(@parent.folder_name, filename) @options = {:eval_source => true, :full_source => false}.merge(options) end
Public Instance Methods
Return true if the example source should be evaluated inline within the manual according to the options
# File lib/prawn/manual_builder/example_file.rb, line 66 def eval? @options[:eval_source] end
Return the example source code excluding the initial comments and require calls
# File lib/prawn/manual_builder/example_file.rb, line 33 def full_source @data.gsub(/# encoding.*?\n.*require.*?\n\n/m, "\n").strip end
Return the example source contained inside the first generate block or the full source if no generate block is found
# File lib/prawn/manual_builder/example_file.rb, line 40 def generate_block_source block = @data.slice(/\w+\.generate.*? do\n(.*)end/m, 1) return full_source unless block block.gsub(/^( ){2}/, "") end
# File lib/prawn/manual_builder/example_file.rb, line 48 def generated_block_line pre_block = @data.slice(/.*\w+\.generate.*? do\n/m) return 1 unless pre_block pre_block.lines.length + 1 end
Retrieve the comments between the encoding declaration and the require call for example_helper.rb
Then removes the ‘#’ signs, reflows the line breaks and return the result
# File lib/prawn/manual_builder/example_file.rb, line 75 def introduction_text intro = @data.lines.grep(/^#/) intro.shift if intro.first =~ /^#!/ intro.shift if intro.first =~ /coding:/ intro.shift if intro.first =~ /frozen_string_literal:/ intro = intro.join intro.gsub!(/\n# (?=\S)/m, ' ') intro.gsub!(/^#/, '') intro.gsub!("\n", "\n\n") intro.rstrip! intro end
Returns a human friendly version of the example file name
# File lib/prawn/manual_builder/example_file.rb, line 93 def name @name ||= @filename[/(.*)\.rb/, 1].gsub("_", " ").capitalize end
Returns this example’s parent original folder name
# File lib/prawn/manual_builder/example_file.rb, line 99 def parent_folder_name @parent.folder_name end
Returns the human friendly version of this example parent name
# File lib/prawn/manual_builder/example_file.rb, line 105 def parent_name @parent.name end
Renders this example to a pdf
# File lib/prawn/manual_builder/example_file.rb, line 111 def render(pdf) pdf.render_example(self) end
Return either the full_source
or the generate_block_source
according to the options
# File lib/prawn/manual_builder/example_file.rb, line 59 def source @options[:full_source] ? full_source : generate_block_source end
Private Instance Methods
Read the data from a file in a given package
# File lib/prawn/manual_builder/example_file.rb, line 119 def read_file(folder_name, filename) data = File.read(File.expand_path(File.join( Prawn::ManualBuilder.manual_dir, folder_name, filename))) data.encode(::Encoding::UTF_8) end