Class: NetLinx::SourceFile
- Inherits:
-
Object
- Object
- NetLinx::SourceFile
- Defined in:
- lib/netlinx/source_file.rb
Overview
A NetLinx source code file. Typically .axs or .axi.
Instance Method Summary collapse
-
#compile ⇒ Object
Execute the compiler on itself.
- #compiler_include_paths ⇒ Object
- #compiler_library_paths ⇒ Object
- #compiler_module_paths ⇒ Object
- #compiler_target_files ⇒ Object
-
#initialize(**kwargs) ⇒ SourceFile
constructor
NOTE: SourceFile searches the body of the source file to automatically determine include and module paths.
Constructor Details
#initialize(**kwargs) ⇒ SourceFile
NOTE: SourceFile searches the body of the source file to automatically determine include and module paths.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/netlinx/source_file.rb', line 12 def initialize(**kwargs) @compiler_target_files = [ kwargs.fetch(:file, nil) ] @compiler_include_paths = kwargs.fetch :compiler_include_paths, [] @compiler_module_paths = kwargs.fetch :compiler_module_paths, [] return unless @compiler_target_files.first source_code = File.open(@compiler_target_files.first).read unless source_code.valid_encoding? source_code.force_encoding Encoding::ASCII_8BIT end # Scan file for additional include paths. includes = source_code.scan(/(?i)^\s*(?:\#include)\s+'([\w\-]+)'/) includes.each do |inc| inc = inc.first path = Dir["./**/#{inc}.*"].first next unless path path = File. path @compiler_include_paths << File.dirname(path) end @compiler_include_paths.uniq! # Scan file for additional module paths. modules = source_code.scan(/(?i)^\s*(?:define_module)\s+'([\w\-]+)'/) modules.each do |mod| mod = mod.first path = Dir["./**/#{mod}.*"].first next unless path path = File. path @compiler_module_paths << File.dirname(path) end @compiler_module_paths.uniq! end |
Instance Method Details
#compile ⇒ Object
Execute the compiler on itself.
77 78 79 80 81 |
# File 'lib/netlinx/source_file.rb', line 77 def compile require 'netlinx/compiler' compiler = NetLinx::Compiler.new result = compiler.compile self end |
#compiler_include_paths ⇒ Object
62 63 64 |
# File 'lib/netlinx/source_file.rb', line 62 def compiler_include_paths @compiler_include_paths end |
#compiler_library_paths ⇒ Object
72 73 74 |
# File 'lib/netlinx/source_file.rb', line 72 def compiler_library_paths [] end |
#compiler_module_paths ⇒ Object
67 68 69 |
# File 'lib/netlinx/source_file.rb', line 67 def compiler_module_paths @compiler_module_paths end |
#compiler_target_files ⇒ Object
57 58 59 |
# File 'lib/netlinx/source_file.rb', line 57 def compiler_target_files @compiler_target_files end |