Jekyllのタグとカテゴリを整理するために、一覧表示するWebアプリ(個人用)をつくった
更新日:2023.05.05
作成日:2014.12.13
カテゴリ名を一括変換したり、タグ名を整理する際に、今どうなっているか一覧にしたかったので、Railsで作ってみた。
無事一覧が出来たので気持ちいい。こういう庭いじり好きかも笑。
https://github.com/meganii/JekyllFFviewer
Postsテーブル作成
metadata
として、JekyllのFront Matterを格納する。
create_posts.rb
require 'rubygems'
require 'sqlite3'
db = SQLite3::Database.new("/Users/meganii/Work/Site/JekyllFFViewer/db/development.sqlite3")
sql = <<SQL
CREATE TABLE Posts (
id integer PRIMARY KEY AUTOINCREMENT,
filename String,
content Text,
metadata Text);
SQL
db.execute(sql)
db.close
markdownの読込
Jekyllで利用しているMarkdownのファイルを読み込んで、SQLite3に入れる。
ActiveRecordを単品でも使えることがわかったので、利用する。
class Post< ActiveRecord::Base
serialize :metadata
end
配列やハッシュを上記のように、シリアライズすることで、読み込んだ際に、元のオブジェクト形式で読み込んでくれる。
Rails4でserializeしてデータをDBに保存させる | EasyRamble
YAML Front Matterと、記事本文を分離する正規表現は、以下参照。
Jekyllのお勉強 -YAML部分と記事本文を分離する正規表現-
import_md.rb
require 'rubygems'
require 'active_record'
require 'english'
ActiveRecord::Base.establish_connection(
"adapter" => "sqlite3",
"database" => "/Users/meganii/Work/Site/JekyllFFViewer/db/development.sqlite3"
)
class Post< ActiveRecord::Base
serialize :metadata
end
files = Dir.glob(File.join("/Users/meganii/Dropbox/Sites/meganii.com/_posts", "*"))
files.each do |f|
ff = YAML.load_file(f)
file = open(f)
content = file.read
if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
post_content = $POSTMATCH
end
filename = File.basename(f)
unless filename =~ /~\z/
post = Post.new
post.filename = filename
post.metadata = ff
post.content = post_content
post.save
end
end
ソート
項目毎にソートされていた方が嬉しいので、ソート処理を実装してみる。
Railsのテーブル並び替えを実装する | Scimpr Blog
単純なソートであれば取得時にソート処理をかませばよいのだが、今回はハッシュの配列をあるキー値でソートしないといけないので注意が必要。
def index
@posts = Post.all
hash = []
if params[:sort] != nil
sortkey = params[:sort]
@posts.each do |post|
hash << post.metadata
end
hash.each {|h| puts h }
result = hash.sort {|a, b| compare(a[sortkey], b[sortkey]) }
hash = result
end
a = []
@posts.each do |post|
data = post.metadata
data.keys.each do |key|
a << key
end
end
@column = a.uniq.sort
@posts = hash
end
def compare(a, b)
return -1 unless b
return 1 unless a
a = a[0] if a.instance_of? Array
b = b[0] if b.instance_of? Array
a <=> b
end
今後・TODO
- 一覧上から修正して、再出力できるようにしたい
- 一括変換したい
Related contents
TECH
2014.12.02
Jekyllに月別アーカイブを実装する
TECH
2014.12.01
Jekyllにタグクラウドを実装する
TECH
2014.11.29
UTF-8-MACとは何か?〜Jekyllのカテゴリ(タグ)ページで濁点を含むページが表示されない〜
TECH
2014.11.25
Macのsedで改行コードを出力させる 〜改行コードの違い再確認〜
TECH
2014.10.29
JekyllでPygmentsを使ってのシンタックスハイライト
TECH
2014.10.21
Jekyllでページ分割する -pagenation-
TECH
2014.09.03
YouTube埋め込みタグをレスポンシブ化する
TECH
2014.06.24
JekyllのFront matterを抽出する