Monday, September 30, 2013

bundlerを使ったgemの作り方、公開方法

Rubyのgemパッケージを作成する手順について。bundlerにgem作成を助ける機能がいくつかあるので利用する。

ひな形の作成

bundle gemでひな形を生成する。

$ bundle gem mylib

gemspecは各gemごとに適当に修正する。ひな形を見ればすぐに内容はわかる。

依存ライブラリ

依存ライブラリはGemfileではなくgemspecファイルに記述して、Gemfileからはgemspecを参照するだけにする。

Gemfile

source 'https://rubygems.org'

gemspec

mylib.gemspec

Gem::Specification.new do |spec|
  ...
  spec.add_runtime_dependency "hashie"
  spec.add_runtime_dependency "json"
  spec.add_development_dependency "bundler"
  spec.add_development_dependency "rake"
end

ビルド

gem buildコマンドでビルド。

$ gem build mylib.gemspec

bundleでひな形を作っている場合は、rake buildでpkgフォルダにgemパッケージが作成される。

$ rake build

公開

gem pushコマンドで公開。このとき、rubygems.orgのアカウントが必要。

$ gem push mylib-x.x.x.gem

同様にbundleでひな形を作っている場合は、rake releaseリリースできる

$ rake release

Tuesday, September 24, 2013

Chrome App: JSON Pretty Printer をリリースしました

以前作ったJSONを整形するHTMLのツールをChrome Appとして公開しました。Chrome Web Storeに公開されています。

ただ受け取ったJSONを整形するだけのもの凄くシンプルなツールですが、よければ使ってください。

RubyでJSON/XMLをPretty Printするgem prettyprint

ファイルまたは標準入力から受け取ったJSON/XMLをインデント表示するRuby製のツールprettyprintをgemで公開しました。

インストール

$ gem install prettyprint

使い方

prettyprint [json|xml] [filepath]

gemでインストールするとprettyprintコマンドが使えるようになります。prettyprintコマンドはxmlまたはjsonというサブコマンドを持ちます。ファイル名を指定するとそのファイルを入力とします。

$ prettyprint json input.json

ファイル名を省略すると、標準入力を受け付けます。

$ echo '<html><title>prettyprint</title><body>happy pretty printing</body></html>' | prettyprint xml
<html>
 <title>
  prettyprint
 </title>
 <body>
  happy pretty printing
 </body>
</html>

Friday, September 06, 2013

JSONのPritty PrintするHTMLページを作った

ちょくちょく必要になるのでHTML/JavaScriptでJSONをPritty Printするツールというかページを作りました。

内容は単純に入力に対してJSON.stringifyしているだけ。おまけとして、zClipというクリップボード用jQueryプラグインを使って、出力結果をクリップボードにコピーできるようにしてある。prettyprintの部分はこんな感じ。

var src = $('#src').val();
var obj = JSON.parse(src);
var formatted = JSON.stringify(obj, undefined, 2);

ちなみに前にも書いているけど、これを使わない場合はPythonのワンライナーでやっていいる。

$ echo '{"foo":"FOO", "bar": [1, 2, 3]}' | python -mjson.tool
{
    "bar": [
        1, 
        2, 
        3
    ], 
    "foo": "FOO"
}