amakanize 0.4.9 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/amakanize/author_name.rb +18 -12
  4. data/lib/amakanize/filters/base_filter.rb +4 -3
  5. data/lib/amakanize/filters/brackets_normalization_filter.rb +11 -8
  6. data/lib/amakanize/filters/continuous_spaces_normalization_filter.rb +15 -0
  7. data/lib/amakanize/filters/dash_between_alphabets_normalization_filter.rb +7 -4
  8. data/lib/amakanize/filters/html_unescape_filter.rb +7 -4
  9. data/lib/amakanize/filters/hyphen_minus_normalization_filter.rb +7 -4
  10. data/lib/amakanize/filters/normalization_filter.rb +7 -4
  11. data/lib/amakanize/filters/obvious_volume_number_deletion_filter.rb +23 -8
  12. data/lib/amakanize/filters/parentheses_deletion_filter.rb +7 -4
  13. data/lib/amakanize/filters/role_name_deletion_filter.rb +11 -8
  14. data/lib/amakanize/filters/space_between_exclamation_and_bracket_deletion_filter.rb +7 -4
  15. data/lib/amakanize/filters/space_deletion_filter.rb +7 -4
  16. data/lib/amakanize/filters/spaces_between_exclamations_deletion_filter.rb +7 -4
  17. data/lib/amakanize/filters/strip_filter.rb +7 -4
  18. data/lib/amakanize/filters/trailing_author_name_payload_deletion_filter.rb +7 -4
  19. data/lib/amakanize/filters/trailing_dash_deletion_filter.rb +7 -4
  20. data/lib/amakanize/filters/trailing_parentheses_deletion_filter.rb +10 -4
  21. data/lib/amakanize/filters/trailing_series_name_payload_deletion_filter.rb +8 -4
  22. data/lib/amakanize/filters/trailing_volume_number_deletion_filter.rb +10 -4
  23. data/lib/amakanize/series_name.rb +25 -18
  24. data/lib/amakanize/version.rb +1 -1
  25. data/lib/amakanize.rb +24 -24
  26. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98a21c103889533ae6835cd2976f8c34f79f32f2
4
- data.tar.gz: 4516e1b15d227f2ad76ad709062f4e64d762bd09
3
+ metadata.gz: c624806345fd98cdbd36f5f0b3b8a374270cfbc4
4
+ data.tar.gz: 71f031cf37ce3a73dcfc7c406f903adaaa82373a
5
5
  SHA512:
6
- metadata.gz: 846a6353a9dbc1f4a0dd9605bb1f37e311296d8bf6b5e3bfbb537bee061600789b01c0043e2fac82939cd9e47871d06ccdc6dca953f831762c516800c15b92ed
7
- data.tar.gz: 768c83aa6e7ab5947d48ef27a6e8fbee04b00c96031a2df0c34fdb9817c3e05c4566db5f8c794cea143a0bff3624edbfdd5a229c9bd94bc4b01a508016f7cc4d
6
+ metadata.gz: 4e86133b59f0b6bfec6b48dff69025e42b642bdc4cff0813dbe763ec8739d2f32d7555468790d88e244da24e20f87c3413b61b5916f5abff3e2944cbeb6167fa
7
+ data.tar.gz: 96e77bc51ebbf7eed3472d3b6561f592a55c249db1445b98925b5f2aabb5f08be1fce4597c97493e6779161f0edcfadf29d15781cc03891c4e1f08582e23f8e1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.5.0
2
+ - Remove volume number only one time
3
+ - Normalize continuous spaces
4
+
1
5
  ## 0.4.9
2
6
  - Fix a bug in the brackets normalization logic
3
7
 
@@ -1,16 +1,16 @@
1
1
  module Amakanize
2
2
  class AuthorName
3
3
  class << self
4
- # @return [Array<Amakan::Filters::BaseFilter>]
5
- def filters
6
- @filters ||= [
7
- ::Amakanize::Filters::HtmlUnescapeFilter.new,
8
- ::Amakanize::Filters::NormalizationFilter.new,
9
- ::Amakanize::Filters::HyphenMinusNormalizationFilter.new,
10
- ::Amakanize::Filters::ParenthesesDeletionFilter.new,
11
- ::Amakanize::Filters::RoleNameDeletionFilter.new,
12
- ::Amakanize::Filters::TrailingAuthorNamePayloadDeletionFilter.new,
13
- ::Amakanize::Filters::SpaceDeletionFilter.new,
4
+ # @return [Array<Class>]
5
+ def filter_classes
6
+ @filter_classes ||= [
7
+ ::Amakanize::Filters::HtmlUnescapeFilter,
8
+ ::Amakanize::Filters::NormalizationFilter,
9
+ ::Amakanize::Filters::HyphenMinusNormalizationFilter,
10
+ ::Amakanize::Filters::ParenthesesDeletionFilter,
11
+ ::Amakanize::Filters::RoleNameDeletionFilter,
12
+ ::Amakanize::Filters::TrailingAuthorNamePayloadDeletionFilter,
13
+ ::Amakanize::Filters::SpaceDeletionFilter,
14
14
  ]
15
15
  end
16
16
  end
@@ -22,9 +22,15 @@ module Amakanize
22
22
 
23
23
  # @note Override
24
24
  def to_s
25
- self.class.filters.inject(@raw) do |result, filter|
25
+ filters.inject(context: {}, output: @raw) do |result, filter|
26
26
  filter.call(result)
27
- end
27
+ end[:output]
28
+ end
29
+
30
+ private
31
+
32
+ def filters
33
+ @filters ||= self.class.filter_classes.map(&:new)
28
34
  end
29
35
  end
30
36
  end
@@ -1,9 +1,10 @@
1
1
  module Amakanize
2
2
  module Filters
3
3
  class BaseFilter
4
- # @param string [String]
5
- # @return [String]
6
- def call(string)
4
+ # @param context [Hash]
5
+ # @param output [String]
6
+ # @return [Hash]
7
+ def call(context:, output:)
7
8
  raise ::NotImplementedError
8
9
  end
9
10
  end
@@ -25,14 +25,17 @@ module Amakanize
25
25
  |.each_slice(2)
26
26
 
27
27
  # @note Override
28
- # @param string [String] e.g. `"IS〈インフィニット・ストラトス〉 1 (オーバーラップ文庫)"`
29
- # @return [String] e.g. `"IS (インフィニット・ストラトス) 1 (オーバーラップ文庫)"`
30
- def call(string)
31
- PAIRS.each_with_object(string) do |(open, close), result|
32
- result.gsub!(/#{open}([^\(]+?)#{close}/, '(\1)')
33
- end.gsub(/\s*\((.+?)\)(?:\z|(\s*))/) do
34
- " \(#{$1})#{' ' if $2}"
35
- end
28
+ # @param output [String] e.g. `"IS〈インフィニット・ストラトス〉 1 (オーバーラップ文庫)"`
29
+ # @return [Hash] e.g. `"IS (インフィニット・ストラトス) 1 (オーバーラップ文庫)"`
30
+ def call(context:, output:)
31
+ {
32
+ context: context,
33
+ output: PAIRS.each_with_object(output) do |(open, close), result|
34
+ result.gsub!(/#{open}([^\(]+?)#{close}/, '(\1)')
35
+ end.gsub(/\s*\((.+?)\)(?:\z|(\s*))/) do
36
+ " \(#{$1})#{' ' if $2}"
37
+ end
38
+ }
36
39
  end
37
40
  end
38
41
  end
@@ -0,0 +1,15 @@
1
+ module Amakanize
2
+ module Filters
3
+ class ContinuousSpacesNormalizationFilter < BaseFilter
4
+ # @note Override
5
+ # @param output [String] e.g. `"ウメハラ FIGHTING GAMERS!"`
6
+ # @return [Hash] e.g. `"ウメハラ FIGHTING GAMERS!"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.gsub(/\s+/, " "),
11
+ }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -2,10 +2,13 @@ module Amakanize
2
2
  module Filters
3
3
  class DashBetweenAlhabetsNormalizationFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"D.Grayーman"`
6
- # @return [String] e.g. `"D.Gray-man"`
7
- def call(string)
8
- string.gsub(/(\w)ー(\w)/, '\1-\2')
5
+ # @param output [String] e.g. `"D.Grayーman"`
6
+ # @return [Hash] e.g. `"D.Gray-man"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.gsub(/(\w)ー(\w)/, '\1-\2'),
11
+ }
9
12
  end
10
13
  end
11
14
  end
@@ -4,10 +4,13 @@ module Amakanize
4
4
  module Filters
5
5
  class HtmlUnescapeFilter < BaseFilter
6
6
  # @note Override
7
- # @param string [String] e.g. `"&lt;ハノカゲ&gt;"`
8
- # @return [String] e.g. `"ハノカゲ"`
9
- def call(string)
10
- ::CGI.unescapeHTML(string)
7
+ # @param output [String] e.g. `"&lt;ハノカゲ&gt;"`
8
+ # @return [Hash] e.g. `"ハノカゲ"`
9
+ def call(context:, output:)
10
+ {
11
+ context: context,
12
+ output: ::CGI.unescapeHTML(output),
13
+ }
11
14
  end
12
15
  end
13
16
  end
@@ -3,10 +3,13 @@ module Amakanize
3
3
  class HyphenMinusNormalizationFilter < BaseFilter
4
4
  # @note Override
5
5
  # @note Replace U+2010 (hyphen) with U+002D (hyphen/minus)
6
- # @param string [String] e.g. `"D.Gray‐man"`
7
- # @return [String] e.g. `"D.Gray-man"`
8
- def call(string)
9
- string.gsub("‐", "-")
6
+ # @param output [String] e.g. `"D.Gray‐man"`
7
+ # @return [Hash] e.g. `"D.Gray-man"`
8
+ def call(context:, output:)
9
+ {
10
+ context: context,
11
+ output: output.gsub("‐", "-"),
12
+ }
10
13
  end
11
14
  end
12
15
  end
@@ -4,10 +4,13 @@ module Amakanize
4
4
  module Filters
5
5
  class NormalizationFilter < BaseFilter
6
6
  # @note Override
7
- # @param string [String] e.g. `"ぽんかん(8)"`, `"ぽんかん⑧"`
8
- # @return [String] e.g. `"ぽんかん(8)"`, `"ぽんかん8"`
9
- def call(string)
10
- ::ActiveSupport::Multibyte::Unicode.normalize(string)
7
+ # @param output [String] e.g. `"ぽんかん(8)"`, `"ぽんかん⑧"`
8
+ # @return [Hash] e.g. `"ぽんかん(8)"`, `"ぽんかん8"`
9
+ def call(context:, output:)
10
+ {
11
+ context: context,
12
+ output: ::ActiveSupport::Multibyte::Unicode.normalize(output),
13
+ }
11
14
  end
12
15
  end
13
16
  end
@@ -1,15 +1,30 @@
1
1
  module Amakanize
2
2
  module Filters
3
3
  class ObviousVolumeNumberDeletionFilter < BaseFilter
4
+ PATTERN = Regexp.union(
5
+ /\s*#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}?#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版).*/,
6
+ /\s+#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}?#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版)?:\s+.*/,
7
+ /\s+#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\s+.*/,
8
+ /\s+Lv\.?\s*#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:\s+.*|\z)/,
9
+ /\s*\(#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}?#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\).*/,
10
+ /\s*\d+年\s*\d+(?:月|\/\d+\s*)号.*/,
11
+ /\s*\d{4}\s*(?:AUTUMN|SPRING|SUMMER|WINTER)/,
12
+ )
13
+
4
14
  # @note Override
5
- # @param string [String] e.g. `"刀語 第十一話 毒刀・鍍"`, `"アニウッド大通り 1: アニメ監督一家物語"`
6
- # @return [String] e.g. `"刀語"`, `"アニウッド大通り"`
7
- def call(string)
8
- string.gsub(/\s*#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版).*/, "")
9
- .gsub(/\s+#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版)?:\s+.*/, "")
10
- .gsub(/\s*\(#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\).*/, "")
11
- .gsub(/\s*\d+年\s*\d+(?:月|\/\d+\s*)号.*/, "")
12
- .gsub(/\s*\d{4}\s*(?:AUTUMN|SPRING|SUMMER|WINTER)/, "")
15
+ # @param output [String] e.g. `"刀語 第十一話 毒刀・鍍"`, `"アニウッド大通り 1: アニメ監督一家物語"`
16
+ # @return [Hash] e.g. `"刀語"`, `"アニウッド大通り"`
17
+ def call(context:, output:)
18
+ unless context[:volume_number_removed]
19
+ output = output.sub(PATTERN) do
20
+ context[:volume_number_removed] = true
21
+ ""
22
+ end
23
+ end
24
+ {
25
+ context: context,
26
+ output: output,
27
+ }
13
28
  end
14
29
  end
15
30
  end
@@ -2,10 +2,13 @@ module Amakanize
2
2
  module Filters
3
3
  class ParenthesesDeletionFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"ぽんかん(8)"`
6
- # @return [String] e.g. `"ぽんかん8"`
7
- def call(string)
8
- string.gsub(/\((\d+)\)/, '\1')
5
+ # @param output [String] e.g. `"ぽんかん(8)"`
6
+ # @return [Hash] e.g. `"ぽんかん8"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.gsub(/\((\d+)\)/, '\1'),
11
+ }
9
12
  end
10
13
  end
11
14
  end
@@ -13,14 +13,17 @@ module Amakanize
13
13
  )
14
14
 
15
15
  # @note Override
16
- # @param string [String] e.g. `"漫画:ハノカゲ"`, `"ハノカゲ:漫画"`
17
- # @return [String] e.g. `"ハノカゲ"`
18
- def call(string)
19
- string
20
- .gsub(%r<\A#{PATTERN_OF_ROLE_NAME}[:/]>, "")
21
- .gsub(%r<[:/]#{PATTERN_OF_ROLE_NAME}\z>, "")
22
- .gsub(%r<\A\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)>, "")
23
- .gsub(%r<\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)\z>, "")
16
+ # @param output [String] e.g. `"漫画:ハノカゲ"`, `"ハノカゲ:漫画"`
17
+ # @return [Hash] e.g. `"ハノカゲ"`
18
+ def call(context:, output:)
19
+ {
20
+ context: context,
21
+ output: output
22
+ .gsub(%r<\A#{PATTERN_OF_ROLE_NAME}[:/]>, "")
23
+ .gsub(%r<[:/]#{PATTERN_OF_ROLE_NAME}\z>, "")
24
+ .gsub(%r<\A\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)>, "")
25
+ .gsub(%r<\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)\z>, ""),
26
+ }
24
27
  end
25
28
  end
26
29
  end
@@ -2,10 +2,13 @@ module Amakanize
2
2
  module Filters
3
3
  class SpaceBetweenExclamationAndBracketDeletionFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"まおゆう魔王勇者 「この我のものとなれ、勇者よ」「断る! 」"`
6
- # @return [String] e.g. `"まおゆう魔王勇者 「この我のものとなれ、勇者よ」「断る!」"`
7
- def call(string)
8
- string.gsub(/!\s+」/, "!」")
5
+ # @param output [String] e.g. `"まおゆう魔王勇者 「この我のものとなれ、勇者よ」「断る! 」"`
6
+ # @return [Hash] e.g. `"まおゆう魔王勇者 「この我のものとなれ、勇者よ」「断る!」"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.gsub(/!\s+」/, "!」"),
11
+ }
9
12
  end
10
13
  end
11
14
  end
@@ -2,10 +2,13 @@ module Amakanize
2
2
  module Filters
3
3
  class SpaceDeletionFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"渡 航"`
6
- # @return [String] e.g. `"渡航"`
7
- def call(string)
8
- string.gsub(/\s+/, "")
5
+ # @param output [String] e.g. `"渡 航"`
6
+ # @return [Hash] e.g. `"渡航"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.gsub(/\s+/, ""),
11
+ }
9
12
  end
10
13
  end
11
14
  end
@@ -2,10 +2,13 @@ module Amakanize
2
2
  module Filters
3
3
  class SpacesBetweenExclamationsDeletionFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"ばくおん! !"`
6
- # @return [String] e.g. `"ばくおん!!"`
7
- def call(string)
8
- string.gsub(/!\s+!/, "!!")
5
+ # @param output [String] e.g. `"ばくおん! !"`
6
+ # @return [Hash] e.g. `"ばくおん!!"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.gsub(/!\s+!/, "!!"),
11
+ }
9
12
  end
10
13
  end
11
14
  end
@@ -2,10 +2,13 @@ module Amakanize
2
2
  module Filters
3
3
  class StripFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"  ハノカゲ  "`
6
- # @return [String] e.g. `"ハノカゲ"`
7
- def call(string)
8
- string.strip
5
+ # @param output [String] e.g. `"  ハノカゲ  "`
6
+ # @return [Hash] e.g. `"ハノカゲ"`
7
+ def call(context:, output:)
8
+ {
9
+ context: context,
10
+ output: output.strip,
11
+ }
9
12
  end
10
13
  end
11
14
  end
@@ -11,10 +11,13 @@ module Amakanize
11
11
  )
12
12
 
13
13
  # @note Override
14
- # @param string [String] e.g. `"ハノカゲ ほか"`
15
- # @return [String] e.g. `"ハノカゲ"`
16
- def call(string)
17
- string.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/, "")
14
+ # @param output [String] e.g. `"ハノカゲ ほか"`
15
+ # @return [Hash] e.g. `"ハノカゲ"`
16
+ def call(context:, output:)
17
+ {
18
+ context: context,
19
+ output: output.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/, ""),
20
+ }
18
21
  end
19
22
  end
20
23
  end
@@ -21,10 +21,13 @@ module Amakanize
21
21
  )
22
22
 
23
23
  # @note Override
24
- # @param string [String] e.g. `"アド・アストラ 1 ─スキピオとハンニバル─"`
25
- # @return [String] e.g. `"アド・アストラ 1"`
26
- def call(string)
27
- string.gsub(/\s*#{::Regexp.union(TOKENS)}.*/, "")
24
+ # @param output [String] e.g. `"アド・アストラ 1 ─スキピオとハンニバル─"`
25
+ # @return [Hash] e.g. `"アド・アストラ 1"`
26
+ def call(context:, output:)
27
+ {
28
+ context: context,
29
+ output: output.gsub(/\s*#{::Regexp.union(TOKENS)}.*/, ""),
30
+ }
28
31
  end
29
32
  end
30
33
  end
@@ -2,10 +2,16 @@ module Amakanize
2
2
  module Filters
3
3
  class TrailingParenthesesDeletionFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"魔法使いの嫁 通常版 4 (BLADE COMICS)"`
6
- # @return [String] e.g. `"魔法使いの嫁 通常版 4"`
7
- def call(string)
8
- string.sub(/\s*\([^\(]+\)\z/, "")
5
+ # @param output [String] e.g. `"魔法使いの嫁 通常版 4 (BLADE COMICS)"`
6
+ # @return [Hash] e.g. `"魔法使いの嫁 通常版 4"`
7
+ def call(context:, output:)
8
+ unless context[:volume_number_removed]
9
+ output = output.sub(/\s*\([^\(]+\)\z/, "")
10
+ end
11
+ {
12
+ context: context,
13
+ output: output,
14
+ }
9
15
  end
10
16
  end
11
17
  end
@@ -3,13 +3,17 @@ module Amakanize
3
3
  class TrailingSeriesNamePayloadDeletionFilter < BaseFilter
4
4
  PAYLOADS = %w(
5
5
  通常版
6
+ (未分類)
6
7
  )
7
8
 
8
9
  # @note Override
9
- # @param string [String] e.g. `"魔法使いの嫁 通常版"`
10
- # @return [String] e.g. `"魔法使いの嫁"`
11
- def call(string)
12
- string.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/, "")
10
+ # @param output [String] e.g. `"魔法使いの嫁 通常版"`
11
+ # @return [Hash] e.g. `"魔法使いの嫁"`
12
+ def call(context:, output:)
13
+ {
14
+ context: context,
15
+ output: output.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/, ""),
16
+ }
13
17
  end
14
18
  end
15
19
  end
@@ -2,10 +2,16 @@ module Amakanize
2
2
  module Filters
3
3
  class TrailingVolumeNumberDeletionFilter < BaseFilter
4
4
  # @note Override
5
- # @param string [String] e.g. `"やはり俺の青春ラブコメはまちがっている。4"`, `"ネトゲの嫁は女の子じゃないと思った? Lv.2"`
6
- # @return [String] e.g. `"やはり俺の青春ラブコメはまちがっている。"`, `"ネトゲの嫁は女の子じゃないと思った?"`
7
- def call(string)
8
- string.gsub(/,?\s*#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版)?(?:\s*\(.*?\))?\z/, "")
5
+ # @param output [String] e.g. `"やはり俺の青春ラブコメはまちがっている。4"`, `"ネトゲの嫁は女の子じゃないと思った? Lv.2"`
6
+ # @return [Hash] e.g. `"やはり俺の青春ラブコメはまちがっている。"`, `"ネトゲの嫁は女の子じゃないと思った?"`
7
+ def call(context:, output:)
8
+ if !context[:volume_number_removed] && !output.match(/[^\s]Lv\.?\s*#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\z/i)
9
+ output = output.sub(/,?\s*#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版)?(?:\s*\(.*?\))?\z/, "")
10
+ end
11
+ {
12
+ context: context,
13
+ output: output,
14
+ }
9
15
  end
10
16
  end
11
17
  end
@@ -1,22 +1,23 @@
1
1
  module Amakanize
2
2
  class SeriesName
3
3
  class << self
4
- # @return [Array<Amakan::Filters::BaseFilter>]
5
- def filters
6
- @filters ||= [
7
- ::Amakanize::Filters::HtmlUnescapeFilter.new,
8
- ::Amakanize::Filters::NormalizationFilter.new,
9
- ::Amakanize::Filters::HyphenMinusNormalizationFilter.new,
10
- ::Amakanize::Filters::DashBetweenAlhabetsNormalizationFilter.new,
11
- ::Amakanize::Filters::BracketsNormalizationFilter.new,
12
- ::Amakanize::Filters::SpacesBetweenExclamationsDeletionFilter.new,
13
- ::Amakanize::Filters::SpaceBetweenExclamationAndBracketDeletionFilter.new,
14
- ::Amakanize::Filters::ObviousVolumeNumberDeletionFilter.new,
15
- ::Amakanize::Filters::TrailingParenthesesDeletionFilter.new,
16
- ::Amakanize::Filters::TrailingDashDeletionFilter.new,
17
- ::Amakanize::Filters::TrailingSeriesNamePayloadDeletionFilter.new,
18
- ::Amakanize::Filters::TrailingVolumeNumberDeletionFilter.new,
19
- ::Amakanize::Filters::TrailingSeriesNamePayloadDeletionFilter.new,
4
+ # @return [Array<Class>]
5
+ def filter_classes
6
+ @filter_classes ||= [
7
+ ::Amakanize::Filters::HtmlUnescapeFilter,
8
+ ::Amakanize::Filters::NormalizationFilter,
9
+ ::Amakanize::Filters::ContinuousSpacesNormalizationFilter,
10
+ ::Amakanize::Filters::HyphenMinusNormalizationFilter,
11
+ ::Amakanize::Filters::DashBetweenAlhabetsNormalizationFilter,
12
+ ::Amakanize::Filters::BracketsNormalizationFilter,
13
+ ::Amakanize::Filters::SpacesBetweenExclamationsDeletionFilter,
14
+ ::Amakanize::Filters::SpaceBetweenExclamationAndBracketDeletionFilter,
15
+ ::Amakanize::Filters::ObviousVolumeNumberDeletionFilter,
16
+ ::Amakanize::Filters::TrailingParenthesesDeletionFilter,
17
+ ::Amakanize::Filters::TrailingDashDeletionFilter,
18
+ ::Amakanize::Filters::TrailingSeriesNamePayloadDeletionFilter,
19
+ ::Amakanize::Filters::TrailingVolumeNumberDeletionFilter,
20
+ ::Amakanize::Filters::TrailingSeriesNamePayloadDeletionFilter,
20
21
  ]
21
22
  end
22
23
  end
@@ -28,9 +29,15 @@ module Amakanize
28
29
 
29
30
  # @note Override
30
31
  def to_s
31
- self.class.filters.inject(@raw) do |result, filter|
32
+ filters.inject(context: {}, output: @raw) do |result, filter|
32
33
  filter.call(result)
33
- end
34
+ end[:output]
35
+ end
36
+
37
+ private
38
+
39
+ def filters
40
+ @filters ||= self.class.filter_classes.map(&:new)
34
41
  end
35
42
  end
36
43
  end
@@ -1,3 +1,3 @@
1
1
  module Amakanize
2
- VERSION = "0.4.9"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/amakanize.rb CHANGED
@@ -1,26 +1,3 @@
1
- require "amakanize/author_name"
2
- require "amakanize/author_names"
3
- require "amakanize/filters/base_filter"
4
- require "amakanize/filters/brackets_normalization_filter"
5
- require "amakanize/filters/dash_between_alphabets_normalization_filter"
6
- require "amakanize/filters/html_unescape_filter"
7
- require "amakanize/filters/hyphen_minus_normalization_filter"
8
- require "amakanize/filters/normalization_filter"
9
- require "amakanize/filters/obvious_volume_number_deletion_filter"
10
- require "amakanize/filters/parentheses_deletion_filter"
11
- require "amakanize/filters/role_name_deletion_filter"
12
- require "amakanize/filters/space_between_exclamation_and_bracket_deletion_filter"
13
- require "amakanize/filters/space_deletion_filter"
14
- require "amakanize/filters/spaces_between_exclamations_deletion_filter"
15
- require "amakanize/filters/strip_filter"
16
- require "amakanize/filters/trailing_author_name_payload_deletion_filter"
17
- require "amakanize/filters/trailing_dash_deletion_filter"
18
- require "amakanize/filters/trailing_parentheses_deletion_filter"
19
- require "amakanize/filters/trailing_series_name_payload_deletion_filter"
20
- require "amakanize/filters/trailing_volume_number_deletion_filter"
21
- require "amakanize/series_name"
22
- require "amakanize/version"
23
-
24
1
  module Amakanize
25
2
  PATTERN_OF_NUMERIC_CHARACTERS = /
26
3
  \d+(?:\.\d+)?
@@ -50,10 +27,33 @@ module Amakanize
50
27
  |\#
51
28
  |Episode\.?\s*
52
29
  |EPISODE\.?\s*
53
- |Lv\.?\s*
54
30
  |vol(?:ume)?\.?\s*
55
31
  |Vol(?:ume)?\.?\s*
56
32
  |VOL(?:UME)?\.?\s*
57
33
  |第
58
34
  /x
59
35
  end
36
+
37
+ require "amakanize/author_name"
38
+ require "amakanize/author_names"
39
+ require "amakanize/filters/base_filter"
40
+ require "amakanize/filters/brackets_normalization_filter"
41
+ require "amakanize/filters/continuous_spaces_normalization_filter"
42
+ require "amakanize/filters/dash_between_alphabets_normalization_filter"
43
+ require "amakanize/filters/html_unescape_filter"
44
+ require "amakanize/filters/hyphen_minus_normalization_filter"
45
+ require "amakanize/filters/normalization_filter"
46
+ require "amakanize/filters/obvious_volume_number_deletion_filter"
47
+ require "amakanize/filters/parentheses_deletion_filter"
48
+ require "amakanize/filters/role_name_deletion_filter"
49
+ require "amakanize/filters/space_between_exclamation_and_bracket_deletion_filter"
50
+ require "amakanize/filters/space_deletion_filter"
51
+ require "amakanize/filters/spaces_between_exclamations_deletion_filter"
52
+ require "amakanize/filters/strip_filter"
53
+ require "amakanize/filters/trailing_author_name_payload_deletion_filter"
54
+ require "amakanize/filters/trailing_dash_deletion_filter"
55
+ require "amakanize/filters/trailing_parentheses_deletion_filter"
56
+ require "amakanize/filters/trailing_series_name_payload_deletion_filter"
57
+ require "amakanize/filters/trailing_volume_number_deletion_filter"
58
+ require "amakanize/series_name"
59
+ require "amakanize/version"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amakanize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - r7kamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-11 00:00:00.000000000 Z
11
+ date: 2016-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -89,6 +89,7 @@ files:
89
89
  - lib/amakanize/author_names.rb
90
90
  - lib/amakanize/filters/base_filter.rb
91
91
  - lib/amakanize/filters/brackets_normalization_filter.rb
92
+ - lib/amakanize/filters/continuous_spaces_normalization_filter.rb
92
93
  - lib/amakanize/filters/dash_between_alphabets_normalization_filter.rb
93
94
  - lib/amakanize/filters/html_unescape_filter.rb
94
95
  - lib/amakanize/filters/hyphen_minus_normalization_filter.rb