Ruby on Rails
ActiveSupport
Szukaj…
Uwagi
ActiveSupport to klejnot narzędziowy narzędzi ogólnego zastosowania używanych przez resztę frameworka Rails.
Jednym z głównych sposobów dostarczania tych narzędzi jest śledzenie rodzimych typów Ruby. Są one określane jako rozszerzenia podstawowe .
Rozszerzenia rdzenia: ciąg dostępu
String # at
Zwraca podłańcuch obiektu łańcuchowego. Taki sam interfejs jak 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) # => ""
Ciąg # z
Zwraca podciąg z podanej pozycji do końca łańcucha.
str = "hello" str.from(0) # => "hello" str.from(3) # => "lo" str.from(-2) # => "lo"
Ciąg # do
Zwraca podciąg z początku łańcucha do podanej pozycji.
Jeśli pozycja jest ujemna, jest liczona od końca łańcucha.
str = "hello" str.to(0) # => "h" str.to(3) # => "hell" str.to(-2) # => "hell"
from
to
mogą być używane w tandemie.
str = "hello" str.from(0).to(-1) # => "hello" str.from(1).to(-2) # => "ell"
Ciąg # pierwszy
Zwraca pierwszy znak lub określoną liczbę znaków do długości ciągu.
str = "hello" str.first # => "h" str.first(1) # => "h" str.first(2) # => "he" str.first(0) # => "" str.first(6) # => "hello"
Ciąg # ostatni
Zwraca ostatni znak lub określoną liczbę znaków od końca ciągu licząc do tyłu.
str = "hello" str.last # => "o" str.last(1) # => "o" str.last(2) # => "lo" str.last(0) # => "" str.last(6) # => "hello"
Rozszerzenia podstawowe: Konwersja ciągu na datę / godzinę
Ciąg # to_time
Konwertuje ciąg na wartość Czas. Parametrem form
może być :utc
lub :local
, domyślnie :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
Ciąg # to_date
Konwertuje ciąg na wartość Data.
"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
Ciąg # to_datetime
Konwertuje ciąg na wartość 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
Rozszerzenia rdzenia: Wykluczenie łańcucha
Ciąg # wykluczyć?
Odwrotność ciągu String#include?
"hello".exclude? "lo" # => false "hello".exclude? "ol" # => true "hello".exclude? ?h # => false
Rozszerzenia rdzenia: filtry ciągów
String # squish
Zwraca wersję podanego ciągu bez początkowych lub końcowych białych znaków i łączy wszystkie kolejne białe znaki we wnętrzu z pojedynczymi spacjami. Wersja niszcząca squish!
działa bezpośrednio na instancji ciągu.
Obsługuje zarówno białe znaki ASCII, jak i Unicode.
%{ Multi-line string }.squish # => "Multi-line string" " foo bar \n \t boo".squish # => "foo bar boo"
Ciąg # usuń
Zwraca nowy ciąg z usuniętymi wszystkimi wystąpieniami wzorców. Wersja destrukcyjna remove!
działa bezpośrednio na podanym ciągu.
str = "foo bar test" str.remove(" test") # => "foo bar" str.remove(" test", /bar/) # => "foo "
Łańcuch # obcięty
Zwraca kopię danego ciągu obciętego o określonej długości, jeśli ciąg jest dłuższy niż długość.
'Once upon a time in a world far far away'.truncate(27) # => "Once upon a time in a wo..."
Przekaż ciąg lub wyrażenie regularne :separator
aby obciąć przy naturalnym zerwaniu
'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..."
Ciąg # truncate_words
Zwraca ciąg obcięty po określonej liczbie słów.
'Once upon a time in a world far far away'.truncate_words(4) # => "Once upon a time..."
Przekaż ciąg lub wyrażenie regularne, aby określić inny separator słów
'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..."
Ostatnie znaki zostaną zastąpione ciągiem :omission
(domyślnie „...”)
'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)') # => "And they found that many... (continued)"
Ciąg # strip_heredoc
Usuwa wcięcia w heredokach. Wyszukuje najmniej wciętą niepustą linię i usuwa tę ilość wiodących białych znaków.
if options[:usage] puts <<-USAGE.strip_heredoc This command does such and such. Supported options are: -h This message ... USAGE end
użytkownik zobaczy
This command does such and such.
Supported options are:
-h This message
...
Rozszerzenia rdzenia: ciąg infekcji
Ciąg # pluralizuj
Zwraca liczbę mnogą łańcucha. Opcjonalnie przyjmuje parametr count
i zwraca liczbę pojedynczą, jeśli count == 1
. Akceptuje również parametr locale
dla pluralizacji specyficznej dla języka.
'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"
String # singularize
Zwraca liczbę pojedynczą ciągu. Akceptuje opcjonalny parametr 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"
String # constantize
Próbuje znaleźć zadeklarowaną stałą o nazwie podanej w ciągu. Podnosi NameError
gdy nazwa nie znajduje się w CamelCase lub nie została zainicjowana.
'Module'.constantize # => Module 'Class'.constantize # => Class 'blargle'.constantize # => NameError: wrong constant name blargle
Ciąg # safe_constantize
Wykonuje constantize
ale zwraca nil
zamiast podnoszenia NameError
.
'Module'.safe_constantize # => Module 'Class'.safe_constantize # => Class 'blargle'.safe_constantize # => nil
Ciąg # camelize
Domyślnie konwertuje ciągi znaków do UpperCamelCase, jeśli :lower
parametr podano :lower
ponieważ zamiast tego parametr konwertuje ciąg znaków do lowerCamelCase.
alias: camelcase
Uwaga: konwertuje również /
do ::
co jest przydatne do konwersji ścieżek do przestrzeni nazw.
'active_record'.camelize # => "ActiveRecord" 'active_record'.camelize(:lower) # => "activeRecord" 'active_record/errors'.camelize # => "ActiveRecord::Errors" 'active_record/errors'.camelize(:lower) # => "activeRecord::Errors"
String # titleize
Wielkie słowa i wielkie litery zastępuje niektóre znaki w ciągu, aby stworzyć ładniejszy tytuł.
alias: titlecase
'man from the boondocks'.titleize # => "Man From The Boondocks" 'x-men: the last stand'.titleize # => "X Men: The Last Stand"
Ciąg # podkreślenia
Tworzy podkreśloną, małą literę z wyrażenia w ciągu. Odwrotność camelize
.
Uwaga: underscore
zmieni również ::
na /
aby przekonwertować przestrzenie nazw na ścieżki.
'ActiveModel'.underscore # => "active_model" 'ActiveModel::Errors'.underscore # => "active_model/errors"
Ciąg # dasherize
Zastępuje podkreślenia myślnikami w ciągu.
'puni_puni'.dasherize # => "puni-puni"
String # demodulize
Usuwa część modułu ze stałego wyrażenia w ciągu.
'ActiveRecord::CoreExtensions::String::Inflections'.demodulize # => "Inflections" 'Inflections'.demodulize # => "Inflections" '::Inflections'.demodulize # => "Inflections" ''.demodulize # => ''
String # dekonstantize
Usuwa segment z prawej strony ze stałego wyrażenia w ciągu.
'Net::HTTP'.deconstantize # => "Net" '::Net::HTTP'.deconstantize # => "::Net" 'String'.deconstantize # => "" '::String'.deconstantize # => "" ''.deconstantize # => ""
Ciąg # parametryzacja
Zastępuje znaki specjalne w ciągu, dzięki czemu można ich używać jako części „ładnego” adresu URL.
"Donald E. Knuth".parameterize # => "donald-e-knuth"
Zachowaj wielkość liter w ciągu za pomocą argumentu :preserve_case
.
"Donald E. Knuth".parameterize(preserve_case: true) # => "Donald-E-Knuth"
Bardzo częstym przypadkiem użycia do parameterize
jest przesłonięcie metody to_param
modelu ActiveRecord w celu obsługi bardziej opisowych informacji o to_param
URL.
class Person < ActiveRecord::Base def to_param "#{id}-#{name.parameterize}" end end Person.find(1).to_param # => "1-donald-e-knuth"
String # tableize
Tworzy nazwę tabeli, tak jak robi to Railsy dla modeli do nazw tabel. Wykreśla liczbę mnogą ostatniego słowa w ciągu.
'RawScaledScorer'.tableize # => "raw_scaled_scorers" 'ham_and_egg'.tableize # => "ham_and_eggs" 'fancyCategory'.tableize # => "fancy_categories"
Ciąg # klasyfikuj
Zwraca ciąg nazwy klasy z liczby mnogiej nazwy tabeli, podobnie jak Rails dla nazw tabel do modeli.
'ham_and_eggs'.classify # => "HamAndEgg" 'posts'.classify # => "Post"
String # humanize
Umieszcza wielkie słowo w pierwszym słowie, zamienia podkreślenia w spacje i usuwa końcowe _id
jeśli jest obecne.
'employee_salary'.humanize # => "Employee salary" 'author_id'.humanize # => "Author" 'author_id'.humanize(capitalize: false) # => "author" '_id'.humanize # => "Id"
Ciąg # upcase_first
Konwertuje tylko pierwszy znak na wielkie litery.
'what a Lovely Day'.upcase_first # => "What a Lovely Day" 'w'.upcase_first # => "W" ''.upcase_first # => ""
Ciąg # klucz obcy
Tworzy nazwę klucza obcego na podstawie nazwy klasy. Przekazać false
param do wyłączenia dodawania _
między nazwą i id
.
'Message'.foreign_key # => "message_id" 'Message'.foreign_key(false) # => "messageid" 'Admin::Post'.foreign_key # => "post_id"