middleman-blog-similar-groonga 0.0.1

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.
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: