Class: Command::Csv
- Inherits:
-
CommandBase
- Object
- CommandBase
- Command::Csv
- Defined in:
- lib/command/csv.rb
Overview
ライブラリのCSVコマンドと混同を避けるために小文字混じり
Class Method Summary collapse
Instance Method Summary collapse
- #execute(argv) ⇒ Object
-
#generate ⇒ Object
小説の情報をCSV形式の文字列で取得.
-
#import(data = nil) ⇒ Object
CSV形式のファイルからインポートする header行にurlという項目が必要 data にはインポートしたいIOオブジェクトかCSV形式の文字列を指定。 nil なら –import オプションで指定されたファイルから入力.
-
#initialize ⇒ Csv
constructor
A new instance of Csv.
-
#output(stream = nil) ⇒ Object
CSV形式で出力する stream には出力先のIOオブジェクトを指定。nilだったら$stdoutに出力.
Methods inherited from CommandBase
execute!, #force_change_settings_function, help, #hook_call, #load_local_settings, #tagname_to_ids
Constructor Details
#initialize ⇒ Csv
Returns a new instance of Csv.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/command/csv.rb', line 16 def initialize super("[optioins]") @opt.separator <<-EOS ・現在管理している小説の情報をCSV形式で出力したり、逆にインポートが出来ます ・インポートするCSVファイルには最低限 url というヘッダーが必要です Examples: narou csv # CSV形式でそのまま表示 narou csv -o novels.csv # novels.csv というファイル名で保存 narou csv -i novels.csv # ファイルから小説をインポート Options: EOS @opt.on("-o", "--output FILE", "指定したファイル名で保存") { |filename| @options["filename"] = filename @mode = :output } @opt.on("-i", "--import FILE", "指定したファイルからインポート") { |filename| @options["filename"] = filename @mode = :import } end |
Class Method Details
.oneline_help ⇒ Object
12 13 14 |
# File 'lib/command/csv.rb', line 12 def self.oneline_help "小説リストをCSV形式で出力したりインポートしたりします" end |
Instance Method Details
#execute(argv) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/command/csv.rb', line 40 def execute(argv) @mode = :output super self.__send__ @mode end |
#generate ⇒ Object
小説の情報をCSV形式の文字列で取得
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/command/csv.rb', line 60 def generate database_values = Database.instance.get_object.values CSV.generate do |csv| csv << %w(id title author sitename url novel_type tags frozen last_update general_lastup) database_values.each do |data| = data["tags"] || [] csv << [ data["id"], data["title"], data["author"], data["sitename"], data["toc_url"], data["novel_type"] == 2 ? "短編" : "連載", .join(" "), Narou.novel_frozen?(data["id"]), data["last_update"].to_i, data["general_lastup"].to_i ] end end end |
#import(data = nil) ⇒ Object
CSV形式のファイルからインポートする header行にurlという項目が必要 data にはインポートしたいIOオブジェクトかCSV形式の文字列を指定。 nil なら –import オプションで指定されたファイルから入力
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/command/csv.rb', line 88 def import(data = nil) if data source = data elsif @options["filename"] source = File.read(@options["filename"]) else raise ArgumentError, "need a CSV data" end csv = CSV.new(source, headers: true, converters: :numeric, header_converters: :symbol) table = csv.read table[:url].each do |url| next unless url Download.execute!([url]) Helper.print_horizontal_rule end rescue CSV::MalformedCSVError => e puts "不正なCSVデータです(#{e.})" exit Narou::EXIT_ERROR_CODE end |
#output(stream = nil) ⇒ Object
CSV形式で出力する stream には出力先のIOオブジェクトを指定。nilだったら$stdoutに出力
51 52 53 54 55 |
# File 'lib/command/csv.rb', line 51 def output(stream = nil) stream ||= @options["filename"] ? File.open(@options["filename"], "w:UTF-8") : $stdout stream.puts(generate) stream.close if @options["filename"] end |