Class: NetLinx::Compile::ExtensionDiscovery
- Inherits:
-
Object
- Object
- NetLinx::Compile::ExtensionDiscovery
- Defined in:
- lib/netlinx/compile/extension_discovery.rb
Overview
Discovers and auto-requires add-on Ruby libraries for netlinx-compile.
Class Attribute Summary collapse
-
.handlers ⇒ Object
An array of ExtensionHandlers installed on the system.
Class Method Summary collapse
-
.discover ⇒ Object
Searches for gems with 'netlinx-compile' as a dependency.
- .get_handler(filename) ⇒ ExtensionHandler
-
.workspace_extensions ⇒ Array<String>
Workspace file extensions.
Class Attribute Details
.handlers ⇒ Object
An array of ExtensionHandlers installed on the system. #discover must be run before this array is populated.
10 11 12 |
# File 'lib/netlinx/compile/extension_discovery.rb', line 10 def handlers @handlers end |
Class Method Details
.discover ⇒ Object
Searches for gems with 'netlinx-compile' as a dependency. The 'lib/netlinx/compile/extension/*' path is checked for compiler extensions.
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 |
# File 'lib/netlinx/compile/extension_discovery.rb', line 17 def discover # Require extensions built into netlinx-compile. nc_gem = Gem::Specification.find_by_name 'netlinx-compile' nc_gem_path = File. 'lib/netlinx/compile/extension', nc_gem.gem_dir nc_gem_files = Dir["#{nc_gem_path}/*.rb"] nc_gem_files.each {|file| require file} # Find gems with a dependency on 'netlinx-compile'. gems = Gem::Specification.each .select{|gem| gem.dependencies .select{|dependency| dependency.name == 'netlinx-compile'} .empty? == false } # Load any Ruby files in their lib/netlinx/compile/extension paths. gems.each do |gem| extension_path = File. 'lib/netlinx/compile/extension', gem.gem_dir files = Dir["#{extension_path}/*.rb"] files.each {|file| require file} end # Register ExtensionHandler objects. @handlers = NetLinx::Compile::Extension.constants .map{|c| NetLinx::Compile::Extension.const_get c} .select{|c| c.is_a? Class} .map{|c| c.get_handler if c.respond_to? :get_handler} .select{|c| not c.nil?} end |
.get_handler(filename) ⇒ ExtensionHandler
57 58 59 |
# File 'lib/netlinx/compile/extension_discovery.rb', line 57 def get_handler(filename) @handlers.select{|h| h.include? filename}.first end |
.workspace_extensions ⇒ Array<String>
Returns workspace file extensions.
47 48 49 50 51 52 |
# File 'lib/netlinx/compile/extension_discovery.rb', line 47 def workspace_extensions @handlers .select{|h| h.is_a_workspace?} .map{|h| h.extensions} .flatten end |