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.
38 39 40 41 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 38 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.
62 63 64 65 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 62 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.
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 50 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.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 22 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.
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 68 def extract_libraries(source) lines = source.split("\n") libs = lines.grep(/^[^#]*load_(?:java_|ruby_)?librar(?:y|ies)\s+(.+)/) do $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.
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 82 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.
44 45 46 47 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 44 def extract_title(source) match = source.match(/#{@info[:class_name]}\.new.*?:title\s=>\s["'](.+?)["']/m) match ? match[1] : File.basename(@file, '.rb').titleize end |
#get_main_file(file) ⇒ Object
Returns the filepath, basename, and directory name of the sketch.
15 16 17 18 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 15 def get_main_file(file) @file = file return file, File.basename(file), File.dirname(file) end |