# frozen_string_literal: true # # Copyright 2013 whiteleaf. All rights reserved. # require_relative "../inventory" module Command class Alias < CommandBase # 禁止ワード BAN_WORD = %w(hotentry) def self.oneline_help "小説のIDに紐付けた別名を作成します" end def initialize super("[= ...] [options]") @opt.separator <<-EOS ・小説のIDに紐付けた好きな別名を作ることが出来ます。IDやNコード等を覚える必要がなくなります。 ・にはアルファベット及び数字、アンダースコアが使用出来ます。 ・は他のコマンドで指定出来るものがそのまま使えますが、すでにダウンロード済みである必要があります。 Examples: narou alias --list narou alias musyoku=n9669bk narou alias harem=1 narou convert harem # 他のコマンドで別名が使えるようになる narou alias harem= # 右辺に何も書かないとその別名を解除できる Options: EOS @opt.on("-l", "--list", "現在の割り当て一覧を表示する") { output_aliases_list exit 0 } end def output_aliases_list aliases = Inventory.load("alias") database = Database.instance aliases.each do |name, id| title = database[id]["title"] rescue "(すでに削除されています)" puts "#{name}=#{title}".termcolor end end def execute(argv) super display_help! if argv.empty? aliases = Inventory.load("alias") argv.each_with_index do |arg, i| Helper.print_horizontal_rule if i > 0 alias_name, target = arg.split("=", 2) if BAN_WORD.include?(alias_name) error "#{alias_name} は使用禁止ワードです" next end unless alias_name =~ /^\w+$/ error "別名にはアルファベット・数字・アンダースコアしか使えません" next end if target.nil? error "書式が間違っています。#{alias_name}=別名 のように書いて下さい" next end if target == "" aliases.delete(alias_name) puts "#{alias_name} を解除しました" next end unless Downloader.novel_exists?(target) error "#{target} は存在しません" next end data = Downloader.get_data_by_target(target) id = data["id"] title = data["title"] aliases[alias_name] = id puts "#{alias_name} を #{title} の別名に設定しました" end aliases.save end end end