class Environment::Directory

Attributes

children[R]
parent[R]

Public Class Methods

new(parent, dir) click to toggle source
# File lib/rash/ext/filesystem.rb, line 102
def initialize(parent, dir)
  @path = Dir.new(dir)
  @parent = parent
  @children = []
  @local_methods = {}
  @locked_methods = []
  @local_variables = {}
  @locked_variables = []
end
root(dir) click to toggle source
# File lib/rash/ext/filesystem.rb, line 98
def self.root(dir)
  Directory.new(nil, dir)
end

Public Instance Methods

add_child(path) click to toggle source
# File lib/rash/ext/filesystem.rb, line 237
def add_child(path)
  dir = Directory.new(self, path)
  @children << dir
  dir
end
add_local_method(name, &block) click to toggle source
# File lib/rash/ext/filesystem.rb, line 130
def add_local_method(name, &block)
  raise ArgumentError.new "no method body provided" unless block_given?
  @local_methods[name.to_sym] = block # if name already exists, its function is overriden
  name.to_sym
end
add_parent(dir) click to toggle source
# File lib/rash/ext/filesystem.rb, line 225
def add_parent(dir)
  @parent = Directory.root(dir)
  @parent.add_child(self.to_s)
  @parent
end
child(path) click to toggle source
# File lib/rash/ext/filesystem.rb, line 231
def child(path)
  ch = @children.find {|c| c.to_s == path}
  ch = add_child(path) unless ch
  ch
end
clear_local_method(name) click to toggle source

might not be useful

# File lib/rash/ext/filesystem.rb, line 159
def clear_local_method(name)
  @local_methods.delete(name.to_sym)
  name.to_sym
end
clear_local_variable(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 212
def clear_local_variable(name)
  @local_variables.delete(name.to_sym)
  name.to_sym
end
local_method(name) click to toggle source

Local method methods

# File lib/rash/ext/filesystem.rb, line 116
def local_method(name)
  name = name.to_sym
  @local_methods[name] || @parent&.unlocked_local_method(name)
end
local_method?(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 121
def local_method?(name)
  name = name.to_sym
  @local_methods.key?(name) || !!@parent&.unlocked_local_method?(name)
end
local_methods() click to toggle source
# File lib/rash/ext/filesystem.rb, line 126
def local_methods
  @local_methods.keys + (@parent&.unlocked_local_methods).to_a
end
local_variable(name) click to toggle source

Local variable stuff

# File lib/rash/ext/filesystem.rb, line 168
def local_variable(name)
  name = name.to_sym
  @local_variables[name] || @parent&.unlocked_local_variable(name)
end
local_variable?(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 173
def local_variable?(name)
  @local_variables.include?(name.to_sym) || !!@parent&.unlocked_local_variable?(name.to_sym)
end
local_variables() click to toggle source
# File lib/rash/ext/filesystem.rb, line 177
def local_variables
  @local_variables.keys + (@parent&.unlocked_local_variables).to_a
end
lock_method(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 151
def lock_method(name)
  n = name.to_sym
  raise NameError.new("#{name} is not a local method", n) unless @local_methods.key?(n)
  @locked_methods << n unless @locked_methods.include?(n)
  n
end
lock_variable(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 205
def lock_variable(name)
  n = name.to_sym
  raise NameError.new("#{name} is not a local variable", n) unless @local_variables.key?(n)
  @locked_variables << n unless @locked_variables.include?(n)
  n
end
root?() click to toggle source

Generic traversal methods

# File lib/rash/ext/filesystem.rb, line 221
def root?
  parent.nil?
end
set_local_variable(name, value) click to toggle source
# File lib/rash/ext/filesystem.rb, line 181
def set_local_variable(name, value)
  name = name.to_sym
  if !@local_variables.key?(name) && @parent&.unlocked_local_variable?(name)
    @parent&.set_local_variable(name, value)
  else
    @local_variables[name] = value
  end
end
to_s() click to toggle source
# File lib/rash/ext/filesystem.rb, line 243
def to_s
  @path.path
end
unlocked_local_method(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 136
def unlocked_local_method(name)
  name = name.to_sym
  @local_methods[name] || @parent&.unlocked_local_method(name)
end
unlocked_local_method?(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 141
def unlocked_local_method?(name)
  name = name.to_sym
  @local_methods.filter{|k, v| !@locked_methods.include?(k)}.key?(name) ||
    !!@parent&.unlocked_local_method?(name)
end
unlocked_local_methods() click to toggle source
# File lib/rash/ext/filesystem.rb, line 147
def unlocked_local_methods
  @local_methods.filter{|k, v| !@locked_methods.include?(k)}.keys + (@parent&.unlocked_local_methods).to_a
end
unlocked_local_variable(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 190
def unlocked_local_variable(name)
  name = name.to_sym
  @local_variables.filter{|k| !@locked_variables.include?(k)}[name] || @parent&.unlocked_local_variable(name)
end
unlocked_local_variable?(name) click to toggle source
# File lib/rash/ext/filesystem.rb, line 195
def unlocked_local_variable?(name)
  name = name.to_sym
  @local_variables.filter{|k,_v| !@locked_variables.include?(k)}.key?(name) ||
    !!@parent&.unlocked_local_variable?(name)
end
unlocked_local_variables() click to toggle source
# File lib/rash/ext/filesystem.rb, line 201
def unlocked_local_variables
  @local_variables.keys.filter{|k| !@locked_variables.include?(k)} + (@parent&.unlocked_local_variables).to_a
end