module DevOops::ScriptsLoader
Constants
- FORBIDDEN_NAMES
- GLOBAL_DIR
- ScriptConfig
Public Class Methods
build_action(config)
click to toggle source
# File lib/dev_oops/scripts_loader.rb, line 62 def self.build_action(config) Class.new(Thor::Group) do (config.args || []).each do |arg| class_option( arg['name'], desc: arg['desc'] || '', aliases: arg['aliases'] || [], required: arg['required'] || false, default: arg['default'] ) end define_singleton_method('banner') { config.usage } define_method('perform') do env_vars = options.map { |k, v| "#{k}=#{v}" }.join(' ') if config.script_location && !config.script_location.empty? location = if config.script_location.start_with?('/') config.script_location else "#{ENV['HOME']}/#{config.script_location}" end system("#{env_vars} #{ENV['SHELL']} -c #{location}") end end end end
find_dev_oops_dirs()
click to toggle source
# File lib/dev_oops/scripts_loader.rb, line 20 def self.find_dev_oops_dirs [ GLOBAL_DIR, *Dir.pwd.gsub("#{Dir.home}/", '').split('/').reduce( [] ) { |res, new_dir| [*res, "#{res.last}/#{new_dir}"] }.map do |dir| "#{Dir.home}#{dir}/dev_oops" end.select { |dir| Dir.exist?(dir) } ] end
load()
click to toggle source
# File lib/dev_oops/scripts_loader.rb, line 31 def self.load find_dev_oops_dirs.flat_map do |dir| Dir.glob("#{dir}/*.json") end.map do |filename| script_location = filename.gsub(/\.json$/, '.sh') script_location = '' unless File.exist?(script_location) json_config = nil File.open(filename) { |file| json_config = JSON.parse(file.read) } script_name = File.basename(filename, '.json') ScriptConfig.create( script_name, script_location, json_config, File.dirname(filename) ) end.reverse.reduce([]) do |res, script_config| if res.any? { |script_c| script_c.name == script_config.name } res else [*res, script_config] end end end
script_dir(script_name)
click to toggle source
# File lib/dev_oops/scripts_loader.rb, line 56 def self.script_dir(script_name) scripts = self.load scripts.find { |script| script.name == script_name }&.dir || Dir.exist?("#{Dir.pwd}/dev_oops") && "#{Dir.pwd}/dev_oops" || GLOBAL_DIR end