GithubHelp home page GithubHelp logo

ngs / middleman-blog-similar Goto Github PK

View Code? Open in Web Editor NEW
44.0 1.0 8.0 456 KB

An extension for middleman-blog that adds method to lookup similar article.

Home Page: https://rubygems.org/gems/middleman-blog-similar

License: MIT License

Ruby 90.38% Gherkin 5.71% HTML 3.91%
middleman ruby mecab article blog similarity sqlite3

middleman-blog-similar's Introduction

middleman-blog-similar

Gem Version Build Status Dependency Status Code Quality Coverage Status

middleman-blog-similar is an extension for middleman-blog that adds method to lookup similar article.

Usage

Middleman::Blog::BlogArticle#similar_articles returns an array of Middleman::Blog::BlogArticle instances.

h2 Similar Entries
ul
  - current_article.similar_articles.first(5).each do|article|
    li= link_to article.title, article.url

similar_articles helper is also available in article pages.

h2 Similar Entries
ul
  - similar_articles.first(5).each do|article|
    li= link_to article.title, article.url

Configuration

Gemfile

gem 'middleman-blog-similar'

config.rb

activate :similar

This extension finds similar articles using those are using tags by default.

Built-in Tagger

You can set taggers using tagger: option. MeCab and EngTagger adopters are built in this extension.

# Find by tags (default)
activate :similar, tagger: :tags

# Using MeCab / Need to add `gem 'natto'` in Gemfile
activate :similar, tagger: :mecab

# Using EngTagger / Need to add `gem 'entagger'` in Gemfile
activate :similar, tagger: :entagger

Using Lambda

You can use lambda as tagger

# Resource is a Middleman::Blog::BlogArticle
activate :similar, tagger: ->(resource) { [resource.data.category] }

Multiple Taggers

You can configure multiple taggers both built-in and lambda taggers.

activate :similar, tagger: {
  # key = tagger, value = weight
  mecab: 1,
  entagger: 1,
  tags: 3,
  # key = (ignored), value[0] = weight, value[1] = lambda
  custom: [5, ->(resource) { resource.data.category ? [resource.data.category] : [] }]
}

Database Location

This extension uses SQLite3 to calculate similarity between articles.

Database location is ${PROJECT_ROOT}/.similar.db by default.

You can specify database location using db: option.

# Expands to ${HOME}/similar.db
activate :similar, db: '~/similar.db'

# Expands to ${PROJECT_ROOT}/tmp/middleman-blog-similar.db
activate :similar, db: 'tmp/middleman-blog-similar.db'

# Stores in memory database
activate :similar, db: ':memory:'

License

Copyright (c) 2014-2017 Atsushi Nagase. MIT Licensed, see LICENSE for details.

middleman-blog-similar's People

Contributors

ngs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

middleman-blog-similar's Issues

Invalid type for tagger option: Proc

@ngs thanks for making a great extension for middleman!

I'm trying to use the lambda tagger like so:

activate :similar, tagger: ->(resource) { [resource.data.category] }

But I'm getting an error:

/Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-blog-similar-2.0.1/lib/middleman-blog-similar/extension.rb:31:in `after_configuration': Invalid type for tagger option: Proc (RuntimeError)
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/extension.rb:405:in `block in bind_after_configuration'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/callback_manager.rb:57:in `instance_exec'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/callback_manager.rb:57:in `block in execute'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/hamster-3.0.0/lib/hamster/vector.rb:1316:in `each'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/hamster-3.0.0/lib/hamster/vector.rb:1316:in `traverse_depth_first'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/hamster-3.0.0/lib/hamster/vector.rb:431:in `each'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/callback_manager.rb:57:in `execute'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/contracts-0.13.0/lib/contracts/method_reference.rb:43:in `send_to'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/contracts-0.13.0/lib/contracts/call_with.rb:76:in `call_with'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/contracts-0.13.0/lib/contracts/method_handler.rb:138:in `block in redefine_method'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/callback_manager.rb:28:in `block in install_methods!'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/application.rb:306:in `initialize'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-cli-4.2.1/bin/middleman:49:in `new'
from /Users/harry/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/middleman-cli-4.2.1/bin/middleman:49:in `<top (required)>'
from /Users/harry/.rbenv/versions/2.3.3/bin/middleman:22:in `load'
from /Users/harry/.rbenv/versions/2.3.3/bin/middleman:22:in `<main>'

Is this feature supported still?

Cache results

Calculate from CLI task and cache results in YAML file.

stack level too deep on evaluating similar_articles of a blog article

I have two blog articles in the default blog path. When I try to use the extension, I get a stack level too deep error.

Steps to replicate

To replicate, clone this repo under ~/.middleman.

Then initialize a new middleman project based on the above template:

middleman init --template=blog_similar_issue
bundler install --local
middleman server --verbose

Then access localhost:4567 in the browser, You should see the following message on the console:

[2015-06-11 11:47:21] ERROR SystemStackError: stack level too deep
    /Users/x/.rvm/gems/ruby-2.1.5/gems/middleman-core-3.3.12/lib/middleman-core/core_extensions/front_matter.rb:212

記事ごとのディレクトリ配下にいれた画像のパスがおかしくなる

おかげさまで似ている記事の一覧は表示することができました。ただ、記事内のimgタグのsrc属性のパスがおかしくなってしまいます。

当方記事のファイルは

/source/articles/2016-07/07-make-kattene/index.html.md

のようなパスに配置しています。画像は、

/source/articles/2016-07/07-make-kattene/images/one-pc.png

というようなパスで管理しています。

記事内にてMarkdownで、(Kramdownを使用しています)

![ホゲホゲ](images/one-pc.png)

というように書くと、通常

<img alt="ホゲホゲ" src="/articles/2016-07/07-make-kattene/images/one-pc.png">

というように出力してくれます。

ですが、本gemを導入したところ、middleman serverを起動し、一発目にアクセスした記事は上記のように正しく出力されるのですが、違う記事をクリックして表示すると画像のパスが

<img alt="ホゲホゲ" src="/images/images/one-pc.png">

のようになってしまいます。一発目にアクセスした記事以外の記事の画像は全てこうなってしまい、画像が表示されなくなってしまいます。

pryなどで色々と調べたところ、
kramdownはimgタグを出力する際、image_tag()を内部的に使っているようですが、その中でcurrent_resourceを使ってパスを生成しています。

middleman-blog-similarでは、development環境時、一発目にアクセスした際に全ての記事をレンダーして解析し、その全記事情報をキャッシュに入れているようにお見受けします。その際に、各記事をレンダーする時に呼び出されるcurrent_resourceは、それぞれの記事ではなく、一発目にアクセスしている記事を参照してしまっているのが原因のようです。なので、間違った画像のパスを生成し、sitemap内でそのパスで検索する処理でそのようなresourceがないので、全て/imagesというのを頭につけてしまい、上記のようなパスになるようです。

build時は全ての記事で

<img alt="ホゲホゲ" src="/images/images/one-pc.png">

というようなパスになってしまいます。おそらく全ての記事でcurrent_resourceがnilになるからだと思います。

使っているのは下のバージョンです。

gem version
middleman-core 3.4.0
middleman-blog 3.6.0
middleman-blog-similar 1.1.1
kramdown 1.9.0

使っているアルゴリズムは:'word_frequency/mecab'です。

こちらの手落ちの可能性もありますが、どうかご対応、または対処策を教えていただけたら幸いです。

In memory database throwing ActiveRecord errors?

Hey,

I just noticed the in-memory setting for the DB : https://github.com/ngs/middleman-blog-similar#database-location
I tried it and... it crashed. Here's what I've been doing:

  • Added the middleman-blog-similar dependency
  • Bundle
  • In config.rb, add the activate :similar, db: ':memory:' line
  • In a template, use current_article.similar_articles
  • Call middleman serve and reach a page, or call middleman build

Here's the error I'm getting :

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: articles: SELECT  "articles".* FROM "articles" WHERE "articles"."page_id" = ? LIMIT ?
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.2/lib/sqlite3/database.rb:147:in `initialize'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.2/lib/sqlite3/database.rb:147:in `new'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.2/lib/sqlite3/database.rb:147:in `prepare'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/sqlite3_adapter.rb:228:in `block (2 levels) in exec_query'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.4/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.4/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.4/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/sqlite3_adapter.rb:213:in `block in exec_query'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
	HOME/.rbenv/versions/2.6.3/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.4/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/sqlite3_adapter.rb:212:in `exec_query'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/abstract/database_statements.rb:482:in `select_prepared'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/abstract/database_statements.rb:68:in `select_all'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/connection_adapters/abstract/query_cache.rb:106:in `select_all'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/querying.rb:41:in `find_by_sql'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/statement_cache.rb:108:in `execute'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.4/lib/active_record/core.rb:208:in `find_by'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-blog-similar-2.0.1/lib/middleman-blog-similar/database.rb:63:in `find_similar'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-blog-similar-2.0.1/lib/middleman-blog-similar/blog_article_extensions.rb:6:in `similar_articles'
	layouts/post.erb:21:in `__tilt_70157147094300'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/tilt-2.0.10/lib/tilt/template.rb:170:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/tilt-2.0.10/lib/tilt/template.rb:170:in `evaluate'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/tilt-2.0.10/lib/tilt/template.rb:109:in `render'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/file_renderer.rb:79:in `render'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/method_reference.rb:43:in `send_to'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/call_with.rb:76:in `call_with'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/method_handler.rb:138:in `block in redefine_method'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/template_renderer.rb:157:in `block in render'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.4/lib/active_support/notifications.rb:170:in `instrument'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/util.rb:21:in `instrument'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/template_renderer.rb:156:in `render'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/method_reference.rb:43:in `send_to'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/call_with.rb:76:in `call_with'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/method_handler.rb:138:in `block in redefine_method'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/sitemap/resource.rb:154:in `render'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/method_reference.rb:43:in `send_to'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/call_with.rb:76:in `call_with'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/contracts-0.13.0/lib/contracts/method_handler.rb:138:in `block in redefine_method'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-blog-4.0.3/lib/middleman-blog/blog_article.rb:59:in `render'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/rack.rb:113:in `process_request'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/rack.rb:67:in `block in call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/rack.rb:66:in `catch'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/middleman-core-4.3.11/lib/middleman-core/rack.rb:66:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/show_exceptions.rb:23:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/lint.rb:50:in `_call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/lint.rb:38:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/builder.rb:244:in `call'
	HOME/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.3/lib/rack/handler/webrick.rb:95:in `service'
	HOME/.rbenv/versions/2.6.3/lib/ruby/2.6.0/webrick/httpserver.rb:140:in `service'
	HOME/.rbenv/versions/2.6.3/lib/ruby/2.6.0/webrick/httpserver.rb:96:in `run'
	HOME/.rbenv/versions/2.6.3/lib/ruby/2.6.0/webrick/server.rb:307:in `block in start_thread'

And here's my Gemfile.lock, in case it can help

GEM
  remote: https://rubygems.org/
  specs:
    activemodel (5.2.4.4)
      activesupport (= 5.2.4.4)
    activerecord (5.2.4.4)
      activemodel (= 5.2.4.4)
      activesupport (= 5.2.4.4)
      arel (>= 9.0)
    activesupport (5.2.4.4)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 0.7, < 2)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
    addressable (2.7.0)
      public_suffix (>= 2.0.2, < 5.0)
    arel (9.0.0)
    backports (3.20.0)
    builder (3.2.4)
    coffee-script (2.4.1)
      coffee-script-source
      execjs
    coffee-script-source (1.12.2)
    concurrent-ruby (1.1.7)
    contracts (0.13.0)
    dotenv (2.7.6)
    erubis (2.7.0)
    execjs (2.7.0)
    fast_blank (1.0.0)
    fastimage (2.2.1)
    ffi (1.14.2)
    haml (5.2.1)
      temple (>= 0.8.0)
      tilt
    hamster (3.0.0)
      concurrent-ruby (~> 1.0)
    hashie (3.6.0)
    i18n (0.9.5)
      concurrent-ruby (~> 1.0)
    kramdown (2.3.0)
      rexml
    listen (3.0.8)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
    memoist (0.16.2)
    middleman (4.3.11)
      coffee-script (~> 2.2)
      haml (>= 4.0.5)
      kramdown (>= 2.3.0)
      middleman-cli (= 4.3.11)
      middleman-core (= 4.3.11)
    middleman-blog (4.0.3)
      addressable (~> 2.3)
      middleman-core (>= 4.0.0)
      tzinfo (>= 0.3.0)
    middleman-blog-similar (2.0.1)
      activerecord (~> 5.0, >= 5.0.0)
      middleman-blog (~> 4.0, >= 4.0.0)
      middleman-core (~> 4.0, >= 4.0.0)
      sqlite3 (~> 1.3)
    middleman-cli (4.3.11)
      thor (>= 0.17.0, < 2.0)
    middleman-core (4.3.11)
      activesupport (>= 4.2, < 6.0)
      addressable (~> 2.3)
      backports (~> 3.6)
      bundler
      contracts (~> 0.13.0)
      dotenv
      erubis
      execjs (~> 2.0)
      fast_blank
      fastimage (~> 2.0)
      hamster (~> 3.0)
      hashie (~> 3.4)
      i18n (~> 0.9.0)
      listen (~> 3.0.0)
      memoist (~> 0.14)
      padrino-helpers (~> 0.13.0)
      parallel
      rack (>= 1.4.5, < 3)
      sassc (~> 2.0)
      servolux
      tilt (~> 2.0.9)
      uglifier (~> 3.0)
    minitest (5.14.2)
    padrino-helpers (0.13.3.4)
      i18n (~> 0.6, >= 0.6.7)
      padrino-support (= 0.13.3.4)
      tilt (>= 1.4.1, < 3)
    padrino-support (0.13.3.4)
      activesupport (>= 3.1)
    parallel (1.20.1)
    public_suffix (4.0.6)
    rack (2.2.3)
    rb-fsevent (0.10.4)
    rb-inotify (0.10.1)
      ffi (~> 1.0)
    redcarpet (3.5.1)
    rexml (3.2.4)
    sassc (2.4.0)
      ffi (~> 1.9)
    servolux (0.13.0)
    sqlite3 (1.4.2)
    temple (0.8.2)
    thor (1.0.1)
    thread_safe (0.3.6)
    tilt (2.0.10)
    tzinfo (1.2.9)
      thread_safe (~> 0.1)
    uglifier (3.2.0)
      execjs (>= 0.3.0, < 3)

PLATFORMS
  ruby

DEPENDENCIES
  builder (~> 3.0)
  middleman (~> 4.2)
  middleman-blog
  middleman-blog-similar
  redcarpet (~> 3.3, >= 3.3.3)

BUNDLED WITH
   2.0.1

Anything I'm missing? Should this work, and is a fix (maybe) needed somewhere? I can't believe I'm the only one encountering this issue.

store_articles can't handle Middleman::Sitemap::ProxyResource

Hi there.

I have a problem when using middleman-blog(with pagination) and this plugin.

Problem

similar_articles return empty array always.

execute_article not called even if blog article resource proxied.
Maybe, Middleman::Blog::BlogArticle proxied by paginator.
Problem occured in lib/middleman-blog-similar/database.rb

Expected

execute_article should be called even if proxied blog article resource passed.

              # should unwrap if resource was proxied
              if res.is_a?(Middleman::Sitemap::ProxyResource)
                res = res.target_resource
              end
              next unless res.is_a?(Middleman::Blog::BlogArticle)
              execute_article res

Actual

execute_article not called even if proxied blog article was passed.
(Middleman::Sitemap::ProxyResource is not subclass of Middleman::Blog::BlogArticle)

              next unless res.is_a?(Middleman::Blog::BlogArticle)
              execute_article res

My environment

$ gem -v
2.5.1

$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

OS

macOS Sierra (10.12.5)

Middleman versions

middleman (4.2.1)
middleman-blog (4.0.2)
middleman-blog-similar (2.0.1)

config.rb

activate :blog do |blog|
  blog.permalink = "post/{title}/index.html"
  blog.sources = "post/{year}-{month}-{day}-{title}.html"
  blog.taglink = "tag/{tag}.html"
  blog.layout = "layouts/article"
  blog.summary_generator = Proc.new do |article, rendered|
    rendered.split('<!--more-->').first
  end
  blog.default_extension = ".md"
  blog.tag_template = "tag.html"

  blog.paginate = true
  blog.per_page = 15
  blog.page_link = "page/{num}"
end

activate :syntax, :line_numbers => false
activate :similar

[RFC] we need more debugging printouts

Hello,

I enabled middleman-blog-similar on my website with this commit:

wkoszek/me@2b84795

But I don't have any indication why it picked certain pages. It somehow generated similar result for every page. You can observe it here:

http://www.koszek.com/

Click on any 3-4 links, scroll to "You may also like" section. Choices picked:

01001011, or on the art of snare drum patterns
How to write a good Google Summer of Code Proposals
Funny mistakes and The Toyota Way
Fixing Middleman-spellcheck
Why it's not about self-driving

and they're the same for every page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.