A Day in the Life

2008-06-18

hparser ・全要素を取得

Parser#parse が block な array を返すので全部平べったくしてやる。

サンプルコードで spec 使うのかっこいいのでまねっこ( http://subtech.g.hatena.ne.jp/cho45/20080615/1213514501 )。久しぶりに rspec 書いてるけど俺の知ってる rspec とはだいぶ書き方違うよママン。

require 'rubygems'
require 'hparser'

parser = HParser::Parser.new
parsed = parser.parse(DATA.read)
# 全部の要素を取り出す
elements = parsed.inject([]) do |res, el|
  if el.class.public_method_defined? :content
    res << [el.content]
  else
    res << el
  end
end.flatten
hatena_ids = elements.select {|el| el.kind_of? HParser::Inline::HatenaId }

require 'spec'
describe '要素を取り出して' do
  it "はてなIDがとれてるか" do
    hatena_ids.map {|e| e.name}.should == %w(cho45 antipop)
  end
end

__END__
* てすと
aa

>|
foobar
|<

id:cho45 さん、結婚してください!(id:antipop より)


- http://foobar.baz/

hparser

はてな記法をパースできる ruby のパーサなんだけど、設計がすばらしいなぁ。id 記法で書かれていたらそこにフックしてなんたら、とかも簡単にできるし。作者は d:id:mzp さんかぁ。

ライセンスは Ruby's ぽいので、github に fork。

なんか spec.to_ruby が

uninitialized constant Gem::Specification::Date

でエラって .gemspec ファイルが作れない罠

追記

ちょさんにrequire 'date' すればいいと教えて貰う。必要なライブラリは require しといてくれよ ubygems さん…。

tig.vim

だれかつくってくれないかnnnn-

記事の一覧 >