Ruby on Rails
ActiveSupport
サーチ…
備考
ActiveSupportは、他のRailsフレームワークで使用されている汎用ツールのユーティリティ宝です。
これらのツールを提供する主な方法の1つは、RubyのネイティブタイプをMonkeypatchingすることです。これらをコア拡張と呼びます。
コア拡張:文字列アクセス
String#at
文字列オブジェクトの部分文字列を返します。 String#[]
同じインタフェースです。
str = "hello" str.at(0) # => "h" str.at(1..3) # => "ell" str.at(-2) # => "l" str.at(-2..-1) # => "lo" str.at(5) # => nil str.at(5..-1) # => ""
String#from
指定された位置から文字列の最後までの部分文字列を返します。
str = "hello" str.from(0) # => "hello" str.from(3) # => "lo" str.from(-2) # => "lo"
String to〜
文字列の先頭から指定された位置までの部分文字列を返します。
位置が負の場合は、文字列の最後から数えられます。
str = "hello" str.to(0) # => "h" str.to(3) # => "hell" str.to(-2) # => "hell"
from
とto
は一度に使用できます。
str = "hello" str.from(0).to(-1) # => "hello" str.from(1).to(-2) # => "ell"
最初の文字列#
最初の文字、または指定された文字数を文字列の長さまで返します。
str = "hello" str.first # => "h" str.first(1) # => "h" str.first(2) # => "he" str.first(0) # => "" str.first(6) # => "hello"
ストリング#最後
最後の文字、または後方に数える文字列の最後から指定された文字数を返します。
str = "hello" str.last # => "o" str.last(1) # => "o" str.last(2) # => "lo" str.last(0) # => "" str.last(6) # => "hello"
コア拡張:文字列から日付/時刻への変換
ストリング#to_time
文字列をTime値に変換します。 form
パラメータは、 :utc
または:local
いずれか:utc
。デフォルトは:local
です。
"13-12-2012".to_time # => 2012-12-13 00:00:00 +0100 "06:12".to_time # => 2012-12-13 06:12:00 +0100 "2012-12-13 06:12".to_time # => 2012-12-13 06:12:00 +0100 "2012-12-13T06:12".to_time # => 2012-12-13 06:12:00 +0100 "2012-12-13T06:12".to_time(:utc) # => 2012-12-13 06:12:00 UTC "12/13/2012".to_time # => ArgumentError: argument out of range
ストリング#to_date
文字列をDate値に変換します。
"1-1-2012".to_date # => Sun, 01 Jan 2012 "01/01/2012".to_date # => Sun, 01 Jan 2012 "2012-12-13".to_date # => Thu, 13 Dec 2012 "12/13/2012".to_date # => ArgumentError: invalid date
文字列#to_datetime
文字列をDateTime値に変換します。
"1-1-2012".to_datetime # => Sun, 01 Jan 2012 00:00:00 +0000 "01/01/2012 23:59:59".to_datetime # => Sun, 01 Jan 2012 23:59:59 +0000 "2012-12-13 12:50".to_datetime # => Thu, 13 Dec 2012 12:50:00 +0000 "12/13/2012".to_datetime # => ArgumentError: invalid date
コア拡張:文字列の除外
文字列#除外?
String#include?
の逆String#include?
"hello".exclude? "lo" # => false "hello".exclude? "ol" # => true "hello".exclude? ?h # => false
コア拡張:文字列フィルタ
文字列#squish
先頭または末尾の空白のない指定された文字列のバージョンを返し、内部の連続したすべての空白を単一の空白に結合します。破壊的なバージョンsquish!
文字列インスタンスに対して直接的に動作します。
ASCIIとUnicodeの両方の空白を扱います。
%{ Multi-line string }.squish # => "Multi-line string" " foo bar \n \t boo".squish # => "foo bar boo"
文字列#remove
すべてのパターンが削除された新しい文字列を返します。破壊的なバージョンremove!
指定された文字列に対して直接動作します。
str = "foo bar test" str.remove(" test") # => "foo bar" str.remove(" test", /bar/) # => "foo "
ストリング#切り詰め
文字列が長さよりも長い場合、指定された長さで切り捨てられた指定文字列のコピーを返します。
'Once upon a time in a world far far away'.truncate(27) # => "Once upon a time in a wo..."
文字列または正規表現を渡す:separator
自然な区切りで切り捨てるための:separator
文字
'Once upon a time in a world far far away'.truncate(27, separator: ' ') # => "Once upon a time in a..." 'Once upon a time in a world far far away'.truncate(27, separator: /\s/) # => "Once upon a time in a..."
文字列#truncate_words
与えられた単語数の後に切り捨てられた文字列を返します。
'Once upon a time in a world far far away'.truncate_words(4) # => "Once upon a time..."
文字列または正規表現を渡して、異なる単語の区切り文字を指定する
'Once<br>upon<br>a<br>time<br>in<br>a<br>world'.truncate_words(5, separator: '<br>') # => "Once<br>upon<br>a<br>time<br>in..."
最後の文字は:omission
文字列(デフォルトは "...")に置き換えられます。
'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)') # => "And they found that many... (continued)"
ストリング#strip_heredoc
heredocsのインデントを削除します。最もインデントされていない空でない行が検索され、先頭の空白が削除されます。
if options[:usage] puts <<-USAGE.strip_heredoc This command does such and such. Supported options are: -h This message ... USAGE end
ユーザは、
This command does such and such.
Supported options are:
-h This message
...
コア拡張:String Inflection
文字列#複数行
複数形の文字列を返します。オプションでcount
パラメータをとり、 count
count == 1
場合は特異形式を返します。言語固有の複数化のためのlocale
パラメーターも受け入れlocale
。
'post'.pluralize # => "posts" 'octopus'.pluralize # => "octopi" 'sheep'.pluralize # => "sheep" 'words'.pluralize # => "words" 'the blue mailman'.pluralize # => "the blue mailmen" 'CamelOctopus'.pluralize # => "CamelOctopi" 'apple'.pluralize(1) # => "apple" 'apple'.pluralize(2) # => "apples" 'ley'.pluralize(:es) # => "leyes" 'ley'.pluralize(1, :es) # => "ley"
文字列#singularize
文字列の単数形を返します。オプションのlocale
パラメータを受け入れます。
'posts'.singularize # => "post" 'octopi'.singularize # => "octopus" 'sheep'.singularize # => "sheep" 'word'.singularize # => "word" 'the blue mailmen'.singularize # => "the blue mailman" 'CamelOctopi'.singularize # => "CamelOctopus" 'leyes'.singularize(:es) # => "ley"
文字列#constantize
文字列で指定された名前で宣言された定数を見つけようとします。名前がNameError
にない場合、または初期化されていない場合、 NameError
発生します。
'Module'.constantize # => Module 'Class'.constantize # => Class 'blargle'.constantize # => NameError: wrong constant name blargle
String#safe_constantize
constantize
実行しますが、 NameError
をNameError
せる代わりにnil
を返します。
'Module'.safe_constantize # => Module 'Class'.safe_constantize # => Class 'blargle'.safe_constantize # => nil
String#camelize
場合は、デフォルトでUpperCamelCaseに文字列を変換し:lower
paramは代わりにlowerCamelCaseに変換として与えられています。
エイリアス: camelcase
注意: /
を::
に変換し、パスを名前空間に変換するのに便利です。
'active_record'.camelize # => "ActiveRecord" 'active_record'.camelize(:lower) # => "activeRecord" 'active_record/errors'.camelize # => "ActiveRecord::Errors" 'active_record/errors'.camelize(:lower) # => "activeRecord::Errors"
文字列#titleize
すべての単語を大文字にし、文字列内の一部の文字を置換してより見栄えの良いタイトルを作成します。
エイリアス: titlecase
'man from the boondocks'.titleize # => "Man From The Boondocks" 'x-men: the last stand'.titleize # => "X Men: The Last Stand"
ストリング#アンダースコア
文字列内の式から小文字のアンダースコアを作成します。 camelize
の逆。
注意: underscore
は::
to /
を変更して名前空間をパスに変換します。
'ActiveModel'.underscore # => "active_model" 'ActiveModel::Errors'.underscore # => "active_model/errors"
ストリング#dasherize
文字列の下線をダッシュで置き換えます。
'puni_puni'.dasherize # => "puni-puni"
文字列#demodulize
文字列の定数式からモジュールの部分を削除します。
'ActiveRecord::CoreExtensions::String::Inflections'.demodulize # => "Inflections" 'Inflections'.demodulize # => "Inflections" '::Inflections'.demodulize # => "Inflections" ''.demodulize # => ''
文字列#deconstantize
文字列内の定数式から最も右のセグメントを削除します。
'Net::HTTP'.deconstantize # => "Net" '::Net::HTTP'.deconstantize # => "::Net" 'String'.deconstantize # => "" '::String'.deconstantize # => "" ''.deconstantize # => ""
String#parameterize
文字列内の特殊文字を置き換えて、「pretty」URLの一部として使用できるようにします。
"Donald E. Knuth".parameterize # => "donald-e-knuth"
:preserve_case
引数を使用して、文字列内の文字の大文字と小文字を:preserve_case
ます。
"Donald E. Knuth".parameterize(preserve_case: true) # => "Donald-E-Knuth"
parameterize
化の非常に一般的な使用事例は、ActiveRecordモデルのto_param
メソッドをオーバーライドして、よりto_param
URLスラッグをサポートすることです。
class Person < ActiveRecord::Base def to_param "#{id}-#{name.parameterize}" end end Person.find(1).to_param # => "1-donald-e-knuth"
文字列#tableize
モデルからテーブル名へのRailsのようなテーブルの名前を作成します。文字列の最後の単語をPluralizeします。
'RawScaledScorer'.tableize # => "raw_scaled_scorers" 'ham_and_egg'.tableize # => "ham_and_eggs" 'fancyCategory'.tableize # => "fancy_categories"
String#classify
テーブル名からモデルへのRailsのように複数のテーブル名からクラス名文字列を返します。
'ham_and_eggs'.classify # => "HamAndEgg" 'posts'.classify # => "Post"
文字列#humanize
最初の単語を大文字に変換し、アンダースコアをスペースに変換し、存在する場合は_id
ます。
'employee_salary'.humanize # => "Employee salary" 'author_id'.humanize # => "Author" 'author_id'.humanize(capitalize: false) # => "author" '_id'.humanize # => "Id"
ストリング#upcase_first
最初の文字だけを大文字に変換します。
'what a Lovely Day'.upcase_first # => "What a Lovely Day" 'w'.upcase_first # => "W" ''.upcase_first # => ""
文字列#foreign_key
クラス名から外部キー名を作成します。名前とid
間に_
を追加できないようにするには、 false
paramを渡しfalse
。
'Message'.foreign_key # => "message_id" 'Message'.foreign_key(false) # => "messageid" 'Admin::Post'.foreign_key # => "post_id"