middleman-blog-similar-groonga 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2c1623551abd18e29f1809807a314f7495fc4b24
4
+ data.tar.gz: 1c18fdfff71245f0cfe043ceb980455c8263bde7
5
+ SHA512:
6
+ metadata.gz: 42504f1ea9b0e2868fb6105d9a3bfcd546f59ce078de757674835d8cf5855202e64036d8b93221519116727f1d7e7a43be192733dc228d290c3ed5cdfb13d83f
7
+ data.tar.gz: bb5f13e684e28a117e014941a7032bf7bfbd7109932b3e762d34bc2ef554ac53fc59cc0e356eee46a6b48ece62c26438f0f77e89f40424636513e6d0d96e02b2
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ # Ignore bundler lock file
2
+ /Gemfile.lock
3
+
4
+ # Ignore pkg folder
5
+ /pkg
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ # If you do not have OpenSSL installed, update
2
+ # the following line to use "http://" instead
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in middleman-blog-similar-groonga.gemspec
6
+ gemspec
7
+
8
+ group :development do
9
+ gem 'rake'
10
+ gem 'rdoc'
11
+ gem 'yard'
12
+ end
13
+
14
+ group :test do
15
+ gem 'cucumber'
16
+ gem 'aruba'
17
+ gem 'rspec'
18
+ end
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'cucumber/rake/task'
5
+
6
+ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
+ t.cucumber_opts = '--color --tags ~@wip --strict'
8
+ end
9
+
10
+ require 'rake/clean'
11
+
12
+ task test: ['cucumber']
13
+
14
+ task default: :test
@@ -0,0 +1,4 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+ require 'middleman-core'
3
+ require 'middleman-core/step_definitions'
4
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-blog-similar-groonga')
@@ -0,0 +1,63 @@
1
+ require 'middleman-core'
2
+ require 'middleman-blog'
3
+
4
+ module Middleman::Blog
5
+ module Similar
6
+ class Groonga < ::Middleman::Extension
7
+ option :db_path, 'groonga/articles', 'Path to Groonga database'
8
+
9
+ def initialize(app, options_hash={}, &block)
10
+ super
11
+
12
+ app.config[:blog_similar_groonga] = self
13
+
14
+ @db_path = Pathname.new(options.db_path)
15
+ require 'groonga'
16
+ end
17
+
18
+ def after_configuration
19
+ if @db_path.file?
20
+ ::Groonga::Database.open @db_path.to_path
21
+ else
22
+ @db_path.dirname.mkpath unless @db_path.dirname.directory?
23
+ ::Groonga::Database.create(path: @db_path.to_path)
24
+ ::Groonga::Schema.create_table 'Articles', type: :hash do |table|
25
+ table.short_text 'title'
26
+ table.long_text 'body'
27
+ # TODO: tags
28
+ end
29
+ ::Groonga::Schema.create_table 'Terms', type: :patricia_trie, normalizer: :NormalizerAuto, default_tokenizer: 'TokenMecab'
30
+ ::Groonga::Schema.change_table 'Terms' do |table|
31
+ table.index 'Articles.body'
32
+ end
33
+ end
34
+
35
+ articles = ::Groonga['Articles']
36
+ app.sitemap.resources.each do |resource|
37
+ next unless resource.kind_of? ::Middleman::Blog::BlogArticle
38
+
39
+ key = resource.path
40
+ articles.add key unless articles[key]
41
+
42
+ articles[key].title = resource.title
43
+ articles[key].body = Nokogiri.HTML('<body>' + resource.body + '</body>').search('body').first.content
44
+ end
45
+ end
46
+
47
+ helpers do
48
+ def similar_articles
49
+ current_body = Nokogiri.HTML('<body>' + current_page.body + '</body>').search('body').first.content
50
+ results = ::Groonga['Articles'].select {|article|
51
+ article.body.similar_search(current_page.summary) &
52
+ (article.key != current_page.path)
53
+ }
54
+ results.sort([key: '_score', order: 'descending'])
55
+ require 'pp';pp results
56
+ results
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ ::Middleman::Extensions.register :blog_similar_groonga, ::Middleman::Blog::Similar::Groonga
@@ -0,0 +1 @@
1
+ require 'middleman-blog-similar-groonga'
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "middleman-blog-similar-groonga"
6
+ s.version = "0.0.1"
7
+ s.platform = Gem::Platform::RUBY
8
+ s.license = "LGPL"
9
+ s.authors = ["KITAITI Makoto"]
10
+ s.email = ["KitaitiMakoto@gmail.com"]
11
+ s.homepage = "https://github.com/KitaitiMakoto/middleman-blog-similar-groonga"
12
+ s.summary = %q{Middleman extension to list similar pages using Groonga}
13
+ s.description = %q{Middleman extension to list similar pages using Groonga}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ # The version of middleman-core your extension depends on
21
+ s.add_runtime_dependency("middleman-core", [">= 4.0.0"])
22
+
23
+ # Additional dependencies
24
+ # s.add_runtime_dependency("gem-name", "gem-version")
25
+ s.add_runtime_dependency("rroonga")
26
+ s.add_runtime_dependency("middleman-blog", [">= 4.0.0"])
27
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: middleman-blog-similar-groonga
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - KITAITI Makoto
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleman-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rroonga
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: middleman-blog
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 4.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 4.0.0
55
+ description: Middleman extension to list similar pages using Groonga
56
+ email:
57
+ - KitaitiMakoto@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - Rakefile
65
+ - features/support/env.rb
66
+ - lib/middleman-blog-similar-groonga.rb
67
+ - lib/middleman_extension.rb
68
+ - middleman-blog-similar-groonga.gemspec
69
+ homepage: https://github.com/KitaitiMakoto/middleman-blog-similar-groonga
70
+ licenses:
71
+ - LGPL
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project:
89
+ rubygems_version: 2.4.6
90
+ signing_key:
91
+ specification_version: 4
92
+ summary: Middleman extension to list similar pages using Groonga
93
+ test_files: []
94
+ has_rdoc: