class Mmi::Interactive::Updater
Attributes
file_path[RW]
processor[RW]
Public Class Methods
new(processor, file_path=nil)
click to toggle source
# File lib/mmi/interactive/updater.rb, line 7 def initialize(processor, file_path=nil) self.processor = processor self.file_path = file_path end
Public Instance Methods
add_asset()
click to toggle source
# File lib/mmi/interactive/updater.rb, line 69 def add_asset source_type = CLI::UI::Prompt.ask('Choose a source type.') do |handler| [ 'github', ].each do |type| handler.option(type, &:to_sym) end handler.option('quit', &:to_sym) end case source_type when :quit false when :github options = { 'source' => { 'type' => 'github', 'asset_id' => 0, } } options['source']['owner' ] = CLI::UI::Prompt.ask('Who is the owner of the source repository?').strip options['source']['repo' ] = CLI::UI::Prompt.ask('What is the name of the source repository?').strip options['source']['install_dir'] = CLI::UI::Prompt.ask('In which directory should the asset be placed?', default: 'mods').strip options['source']['filename' ] = CLI::UI::Prompt.ask('Under which filename should the asset be saved? (leave empty for release asset name)', allow_empty: true).strip.then do |filename| filename == '' ? nil : filename end options['source'].compact! source = Mmi::Source::Github.new(options['source']) if update_asset(source) self.processor.content['assets'] ||= [] self.processor.content['assets'].push(options) self.processor.assets.assets.push(source) true else CLI::UI.puts('Aborting asset addition. No change will be made.', color: CLI::UI::Color::RED) false end end end
run!()
click to toggle source
# File lib/mmi/interactive/updater.rb, line 12 def run! while true to_update = CLI::UI::Prompt.ask('What do you want to update?') do |handler| [ ['assets' , :assets ], ['quit & save changes' , :quit_save ], ['quit & discard changes', :quit_discard], ].each do |name, result| handler.option(name) do |s| result end end end case to_update when :assets update_assets when :quit_save file_path = CLI::UI::Prompt.ask('Filename', default: self.file_path, is_file: true) yaml = self.processor.content.to_yaml File.write(File.expand_path(file_path, Dir.pwd), yaml) break when :quit_discard break else raise 'Consider yourself lucky, you found a bug.' end end end
update_asset(asset)
click to toggle source
# File lib/mmi/interactive/updater.rb, line 117 def update_asset(asset) case asset when Mmi::Source::Github releases = ::Github::Client::Repos::Releases.new.list(owner: asset.owner, repo: asset.repo, per_page: 100) release = CLI::UI::Prompt.ask('Choose a release.') do |handler| releases.select do |release| release.assets.any? end.each do |release| handler.option(release.name) do |s| release end end handler.option('quit', &:to_sym) end case release when :quit false else release_asset = CLI::UI::Prompt.ask('Choose an asset.') do |handler| release.assets.each do |a| handler.option(a.name) do |s| a end end handler.option('quit', &:to_sym) end case release_asset when :quit false else asset.options.delete('release') asset.options.delete('file' ) asset.options['asset_id'] = release_asset.id true end end else CLI::UI.puts('This asset cannot be updated.', color: CLI::UI::Color::RED) false end end
update_assets()
click to toggle source
# File lib/mmi/interactive/updater.rb, line 43 def update_assets while true assets = processor.assets.assets choice = CLI::UI::Prompt.ask('Which asset do you want to change?') do |handler| assets.each do |asset| handler.option(asset.display_name) do |s| asset end end handler.option('add' , &:to_sym) handler.option('quit', &:to_sym) end case choice when :quit break when :add add_asset else update_asset(choice) end end end