Class: Toys::SourceInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/toys/source_info.rb

Overview

Information about the source of a tool, such as the file, git repository, or block that defined it.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#context_directoryString? (readonly)

The context directory path (normally the directory containing the toplevel toys file or directory).

Returns:

  • (String)

    The context directory path.

  • (nil)

    if there is no context directory (perhaps because the tool is being defined from a block)



40
41
42
# File 'lib/toys/source_info.rb', line 40

def context_directory
  @context_directory
end

#git_commitString? (readonly)

The git commit.

Returns:

  • (String)

    The git commit.

  • (nil)

    if this source is not fron git.



95
96
97
# File 'lib/toys/source_info.rb', line 95

def git_commit
  @git_commit
end

#git_pathString? (readonly)

The git path.

Returns:

  • (String)

    The git path. This could be the empty string.

  • (nil)

    if this source is not fron git.



87
88
89
# File 'lib/toys/source_info.rb', line 87

def git_path
  @git_path
end

#git_remoteString? (readonly)

The git remote.

Returns:

  • (String)

    The git remote

  • (nil)

    if this source is not fron git.



79
80
81
# File 'lib/toys/source_info.rb', line 79

def git_remote
  @git_remote
end

#parentToys::SourceInfo? (readonly)

The parent of this SourceInfo.

Returns:



15
16
17
# File 'lib/toys/source_info.rb', line 15

def parent
  @parent
end

#priorityInteger (readonly)

The priority of tools defined by this source. Higher values indicate a higher priority. Lower priority values could be negative.

Returns:

  • (Integer)

    The priority.



30
31
32
# File 'lib/toys/source_info.rb', line 30

def priority
  @priority
end

#rootToys::SourceInfo (readonly)

The root ancestor of this SourceInfo.

Returns:



22
23
24
# File 'lib/toys/source_info.rb', line 22

def root
  @root
end

#sourceString, Proc (readonly)

The source, which may be a path or a proc.

Returns:

  • (String)

    Path to the source file or directory.

  • (Proc)

    The block serving as the source.



48
49
50
# File 'lib/toys/source_info.rb', line 48

def source
  @source
end

#source_nameString (readonly) Also known as: to_s

The user-visible name of this source.

Returns:

  • (String)


102
103
104
# File 'lib/toys/source_info.rb', line 102

def source_name
  @source_name
end

#source_pathString? (readonly)

The path of the current source file or directory.

Returns:

  • (String)

    The source path

  • (nil)

    if this source has no file system path.



63
64
65
# File 'lib/toys/source_info.rb', line 63

def source_path
  @source_path
end

#source_procProc? (readonly)

The source proc.

Returns:

  • (Proc)

    The source proc

  • (nil)

    if this source has no proc.



71
72
73
# File 'lib/toys/source_info.rb', line 71

def source_proc
  @source_proc
end

#source_type:file, ... (readonly)

Return the type of source.

Returns:

  • (:file, :directory, :proc)


55
56
57
# File 'lib/toys/source_info.rb', line 55

def source_type
  @source_type
end

Instance Method Details

#apply_lib_pathsself

Apply all lib paths in order from high to low priority

Returns:

  • (self)


134
135
136
137
138
# File 'lib/toys/source_info.rb', line 134

def apply_lib_paths
  parent&.apply_lib_paths
  $LOAD_PATH.unshift(@lib_dir) if @lib_dir && !$LOAD_PATH.include?(@lib_dir)
  self
end

#find_data(path, type: nil) ⇒ String?

Locate the given data file or directory and return an absolute path.

Parameters:

  • path (String)

    The relative path to find

  • type (nil, :file, :directory) (defaults to: nil)

    Type of file system object to find, or nil (the default) to return any type.

Returns:

  • (String)

    Absolute path of the resulting data.

  • (nil)

    if the data was not found.



114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/toys/source_info.rb', line 114

def find_data(path, type: nil)
  if @data_dir
    full_path = ::File.join(@data_dir, path)
    case type
    when :file
      return full_path if ::File.file?(full_path)
    when :directory
      return full_path if ::File.directory?(full_path)
    else
      return full_path if ::File.readable?(full_path)
    end
  end
  parent&.find_data(path, type: type)
end