class Flo::Runner
This is the main class for instantiating and performing Flo
commands. If you are wanting to interact with Flo
via a ruby script, this is the class you want. Utilizing Flo
through the command line interface will invoke this class after all of the argument parsing is complete.
@example
runner = Runner.new runner.load_config_file('path/to/config/file') runner.execute([:issue, :submit], id: '1234', submitter: 'John Doe')
@attr_reader commands [CommandCollection] List of commands currently defined
Attributes
Public Class Methods
Creates a new runner. This object is generally useless until you load some configuration into it, typically using {#load_config_file}
# File lib/flo/runner.rb, line 35 def initialize(opts={}) @config = opts[:config] || Flo::Config.new @command_class = opts[:command_class] || Flo::Command @commands = opts[:command_collection] || Flo::CommandCollection.new end
Public Instance Methods
@api dsl DSL method: Returns the instance of {Config} associated with this runner. Exposes the {Config} instance if a block is used
@yield [Config]
@return [Config]
# File lib/flo/runner.rb, line 82 def config yield(@config) if block_given? @config end
Executes the command specified, with the arguments specified @param command_namespace [Array<Symbol>] An array containing the name of
the command as a symbol, including the namespace. For example, the command "issue submit" would become [:issue, :submit]
@param args=[] [Array] Options that will get passed to the command
# File lib/flo/runner.rb, line 70 def execute(command_namespace, args=[]) commands[command_namespace][:command].call(args) end
Open and parse a file containing flo configuration. This file is evaluated within a cleanroom. See the {github.com/sethvargo/cleanroom cleanroom gem} for more information. @param config_file [String] path to the flo configuration file
# File lib/flo/runner.rb, line 46 def load_config_file(config_file) evaluate_file(config_file) end
Open and parse any available config files, in the following order:
-
ENV # Allows the addition of custom files
-
./.flo
-
~/.flo
See {#load_config_file}
# File lib/flo/runner.rb, line 56 def load_default_config_files [ENV['FLO_CONFIG_FILE'], File.join(Dir.pwd, '.flo'), File.join(Dir.home, '.flo')].compact.each do |file| if File.exist?(file) self.load_config_file(file) end end end
@api dsl DSL method: Creates and defines a {Command}, adding it to the command collection. Definition for the command should happen inside of the required block. See {Command} for methods available within the block. @param command_namespace [String] name of the command @option opts [String] :summary Summary of the command @option opts [String] :description Detailed description of the command @yield [args*] The block containing the definition for the command.
Arguments passed into {#execute} are available within the block
# File lib/flo/runner.rb, line 98 def register_command(command_namespace, opts={}, &blk) opts[:command] = command_class.new(providers: config.providers, &blk) commands[command_namespace] = opts end