narou 1.6.4 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of narou might be problematic. Click here for more details.

Files changed (72) hide show
  1. checksums.yaml +13 -5
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +419 -0
  4. data/ChangeLog.md +23 -0
  5. data/README.md +24 -123
  6. data/Rakefile +1 -1
  7. data/bin/narou +0 -0
  8. data/lib/color.rb +1 -8
  9. data/lib/command/backup.rb +1 -1
  10. data/lib/command/diff.rb +5 -5
  11. data/lib/command/download.rb +2 -2
  12. data/lib/command/freeze.rb +1 -9
  13. data/lib/command/init.rb +4 -4
  14. data/lib/command/list.rb +49 -20
  15. data/lib/command/mail.rb +4 -4
  16. data/lib/command/remove.rb +2 -3
  17. data/lib/command/send.rb +3 -3
  18. data/lib/command/tag.rb +6 -6
  19. data/lib/command/update.rb +2 -2
  20. data/lib/commandbase.rb +4 -4
  21. data/lib/commandline.rb +1 -1
  22. data/lib/converterbase.rb +27 -17
  23. data/lib/database.rb +1 -1
  24. data/lib/device.rb +1 -1
  25. data/lib/device/ibooks.rb +2 -2
  26. data/lib/device/ibunko.rb +2 -2
  27. data/lib/diffviewer.rb +7 -8
  28. data/lib/downloader.rb +22 -24
  29. data/lib/helper.rb +2 -2
  30. data/lib/illustration.rb +1 -1
  31. data/lib/ini.rb +0 -1
  32. data/lib/inspector.rb +2 -2
  33. data/lib/inventory.rb +1 -1
  34. data/lib/loadconverter.rb +1 -1
  35. data/lib/logger.rb +2 -14
  36. data/lib/mailer.rb +2 -2
  37. data/lib/narou.rb +5 -5
  38. data/lib/novelconverter.rb +4 -4
  39. data/lib/novelsetting.rb +1 -1
  40. data/lib/sitesetting.rb +1 -1
  41. data/lib/template.rb +2 -2
  42. data/lib/version.rb +2 -1
  43. data/narou.bat +0 -0
  44. data/narou.gemspec +15 -126
  45. data/narou.rb +1 -1
  46. data/preset/ncode.syosetu.com/n4259s/converter.rb +1 -1
  47. data/preset/ncode.syosetu.com/n8725k/converter.rb +1 -1
  48. data/spec/convert_spec.rb +6 -3
  49. data/spec/data/convert_test/auto_indent/correct_test_auto_indent.txt +3 -0
  50. data/spec/data/convert_test/auto_indent/test_auto_indent.txt +4 -0
  51. data/spec/data/convert_test/auto_join_bracket/correct_test_auto_join_bracket.txt +12 -1
  52. data/spec/data/convert_test/auto_join_bracket/test_auto_join_bracket.txt +12 -0
  53. data/spec/data/convert_test/auto_join_line/test_auto_join_line.txt +0 -0
  54. data/spec/data/convert_test/convert_page_break/test_convert_page_break.txt +0 -0
  55. data/spec/data/convert_test/english/correct_test_english.txt +26 -0
  56. data/spec/data/convert_test/english/test_english.txt +27 -0
  57. data/spec/data/convert_test/force_indent_special_chapter/test_force_indent_special_chapter.txt +0 -0
  58. data/spec/data/convert_test/horizontal_ellipsis/test_horizontal_ellipsis.txt +0 -0
  59. data/spec/data/convert_test/kanji_num/test_kanji_num.txt +0 -0
  60. data/spec/data/convert_test/nonokagi/test_nonokagi.txt +0 -0
  61. data/spec/data/convert_test/replace/correct_test_replace.txt +1 -1
  62. data/spec/data/convert_test/replace/replace.txt +0 -0
  63. data/spec/data/convert_test/replace/test_replace.txt +0 -0
  64. data/spec/data/convert_test/ruby/correct_test_ruby.txt +3 -1
  65. data/spec/data/convert_test/ruby/test_ruby.txt +3 -0
  66. data/spec/data/convert_test/ruby_youon/test_ruby_youon.txt +0 -0
  67. data/spec/data/convert_test/sesame/test_sesame.txt +0 -0
  68. data/spec/data/convert_test/to_odd_leader/test_to_odd_leader.txt +0 -0
  69. data/spec/generator/convert_spec_gen.rb +2 -3
  70. data/spec/spec_helper.rb +2 -2
  71. metadata +29 -162
  72. data/lib/ruby.rb +0 -152
data/README.md CHANGED
@@ -24,147 +24,48 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
24
24
  更新履歴 - ChangeLog
25
25
  --------------------
26
26
 
27
-
28
- ### 1.6.4 : 2014/09/17
27
+ ### 1.7.0 : 2014/09/27
29
28
 
30
29
  #### 追加機能
31
- - `list` コマンドに `--echo` オプション(短縮:-e)を追加しました。パイプやリダ
32
- イレクトを経由してもリストをそのまま表示します。また、ANSIColorコードの削除
33
- も同時に行うので、--no-color オプションは必要ありません
30
+ - `list` コマンドの `--filter` オプションに `frozen` 及び `nonfrozen` が追加
31
+ されました。凍結状態のフィルタリングが可能になります。また、同時に複数の値を
32
+ 受け付けるようになりました
34
33
 
35
- ----
34
+ narou list -f frozen (凍結された小説のみ表示)
35
+ narou list -f nonfrozen (凍結されていない小説のみ表示)
36
+ narou list -f "ss nonfrozen" (凍結されていない短編を表示)
36
37
 
37
- ### 1.6.3 : 2014/09/11
38
+ #### 仕様変更
39
+ - 英文判定文字に `&:;_-` を追加しました
40
+ + 今までおかしかった例:Tuez-les tous, Dieu reconnaitra les siens)
41
+ - 8文字以上の半角アルファベットは全角に変換せずに半角のままになります
38
42
 
39
43
  #### Bug Fix
40
- - ハーメルン、Arcadiaにおいて小説が削除されている場合にエラーが出ていたのを修正
41
- - 1話も投稿されていない小説でエラーが出ていたのを修正
44
+ - 行頭が英文で始まる行がオートインデントできていなかったのを修正
42
45
 
43
- ----
46
+ #### その他
47
+ - 起動にかかる時間及び表示処理速度を向上させました(起動時間がv1.6に比べて約50%短縮)
44
48
 
45
- ### 1.6.2 : 2014/09/08
49
+ ----
46
50
 
47
- #### 仕様変更
48
- - あらすじだけ変更された場合も更新とみなすようになりました
51
+ ### 1.6.4 : 2014/09/17
49
52
 
50
- #### Bug Fix
51
- - `download.wait-steps` でウェイトを入れるタイミングがおかしくなっていたため、
52
- 503エラーが頻発するようになっていたのを修正
53
- - 完結しているにもかかわらず完結タグが付与されない場合があったのを修正。また、
54
- 完結していた小説が連載を再開した場合、完結タグを削除するようになりました
55
- - 話数が減っているにも関わらずダイジェスト化検知出来ない場合があったのを修正
53
+ #### 追加機能
54
+ - `list` コマンドに `--echo` オプション(短縮:-e)を追加しました。パイプやリダ
55
+ イレクトを経由してもリストをそのまま表示します。また、ANSIColorコードの削除
56
+ も同時に行うので、--no-color オプションは必要ありません
56
57
 
57
58
  ----
58
59
 
59
- ### 1.6.1 : 2014/09/05
60
+ ### 1.6.3 : 2014/09/11
60
61
 
61
62
  #### Bug Fix
62
- - Ruby1.9.3において `tag` コマンドが使用出来ない問題を修正
63
- - flag データを設定し、その後削除した場合に flag --convert-tag コマンドがクラッシュする問題を修正
63
+ - ハーメルン、Arcadiaにおいて小説が削除されている場合にエラーが出ていたのを修正
64
+ - 1話も投稿されていない小説でエラーが出ていたのを修正
64
65
 
65
66
  ----
66
67
 
67
- ### 1.6.0 : 2014/08/28
68
-
69
- #### 追加機能
70
- - **iBooks** での管理に対応しました
71
- + Mac OS X Mavericks以上が対象です
72
- + `narou s device=ibooks` で変更できます
73
- + 初回登録時はiBooksでEPUBファイルを開くので、ウィンドウが大量に開くことに
74
- ご注意ください。次回以降はiBooksの管理フォルダを直接更新してウィンドウが
75
- 開くことはありません
76
- - **JRuby** での実行に対応しました(Windowsでは環境変数JAVA_OPTSに
77
- -Dfile.encoding=UTF8を設定して下さい)
78
- - `diff` コマンドで外部ツールがなくても更新された部分の差分を表示できるように
79
- なりました
80
- + `difftool` が設定されていない場合、独自の差分表示処理を行います。
81
- 小説用なので一文字単位の修正がわかりやすいように調整してあります
82
-
83
- ![diff使用時のイメージ](https://raw.github.com/wiki/whiteleaf7/narou/images/diff_cap.png)
84
- - `tag` コマンドが追加されました
85
- + 小説に自由にタグを付けることができ、絞り込み等で使用出来ます
86
- + タグを追加: `narou tag -a akatsuki 0`
87
- + タグが付いた小説を表示: `narou tag akatsuki`
88
- + コマンドの対象小説をタグで指定: `narou update akatsuki`
89
- + その他詳細な説明は `narou tag -h` を参照して下さい
90
- - `list` コマンドが拡張されます
91
- + `--site` オプション(短縮: -s)が追加されました。掲載小説サイト名を合わせて
92
- 表示します
93
- + `--author` オプション(短縮:-a)が追加されました。作者名を合わせて表示します
94
- + `--tag` オプション(短縮: -t)が追加されました。タグで小説を検索出来ます
95
- * `narou l -t tagname` 、 `narou l -t "tag1 tag2"`
96
- * `narou l -t` と引数を省略すると全ての小説をタグつきで表示
97
- + `--grep` オプション(短縮: -g)が追加されました。リストの中から指定された
98
- 文字列で検索します。最終的に表示される内容から検索するため、作者名やサイト
99
- 名等そのままでは表示されない要素から検索したい場合、それぞれを表示するオプ
100
- ションも合わせて指定して下さい
101
- * 例1: リストから作者名に“紫炎”が含まれる小説を探したい場合
102
- - `narou list --author --grep 紫炎` 或いは `narou l -ag 紫炎`
103
- * 例2: 小説家になろう以外の小説を表示したい場合
104
- - `narou list --site --grep "-小説家になろう"` 或いは
105
- `narou l -sg "-小説家になろう"` (-をつけることでNOT検索)
106
- * 例3: ハーメルンの小説からSAOを含む小説を探す
107
- - `narou l -sg "ハーメルン SAO"` (スペース区切りによるAND検索)
108
- + listコマンドの結果をパイプで他のコマンドに接続できるようになりました
109
- * 例1: ハーメルに掲載されている小説にhamelnタグを付けたい
110
- - `narou l -sg ハーメルン | narou t -a hameln`
111
- * 例2: 短編を全て凍結したい
112
- - `narou l -f ss | narou freeze --on`
113
- * 注意点として、パイプでつないだ場合は remove コマンドは確認メッセージを
114
- 出さずに削除します
115
- - `convert` コマンドに `--ignore-force` オプションが追加されました。
116
- `narou s force.設定名=値` として強制上書きされる設定を一時的に無効にします
117
- - 空改行の削除処理を制御する `enable_pack_blank_line` オプションが追加されました
118
- + デフォルトでは有効です。無効にするには各小説の setting.ini に
119
- `enable_pack_blank_line=false` を追加するか、
120
- `narou s force.enable_pack_blank_line=false` を実行して下さい
121
- - `freeze` コマンドに強制凍結及び解除する `--on` 及び `--off` オプションが追加
122
- されました
123
-
124
- #### 仕様変更
125
- - `update.strong` の挙動を、「当日分は必ずDLする」から「当日分は内容を見て更新
126
- されているか確認する」に変更しました。またタイムスタンプを記録するようにし、
127
- アップデート時のパフォーマンスを向上させました
128
- - デバイス設定時に最低限必要な関連項目を設定変更するようになりました
129
- - 空改行の間引き具合を若干弱くしました
130
- - `list` コマンドの `--type` オプションを `--kind` (短縮:-k)に変更しました
131
- - 差分オブジェクトの書式を `20YY.MM.DD@hh;mm;ss` から `20YY.MM.DD@hh.mm.ss` に
132
- 変更します
133
- + このバージョンから反映。以前のバージョンで作成された差分は旧書式のままです
134
- - 新着のみの更新の場合差分データを作成しないように変更しました
135
- - `backup` コマンドで作成するZIPファイルの内部ファイルパス文字エンコーディング
136
- をOS毎に変更するようにしました
137
- + Windows = Windows-31J、その他OS = UTF-8
138
- - `flag` コマンドは非推奨になり、tagコマンドに統一されます。今後完結フラグを立
139
- てる場合、 `narou tag -a end 0` として下さい。flagコマンドは1.7.0で廃止される
140
- 予定です
141
- + flagデータをtagデータに移行する場合は `narou flag --convert-tag` を実行
142
- して下さい
143
- - 完結の情報を自動で付与するようになりました。完結を検知したら end タグを追加
144
- します
145
- + 現在は小説家になろう関連サイトとハーメルンのみ自動検知します
146
- - 選択肢を選ぶときエンターを押す必要がなくなりました
147
- - このバージョンからセマンティックバージョニングに移行します
148
- + Major.Minor.Teen という形式で、特別なアップデートでMajor、追加機能を含む
149
- アップデートでMinor、バグ修正のみのアップデートでTeenの番号を増やします
150
-
151
- #### Bug Fix
152
- - 小説が掲載サイトから削除されていない時(500や503)にも自動凍結していたのを修正
153
- - iBooksで閲覧時章タイトルページのレイアウトが崩れていたのを修正
154
- - iBooksで閲覧時Arcadiaの掲載アドレスがあるページでエラーがでていたのを修正 #47
155
- - ハーメルンで作者名が正常に取得できない場合があったのを修正 #48
156
- - ハーメルンで連載形式の短編が1話目しか取得できていなかったのを修正 #49
157
- - 自動字下げの判定処理が正常に動作していなかったのを修正
158
- - `diff` コマンドの差分表示時に更新日が挿入されない場合があったのを修正
159
- - `diff` コマンドで小説家になろう以外の小説の差分がHTMLタグ付きのまま表示されて
160
- いたのを修正
161
- - 未対応のURLを入力した場合にエラーが出るようになっていたのを修正
162
- - 小説家になろうの短編のあらすじで改行が無視されていたのを修正
163
- - 小説家になろうの短編のあらすじで先頭に縦棒(|)が入ってしまう問題に対応 #46
164
- - 小説家になろうの挿絵を認識出来ない場合があったのを修正
165
- - 前書き・後書き内にある挿絵を単ページ化出来なかったのを修正 #8
166
- - 漢数字変換で対応桁数以上を変換しようとしてクラッシュしていたのを修正
167
- - その他ヘルプ文の訂正や無駄な処理削減等多数の細かい調整
68
+ 過去の更新履歴は[こちらを参照](https://github.com/whiteleaf7/narou/blob/master/ChangeLog.md)
168
69
 
169
70
  ----
170
71
 
data/Rakefile CHANGED
@@ -8,5 +8,5 @@ begin
8
8
  spec.pattern = 'spec/**/*_spec.rb'
9
9
  spec.rspec_opts = ['-cr spec_helper']
10
10
  end
11
- rescue LoadError => e
11
+ rescue LoadError
12
12
  end
data/bin/narou CHANGED
File without changes
@@ -30,14 +30,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30
30
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
31
  =end
32
32
 
33
- alias :original_warn :warn
34
- unless $debug
35
- def warn(*a); end
36
- end
37
-
38
- require "termcolor"
39
-
40
- alias :warn :original_warn
33
+ require "termcolorlight"
41
34
 
42
35
  if RbConfig::CONFIG["host_os"] =~ /mswin(?!ce)|mingw|bccwin/i
43
36
  require_relative "extensions/windows"
@@ -41,7 +41,7 @@ module Command
41
41
  paths = Dir.glob("**/*").keep_if { |path|
42
42
  File.file?(path) && path.split("/", 2)[0] != BACKUP_DIR_NAME
43
43
  }
44
- FileUtils.mkdir(BACKUP_DIR_NAME) unless File.exists?(BACKUP_DIR_NAME)
44
+ FileUtils.mkdir(BACKUP_DIR_NAME) unless File.exist?(BACKUP_DIR_NAME)
45
45
  Zip.unicode_names = true unless Helper.os_windows?
46
46
  Zip::File.open(File.join(BACKUP_DIR_NAME, zipfilename), Zip::File::CREATE) do |zip|
47
47
  paths.each do |path|
@@ -127,7 +127,7 @@ module Command
127
127
  def clean_diff(id)
128
128
  cache_root_dir = Downloader.get_cache_root_dir(id)
129
129
  print Database.instance.get_data("id", id)["title"] + " の"
130
- unless File.exists?(cache_root_dir)
130
+ unless File.exist?(cache_root_dir)
131
131
  puts "差分はひとつもありません"
132
132
  return
133
133
  end
@@ -179,7 +179,7 @@ module Command
179
179
  cache_root_dir = Downloader.get_cache_root_dir(id)
180
180
  if cache_root_dir
181
181
  cache_dir = File.join(cache_root_dir, @options["view_diff_version"])
182
- cache_dir = nil unless File.exists?(cache_dir)
182
+ cache_dir = nil unless File.exist?(cache_dir)
183
183
  end
184
184
  else
185
185
  nth = @options["number"]
@@ -202,7 +202,7 @@ module Command
202
202
  cache_sections = []
203
203
  cache_section_list.each do |path|
204
204
  match_latest_path = File.join(novel_dir, File.basename(path))
205
- latest_novel_sections << YAML.load_file(match_latest_path) if File.exists?(match_latest_path)
205
+ latest_novel_sections << YAML.load_file(match_latest_path) if File.exist?(match_latest_path)
206
206
  cache_sections << YAML.load_file(path)
207
207
  end
208
208
 
@@ -240,7 +240,7 @@ module Command
240
240
  end
241
241
  puts "差分一覧"
242
242
  cache_list.each.with_index(1) do |cache_path, i|
243
- puts ("<bold><yellow>" + File.basename(cache_path) + " -#{i}</yellow></bold>").termcolor
243
+ puts "<bold><yellow>#{File.basename(cache_path)} -#{i}</yellow></bold>".termcolor
244
244
  cache_section_list = Dir.glob(File.join(cache_path, "*.yaml"))
245
245
  if cache_section_list.length > 0
246
246
  cache_section_list.map { |section_path|
@@ -258,7 +258,7 @@ module Command
258
258
  Database.instance.each do |id, data|
259
259
  next if Narou.novel_frozen?(id)
260
260
  cache_root_dir = Downloader.get_cache_root_dir(id)
261
- next unless File.exists?(cache_root_dir)
261
+ next unless File.exist?(cache_root_dir)
262
262
  FileUtils.remove_entry_secure(cache_root_dir)
263
263
  puts "#{data["title"]} の差分を削除しました"
264
264
  end
@@ -59,7 +59,7 @@ module Command
59
59
  end
60
60
 
61
61
  def print_prompt(targets)
62
- print "#{targets.count}> "
62
+ print "#{targets.size}> "
63
63
  end
64
64
 
65
65
  def interactive_mode
@@ -92,7 +92,7 @@ module Command
92
92
  super
93
93
  if argv.empty?
94
94
  targets = interactive_mode
95
- return if targets.count == 0
95
+ return if targets.size == 0
96
96
  argv += targets
97
97
  end
98
98
  tagname_to_ids(argv)
@@ -41,15 +41,7 @@ module Command
41
41
  end
42
42
 
43
43
  def output_freeze_list
44
- database = Database.instance
45
- puts "凍結中小説一覧"
46
- puts " ID | タイトル"
47
- Inventory.load("freeze", :local).each do |id, _|
48
- data = database.get_data("id", id)
49
- if data
50
- puts "#{id.to_s.rjust(3)} | #{data["title"]}"
51
- end
52
- end
44
+ List.execute!(%w(--filter frozen))
53
45
  end
54
46
 
55
47
  def execute(argv)
@@ -67,7 +67,7 @@ module Command
67
67
  end
68
68
  puts "<bold><green>AozoraEpub3の設定を行います</green></bold>".termcolor
69
69
  unless @global_setting["aozoraepub3dir"]
70
- puts ("<bold><red>" + "!!!WARNING!!!".center(70) + "</red></bold>").termcolor
70
+ puts "<bold><red>#{"!!!WARNING!!!".center(70)}</red></bold>".termcolor
71
71
  puts "AozoraEpub3の構成ファイルを書き換えます。narouコマンド用に別途新規インストールしておくことをオススメします"
72
72
  end
73
73
  aozora_path = ask_aozoraepub3_path
@@ -102,7 +102,7 @@ module Command
102
102
  src = ["AozoraEpub3.ini", "vertical_font.css", "DMincho.ttf"]
103
103
  dst = ["AozoraEpub3.ini", "template/OPS/css_custom/vertical_font.css", "template/OPS/fonts/DMincho.ttf"]
104
104
  puts "(次のファイルをコピーor上書きしました)"
105
- src.count.times do |i|
105
+ src.size.times do |i|
106
106
  src_full_path = File.join(Narou.get_preset_dir, src[i])
107
107
  dst_full_path = File.join(aozora_path, dst[i])
108
108
  FileUtils.install(src_full_path, dst_full_path)
@@ -131,8 +131,8 @@ module Command
131
131
  when input == ""
132
132
  break
133
133
  end
134
- print ("\n<bold><green>入力されたフォルダにAozoraEpub3がありません。" +
135
- "もう一度入力して下さい:</green></bold>\n&gt;").termcolor
134
+ print "\n<bold><green>入力されたフォルダにAozoraEpub3がありません。" \
135
+ "もう一度入力して下さい:</green></bold>\n&gt;".termcolor
136
136
  end
137
137
  nil
138
138
  end
@@ -11,7 +11,9 @@ module Command
11
11
 
12
12
  # MEMO: 0 は昔の小説を凍結したままな場合、novel_type が設定されていないので、
13
13
  # nil.to_i → 0 という互換性維持のため
14
- NOVEL_TYPE_LABEL = ["連載", "連載", "短編"]
14
+ NOVEL_TYPE_LABEL = %w(連載 連載 短編)
15
+
16
+ FILTERS_TYPE = Hash[*%w(series 連載 ss 短編 frozen 凍結 nonfrozen 非凍結)]
15
17
 
16
18
  def self.oneline_help
17
19
  "現在管理している小説の一覧を表示します"
@@ -19,7 +21,7 @@ module Command
19
21
 
20
22
  def initialize
21
23
  super("[<limit>] [options]")
22
- @opt.separator <<-EOS.termcolor
24
+ @opt.separator <<-EOS
23
25
 
24
26
  ・現在管理している小説の一覧を表示します
25
27
  ・表示されるIDは各コマンドで指定することで小説名等を入力する手間を省けます
@@ -33,6 +35,7 @@ module Command
33
35
  narou list 5 -l # 最近更新のあった5件表示
34
36
  narou list 10 -rl # 古い順に10件表示
35
37
  narou list -f ss # 短編小説だけ表示
38
+ narou list -f "ss frozen" # 凍結している短編だけ表示
36
39
 
37
40
  # 小説家になろうの小説のみを表示
38
41
  narou list --site --grep 小説家になろう
@@ -74,8 +77,9 @@ module Command
74
77
  @options["author"] = true
75
78
  }
76
79
  @opt.on("-f", "--filter VAL", String,
77
- "表示を絞るためのフィルターの種類(連載:series, 短編:ss)") { |filter|
78
- @options["filter"] = filter
80
+ "表示を絞るためのフィルター。スペース区切りで複数可\n" \
81
+ "#{' '*25}#{filter_type_help}") { |filter|
82
+ @options["filters"] = filter.downcase.split
79
83
  }
80
84
  @opt.on("-g", "--grep VAL", String,
81
85
  "指定された文字列でリストを検索する") { |search|
@@ -102,6 +106,33 @@ module Command
102
106
  true
103
107
  end
104
108
 
109
+ def filter_type_help
110
+ FILTERS_TYPE.map { |filter, info|
111
+ "#{filter}(#{info})"
112
+ }.join(",")
113
+ end
114
+
115
+ def test_filter(filters, novel_type, frozen)
116
+ apply_sum = filters.inject(0) do |sum, item|
117
+ apply = case item
118
+ when "series"
119
+ novel_type == 0 && novel_type == 1
120
+ when "ss"
121
+ novel_type == 2
122
+ when "frozen"
123
+ frozen
124
+ when "nonfrozen"
125
+ !frozen
126
+ else
127
+ error "不明なフィルターです(#{item})"
128
+ warn "filters = #{filter_type_help}"
129
+ exit 1
130
+ end
131
+ sum + (apply ? 1 : 0)
132
+ end
133
+ apply_sum == filters.count
134
+ end
135
+
105
136
  def header
106
137
  [
107
138
  " ID ", " 更新日 ",
@@ -115,24 +146,22 @@ module Command
115
146
  def output_list(novels)
116
147
  now = Time.now
117
148
  today = now.strftime("%y/%m/%d")
118
- filter = @options["filter"]
149
+ filters = @options["filters"] || []
119
150
  selected_lines = {}
120
151
  novels.each do |novel|
121
152
  novel_type = novel["novel_type"].to_i
122
- if filter
123
- if filter == "series" && novel_type != 0 && novel_type != 1
124
- next
125
- elsif filter == "ss" && novel_type != 2
126
- next
127
- end
153
+ id = novel["id"]
154
+ frozen = Narou.novel_frozen?(id)
155
+
156
+ unless filters.empty?
157
+ next unless test_filter(filters, novel_type, frozen)
128
158
  end
159
+
129
160
  if @options["tags"]
130
161
  next unless valid_tags?(novel, @options["tags"])
131
162
  end
132
- id = novel["id"]
133
- frozen = Narou.novel_frozen?(id)
134
163
  disp_id = ((frozen ? "*" : "") + id.to_s).rjust(4)
135
- disp_id = disp_id.sub("*", "<bold><cyan>*</cyan></bold>").termcolor if frozen
164
+ disp_id = disp_id.sub("*", "<bold><cyan>*</cyan></bold>") if frozen
136
165
  flags = novel["flags"] || {} # flagコマンドは1.6.0から非推奨
137
166
  tags = novel["tags"] || []
138
167
  flags["end"] ||= tags.include?("end")
@@ -162,14 +191,14 @@ module Command
162
191
  color = Tag.get_color(tag)
163
192
  "<bold><#{color}>#{tag.escape}</#{color}></bold>"
164
193
  }.join(",") : nil,
165
- ].compact.join(" | ").termcolor
194
+ ].compact.join(" | ")
166
195
  end
167
196
  if @options["grep"]
168
197
  @options["grep"].each do |search_word|
169
- selected_lines.keep_if { |id, line|
198
+ selected_lines.keep_if { |_, line|
170
199
  if search_word =~ /^-(.+)/
171
200
  # NOT検索
172
- not line.include?($1)
201
+ !line.include?($1)
173
202
  else
174
203
  line.include?(search_word)
175
204
  end
@@ -178,12 +207,12 @@ module Command
178
207
  end
179
208
  if STDOUT.tty?
180
209
  puts header
181
- puts selected_lines.values
210
+ puts selected_lines.values.join("\n").termcolor
182
211
  else
183
212
  if @options["echo"]
184
213
  # pipeにそのまま出力するときはansicolorコードが邪魔なので削除
185
214
  puts header
186
- puts $stdout.strip_color(selected_lines.values.join("\n"))
215
+ puts TermColorLight.strip_tag(selected_lines.values.join("\n"))
187
216
  else
188
217
  # pipeに接続するときはIDを渡す
189
218
  puts selected_lines.keys.join(" ")
@@ -197,7 +226,7 @@ module Command
197
226
  if !argv.empty? && argv.first =~ /^\d+$/
198
227
  num = argv.first.to_i
199
228
  else
200
- num = database_values.count
229
+ num = database_values.size
201
230
  end
202
231
  if @options["latest"]
203
232
  database_values = Database.instance.sort_by_last_update