narou 3.1.10 → 3.1.11

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e8758049a5df12f1acf6eb0235bedf7678379f3
4
- data.tar.gz: 1418c946aae5fc53c40c6b5ce4d8ae51cf780457
3
+ metadata.gz: 2ed0bc835e65c8fa3742828b718929dffafa3889
4
+ data.tar.gz: 23f4dea8c8760736965aa2215a318a6da0e5d013
5
5
  SHA512:
6
- metadata.gz: 3aa7541b6f853403360dd46dc356615561496df90ad036110f09966b9983041791e15fb22dce9ead4f3e0f7d19948947438ab208057071b6542b247bd55c3b81
7
- data.tar.gz: 3fb44128d5306ff09a9d07b595976b73b652c66c8273dcb962e324a57a4d94a50cab6f0da0fa4de65192b045cb9ba8700f84cb6b2dda7bb83fcbf1410de959e7
6
+ metadata.gz: 955798f4decda316da8de616815d6d94729a33781d817f04b52ce84fd51342b2c889aaec2e3090c0bc1bc0b56b869ee7f7da91872e3066c66a69c184d95f6e76
7
+ data.tar.gz: 41f897947418f62c3d36984bd7d266edd84761feda9af1d3ca2ec3751b225e43b243f7fd7b56a6b8b4303d0bec2a3ec212f03689addaf708553f6041581352cd
@@ -2,6 +2,16 @@
2
2
  更新履歴 - ChangeLog
3
3
  ====================
4
4
 
5
+ 3.1.11: 2017/11/21
6
+ ------------------
7
+ #### 追加機能
8
+ - trace コマンドを追加しました。エラー発生時の詳細ログを表示できます
9
+
10
+ #### 修正内容
11
+ - ダイジェストを検知した場合の選択肢で、選んだ順番によってクラッシュする場合が
12
+ ある不具合
13
+
14
+
5
15
  3.1.10: 2017/11/20
6
16
  ------------------
7
17
  #### 仕様変更
data/README.md CHANGED
@@ -33,6 +33,16 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
33
33
  更新履歴 - ChangeLog
34
34
  --------------------
35
35
 
36
+ 3.1.11: 2017/11/21
37
+ ------------------
38
+ #### 追加機能
39
+ - trace コマンドを追加しました。エラー発生時の詳細ログを表示できます
40
+
41
+ #### 修正内容
42
+ - ダイジェストを検知した場合の選択肢で、選んだ順番によってクラッシュする場合が
43
+ ある不具合
44
+
45
+
36
46
  3.1.10: 2017/11/20
37
47
  ------------------
38
48
  #### 仕様変更
@@ -48,37 +58,6 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
48
58
  + 最近のブラウザじゃないとたぶん動きません
49
59
  - Arcadiaでカテゴリがない古い小説をダウンロード出来ない場合がある
50
60
 
51
-
52
- 3.1.9: 2017/10/19
53
- ------------------
54
- #### 修正内容
55
- - Ruby 2.4 を使っている場合に mail コマンドを使うと警告メッセージが出ていた
56
- - cleanコマンドでエラーが出る場合があった
57
- - ハーメルンの仕様変更で小説が正しく取得出来なくなる場合があった
58
-
59
-
60
- 3.1.8: 2017/09/30
61
- ------------------
62
- #### 仕様変更
63
- - 3.1.7 でデフォルト設定をオフにした「かぎ括弧内自動連結」ですが、一旦またオン
64
- に戻しました。二転三転して申し訳ありません
65
- - コンソール上でのカラー表示時の処理方法を変更しました(Windowsのみ)
66
- + narou setting の color-parser を変更することで今までの処理方法に戻せます
67
- + `narou s color-parser=self` 今までの処理方法(独力でカラー処理)
68
- + `narou s color-parser=system` システムにカラー表示を任せる(デフォルト)
69
- + 稀に表示時にエラーになってしまう現象への対策です
70
-
71
-
72
- 3.1.7: 2017/09/28
73
- ------------------
74
- #### 仕様変更
75
- - かぎ括弧内自動連結のデフォルト設定をオフに変更しました。
76
- 今までと同じように標準で連結したい場合は default.enable_auto_join_in_brackets
77
- を有効にして下さい
78
-
79
- #### 修正内容
80
- - 小説家になろうのSSL化に対応
81
-
82
61
  ----
83
62
 
84
63
  「小説家になろう」は株式会社ヒナプロジェクトの登録商標です
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright 2013 whiteleaf. All rights reserved.
5
+ #
6
+
7
+ module Narou
8
+ module Backtracer
9
+ module_function
10
+
11
+ LOG_NAME = "trace_dump.txt"
12
+
13
+ def capture(&block)
14
+ raise "need a block" unless block
15
+ rescue_level = $debug ? Exception : StandardError
16
+ yield
17
+ rescue SystemExit => e
18
+ exit e.status
19
+ rescue SyntaxError => e
20
+ warn e
21
+ exit Narou::EXIT_ERROR_CODE
22
+ rescue rescue_level => e
23
+ traces = build_traces(e)
24
+ if $display_backtrace
25
+ warn traces
26
+ else
27
+ warn traces.lines[0..2]
28
+ warn ""
29
+ warn " エラーが発生したため終了しました。"
30
+ warn " 詳細なエラーログは narou trace で表示出来ます。もしくは --backtrace オプションを付けて再度実行して下さい。"
31
+ end
32
+ save_log(traces)
33
+ exit Narou::EXIT_ERROR_CODE
34
+ end
35
+
36
+ def argv=(argv)
37
+ @argv = argv.map(&:dup)
38
+ end
39
+
40
+ def argv
41
+ @argv || ARGV
42
+ end
43
+
44
+ def log_path
45
+ if Narou.get_root_dir
46
+ File.join(Narou.get_root_dir, LOG_NAME)
47
+ else
48
+ LOG_NAME
49
+ end
50
+ end
51
+
52
+ def build_traces(exception)
53
+ backtrace = exception.backtrace
54
+ head = "#{backtrace.shift}: #{exception.message.encode(Encoding::UTF_8)} (#{exception.class})"
55
+ buffer = StringIO.new
56
+ buffer.puts head
57
+ backtrace.each do |b|
58
+ buffer.puts " from #{b}"
59
+ end
60
+ buffer.string
61
+ end
62
+
63
+ def build_command
64
+ "#{$0} #{argv.join(' ')}"
65
+ end
66
+
67
+ def save_log(traces)
68
+ File.open(log_path, "w:UTF-8") do |fp|
69
+ fp.puts "--- #{Time.now.strftime("%Y/%m/%d %H:%M:%S")} ---"
70
+ fp.puts build_command
71
+ fp.puts
72
+ fp.puts traces
73
+ end
74
+ end
75
+ end
76
+ end
@@ -38,6 +38,7 @@ module Command
38
38
  "backup" => Backup,
39
39
  "csv" => Csv,
40
40
  "clean" => Clean,
41
+ "trace" => Trace,
41
42
  "help" => Help,
42
43
  "version" => Version,
43
44
  "init" => Init
@@ -48,12 +48,11 @@ module Command
48
48
  end
49
49
 
50
50
  def valid_target?(target)
51
- @site_settings ||= Downloader.load_settings
52
51
  case Downloader.get_target_type(target)
53
52
  when :ncode
54
53
  true
55
54
  when :url
56
- !!@site_settings.find { |s| s.multi_match_once(target, "url") }
55
+ !!SiteSetting.find(target)
57
56
  else
58
57
  false
59
58
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright 2013 whiteleaf. All rights reserved.
5
+ #
6
+
7
+ module Command
8
+ class Trace < CommandBase
9
+ def self.oneline_help
10
+ "エラーログを表示します"
11
+ end
12
+
13
+ def initialize
14
+ super(" ")
15
+ @opt.separator <<-MSG
16
+
17
+ ・エラーが発生した際に保存されたバックトレースログを表示します。
18
+ ・ログテキスト自体は #{Narou::Backtracer.log_path} に保存されています。
19
+ MSG
20
+ end
21
+
22
+ def execute(argv)
23
+ super
24
+ return unless File.exist?(Narou::Backtracer.log_path)
25
+ puts File.read(Narou::Backtracer.log_path)
26
+ end
27
+ end
28
+ end
@@ -22,7 +22,6 @@ require_relative "input"
22
22
  class Downloader
23
23
  include Narou::Eventable
24
24
 
25
- NOVEL_SITE_SETTING_DIR = "webnovel/"
26
25
  SECTION_SAVE_DIR_NAME = "本文" # 本文を保存するディレクトリ名
27
26
  CACHE_SAVE_DIR_NAME = "cache" # 差分用キャッシュ保存用ディレクトリ名
28
27
  RAW_DATA_DIR_NAME = "raw" # 本文の生データを保存するディレクトリ名
@@ -68,7 +67,7 @@ class Downloader
68
67
  toc_url = get_toc_url(target)
69
68
  setting = nil
70
69
  if toc_url
71
- setting = @@settings.find { |s| s.multi_match_once(toc_url, "url") }
70
+ setting = SiteSetting.find(toc_url)
72
71
  end
73
72
  setting
74
73
  end
@@ -135,7 +134,7 @@ class Downloader
135
134
  target = Narou.alias_to_id(target)
136
135
  case get_target_type(target)
137
136
  when :url
138
- setting = @@settings.find { |s| s.multi_match_once(target, "url") }
137
+ setting = SiteSetting.find(target)
139
138
  if setting
140
139
  toc_url = setting["toc_url"]
141
140
  return @@database.get_data_by_toc_url(toc_url, setting)
@@ -170,7 +169,7 @@ class Downloader
170
169
  target = Narou.alias_to_id(target)
171
170
  case get_target_type(target)
172
171
  when :url
173
- setting = @@settings.find { |s| s.multi_match_once(target, "url") }
172
+ setting = SiteSetting.find(target)
174
173
  return setting["toc_url"] if setting
175
174
  when :ncode
176
175
  @@database.each_value do |data|
@@ -178,7 +177,7 @@ class Downloader
178
177
  return data["toc_url"]
179
178
  end
180
179
  end
181
- return "#{@@narou["top_url"]}/#{target}/"
180
+ return "#{SiteSetting.narou["top_url"]}/#{target}/"
182
181
  when :id
183
182
  data = @@database[target.to_i]
184
183
  return data["toc_url"] if data
@@ -209,44 +208,6 @@ class Downloader
209
208
  data["title"]
210
209
  end
211
210
 
212
- def self.get_sitesetting_by_sitename(sitename)
213
- setting = @@settings.find { |s| s["name"] == sitename }
214
- return setting if setting
215
- error "#{sitename} の設定ファイルが見つかりません"
216
- exit Narou::EXIT_ERROR_CODE
217
- end
218
-
219
- #
220
- # 小説サイトの定義ファイルを全部読み込む
221
- #
222
- # スクリプト同梱の設定ファイルを読み込んだあと、ユーザの小説の管理ディレクトリ内にある
223
- # webnovel ディレクトリからも定義ファイルを読み込む
224
- #
225
- def self.load_settings
226
- settings = @@__settings_cache ||= []
227
- return settings unless settings.empty?
228
- load_paths = [
229
- File.join(Narou.get_script_dir, NOVEL_SITE_SETTING_DIR, "*.yaml"),
230
- File.join(Narou.get_root_dir, NOVEL_SITE_SETTING_DIR, "*.yaml")
231
- ].uniq.join("\0")
232
- Dir.glob(load_paths) do |path|
233
- setting = SiteSetting.load_file(path)
234
- if setting["name"] == "小説家になろう"
235
- @@narou = setting
236
- end
237
- settings << setting
238
- end
239
- if settings.empty?
240
- error "小説サイトの定義ファイルがひとつもありません"
241
- exit Narou::EXIT_ERROR_CODE
242
- end
243
- unless @@narou
244
- error "小説家になろうの定義ファイルが見つかりませんでした"
245
- exit Narou::EXIT_ERROR_CODE
246
- end
247
- settings
248
- end
249
-
250
211
  #
251
212
  # 差分用キャッシュの保存ディレクトリ取得
252
213
  #
@@ -278,7 +239,6 @@ class Downloader
278
239
  end
279
240
 
280
241
  if Narou.already_init?
281
- @@settings = load_settings
282
242
  @@database = Database.instance
283
243
  end
284
244
 
@@ -25,10 +25,6 @@ class NovelConverter
25
25
 
26
26
  attr_reader :use_dakuten_font
27
27
 
28
- if Narou.already_init?
29
- @@site_settings = Downloader.load_settings
30
- end
31
-
32
28
  #
33
29
  # 指定の小説を整形・変換する
34
30
  #
@@ -537,13 +533,6 @@ class NovelConverter
537
533
  end
538
534
  end
539
535
 
540
- #
541
- # 目次情報からサイト設定を取得
542
- #
543
- def find_site_setting(toc_url)
544
- @@site_settings.find { |s| s.multi_match_once(toc_url, "url") }
545
- end
546
-
547
536
  #
548
537
  # 各小説用の converter.rb 変換オブジェクトを生成
549
538
  #
@@ -611,7 +600,7 @@ class NovelConverter
611
600
  toc["story"] = @converter.convert(toc["story"], "story")
612
601
  html = HTML.new
613
602
  html.strip_decoration_tag = @setting.enable_strip_decoration_tag
614
- site_setting = find_site_setting(toc["toc_url"])
603
+ site_setting = SiteSetting.find(toc["toc_url"])
615
604
  html.set_illust_setting({current_url: site_setting["illust_current_url"],
616
605
  grep_pattern: site_setting["illust_grep_pattern"]})
617
606
 
@@ -7,8 +7,65 @@ require "yaml"
7
7
  require_relative "narou/api"
8
8
 
9
9
  class SiteSetting
10
- def self.load_file(path)
11
- new(path)
10
+ NOVEL_SITE_SETTING_DIR = "webnovel/"
11
+
12
+ class << self
13
+ #
14
+ # 小説サイトの定義ファイルを全部読み込む
15
+ #
16
+ # スクリプト同梱の設定ファイルを読み込んだあと、ユーザの小説の管理ディレクトリ内にある
17
+ # webnovel ディレクトリからも定義ファイルを読み込む
18
+ #
19
+ def load_settings
20
+ result = []
21
+ load_paths = [
22
+ File.join(Narou.get_script_dir, NOVEL_SITE_SETTING_DIR, "*.yaml"),
23
+ File.join(Narou.get_root_dir, NOVEL_SITE_SETTING_DIR, "*.yaml")
24
+ ].uniq.join("\0")
25
+ Dir.glob(load_paths) do |path|
26
+ setting = SiteSetting.load_file(path)
27
+ if setting["name"] == "小説家になろう"
28
+ @narou = setting
29
+ end
30
+ result << setting
31
+ end
32
+ if result.empty?
33
+ error "小説サイトの定義ファイルがひとつもありません"
34
+ exit Narou::EXIT_ERROR_CODE
35
+ end
36
+ unless @narou
37
+ error "小説家になろうの定義ファイルが見つかりませんでした"
38
+ exit Narou::EXIT_ERROR_CODE
39
+ end
40
+ # TODO: 配列の並び順で先頭をなろうにしておく。find するときになろうがすぐ引っかかるので効率的
41
+ # 設定ファイルに priority を追加して、それでソートする
42
+ result
43
+ end
44
+
45
+ def settings
46
+ @settings ||= load_settings
47
+ end
48
+
49
+ def narou
50
+ settings unless @narou
51
+ @narou.clone
52
+ end
53
+
54
+ def find(toc_url)
55
+ result = nil
56
+ settings.each do |s|
57
+ setting = s.clone
58
+ if setting.multi_match(toc_url, "url")
59
+ result = setting
60
+ break
61
+ end
62
+ end
63
+ result
64
+ end
65
+
66
+ def load_file(path)
67
+ new(path)
68
+ end
12
69
  end
13
70
 
14
71
  def [](key)
@@ -25,7 +82,11 @@ class SiteSetting
25
82
 
26
83
  def initialize(path)
27
84
  @match_values = {}
28
- @yaml_setting = YAML.load_file(path)
85
+ @yaml_setting = YAML.load_file(path).freeze
86
+ end
87
+
88
+ def initialize_copy(_obj)
89
+ @match_values = {}
29
90
  end
30
91
 
31
92
  def matched?(key)
@@ -4,5 +4,5 @@
4
4
  #
5
5
 
6
6
  module Narou
7
- VERSION = "3.1.10"
7
+ VERSION = "3.1.11"
8
8
  end
@@ -898,7 +898,7 @@ class Narou::AppServer < Sinatra::Base
898
898
  end
899
899
 
900
900
  get "/api/validate_url_regexp_list" do
901
- json Downloader.load_settings.map { |setting|
901
+ json SiteSetting.settings.map { |setting|
902
902
  Array(setting["url"]).map do |url|
903
903
  "(#{url.gsub(/\?<.+?>/, "?:").gsub("\\", "\\\\")})"
904
904
  end
@@ -974,7 +974,7 @@ class Narou::AppServer < Sinatra::Base
974
974
  end
975
975
 
976
976
  ALLOW_HOSTS = [].tap do |hosts|
977
- Downloader.load_settings.each do |s|
977
+ SiteSetting.settings.each do |s|
978
978
  hosts << s["domain"]
979
979
  end
980
980
  hosts.freeze
@@ -2,8 +2,8 @@
2
2
  var insertButtonBookmarklet = (function() {
3
3
  "DLボタン設置ブックマークレット v2.0";
4
4
  var site_settings = [
5
- <%- Downloader.load_settings.each.with_index do |setting, i| -%>
6
- <% setting.clear %>
5
+ <%- SiteSetting.settings.each.with_index do |s, i| -%>
6
+ <% setting = s.clone %>
7
7
  {
8
8
  <%- case setting["domain"] -%>
9
9
  <%- when "www.mai-net.net" -%>
@@ -16,7 +16,7 @@ var insertButtonBookmarklet = (function() {
16
16
  url: [<%= Array(setting["url"]).map do |url|
17
17
  %!new RegExp("^(#{url.gsub(/\?<.+?>/, "?:").gsub("\\", "\\\\\\\\")})")!
18
18
  end.join(",") -%>]
19
- }<%= i == Downloader.load_settings.length - 1 ? "" : "," %>
19
+ }<%= i == SiteSetting.settings.length - 1 ? "" : "," %>
20
20
  <%- end -%>
21
21
  ];
22
22
 
@@ -32,6 +32,16 @@ Gem::Specification.new do |gem|
32
32
  install_message = <<-EOS
33
33
  #{"*" * 60}
34
34
 
35
+ 3.1.11: 2017/11/21
36
+ ------------------
37
+ #### 追加機能
38
+ - trace コマンドを追加しました。エラー発生時の詳細ログを表示できます
39
+
40
+ #### 修正内容
41
+ - ダイジェストを検知した場合の選択肢で、選んだ順番によってクラッシュする場合が
42
+ ある不具合
43
+
44
+
35
45
  3.1.10: 2017/11/20
36
46
  ------------------
37
47
  #### 仕様変更
data/narou.rb CHANGED
@@ -7,11 +7,13 @@
7
7
  #
8
8
 
9
9
  require_relative "lib/extension"
10
+ require_relative "lib/backtracer"
10
11
 
11
12
  script_dir = File.expand_path(File.dirname(__FILE__))
12
13
  $debug = File.exist?(File.join(script_dir, "debug"))
13
14
 
14
15
  Encoding.default_external = Encoding::UTF_8
16
+ Narou::Backtracer.argv = ARGV
15
17
 
16
18
  if ARGV.delete("--time")
17
19
  now = Time.now
@@ -44,23 +46,8 @@ require_relative "lib/commandline"
44
46
 
45
47
  rescue_level = $debug ? Exception : StandardError
46
48
 
47
- begin
48
- CommandLine.run(ARGV.map { |v| v.dup })
49
- rescue SystemExit => e
50
- exit e.status
51
- rescue SyntaxError => e
52
- warn e
53
- exit Narou::EXIT_ERROR_CODE
54
- rescue rescue_level => e
55
- warn "#{$@.shift}: #{e.message.encode(Encoding::UTF_8)} (#{e.class})"
56
- if $display_backtrace
57
- $@.each do |b|
58
- warn " from #{b}"
59
- end
60
- else
61
- warn " エラーが発生したため終了しました。"
62
- warn " 詳細なエラーは --backtrace オプションを付けて再度実行して下さい。"
63
- end
64
- exit Narou::EXIT_ERROR_CODE
65
- end
49
+ class HogeError < StandardError; end
66
50
 
51
+ Narou::Backtracer.capture do
52
+ CommandLine.run(ARGV.map(&:dup))
53
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: narou
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.10
4
+ version: 3.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - whiteleaf7
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-20 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: termcolorlight
@@ -299,6 +299,7 @@ files:
299
299
  - bin/narou
300
300
  - circle.yml
301
301
  - commitversion
302
+ - lib/backtracer.rb
302
303
  - lib/color.rb
303
304
  - lib/command.rb
304
305
  - lib/command/alias.rb
@@ -321,6 +322,7 @@ files:
321
322
  - lib/command/send.rb
322
323
  - lib/command/setting.rb
323
324
  - lib/command/tag.rb
325
+ - lib/command/trace.rb
324
326
  - lib/command/update.rb
325
327
  - lib/command/update/general_lastup_updater.rb
326
328
  - lib/command/update/hotentry_manager.rb
@@ -499,6 +501,16 @@ metadata: {}
499
501
  post_install_message: |
500
502
  ************************************************************
501
503
 
504
+ 3.1.11: 2017/11/21
505
+ ------------------
506
+ #### 追加機能
507
+ - trace コマンドを追加しました。エラー発生時の詳細ログを表示できます
508
+
509
+ #### 修正内容
510
+ - ダイジェストを検知した場合の選択肢で、選んだ順番によってクラッシュする場合が
511
+ ある不具合
512
+
513
+
502
514
  3.1.10: 2017/11/20
503
515
  ------------------
504
516
  #### 仕様変更