ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

RailsのモデルでJANコードのバリデーションをするgem 「jan_validator」

つくったもの

Rails*1向けのJANコードバリデータ。

f:id:s_osa:20140715004408p:plain

先日のgemをベースにしています。

参考にしたページ

使い方

JANコードのバリデーションがRails標準のpresence: trueのようなカタチで書けるようになります。

class Product < ActiveRecord::Base
  validates :jan_code, jan: true
end

ハマったところ

gemspecでバージョンを指定するときに

require 'lib/gem_name/version'

Gem::Specification.new do |spec|
  spec.version       = GemName::VERSION
end

と書くことが多いと思います。

ただ、今回(JanValidator < ActiveModel::EachValidator)のようにgemの一番外側のクラスが他のgemに依存している場合、travisでテストを回しているときにコケます。

$ bundle install --jobs=3 --retry=3
There was a LoadError while loading jan_validator.gemspec: 
cannot load such file -- active_model from
  /home/travis/build/s-osa/jan_validator/jan_validator.gemspec:4:in `<main>'

というわけで、janvalidator.gemspeclib/jan_validator/versionの両方にバージョンを手動で設定するという運用をしていますが、コレ、どうするのがベストプラクティスなんですかね?

パーフェクト Ruby on Rails パーフェクトRuby (PERFECT SERIES 6)

*1:というかActiveModel