class Project::ProjectFile
extracts capabilities and definitions from project files
Attributes
addon_names[R]
addons[R]
capabilities[R]
definitions[R]
path[R]
project[R]
Public Class Methods
new(project:, path: @project = project)
click to toggle source
# File app/project/file.rb, line 4 def initialize project:, path: @project = project @path = path @definitions = [] @capabilities = [] @addons = [] file = File.read path method_names_cache = methods(false) instance_eval file sandbox = RBCM::Project::Sandbox.dup sandbox.module_eval(file) sandbox.instance_methods.each do |name| raise "ERROR: capability name '#{name}' not allowed" if [:node, :group].include? name @capabilities.append RBCM::Project::Capability.new( name: name, content: sandbox.instance_method(name), project_file: self ) end end
Private Instance Methods
addon(branch: "master", **named)
click to toggle source
# File app/project/file.rb, line 29 def addon branch: "master", **named raise "illegal project source: #{keys}" if ( keys = named.keys - [:github, :dir, :file] ).any? named.each do |type, name| @addons.append RBCM::Addon.new type: type, name: name end end
group(name=nil)
click to toggle source
# File app/project/file.rb, line 38 def group name=nil @definitions.append RBCM::Project::Definition.new( type: :group, name: name, content: Proc.new, project_file: self ) end
node(names=nil)
click to toggle source
# File app/project/file.rb, line 47 def node names=nil [names].flatten(1).each do |name| @definitions.append RBCM::Project::Definition.new( type: name.class == Regexp ? :pattern : :node, name: name, content: Proc.new, project_file: self ) end end
relative_path()
click to toggle source
# File app/project/file.rb, line 58 def relative_path @path.gsub /^#{@project.path}/, "" end