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 and applets.
Direct Known Subclasses
Constant Summary collapse
- DEFAULT_DIMENSIONS =
hashes with strings as keys need to retain old hash syntax
{'width' => '100', 'height' => '100'}
- DEFAULT_DESCRIPTION =
''
- NECESSARY_FOLDERS =
['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.
40 41 42 43 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 40 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.
52 53 54 55 56 57 58 59 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 52 def extract_dimension(source, dimension) match = source.match(/#{@info[:class_name]}\.new.*?:#{dimension}\s?=>\s?(\d+)/m) size_match = source.match(/^[^#]*size\(?\s*(\d+)\s*,\s*(\d+)\s*\)?/) return match[1] if match return (dimension == 'width' ? size_match[1] : size_match[2]) if size_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.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 24 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*/).collect 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 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 82 def extract_real_requires(source) code = source.dup requirements = [] partial_paths = [] loop do matchdata = code.match(/^.*[^::\.\w](require_relative|require|load)\b.*$/) break unless matchdata line = matchdata[0].gsub('__FILE__', "'#{@main_file_path}'") line = line.gsub(/\b(require_relative|require|load)\b/, 'partial_paths << ') eval(line) where = "{#{local_dir}/,}{#{partial_paths.join(',')}}" unless line =~ /\.[^.]+$/ where += ".{rb,jar}" end requirements += Dir[where] code = matchdata.post_match end requirements end |
#extract_title(source) ⇒ Object
Searches the source for a title.
46 47 48 49 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 46 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.
17 18 19 20 |
# File 'lib/ruby-processing/exporters/base_exporter.rb', line 17 def get_main_file(file) @file = file return file, File.basename(file), File.dirname(file) end |