Ruby用ツールセット
注意
grape 1.6.1以降のバージョンのみ使用可能
インストール
gem 'moca_rlibs'
Dockerコンテナ内かどうかを判別する
MocaRlibs::Docker.running_on_docker?
CodeBuild上で"直接"実行されているかを判別する。
MocaRlibs::CodeBuild.running_on_codebuild?
ActiveModelカスタムバリデーション
半角アルファベットのみを許可する
class UserModel
include ActiveModel::Validations
validates :user_name, only_alpha: true
end
半角アルファベットと数字のみを許可する
class UserModel
include ActiveModel::Validations
validates :user_name, only_alpha_numeric: true
end
数字のみの文字列を許可する
class UserModel
include ActiveModel::Validations
validates :user_name, only_numbers: true
end
アスキー文字のみの文字列を許可する
class UserModel
include ActiveModel::Validations
validates :user_name, only_ascii: true
end
出力可能なアスキー文字のみかどうかをチェックする(半角英数字、一部の記号)
class UserModel
include ActiveModel::Validations
validates :user_name, only_printable: true
end
メールアドレスのフォーマットチェック https://github.com/K-and-R/email_validator
class UserModel
include ActiveModel::Validations
validates :user_email, email: true
validates :user_email, email: { mode: :strict, require_fqdn: true }
validates :user_email, email: { domain: 'example.com' }
end
IPアドレスのフォーマットをチェックする
class UserModel
include ActiveModel::Validations
validates :last_login_ip, ip: true
validates :last_login_ip, ip: { version: :v4 }
validates :last_login_ip, ip: { version: :v6 }
end
Grapeカスタムバリデーション
メールアドレスのフォーマットチェック(簡易チェック)
params do
requires :email, type: String, email: true
end
メールアドレスのフォーマットチェック(厳密チェック)(推奨)
params do
requires :email, type: String, email_strict: true
end
メールアドレスのフォーマットチェック(RFC-2822, RFC-5321)
params do
requires :email, type: String, email_rfc: true
end
URLのフォーマットチェック
params do
requires :url, type: String, url: true
end
文字列の長さ制限
params do
requires :name, type: String, length: 4
requires :bio, type: String, length: 4..512
end
プレフィックス制限
params do
requires :website, type: String, start_with: "https://"
requires :website, type: String, start_with: %w(http:// https://)
end
サフィックス制限
params do
requires :price, type: String, end_with: "JPY"
requires :price, type: String, end_with: %w(JPY USD)
end
数値の最大値制限
params do
requires :level, type: Integer, max: 5
end
数値の最大値制限(Proc)
params do
requires :level, type: Integer, max: ->(params) { params[:foo] + 1 }
end
数値の最小値制限
params do
requires :age, type: Integer, min: 0
end
数値の最小値制限(Proc)
params do
requires :level, type: Integer, min: ->(params) { params[:bar] - 1 }
end
アスキー文字しか含まないこと
params do
requires :text, type: String, only_ascii: true
end
文字列にアルファベットしか含まないこと
params do
requires :text, type: String, only_alpha: true
end
文字列に数字しか含まれないこと
params do
requires :text, type: String, only_numbers: true
end
文字列に英数字しか含まれないこと
params do
requires :text, type: String, only_alpha_numeric: true
end
出力可能なアスキー文字しか含まれないこと(半角英数字、一部の表示可能な記号)
params do
requires :text, type: String, only_printable: true
end
IPアドレスのフォーマットをチェックする
params do
optional :ip, type: String, ip_address: true
optional :ipv4, type: String, ip_address: :v4
optional :ipv6, type: String, ip_address: :v6
end
Slack通知送信用クラス
# インスタンス化
client = MocaRlibs::SlackNotifier.new
# シンプルなテキストを送信する
#
# @param [String] message 送信メッセージ
# @param [String] at メンション先
client.send('some message')
# エラーログを送信
#
# @param [StandardError] err エラーオブジェクト
client.error(StandardError.new('some error occurred'))
# シンプルなテキストを送信する
#
# @param [String] message 送信メッセージ
# @param [String] channel チャンネル名
# @param [String] username ユーザー名
# @param [String] webhook Web Hook URL
# @param [String] at メンション先
MocaRlibs::SlackNotifier.send('some message')
# エラーログを送信
#
# @param [StandardError] err エラーオブジェクト
# @param [String] channel チャンネル名
# @param [String] username ユーザー名
# @param [String] webhook Web Hook URL
MocaRlibs::SlackNotifier.error(StandardError.new('some error occurred'))
ruby拡張(Kernelモジュール)
pythonのpassと同様、「何もしないこと」を明示的に示すため
pass