Class: Lolcommits::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/lolcommits/configuration.rb

Constant Summary collapse

LOLCOMMITS_BASE =
ENV['LOLCOMMITS_DIR'] || File.join(ENV['HOME'], '.lolcommits')
LOLCOMMITS_ROOT =
File.join(File.dirname(__FILE__), '../..')

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(plugin_manager, test_mode: false) ⇒ Configuration

Returns a new instance of Configuration.



7
8
9
10
# File 'lib/lolcommits/configuration.rb', line 7

def initialize(plugin_manager, test_mode: false)
  @plugin_manager = plugin_manager
  @loldir         = Configuration.loldir_for('test') if test_mode
end

Instance Attribute Details

#loldirObject

Returns the value of attribute loldir.



5
6
7
# File 'lib/lolcommits/configuration.rb', line 5

def loldir
  @loldir
end

#plugin_managerObject

Returns the value of attribute plugin_manager.



5
6
7
# File 'lib/lolcommits/configuration.rb', line 5

def plugin_manager
  @plugin_manager
end

Class Method Details

.loldir_for(basename) ⇒ Object

class methods



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/lolcommits/configuration.rb', line 120

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['USER']}'"
      puts 'Try changing the directory permissions to 755'
      exit 1
    end
  else
    FileUtils.mkdir_p loldir
  end
  loldir
end

Instance Method Details

#archivedirObject



35
36
37
38
39
# File 'lib/lolcommits/configuration.rb', line 35

def archivedir
  dir = File.join(loldir, 'archive')
  FileUtils.mkdir_p dir unless File.directory? dir
  dir
end

#ask_for_plugin_nameObject



81
82
83
84
85
# File 'lib/lolcommits/configuration.rb', line 81

def ask_for_plugin_name
  list_plugins
  print 'Name of plugin to configure: '
  gets.strip
end

#configuration_fileObject



19
20
21
# File 'lib/lolcommits/configuration.rb', line 19

def configuration_file
  "#{loldir}/config.yml"
end

#do_configure!(plugin_name) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/lolcommits/configuration.rb', line 87

def do_configure!(plugin_name)
  $stdout.sync = true

  plugin = find_plugin(plugin_name.to_s.strip)
  return unless plugin
  config = read_configuration || {}
  plugin_name   = plugin.class.name
  plugin_config = plugin.configure_options!
  # having a plugin_config, means configuring went OK
  if plugin_config
    # save plugin and print config
    config[plugin_name] = plugin_config
    save(config)
    puts self
    puts "\nSuccessfully configured plugin: #{plugin_name} at path '#{configuration_file}'"
  else
    puts "\nAborted plugin configuration for: #{plugin_name}"
  end
end

#find_plugin(plugin_name_option) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/lolcommits/configuration.rb', line 69

def find_plugin(plugin_name_option)
  plugin_name = plugin_name_option.empty? ? ask_for_plugin_name : plugin_name_option
  return if plugin_name.empty?

  plugin_klass = plugin_manager.find_by_name(plugin_name)
  return plugin_klass.new(nil) if plugin_klass

  puts "Unable to find plugin: '#{plugin_name}'"
  return if plugin_name_option.empty?
  list_plugins
end

#frames_locObject



61
62
63
# File 'lib/lolcommits/configuration.rb', line 61

def frames_loc
  File.join(loldir, 'tmp_frames')
end

#jpg_imagesObject



41
42
43
# File 'lib/lolcommits/configuration.rb', line 41

def jpg_images
  Dir.glob(File.join(loldir, '*.jpg')).sort_by { |f| File.mtime(f) }
end

#jpg_images_todayObject



45
46
47
# File 'lib/lolcommits/configuration.rb', line 45

def jpg_images_today
  jpg_images.select { |f| Date.parse(File.mtime(f).to_s) == Date.today }
end

#list_pluginsObject



65
66
67
# File 'lib/lolcommits/configuration.rb', line 65

def list_plugins
  puts "Available plugins: \n * #{plugin_manager.plugin_names.join("\n * ")}"
end

#main_image(commit_sha, image_file_type = 'jpg') ⇒ Object



53
54
55
# File 'lib/lolcommits/configuration.rb', line 53

def main_image(commit_sha, image_file_type = 'jpg')
  File.join loldir, "#{commit_sha}.#{image_file_type}"
end

#raw_image(image_file_type = 'jpg') ⇒ Object



49
50
51
# File 'lib/lolcommits/configuration.rb', line 49

def raw_image(image_file_type = 'jpg')
  File.join loldir, "tmp_snapshot.#{image_file_type}"
end

#read_configurationObject



12
13
14
15
16
17
# File 'lib/lolcommits/configuration.rb', line 12

def read_configuration
  return unless File.exist?(configuration_file)
  # TODO: change to safe_load when Ruby 2.0.0 support drops
  # YAML.safe_load(File.open(configuration_file), [Symbol])
  YAML.load(File.open(configuration_file))
end

#save(config) ⇒ Object



107
108
109
110
111
112
# File 'lib/lolcommits/configuration.rb', line 107

def save(config)
  config_file_contents = config.to_yaml
  File.open(configuration_file, 'w') do |f|
    f.write(config_file_contents)
  end
end

#to_sObject



114
115
116
# File 'lib/lolcommits/configuration.rb', line 114

def to_s
  read_configuration.to_yaml.to_s
end

#video_locObject



57
58
59
# File 'lib/lolcommits/configuration.rb', line 57

def video_loc
  File.join(loldir, 'tmp_video.mov')
end