Class: Lolcommits::Configuration
- Inherits:
-
Object
- Object
- Lolcommits::Configuration
- Defined in:
- lib/lolcommits/configuration.rb
Constant Summary collapse
- LOLCOMMITS_BASE =
ENV["LOLCOMMITS_DIR"] || File.join(Dir.home, ".lolcommits")
- LOLCOMMITS_ROOT =
File.join(File.dirname(__FILE__), "../..")
Instance Attribute Summary collapse
- #loldir ⇒ Object
-
#plugin_manager ⇒ Object
Returns the value of attribute plugin_manager.
Class Method Summary collapse
Instance Method Summary collapse
- #ask_for_plugin_name ⇒ Object
- #capture_path(ext = "jpg") ⇒ Object
- #configuration_file ⇒ Object
- #do_configure!(plugin_name) ⇒ Object
- #find_plugin(name) ⇒ Object
-
#initialize(plugin_manager, test_mode: false) ⇒ Configuration
constructor
A new instance of Configuration.
- #list_plugins ⇒ Object
- #save(plugin_name, plugin_config) ⇒ Object
- #sha_path(sha, ext) ⇒ Object
- #to_s ⇒ Object
- #yaml ⇒ Object
Constructor Details
#initialize(plugin_manager, test_mode: false) ⇒ Configuration
Returns a new instance of Configuration.
28 29 30 31 |
# File 'lib/lolcommits/configuration.rb', line 28 def initialize(plugin_manager, test_mode: false) @plugin_manager = plugin_manager @loldir = Configuration.loldir_for("test") if test_mode end |
Instance Attribute Details
#loldir ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/lolcommits/configuration.rb', line 45 def loldir return @loldir if @loldir basename ||= if VCSInfo.repo_root? VCSInfo.local_name else File.basename(Dir.getwd) end basename.sub!(/^\./, "dot") basename.sub!(/ /, "-") @loldir = Configuration.loldir_for(basename) end |
#plugin_manager ⇒ Object
Returns the value of attribute plugin_manager.
6 7 8 |
# File 'lib/lolcommits/configuration.rb', line 6 def plugin_manager @plugin_manager end |
Class Method Details
.loldir_for(basename) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/lolcommits/configuration.rb', line 9 def self.loldir_for(basename) loldir = File.join(LOLCOMMITS_BASE, basename) if File.directory? loldir begin # ensure 755 permissions for loldir File.chmod(0o755, loldir) rescue Errno::EPERM # abort if permissions cannot be met puts "FATAL: directory '#{loldir}' should be present and writeable by user '#{ENV.fetch('USER', nil)}'" puts "Try changing the directory permissions to 755" exit 1 end else FileUtils.mkdir_p loldir end loldir end |
Instance Method Details
#ask_for_plugin_name ⇒ Object
86 87 88 89 90 |
# File 'lib/lolcommits/configuration.rb', line 86 def ask_for_plugin_name list_plugins print "Name of plugin to configure: " gets.strip end |
#capture_path(ext = "jpg") ⇒ Object
62 63 64 |
# File 'lib/lolcommits/configuration.rb', line 62 def capture_path(ext = "jpg") File.join loldir, "raw_capture.#{ext}" end |
#configuration_file ⇒ Object
41 42 43 |
# File 'lib/lolcommits/configuration.rb', line 41 def configuration_file "#{loldir}/config.yml" end |
#do_configure!(plugin_name) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/lolcommits/configuration.rb', line 92 def do_configure!(plugin_name) $stdout.sync = true plugin = find_plugin(plugin_name.to_s.strip) return unless plugin puts "Configuring plugin: #{plugin.name}\n" plugin_config = plugin.plugin_klass.new(config: yaml[plugin_name]). || {} unless plugin_config[:enabled] puts "Disabling plugin: #{plugin.name} - answer with 'true' to enable & configure" end rescue Interrupt # e.g. user Ctrl+c or aborted by plugin configure_options! puts "\n" if plugin puts "Configuration aborted: #{plugin.name} has been disabled" plugin_config ||= {} plugin_config[:enabled] = false end ensure if plugin # clean away legacy enabled key, later we can remove this plugin_config.delete("enabled") # save plugin config (if we have anything in the hash) save(plugin.name, plugin_config) unless plugin_config.empty? # print config if plugin was enabled if plugin_config[:enabled] puts "\nSuccessfully configured plugin: #{plugin.name} - at path '#{configuration_file}'" puts plugin_config.to_yaml end end end |
#find_plugin(name) ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/lolcommits/configuration.rb', line 75 def find_plugin(name) plugin_name = name.empty? ? ask_for_plugin_name : name plugin = plugin_manager.find_by_name(plugin_name) return plugin if plugin puts "Unable to find plugin: '#{plugin_name}'" list_plugins unless name.empty? nil end |
#list_plugins ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/lolcommits/configuration.rb', line 66 def list_plugins puts "Installed plugins: (* enabled)\n" plugin_manager.plugins.each do |gem_plugin| plugin = gem_plugin.plugin_klass.new(config: yaml[gem_plugin.name]) puts " [#{plugin.enabled? ? '*' : '-'}] #{gem_plugin.name}" end end |
#save(plugin_name, plugin_config) ⇒ Object
126 127 128 129 |
# File 'lib/lolcommits/configuration.rb', line 126 def save(plugin_name, plugin_config) config_file_contents = yaml.merge(plugin_name => plugin_config).to_yaml File.write(configuration_file, config_file_contents) end |
#sha_path(sha, ext) ⇒ Object
58 59 60 |
# File 'lib/lolcommits/configuration.rb', line 58 def sha_path(sha, ext) File.join loldir, "#{sha}.#{ext}" end |
#to_s ⇒ Object
131 132 133 |
# File 'lib/lolcommits/configuration.rb', line 131 def to_s yaml.to_yaml.to_s end |
#yaml ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/lolcommits/configuration.rb', line 33 def yaml @yaml ||= if File.exist?(configuration_file) YAML.safe_load(File.open(configuration_file), permitted_classes: [ Symbol ]) || Hash.new({}) else Hash.new({}) end end |