Class: Processing::BaseExporter
- Inherits:
-
Object
- Object
- Processing::BaseExporter
- Includes:
- FileUtils
- Defined in:
- lib/ruby-processing/exporters/base_exporter.rb
Overview
This base exporter implements some of the common code-munging needed to generate apps/ blank sketches.
Direct Known Subclasses
Constant Summary collapse
- DEFAULT_DIMENSIONS =
{ 'width' => '100', 'height' => '100' }
- DEFAULT_DESCRIPTION =
''
- NECESSARY_FOLDERS =
%w(data lib vendor)
Instance Method Summary collapse
-
#extract_class_name(source) ⇒ Object
Searches the source for a class name.
-
#extract_description(source) ⇒ Object
Searches the source for a description of the sketch.
-
#extract_dimension(source, dimension) ⇒ Object
Searches the source for the width and height of the sketch.
-
#extract_information ⇒ Object
Centralized method to read the source of the sketch and extract all the juicy details.
-
#extract_libraries(source) ⇒ Object
Searches the source for any libraries that have been loaded.
-
#extract_real_requires(source) ⇒ Object
Looks for all of the codes require or load commands, checks to see if the file exists (that it’s not a gem, or a standard lib) and hands you back all the real ones.
-
#extract_title(source) ⇒ Object
Searches the source for a title.
-
#get_main_file(file) ⇒ Object
Returns the filepath, basename, and directory name of the sketch.
Instance Method Details
#extract_class_name(source) ⇒ Object
Searches the source for a class name.
39 40 41 42 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 39 def extract_class_name(source) match = source.match(/(\w+)\s*<\s*Processing::App/) match ? match[1] : 'Sketch' end |
#extract_description(source) ⇒ Object
Searches the source for a description of the sketch.
64 65 66 67 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 64 def extract_description(source) match = source.match(/\A((\s*#(.*?)\n)+)[^#]/m) match ? match[1].gsub(/\s*#\s*/, "\n") : DEFAULT_DESCRIPTION end |
#extract_dimension(source, dimension) ⇒ Object
Searches the source for the width and height of the sketch.
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 52 def extract_dimension(source, dimension) filter = /#{@info[:class_name]}\.new.*?:#{dimension}\s?=>\s?(\d+)/m match = source.match(filter) sz_match = source.match(/^[^#]*size\(?\s*(\d+)\s*,\s*(\d+)\s*\)?/) return match[1] if match return (dimension == 'width' ? sz_match[1] : sz_match[2]) if sz_match warn 'using default dimensions for export, please use constants integer'\ 'values in size() call instead of computed ones' DEFAULT_DIMENSIONS[dimension] end |
#extract_information ⇒ Object
Centralized method to read the source of the sketch and extract all the juicy details.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 23 def extract_information # Extract information from main file @info = {} @info[:source_code] = source = read_source_code @info[:class_name] = extract_class_name(source) @info[:title] = extract_title(source) @info[:width] = extract_dimension(source, 'width') @info[:height] = extract_dimension(source, 'height') @info[:description] = extract_description(source) @info[:libraries] = extract_libraries(source) @info[:real_requires] = extract_real_requires(source) hash_to_ivars @info @info end |
#extract_libraries(source) ⇒ Object
Searches the source for any libraries that have been loaded.
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 70 def extract_libraries(source) lines = source.split("\n") libs = lines.grep(/^[^#]*load_(?:java_|ruby_)?librar(?:y|ies)\s+(.+)/) do Regexp.last_match(1).split(/\s*,\s*/).map do |raw_library_name| raw_library_name.tr("\"':\r\n", '') end end.flatten lib_loader = LibraryLoader.new libs.map { |lib| lib_loader.get_library_paths(lib) }.flatten.compact end |
#extract_real_requires(source) ⇒ Object
Looks for all of the codes require or load commands, checks to see if the file exists (that it’s not a gem, or a standard lib) and hands you back all the real ones.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 84 def extract_real_requires(source) code = source.dup requirements = [] partial_paths = [] Kernel.loop do matchdata = code.match( /^.*[^::\.\w](require_relative|require|load)\b.*$/ ) break unless matchdata line = matchdata[0].gsub('__FILE__', "'#{@main_file_path}'") req = /\b(require_relative|require|load)\b/ if req =~ line ln = line.gsub(req, '') partial_paths << ln where = "{#{local_dir}/,}{#{partial_paths.join(',')}}" where += '.{rb,jar}' unless line =~ /\.[^.]+$/ requirements += Dir[where] end code = matchdata.post_match end requirements end |
#extract_title(source) ⇒ Object
Searches the source for a title.
45 46 47 48 49 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 45 def extract_title(source) generated_title = StringExtra.new(File.basename(@file, '.rb')).titleize match = source.match(/#{@info[:class_name]}\.new.*?:title\s=>\s["'](.+?)["']/m) match ? match[1] : generated_title end |
#get_main_file(file) ⇒ Object
Returns the filepath, basename, and directory name of the sketch.
16 17 18 19 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 16 def get_main_file(file) @file = file return file, File.basename(file), File.dirname(file) end |