middleman-blog-similar 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +33 -0
  5. data/.travis.yml +12 -21
  6. data/Gemfile +20 -35
  7. data/Guardfile +9 -9
  8. data/README.md +57 -82
  9. data/Rakefile +9 -7
  10. data/features/default.feature +21 -0
  11. data/features/support/env.rb +20 -10
  12. data/fixtures/test-app/source/{2014-05-08-article0.md → 2014-05-08-article0.html.md} +2 -1
  13. data/fixtures/test-app/source/{2014-05-09-article1.md → 2014-05-09-article1.html.md} +2 -0
  14. data/fixtures/test-app/source/{2014-05-10-article2.md → 2014-05-10-article2.html.md} +1 -1
  15. data/fixtures/test-app/source/{2014-05-11-article3.md → 2014-05-11-article3.html.md} +0 -0
  16. data/fixtures/test-app/source/{2014-05-12-article4.md → 2014-05-12-article4.html.md} +1 -0
  17. data/fixtures/test-app/source/{2014-05-13-article5.md → 2014-05-13-article5.html.md} +1 -0
  18. data/fixtures/test-app/source/{2014-05-14-article6.md → 2014-05-14-article6.html.md} +1 -0
  19. data/fixtures/test-app/source/index.html.slim +1 -0
  20. data/fixtures/test-app/source/layout.slim +1 -1
  21. data/fixtures/test-app/source/layouts/article.slim +6 -6
  22. data/lib/middleman-blog-similar.rb +3 -3
  23. data/lib/middleman-blog-similar/blog_article_extensions.rb +8 -20
  24. data/lib/middleman-blog-similar/database.rb +70 -0
  25. data/lib/middleman-blog-similar/extension.rb +37 -15
  26. data/lib/middleman-blog-similar/helpers.rb +12 -6
  27. data/lib/middleman-blog-similar/models/article.rb +33 -0
  28. data/lib/middleman-blog-similar/models/migration.rb +32 -0
  29. data/lib/middleman-blog-similar/models/tag.rb +10 -0
  30. data/lib/middleman-blog-similar/models/tagging.rb +10 -0
  31. data/lib/middleman-blog-similar/resource_list_manipulator.rb +19 -0
  32. data/lib/middleman-blog-similar/tagger/entagger.rb +17 -0
  33. data/lib/middleman-blog-similar/tagger/mecab.rb +19 -0
  34. data/lib/middleman-blog-similar/tagger/tags.rb +13 -0
  35. data/lib/middleman-blog-similar/version.rb +1 -1
  36. data/lib/middleman_extension.rb +0 -1
  37. data/middleman-blog-similar.gemspec +18 -13
  38. data/spec/middleman-blog-similar/extension_spec.rb +44 -1
  39. data/spec/middleman-blog-similar/tagger_spec.rb +24 -0
  40. data/spec/spec_helper.rb +33 -24
  41. metadata +77 -72
  42. data/features/damerau_levenshtein.feature +0 -20
  43. data/features/levenshtein.feature +0 -20
  44. data/features/word_frequency.feature +0 -15
  45. data/lib/middleman-blog-similar/algorithm.rb +0 -19
  46. data/lib/middleman-blog-similar/algorithm/damerau_levenshtein.rb +0 -7
  47. data/lib/middleman-blog-similar/algorithm/levenshtein.rb +0 -7
  48. data/lib/middleman-blog-similar/algorithm/unigrams.csv +0 -21089
  49. data/lib/middleman-blog-similar/algorithm/word_frequency.rb +0 -69
  50. data/lib/middleman-blog-similar/algorithm/word_frequency/mecab.rb +0 -22
  51. data/lib/middleman-blog-similar/algorithm/word_frequency/tree_tagger.rb +0 -20
  52. data/spec/helper_spec.rb +0 -4
  53. data/spec/middleman-blog-similar/algorithm/damerau_levenshtein_spec.rb +0 -42
  54. data/spec/middleman-blog-similar/algorithm/levenshtein_spec.rb +0 -42
  55. data/spec/middleman-blog-similar/algorithm/word_frequency/mecab_spec.rb +0 -41
  56. data/spec/middleman-blog-similar/algorithm/word_frequency/tree_tagger_spec.rb +0 -52
  57. data/spec/middleman-blog-similar/algorithm/word_frequency_spec.rb +0 -73
  58. data/spec/middleman-blog-similar/algorithm_spec.rb +0 -40
@@ -0,0 +1,19 @@
1
+ require 'natto'
2
+
3
+ module Middleman
4
+ module Blog
5
+ module Similar
6
+ module Tagger
7
+ class Mecab
8
+ def call(article)
9
+ Natto::MeCab.new.parse(article.body.gsub(%r{</?[^>]+>}, ''))
10
+ .split("\n")
11
+ .map { |l| l.split("\t") }
12
+ .select { |l| l[1] && l[1].start_with?('名詞,一般') }
13
+ .map { |l| l[0] }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module Middleman
2
+ module Blog
3
+ module Similar
4
+ module Tagger
5
+ class Tags
6
+ def call(article)
7
+ article.tags
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,7 +1,7 @@
1
1
  module Middleman
2
2
  module Blog
3
3
  module Similar
4
- VERSION = "1.1.1"
4
+ VERSION = '2.0.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,2 +1 @@
1
1
  require 'middleman-blog-similar'
2
-
@@ -1,21 +1,26 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "middleman-blog-similar/version"
2
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
+ require 'middleman-blog-similar/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "middleman-blog-similar"
6
+ s.name = 'middleman-blog-similar'
7
7
  s.version = Middleman::Blog::Similar::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Atsushi Nagase"]
10
- s.email = ["a@ngs.io"]
11
- s.homepage = "https://github.com/ngs/middleman-blog-similar"
12
- s.summary = %q{Similar article extension for middleman-blog}
13
- s.description = %q{Similar article extension for middleman-blog}
14
- s.license = "MIT"
9
+ s.authors = ['Atsushi Nagase']
10
+ s.email = ['a@ngs.io']
11
+ s.homepage = 'https://github.com/ngs/middleman-blog-similar'
12
+ s.summary = 'Similar article extension for middleman-blog'
13
+ s.description = <<-EOF
14
+ Similar article extension for middleman-blog.
15
+ Finds similar articles using tags, part-of-speech or custom lambda.
16
+ EOF
17
+ s.license = 'MIT'
15
18
  s.files = `git ls-files -z`.split("\0")
16
19
  s.test_files = `git ls-files -z -- {fixtures,features,spec}/*`.split("\0")
17
- s.require_paths = ["lib"]
18
- s.add_runtime_dependency("middleman-core", ["~> 3.2" ])
19
- s.add_runtime_dependency("middleman-blog", ["~> 3.5" ])
20
- s.add_runtime_dependency("fast-stemmer", ["~> 1.0.2"])
20
+ s.require_paths = ['lib']
21
+ s.required_ruby_version = '>= 2.2.0'
22
+ s.add_runtime_dependency 'activerecord', '~> 5.0', '>= 5.0.0'
23
+ s.add_runtime_dependency 'middleman-core', '~> 4.0', '>= 4.0.0'
24
+ s.add_runtime_dependency 'middleman-blog', '~> 4.0', '>= 4.0.0'
25
+ s.add_dependency 'sqlite3', '~> 1.3'
21
26
  end
@@ -1,4 +1,47 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Middleman::Blog::SimilarExtension' do
3
+ # rubocop:disable Metrics/BlockLength
4
+ describe Middleman::Blog::SimilarExtension do
5
+ before(:all) { @app = middleman_app('test-app') { activate :similar, db: ':memory:' } }
6
+ let(:app) { @app }
7
+ let(:resource) { app.sitemap.resources.select { |res| res.page_id == page_id }.first }
8
+ let(:page_id) { '2014-05-08-article0' }
9
+ describe 'activation' do
10
+ subject { app.extensions }
11
+ its([:similar]) { is_expected.not_to be_nil }
12
+ its([:blog]) { is_expected.not_to be_nil }
13
+ context 'with unknown tagger' do
14
+ let(:app) { middleman_app('test-app') { activate :similar, db: ':memory:', tagger: 'hoge' } }
15
+ it { expect { app }.to raise_error LoadError, 'cannot load such file -- middleman-blog-similar/tagger/hoge' }
16
+ end
17
+ context 'with invalid tagger' do
18
+ let(:app) { middleman_app('test-app') { activate :similar, db: ':memory:', tagger: 1 } }
19
+ it { expect { app }.to raise_error RuntimeError, /Invalid type for tagger option/ }
20
+ end
21
+ end
22
+ describe 'results' do
23
+ subject { resource.similar_articles.map { |a| [a.page_id, a.data.category || '<none>'].concat a.tags } }
24
+ it { is_expected.to have(4).items }
25
+ its([0]) { is_expected.to eq %w(2014-05-14-article6 <none> dog Brown cat) }
26
+ its([1]) { is_expected.to eq %w(2014-05-12-article4 <none> dog cat fox) }
27
+ its([2]) { is_expected.to eq %w(2014-05-09-article1 test dog cat) }
28
+ its([3]) { is_expected.to eq %w(2014-05-13-article5 <none> dog) }
29
+ context 'when configured with weight map' do
30
+ before :all do
31
+ @app = middleman_app('test-app') do
32
+ activate :similar,
33
+ db: ':memory:',
34
+ tagger: {
35
+ tags: 1,
36
+ category: [2, ->(article) { article.data.category ? [article.data.category] : [] }]
37
+ }
38
+ end
39
+ end
40
+ it { is_expected.to have(4).items }
41
+ its([0]) { is_expected.to eq %w(2014-05-09-article1 test dog cat) }
42
+ its([1]) { is_expected.to eq %w(2014-05-14-article6 <none> dog Brown cat) }
43
+ its([2]) { is_expected.to eq %w(2014-05-12-article4 <none> dog cat fox) }
44
+ its([3]) { is_expected.to eq %w(2014-05-13-article5 <none> dog) }
45
+ end
46
+ end
4
47
  end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'tagger' do
4
+ before(:all) { @app = middleman_app('test-app') {} }
5
+ let(:app) { @app }
6
+ let(:resource) { app.sitemap.resources.select { |res| res.page_id == page_id }.first }
7
+ let(:page_id) { '2014-05-08-article0' }
8
+ subject { described_class.new.call resource }
9
+ describe ::Middleman::Blog::Similar::Tagger::Tags do
10
+ it { is_expected.to eq %w(dog cat brown) }
11
+ end
12
+ describe ::Middleman::Blog::Similar::Tagger::Mecab do
13
+ let(:page_id) { '2014-05-11-article3' }
14
+ it { is_expected.to eq %w(叫び 悪口 教師 西洋 尻 時分 坊ちゃん 国家 この世 人間 国家 隙) }
15
+ context 'written in English' do
16
+ let(:page_id) { '2014-05-10-article2' }
17
+ it { is_expected.to eq %w(quick brown fox jumps over the lazy dog dog dog) }
18
+ end
19
+ end
20
+ describe ::Middleman::Blog::Similar::Tagger::Entagger do
21
+ let(:page_id) { '2014-05-10-article2' }
22
+ it { is_expected.to eq %w(fox jumps dog) }
23
+ end
24
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,25 +2,41 @@ PROJECT_ROOT_PATH = File.dirname(File.dirname(__FILE__))
2
2
 
3
3
  require 'rubygems'
4
4
  $LOAD_PATH.unshift File.join(PROJECT_ROOT_PATH, 'lib')
5
- require 'spork'
6
5
  require 'rspec'
7
- require "middleman-core"
8
- require "middleman-blog"
9
- require "middleman-blog/helpers"
6
+ require 'rspec/collection_matchers'
7
+ require 'rspec/its'
8
+ require 'middleman-core'
9
+ require 'middleman-blog'
10
+ require 'middleman-blog/helpers'
11
+
12
+ require 'codeclimate-test-reporter'
13
+ require 'coveralls'
14
+ require 'simplecov'
15
+
16
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
17
+ Coveralls::SimpleCov::Formatter,
18
+ SimpleCov::Formatter::HTMLFormatter,
19
+ CodeClimate::TestReporter::Formatter
20
+ ]
21
+
22
+ SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/..'))
23
+ SimpleCov.start
24
+
25
+ ENV['COVERALLS_REPO_TOKEN'] && Coveralls.wear!
10
26
 
11
27
  module SpecHelpers
12
28
  include FileUtils
13
29
 
14
- def middleman_app fixture_path, &block
15
- tmp_dir = File.expand_path("../../tmp", __FILE__)
16
- fixture_dir = File.expand_path("../../fixtures", __FILE__)
17
- fixture_tmp = File.join tmp_dir, "rspec"
30
+ def middleman_app(fixture_path, &block)
31
+ tmp_dir = File.expand_path('../../tmp', __FILE__)
32
+ fixture_dir = File.expand_path('../../fixtures', __FILE__)
33
+ fixture_tmp = File.join tmp_dir, 'rspec'
18
34
  root_dir = File.join fixture_tmp, fixture_path
19
35
  rmtree fixture_tmp
20
36
  mkdir_p tmp_dir
21
37
  cp_r fixture_dir, fixture_tmp
22
- ENV["MM_SOURCE"] = 'source'
23
- ENV["MM_ROOT"] = root_dir
38
+ ENV['MM_SOURCE'] = 'source'
39
+ ENV['MM_ROOT'] = root_dir
24
40
  initialize_commands = @initialize_commands || []
25
41
  initialize_commands.unshift block
26
42
  initialize_commands.unshift lambda {
@@ -28,7 +44,7 @@ module SpecHelpers
28
44
  set :show_exceptions, false
29
45
  activate :blog
30
46
  }
31
- Middleman::Application.server.inst do
47
+ ::Middleman::Application.new do
32
48
  initialize_commands.each do |p|
33
49
  instance_exec(&p)
34
50
  end
@@ -36,23 +52,16 @@ module SpecHelpers
36
52
  end
37
53
  end
38
54
 
39
- Spork.prefork do
40
- RSpec.configure do |config|
41
- config.include SpecHelpers
42
- end
43
- require "middleman-blog-similar"
44
- require "middleman-blog-similar/extension"
55
+ RSpec.configure do |config|
56
+ config.include SpecHelpers
45
57
  end
46
58
 
47
- Spork.each_run do; end
48
-
49
- if ENV['CODECLIMATE_REPO_TOKEN']
50
- CodeClimate::TestReporter.start
51
- require "codeclimate-test-reporter"
52
- end
59
+ require 'middleman-blog-similar/extension'
60
+ require 'middleman-blog-similar'
61
+ Dir.glob(PROJECT_ROOT_PATH + '/lib/middleman-blog-similar/tagger/*') { |file| require file }
53
62
 
54
63
  class String
55
64
  def unindent
56
- gsub(/^#{scan(/^\s*/).min_by{|l|l.length}}/, "").sub(/\n$/, '')
65
+ gsub(/^#{scan(/^\s*/).min_by(&:length)}/, '').sub(/\n$/, '')
57
66
  end
58
67
  end
metadata CHANGED
@@ -1,66 +1,102 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-blog-similar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atsushi Nagase
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-17 00:00:00.000000000 Z
11
+ date: 2017-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.0.0
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: middleman-core
15
35
  requirement: !ruby/object:Gem::Requirement
16
36
  requirements:
17
- - - ~>
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.0'
40
+ - - ">="
18
41
  - !ruby/object:Gem::Version
19
- version: '3.2'
42
+ version: 4.0.0
20
43
  type: :runtime
21
44
  prerelease: false
22
45
  version_requirements: !ruby/object:Gem::Requirement
23
46
  requirements:
24
- - - ~>
47
+ - - "~>"
25
48
  - !ruby/object:Gem::Version
26
- version: '3.2'
49
+ version: '4.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 4.0.0
27
53
  - !ruby/object:Gem::Dependency
28
54
  name: middleman-blog
29
55
  requirement: !ruby/object:Gem::Requirement
30
56
  requirements:
31
- - - ~>
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '4.0'
60
+ - - ">="
32
61
  - !ruby/object:Gem::Version
33
- version: '3.5'
62
+ version: 4.0.0
34
63
  type: :runtime
35
64
  prerelease: false
36
65
  version_requirements: !ruby/object:Gem::Requirement
37
66
  requirements:
38
- - - ~>
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4.0'
70
+ - - ">="
39
71
  - !ruby/object:Gem::Version
40
- version: '3.5'
72
+ version: 4.0.0
41
73
  - !ruby/object:Gem::Dependency
42
- name: fast-stemmer
74
+ name: sqlite3
43
75
  requirement: !ruby/object:Gem::Requirement
44
76
  requirements:
45
- - - ~>
77
+ - - "~>"
46
78
  - !ruby/object:Gem::Version
47
- version: 1.0.2
79
+ version: '1.3'
48
80
  type: :runtime
49
81
  prerelease: false
50
82
  version_requirements: !ruby/object:Gem::Requirement
51
83
  requirements:
52
- - - ~>
84
+ - - "~>"
53
85
  - !ruby/object:Gem::Version
54
- version: 1.0.2
55
- description: Similar article extension for middleman-blog
86
+ version: '1.3'
87
+ description: |2
88
+ Similar article extension for middleman-blog.
89
+ Finds similar articles using tags, part-of-speech or custom lambda.
56
90
  email:
57
91
  - a@ngs.io
58
92
  executables: []
59
93
  extensions: []
60
94
  extra_rdoc_files: []
61
95
  files:
62
- - .gitignore
63
- - .travis.yml
96
+ - ".gitignore"
97
+ - ".rspec"
98
+ - ".rubocop.yml"
99
+ - ".travis.yml"
64
100
  - CHANGELOG.md
65
101
  - CONTRIBUTING.md
66
102
  - Gemfile
@@ -68,43 +104,37 @@ files:
68
104
  - LICENSE.md
69
105
  - README.md
70
106
  - Rakefile
71
- - features/damerau_levenshtein.feature
72
- - features/levenshtein.feature
107
+ - features/default.feature
73
108
  - features/support/env.rb
74
- - features/word_frequency.feature
75
- - fixtures/test-app/source/2014-05-08-article0.md
76
- - fixtures/test-app/source/2014-05-09-article1.md
77
- - fixtures/test-app/source/2014-05-10-article2.md
78
- - fixtures/test-app/source/2014-05-11-article3.md
79
- - fixtures/test-app/source/2014-05-12-article4.md
80
- - fixtures/test-app/source/2014-05-13-article5.md
81
- - fixtures/test-app/source/2014-05-14-article6.md
109
+ - fixtures/test-app/source/2014-05-08-article0.html.md
110
+ - fixtures/test-app/source/2014-05-09-article1.html.md
111
+ - fixtures/test-app/source/2014-05-10-article2.html.md
112
+ - fixtures/test-app/source/2014-05-11-article3.html.md
113
+ - fixtures/test-app/source/2014-05-12-article4.html.md
114
+ - fixtures/test-app/source/2014-05-13-article5.html.md
115
+ - fixtures/test-app/source/2014-05-14-article6.html.md
82
116
  - fixtures/test-app/source/index.html.slim
83
117
  - fixtures/test-app/source/layout.slim
84
118
  - fixtures/test-app/source/layouts/article.slim
85
119
  - fixtures/test-app/source/page.html.slim
86
120
  - lib/middleman-blog-similar.rb
87
- - lib/middleman-blog-similar/algorithm.rb
88
- - lib/middleman-blog-similar/algorithm/damerau_levenshtein.rb
89
- - lib/middleman-blog-similar/algorithm/levenshtein.rb
90
- - lib/middleman-blog-similar/algorithm/unigrams.csv
91
- - lib/middleman-blog-similar/algorithm/word_frequency.rb
92
- - lib/middleman-blog-similar/algorithm/word_frequency/mecab.rb
93
- - lib/middleman-blog-similar/algorithm/word_frequency/tree_tagger.rb
94
121
  - lib/middleman-blog-similar/blog_article_extensions.rb
122
+ - lib/middleman-blog-similar/database.rb
95
123
  - lib/middleman-blog-similar/extension.rb
96
124
  - lib/middleman-blog-similar/helpers.rb
125
+ - lib/middleman-blog-similar/models/article.rb
126
+ - lib/middleman-blog-similar/models/migration.rb
127
+ - lib/middleman-blog-similar/models/tag.rb
128
+ - lib/middleman-blog-similar/models/tagging.rb
129
+ - lib/middleman-blog-similar/resource_list_manipulator.rb
130
+ - lib/middleman-blog-similar/tagger/entagger.rb
131
+ - lib/middleman-blog-similar/tagger/mecab.rb
132
+ - lib/middleman-blog-similar/tagger/tags.rb
97
133
  - lib/middleman-blog-similar/version.rb
98
134
  - lib/middleman_extension.rb
99
135
  - middleman-blog-similar.gemspec
100
- - spec/helper_spec.rb
101
- - spec/middleman-blog-similar/algorithm/damerau_levenshtein_spec.rb
102
- - spec/middleman-blog-similar/algorithm/levenshtein_spec.rb
103
- - spec/middleman-blog-similar/algorithm/word_frequency/mecab_spec.rb
104
- - spec/middleman-blog-similar/algorithm/word_frequency/tree_tagger_spec.rb
105
- - spec/middleman-blog-similar/algorithm/word_frequency_spec.rb
106
- - spec/middleman-blog-similar/algorithm_spec.rb
107
136
  - spec/middleman-blog-similar/extension_spec.rb
137
+ - spec/middleman-blog-similar/tagger_spec.rb
108
138
  - spec/spec_helper.rb
109
139
  homepage: https://github.com/ngs/middleman-blog-similar
110
140
  licenses:
@@ -116,43 +146,18 @@ require_paths:
116
146
  - lib
117
147
  required_ruby_version: !ruby/object:Gem::Requirement
118
148
  requirements:
119
- - - '>='
149
+ - - ">="
120
150
  - !ruby/object:Gem::Version
121
- version: '0'
151
+ version: 2.2.0
122
152
  required_rubygems_version: !ruby/object:Gem::Requirement
123
153
  requirements:
124
- - - '>='
154
+ - - ">="
125
155
  - !ruby/object:Gem::Version
126
156
  version: '0'
127
157
  requirements: []
128
158
  rubyforge_project:
129
- rubygems_version: 2.0.14
159
+ rubygems_version: 2.6.8
130
160
  signing_key:
131
161
  specification_version: 4
132
162
  summary: Similar article extension for middleman-blog
133
- test_files:
134
- - features/damerau_levenshtein.feature
135
- - features/levenshtein.feature
136
- - features/support/env.rb
137
- - features/word_frequency.feature
138
- - fixtures/test-app/source/2014-05-08-article0.md
139
- - fixtures/test-app/source/2014-05-09-article1.md
140
- - fixtures/test-app/source/2014-05-10-article2.md
141
- - fixtures/test-app/source/2014-05-11-article3.md
142
- - fixtures/test-app/source/2014-05-12-article4.md
143
- - fixtures/test-app/source/2014-05-13-article5.md
144
- - fixtures/test-app/source/2014-05-14-article6.md
145
- - fixtures/test-app/source/index.html.slim
146
- - fixtures/test-app/source/layout.slim
147
- - fixtures/test-app/source/layouts/article.slim
148
- - fixtures/test-app/source/page.html.slim
149
- - spec/helper_spec.rb
150
- - spec/middleman-blog-similar/algorithm/damerau_levenshtein_spec.rb
151
- - spec/middleman-blog-similar/algorithm/levenshtein_spec.rb
152
- - spec/middleman-blog-similar/algorithm/word_frequency/mecab_spec.rb
153
- - spec/middleman-blog-similar/algorithm/word_frequency/tree_tagger_spec.rb
154
- - spec/middleman-blog-similar/algorithm/word_frequency_spec.rb
155
- - spec/middleman-blog-similar/algorithm_spec.rb
156
- - spec/middleman-blog-similar/extension_spec.rb
157
- - spec/spec_helper.rb
158
- has_rdoc:
163
+ test_files: []