Recipes are silly, undoing some excessive code.
This commit is contained in:
parent
aac88bcabc
commit
6c44db6e65
33
bin/qw
33
bin/qw
|
@ -4,14 +4,19 @@ $:.unshift File.dirname(__FILE__) + '/../lib'
|
||||||
# Require it
|
# Require it
|
||||||
require "qwandry.rb"
|
require "qwandry.rb"
|
||||||
|
|
||||||
recipes = Qwandry::Recipe.load_recipes
|
# Create launcher
|
||||||
|
@qwandry = Qwandry::Launcher.new
|
||||||
|
|
||||||
opts = OptionParser.new do |opts|
|
opts = OptionParser.new do |opts|
|
||||||
opts.banner = "Usage: qwandry [options] name"
|
opts.banner = "Usage: qwandry [options] name"
|
||||||
opts.separator ""
|
opts.separator ""
|
||||||
|
|
||||||
opts.on("-r", "--recipe RECIPE", "Use paths from RECIPE","Recipes:", *recipes.map{|r| "* #{r.name}: #{r.description}"}) do |recipe|
|
opts.on("-r", "--repo LABEL", "Only search in repository LABEL","Repositories:", *@qwandry.repositories.keys.map{|k| "* #{k}"}) do |label|
|
||||||
@recipe_name = recipe
|
if @qwandry.repositories.has_key? label
|
||||||
|
@repository_label = label
|
||||||
|
else
|
||||||
|
STDERR.puts "Repository '#{label}' in not available, searching all repositories"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
opts.separator ""
|
opts.separator ""
|
||||||
|
@ -31,31 +36,11 @@ if ARGV.length != 1
|
||||||
exit(1)
|
exit(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Create launcher
|
|
||||||
@qwandry = Qwandry::Launcher.new
|
|
||||||
|
|
||||||
# Configure default values
|
# Configure default values
|
||||||
@qwandry.editor = @editor if @editor
|
@qwandry.editor = @editor if @editor
|
||||||
|
|
||||||
# Load recipe
|
|
||||||
@recipe_name ||= ENV['QW_DEFAULT'] || 'default'
|
|
||||||
@recipe = recipes.find{|r| r.name.downcase == @recipe_name }
|
|
||||||
|
|
||||||
unless @recipe
|
|
||||||
STDERR.puts "Could not find recipe '#{@recipe_name}'"
|
|
||||||
exit(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Configure Qwandry
|
|
||||||
@recipe.new.configure(@qwandry)
|
|
||||||
|
|
||||||
# Warn if there are no repositories
|
|
||||||
if @qwandry.repositories.empty?
|
|
||||||
STDERR.puts "Warning: no repositories were defined in '#{@recipe_path}'"
|
|
||||||
end
|
|
||||||
|
|
||||||
name = ARGV.pop
|
name = ARGV.pop
|
||||||
packages = @qwandry.find(name)
|
packages = @qwandry.find(name, @repository_label)
|
||||||
|
|
||||||
package = nil
|
package = nil
|
||||||
case packages.length
|
case packages.length
|
||||||
|
|
|
@ -19,5 +19,4 @@ module Qwandry
|
||||||
autoload :FlatRepository, "qwandry/flat_repository"
|
autoload :FlatRepository, "qwandry/flat_repository"
|
||||||
autoload :LibraryRepository, "qwandry/library_repository"
|
autoload :LibraryRepository, "qwandry/library_repository"
|
||||||
autoload :Package, "qwandry/package"
|
autoload :Package, "qwandry/package"
|
||||||
autoload :Recipe, "qwandry/recipe"
|
|
||||||
end
|
end
|
|
@ -10,6 +10,7 @@ module Qwandry
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@repositories = Hash.new{|h,k| h[k] = []}
|
@repositories = Hash.new{|h,k| h[k] = []}
|
||||||
|
configure_repositories!
|
||||||
end
|
end
|
||||||
|
|
||||||
# Adds a repository path to Qwandry's Launcher.
|
# Adds a repository path to Qwandry's Launcher.
|
||||||
|
@ -25,9 +26,10 @@ module Qwandry
|
||||||
end
|
end
|
||||||
|
|
||||||
# Searches all of the loaded repositories for `name`
|
# Searches all of the loaded repositories for `name`
|
||||||
def find(name)
|
def find(name, required_label=nil)
|
||||||
packages = []
|
packages = []
|
||||||
@repositories.each do |label, repos|
|
@repositories.each do |label, repos|
|
||||||
|
next if required_label && required_label != label
|
||||||
repos.each do |repo|
|
repos.each do |repo|
|
||||||
packages.concat(repo.scan(name))
|
packages.concat(repo.scan(name))
|
||||||
end
|
end
|
||||||
|
@ -40,5 +42,25 @@ module Qwandry
|
||||||
editor ||= @editor || ENV['VISUAL'] || ENV['EDITOR']
|
editor ||= @editor || ENV['VISUAL'] || ENV['EDITOR']
|
||||||
system editor, *package.paths
|
system editor, *package.paths
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def configure_repositories!
|
||||||
|
# Get all the paths on ruby's load path:
|
||||||
|
paths = $:
|
||||||
|
|
||||||
|
# Reject binary paths, we only want ruby sources:
|
||||||
|
paths = paths.reject{|path| path =~ /#{RUBY_PLATFORM}$/}
|
||||||
|
|
||||||
|
# Add ruby standard libraries:
|
||||||
|
paths.grep(/lib\/ruby/).each do |path|
|
||||||
|
add :ruby, path, Qwandry::LibraryRepository
|
||||||
|
end
|
||||||
|
|
||||||
|
# Add gem repositories:
|
||||||
|
($:).grep(/gems/).map{|p| p[/.+\/gems\//]}.uniq.each do |path|
|
||||||
|
add :gem, path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,44 +0,0 @@
|
||||||
class Qwandry::Recipe
|
|
||||||
class << self
|
|
||||||
|
|
||||||
def name(v=nil)
|
|
||||||
if v
|
|
||||||
@name = v
|
|
||||||
else
|
|
||||||
@name || self.to_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def description(v=nil)
|
|
||||||
if v
|
|
||||||
@description = v
|
|
||||||
else
|
|
||||||
@description || ""
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# Recipes should implement the `configure` method.
|
|
||||||
def configure(qw)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def self.load_recipes
|
|
||||||
# Load all required recipes:
|
|
||||||
built_in_path = File.dirname(__FILE__) + '/recipes/*.rb'
|
|
||||||
custom_path = ENV['HOME'] + '/.qwandry/*.rb' if ENV['HOME']
|
|
||||||
|
|
||||||
Dir[built_in_path, custom_path].compact.map do |recipe_path|
|
|
||||||
require recipe_path
|
|
||||||
class_name = File.basename(recipe_path,'.rb').split('_').map{|w| w.capitalize}.join
|
|
||||||
begin
|
|
||||||
Qwandry.const_get(class_name)
|
|
||||||
rescue Exception => e
|
|
||||||
STDERR.puts "Could not load recipe '#{recipe_path}'"
|
|
||||||
STDERR.puts e
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,27 +0,0 @@
|
||||||
# Default recipe, adds ruby sources to Qwandry.
|
|
||||||
|
|
||||||
# Ensure that rubygems is on the path so we can search it
|
|
||||||
require 'rubygems'
|
|
||||||
|
|
||||||
class Qwandry::Default < Qwandry::Recipe
|
|
||||||
name "Default"
|
|
||||||
description "Searches the ruby standard library and ruby gems"
|
|
||||||
|
|
||||||
def configure(qw)
|
|
||||||
# Get all the paths on ruby's load path:
|
|
||||||
paths = $:
|
|
||||||
|
|
||||||
# Reject binary paths, we only want ruby sources:
|
|
||||||
paths = paths.reject{|path| path =~ /#{RUBY_PLATFORM}$/}
|
|
||||||
|
|
||||||
# Add ruby standard libraries:
|
|
||||||
paths.grep(/lib\/ruby/).each do |path|
|
|
||||||
qw.add :ruby, path, Qwandry::LibraryRepository
|
|
||||||
end
|
|
||||||
|
|
||||||
# Add gem repositories:
|
|
||||||
($:).grep(/gems/).map{|p| p[/.+\/gems\//]}.uniq.each do |path|
|
|
||||||
qw.add :gem, path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue