1 Rails 4.1로 업그레이드하기
기존 애플리케이션을 업그레이드하는 경우, 시작하기 전에 좋은 테스트 커버리지를 확보하는 것이 좋은 생각입니다. 아직 하지 않았다면 먼저 Rails 4.0으로 업그레이드하고, Rails 4.1로 업데이트를 시도하기 전에 애플리케이션이 예상대로 실행되는지 확인해야 합니다. 업그레이드 시 주의해야 할 사항 목록은 Ruby on Rails 업그레이드하기 가이드에서 확인할 수 있습니다.
2 주요 기능
2.1 Spring Application Preloader
Spring은 Rails 애플리케이션 프리로더입니다. 애플리케이션을 백그라운드에서 실행 상태로 유지하여 테스트, rake 작업 또는 migration을 실행할 때마다 부팅할 필요가 없게 함으로써 개발 속도를 높여줍니다.
새로운 Rails 4.1 애플리케이션은 "springified" binstub들과 함께 제공됩니다. 이는 bin/rails와 bin/rake가 자동으로 미리 로드된 spring 환경을 활용한다는 것을 의미합니다.
rake 작업 실행하기:
$ bin/rake test:models
Rails 명령어 실행하기:
$ bin/rails console
Spring introspection:
Rails에서 Spring은 spring-watcher-listen을 통해서 application의 파일들을 감시합니다. 이 감시 동작은 system의 파일 변경 감시자를 이용하여 수행됩니다.
이러한 동작을 분석하기 위해 spring status 명령어를 실행하면 현재 실행 중인 모든 Spring process를 보여줍니다.
$ bin/spring status
Spring이 실행 중입니다:
1182 spring server | my_app | 29분 전에 시작됨
3656 spring app | my_app | 23초 전에 시작됨 | test 모드
3746 spring app | my_app | 10초 전에 시작됨 | development 모드
사용 가능한 모든 기능을 보려면 Spring README를 참고하세요.
이 기능을 사용하기 위해 기존 애플리케이션을 마이그레이션하는 방법은 Upgrading Ruby on Rails 가이드를 참고하세요.
2.2 config/secrets.yml
Rails 4.1은 config 폴더에 새로운 secrets.yml 파일을 생성합니다. 기본적으로
이 파일은 애플리케이션의 secret_key_base를 포함하지만, 외부 API를 위한
access key와 같은 다른 secrets를 저장하는 데에도 사용될 수 있습니다.
이 파일에 추가된 secrets는 Rails.application.secrets를 통해 접근할 수 있습니다.
예를 들어, 다음과 같은 config/secrets.yml이 있다면:
development:
secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
some_api_key: SOMEKEY
개발 환경에서 Rails.application.secrets.some_api_key는 SOMEKEY를 반환합니다.
이 기능을 기존 애플리케이션에서 사용하도록 마이그레이션하는 방법은 Ruby on Rails 업그레이드하기 가이드를 참조하세요.
2.3 Action Pack Variants
우리는 종종 휴대폰, 태블릿, 데스크톱 브라우저에 대해 서로 다른 HTML/JSON/XML 템플릿을 렌더링하고 싶어합니다. Variants는 이를 쉽게 만들어줍니다.
request variant는 :tablet, :phone, :desktop과 같은 request format의 특수화된 형태입니다.
before_action에서 variant를 설정할 수 있습니다:
request.variant = :tablet if request.user_agent =~ /iPad/
request.user_agent가 iPad를 포함하는 경우 request.variant를 :tablet으로 설정합니다.
action에서 formats에 응답하는 것처럼 variants에 응답하세요:
respond_to do |format|
format.html do |html|
html.tablet # app/views/projects/show.html+tablet.erb를 렌더링
html.phone { extra_setup; render ... }
end
end
각 format과 variant에 대해 개별 템플릿을 제공하세요:
app/views/projects/show.html.erb
app/views/projects/show.html+tablet.erb
app/views/projects/show.html+phone.erb
variants를 정의할 때 inline 문법을 사용하여 단순화할 수도 있습니다:
respond_to do |format|
format.js { render "trash" } # JavaScript 요청에 대한 응답
format.html.phone { redirect_to progress_path } # 모바일 브라우저에서의 HTML 요청에 대한 응답
format.html.none { render "trash" } # 그 외 HTML 요청에 대한 응답
end
2.4 Action Mailer Previews
Action Mailer previews는 특별한 URL을 방문하여 이메일이 어떻게 보이는지 확인할 수 있는 방법을 제공합니다.
확인하고자 하는 mail 객체를 반환하는 메서드를 포함한 preview 클래스를 구현합니다:
class NotifierPreview < ActionMailer::Preview
def welcome
Notifier.welcome(User.first)
end
end
preview는 http://localhost:3000/rails/mailers/notifier/welcome에서 확인할 수 있으며, 전체 목록은 http://localhost:3000/rails/mailers에서 볼 수 있습니다.
기본적으로 이러한 preview 클래스들은 test/mailers/previews에 위치합니다.
이는 preview_path 옵션을 사용하여 설정할 수 있습니다.
자세한 설명은 문서를 참고하세요.
2.5 Active Record enums
데이터베이스에서는 integer로 저장되지만 이름으로 조회할 수 있는 enum 속성을 선언합니다.
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ] # status를 active나 archived로 지정
end
conversation.archived! # archived 상태로 설정
conversation.active? # => false
conversation.status # => "archived"
Conversation.archived # => archived 상태인 모든 Conversation의 Relation을 반환
Conversation.statuses # => { "active" => 0, "archived" => 1 }
문서에서 자세한 설명을 확인할 수 있습니다.
2.6 Message Verifiers
Message verifier는 서명된 메시지를 생성하고 검증하는 데 사용할 수 있습니다. 이는 remember-me 토큰이나 관련 민감한 데이터를 안전하게 전송하는 데 유용할 수 있습니다.
Rails.application.message_verifier 메서드는 secret_key_base와 주어진 message verifier 이름으로부터 파생된 키를 사용하여 메시지에 서명하는 새로운 message verifier를 반환합니다.
signed_token = Rails.application.message_verifier(:remember_me).generate(token)
Rails.application.message_verifier(:remember_me).verify(signed_token) # => token
Rails.application.message_verifier(:remember_me).verify(tampered_token)
# ActiveSupport::MessageVerifier::InvalidSignature 오류를 발생시킵니다
2.7 Module#concerning
클래스 내에서 책임을 분리하는 자연스럽고 간단한 방법입니다:
class Todo < ActiveRecord::Base
concerning :EventTracking do
included do
has_many :events
end
def latest_event
# ...
end
private
def some_internal_method
# ...
end
end
end
이 예제는 EventTracking 모듈을 인라인으로 정의하고, ActiveSupport::Concern으로 확장한 다음, Todo 클래스에 믹스인하는 것과 동일합니다.
자세한 설명과 사용 사례는 문서를 참조하세요.
2.8 원격 <script> 태그로부터의 CSRF 보호
Cross-site request forgery (CSRF) 보호가 이제 JavaScript 응답이 있는 GET 요청도 커버합니다. 이를 통해 제3자 사이트가 여러분의 JavaScript URL을 참조하여 민감한 데이터를 추출하려는 시도를 막을 수 있습니다.
이는 .js URL을 호출하는 모든 테스트가 xhr을 사용하지 않으면 CSRF 보호에 실패한다는 것을 의미합니다. 테스트를 업그레이드하여 XmlHttpRequests를 명시적으로 기대하도록 하세요. post :create, format: :js 대신 명시적으로 xhr :post, :create, format: :js를 사용하세요.
3 Railties
자세한 변경사항은 Changelog를 참조하세요.
3.1 제거된 기능
update:application_controllerrake task가 제거되었습니다.더 이상 사용되지 않는
Rails.application.railties.engines가 제거되었습니다.Rails Config에서 더 이상 사용되지 않는
threadsafe!가 제거되었습니다.더 이상 사용되지 않는
ActiveRecord::Generators::ActiveModel#update_attributes가 제거되고ActiveRecord::Generators::ActiveModel#update로 대체되었습니다.더 이상 사용되지 않는
config.whiny_nils옵션이 제거되었습니다.테스트 실행을 위한 더 이상 사용되지 않는 rake task들이 제거되었습니다:
rake test:uncommitted와rake test:recent.
3.2 주목할만한 변경사항
Spring application preloader가 이제 새로운 애플리케이션에 기본적으로 설치됩니다.
Gemfile의 development 그룹을 사용하므로 production 환경에서는 설치되지 않습니다. (Pull Request)테스트 실패에 대해 필터링되지 않은 backtrace를 보여주는
BACKTRACE환경 변수가 추가되었습니다. (Commit)환경 설정에
MiddlewareStack#unshift가 노출되었습니다. (Pull Request)message verifier를 반환하는
Application#message_verifier메서드가 추가되었습니다. (Pull Request)기본 생성된 테스트 헬퍼에서 필요로 하는
test_help.rb파일이db/schema.rb(또는db/structure.sql)로 테스트 데이터베이스를 자동으로 최신 상태로 유지합니다. 스키마를 다시 로드해도 모든 대기 중인 마이그레이션이 해결되지 않으면 오류가 발생합니다.config.active_record.maintain_test_schema = false로 이 기능을 비활성화할 수 있습니다. (Pull Request)Gem::Version.new(Rails.version)를 반환하는 편의 메서드로Rails.gem_version이 도입되어, 버전 비교를 더 신뢰성 있게 수행하는 방법을 제시합니다. (Pull Request)
4 Action Pack
자세한 변경사항은 Changelog를 참조하세요.
4.1 제거된 기능
통합 테스트를 위한 deprecated된 Rails 애플리케이션 폴백이 제거되었습니다. 대신
ActionDispatch.test_app을 설정하세요.deprecated된
page_cache_extension설정이 제거되었습니다.deprecated된
ActionController::RecordIdentifier가 제거되었습니다. 대신ActionView::RecordIdentifier를 사용하세요.Action Controller에서 다음의 deprecated된 상수들이 제거되었습니다:
| 제거됨 | 후속 버전 |
|---|---|
| ActionController::AbstractRequest | ActionDispatch::Request |
| ActionController::Request | ActionDispatch::Request |
| ActionController::AbstractResponse | ActionDispatch::Response |
| ActionController::Response | ActionDispatch::Response |
| ActionController::Routing | ActionDispatch::Routing |
| ActionController::Integration | ActionDispatch::Integration |
| ActionController::IntegrationTest | ActionDispatch::IntegrationTest |
4.2 주목할 만한 변경사항
protect_from_forgery는 이제 cross-origin<script>태그도 방지합니다. 테스트를get :foo, format: :js대신xhr :get, :foo, format: :js를 사용하도록 업데이트하세요. (Pull Request)#url_for는 배열 내부에 옵션이 있는 hash를 받습니다. (Pull Request)session#fetch메서드가 추가되었습니다. Hash#fetch와 비슷하게 동작하지만, 반환된 값이 항상 session에 저장된다는 점이 다릅니다. (Pull Request)Action View를 Action Pack에서 완전히 분리했습니다. (Pull Request)
deep munge에 의해 영향을 받은 키들을 로그에 기록합니다. (Pull Request)
보안 취약점 CVE-2013-0155를 해결하기 위해 사용된 params "deep munging"을 비활성화할 수 있는 새로운 설정 옵션
config.action_dispatch.perform_deep_munge가 추가되었습니다. (Pull Request)signed 및 encrypted cookie jar를 위한 serializer를 지정하는 새로운 설정 옵션
config.action_dispatch.cookies_serializer가 추가되었습니다. (Pull Requests 1, 2 / 자세한 내용)render :plain,render :html,render :body가 추가되었습니다. (Pull Request / 자세한 내용)
5 Action Mailer
자세한 변경사항은 Changelog를 참조하세요.
5.1 주목할 만한 변경사항
37 Signals의 mail_view gem을 기반으로 mailer previews 기능이 추가되었습니다. (Commit)
Action Mailer 메시지 생성을 측정합니다. 메시지를 생성하는 데 걸리는 시간이 로그에 기록됩니다. (Pull Request)
6 Active Record
자세한 변경사항은 Changelog를 참조하세요.
6.1 제거된 기능들
다음
SchemaCache메서드에서 더 이상 사용되지 않는 nil 전달이 제거되었습니다:primary_keys,tables,columns및columns_hash.ActiveRecord::Migrator#migrate에서 더 이상 사용되지 않는 block filter가 제거되었습니다.ActiveRecord::Migrator에서 더 이상 사용되지 않는 String 생성자가 제거되었습니다.callable 객체를 전달하지 않는 더 이상 사용되지 않는
scope사용이 제거되었습니다.:joinable옵션이 있는begin_transaction을 위해 더 이상 사용되지 않는transaction_joinable=이 제거되었습니다.더 이상 사용되지 않는
decrement_open_transactions가 제거되었습니다.더 이상 사용되지 않는
increment_open_transactions가 제거되었습니다.더 이상 사용되지 않는
PostgreSQLAdapter#outside_transaction?메서드가 제거되었습니다. 대신#transaction_open?을 사용할 수 있습니다.ActiveRecord::Fixtures.default_fixture_model_name을 위해 더 이상 사용되지 않는ActiveRecord::Fixtures.find_table_name이 제거되었습니다.SchemaStatements에서 더 이상 사용되지 않는columns_for_remove가 제거되었습니다.더 이상 사용되지 않는
SchemaStatements#distinct가 제거되었습니다.더 이상 사용되지 않는
ActiveRecord::TestCase가 Rails test suite로 이동되었습니다. 이 클래스는 더 이상 공개되지 않으며 Rails 내부 테스트에만 사용됩니다.연관관계에서
:dependent에 대한 더 이상 사용되지 않는:restrict옵션에 대한 지원이 제거되었습니다.연관관계에서 더 이상 사용되지 않는
:delete_sql,:insert_sql,:finder_sql,:counter_sql옵션에 대한 지원이 제거되었습니다.Column에서 더 이상 사용되지 않는
type_cast_code메서드가 제거되었습니다.더 이상 사용되지 않는
ActiveRecord::Base#connection메서드가 제거되었습니다. 클래스를 통해 접근하도록 해야 합니다.auto_explain_threshold_in_seconds에 대한 deprecation 경고가 제거되었습니다.Relation#count에서 더 이상 사용되지 않는:distinct옵션이 제거되었습니다.더 이상 사용되지 않는 메서드
partial_updates,partial_updates?,partial_updates=가 제거되었습니다.deprecated된 메서드
scoped가 제거되었습니다.deprecated된 메서드
default_scopes?가 제거되었습니다.4.0에서 deprecated된 implicit join references가 제거되었습니다.
dependency로서의
activerecord-deprecated_finders가 제거되었습니다. 자세한 내용은 gem README를 참고하세요.implicit_readonly사용이 제거되었습니다. record를readonly로 명시적으로 표시하려면readonly메서드를 사용하세요. (Pull Request)
6.2 Deprecations
어디에서도 사용되지 않는
quoted_locking_column메서드가 deprecated 되었습니다.내부적으로 더 이상 사용되지 않는
ConnectionAdapters::SchemaStatements#distinct가 deprecated 되었습니다. (Pull Request)test 데이터베이스가 이제 자동으로 관리되므로
rake db:test:*태스크가 deprecated 되었습니다. railties 릴리스 노트를 참고하세요. (Pull Request)사용되지 않는
ActiveRecord::Base.symbolized_base_class와ActiveRecord::Base.symbolized_sti_name이 대체 없이 deprecated 되었습니다. Commit
6.3 주목할 만한 변경사항
- Default scope는 이제 연결된 조건에 의해 더 이상 override되지 않습니다.
이전에는 모델에서 default_scope를 정의했을 때 동일 필드의 연결된 조건에 의해 override되었습니다. 이제는 다른 scope처럼 병합됩니다. 자세한 내용
모델의 속성이나 메서드로부터 "예쁜" URL을 편리하게 생성할 수 있는
ActiveRecord::Base.to_param이 추가되었습니다. (Pull Request)모델의 touch를 무시할 수 있는
ActiveRecord::Base.no_touching이 추가되었습니다. (Pull Request)MysqlAdapter와Mysql2Adapter의 boolean 타입 캐스팅을 통일했습니다.type_cast는true에 대해1을,false에 대해0을 반환할 것입니다. (Pull Request).unscope가 이제default_scope에 지정된 조건들을 제거합니다. (Commit)기존의 named where 조건을 덮어쓸 수 있는
ActiveRecord::QueryMethods#rewhere가 추가되었습니다. (Commit)ActiveRecord::Base#cache_key가 확장되어 가장 높은 값이 사용될 timestamp 속성들의 선택적 리스트를 받을 수 있게 되었습니다. (Commit)데이터베이스에서는 정수로 매핑되지만 이름으로 조회할 수 있는 enum 속성을 선언하기 위한
ActiveRecord::Base#enum이 추가되었습니다. (Commit)데이터베이스에서 읽은 값과 일관성을 유지하기 위해 쓰기 시 JSON 값의 타입을 캐스팅합니다. (Pull Request)
데이터베이스에서 읽은 값과 일관성을 유지하기 위해 쓰기 시 hstore 값의 타입을 캐스팅합니다. (Commit)
서드파티 제너레이터들이
next_migration_number에 접근할 수 있게 되었습니다. (Pull Request)update_attributes를 호출할 때nil인자를 받으면 이제ArgumentError를 발생시킵니다. 구체적으로, 전달받은 인자가stringify_keys에 응답하지 않으면 에러가 발생합니다. (Pull Request)CollectionAssociation#first/#last(예:has_many)가 전체 컬렉션을 로드하는 대신LIMIT이 있는 쿼리를 사용하여 결과를 가져옵니다. (Pull Request)Active Record 모델 클래스의
inspect가 더 이상 새로운
connection. 즉, 데이터베이스가 없을 때 inspect를 호출해도 더 이상 예외가 발생하지 않습니다. (Pull Request)
count에 대한 컬럼 제한을 제거하고, SQL이 유효하지 않은 경우 데이터베이스가 오류를 발생시키도록 했습니다. (Pull Request)Rails는 이제 inverse 관계를 자동으로 감지합니다. 관계 설정에
:inverse_of옵션을 지정하지 않으면, Active Record가 휴리스틱 기반으로 inverse 관계를 추측합니다. (Pull Request)ActiveRecord::Relation에서 별칭이 지정된 속성을 처리합니다. 심볼 키를 사용할 때, ActiveRecord는 이제 별칭이 지정된 속성 이름을 데이터베이스에서 사용되는 실제 컬럼 이름으로 변환합니다. (Pull Request)
fixture 파일의 ERB는 더 이상 메인 객체의 컨텍스트에서 평가되지 않습니다. 여러 fixture에서 사용되는 헬퍼 메서드는
ActiveRecord::FixtureSet.context_class에 포함된 모듈에 정의되어야 합니다. (Pull Request)RAILS_ENV가 명시적으로 지정된 경우 테스트 데이터베이스를 생성하거나 삭제하지 않습니다. (Pull Request)
Relation은 더 이상#map!이나#delete_if같은 변경자 메서드를 가지지 않습니다. 이러한 메서드를 사용하기 전에#to_a를 호출하여Array로 변환하세요. (Pull Request)find_in_batches,find_each,Result#each와Enumerable#index_by는 이제 크기를 계산할 수 있는Enumerator를 반환합니다. (Pull Request)scope,enum과 Associations는 이제 "위험한" 이름 충돌에 대해 오류를 발생시킵니다. (Pull Request, Pull Request)second부터fifth까지의 메서드가firstfinder처럼 동작합니다. (Pull Request)touch가after_commit과after_rollback콜백을 발생시키도록 만들었습니다. (Pull Request)sqlite >= 3.8.0에서 부분 인덱스를 활성화했습니다. (Pull Request)change_column_null을 되돌릴 수 있게 만들었습니다. (Commit)마이그레이션 후 스키마 덤프를 비활성화하는 플래그를 추가했습니다. 이는 새로운 애플리케이션의 production 환경에서 기본적으로
false로 설정됩니다. (Pull Request)
7 Active Model
Changelog에서 자세한 변경 사항을 참조하세요.
7.1 Deprecations
Validator#setup이 deprecate 되었습니다. 이제는 validator의 constructor에서 수동으로 설정해야 합니다. (Commit)
7.2 주목할만한 변경사항
ActiveModel::Dirty에 변경 상태를 제어하는 새로운 API 메서드reset_changes와changes_applied가 추가되었습니다.validation을 정의할 때 여러 context를 지정할 수 있게 되었습니다. (Pull Request)
attribute_changed?는 이제 주어진 값:from및/또는:to로 속성이 변경되었는지 확인하기 위한 hash를 받을 수 있습니다. (Pull Request)
8 Active Support
자세한 변경사항은 Changelog를 참조하세요.
8.1 제거된 기능들
MultiJSON의존성이 제거되었습니다. 결과적으로ActiveSupport::JSON.decode는 더 이상MultiJSON을 위한 options hash를 받지 않습니다. (Pull Request / 자세한 내용)사용자 정의 객체를 JSON으로 인코딩하는 데 사용되는
encode_jsonhook에 대한 지원이 제거되었습니다. 이 기능은 activesupport-json_encoder gem으로 추출되었습니다. (관련 Pull Request / 자세한 내용)대체 없이 deprecated된
ActiveSupport::JSON::Variable이 제거되었습니다.deprecated된
String#encoding_aware?core extensions(core_ext/string/encoding)이 제거되었습니다.deprecated된
Module#local_constant_names가Module#local_constants를 위해 제거되었습니다.deprecated된
DateTime.local_offset이DateTime.civil_from_format을 위해 제거되었습니다.deprecated된
Loggercore extensions(core_ext/logger.rb)이 제거되었습니다.deprecated된
Time#time_with_datetime_fallback,Time#utc_time,Time#local_time이Time#utc와Time#local을 위해 제거되었습니다.대체 없이 deprecated된
Hash#diff가 제거되었습니다.deprecated된
Date#to_time_in_current_zone이Date#in_time_zone을 위해 제거되었습니다.대체 없이 deprecated된
Proc#bind가 제거되었습니다.deprecated된
Array#uniq_by와Array#uniq_by!가 제거되었습니다. 대신 네이티브Array#uniq와Array#uniq!를 사용하세요.deprecated된
ActiveSupport::BasicObject가 제거되었습니다. 대신ActiveSupport::ProxyObject를 사용하세요.deprecated된
BufferedLogger가 제거되었습니다. 대신ActiveSupport::Logger를 사용하세요.deprecated된
assert_present와assert_blank메서드가 제거되었습니다. 대신assert object.blank?와assert object.present?를 사용하세요.filter 객체에 대한 deprecated된
#filter메서드가 제거되었습니다. 대신 해당하는 메서드를 사용하세요(예: before filter의 경우#before).기본 inflections에서 'cow' => 'kine' 불규칙 활용이 제거되었습니다. (Commit)
8.2 Deprecations
Numeric#{ago,until,since,from_now}가 deprecated 되었습니다. 사용자는 값을 AS::Duration으로 명시적으로 변환해야 합니다. 예:5.ago=>5.seconds.ago(Pull Request)require 경로
active_support/core_ext/object/to_json가 deprecated 되었습니다. 대신active_support/core_ext/object/json를 require 하세요. (Pull Request)ActiveSupport::JSON::Encoding::CircularReferenceError가 deprecated 되었습니다. 이 기능은 activesupport-json_encoder gem으로 분리되었습니다. (Pull Request / 자세한 내용)ActiveSupport.encode_big_decimal_as_string옵션이 deprecated 되었습니다. 이 기능은 activesupport-json_encoder gem으로 분리되었습니다. (Pull Request / 자세한 내용)커스텀
BigDecimal직렬화가 deprecated 되었습니다. (Pull Request)
8.3 주목할 만한 변경사항
ActiveSupport의 JSON 인코더가 순수 Ruby로 직접 인코딩하는 대신 JSON gem을 활용하도록 다시 작성되었습니다. (Pull Request / More Details)JSON gem과의 호환성이 개선되었습니다. (Pull Request / More Details)
ActiveSupport::Testing::TimeHelpers#travel과#travel_to가 추가되었습니다. 이 메서드들은Time.now와Date.today를 stub하여 현재 시간을 주어진 시간이나 기간으로 변경합니다.ActiveSupport::Testing::TimeHelpers#travel_back이 추가되었습니다. 이 메서드는travel과travel_to로 추가된 stub들을 제거하여 현재 시간을 원래 상태로 되돌립니다. (Pull Request)getTime()같은 JavaScript 함수에 전달할 수 있도록1.hour.in_milliseconds와 같은Numeric#in_milliseconds가 추가되었습니다. (Commit)Date#middle_of_day,DateTime#middle_of_day,Time#middle_of_day메서드들이 추가되었습니다. 또한midday,noon,at_midday,at_noon,at_middle_of_day가 별칭으로 추가되었습니다. (Pull Request)날짜 범위를 생성하기 위한
Date#all_week/month/quarter/year가 추가되었습니다. (Pull Request)Time.zone.yesterday와Time.zone.tomorrow가 추가되었습니다. (Pull Request)일반적인 패턴인
String#gsub(pattern,'')의 단축형으로String#remove(pattern)이 추가되었습니다. (Commit)해시에서 nil 값을 가진 항목을 제거하는
Hash#compact와Hash#compact!가 추가되었습니다. (Pull Request)blank?와present?가 싱글톤을 반환하도록 변경되었습니다. (Commit)새로운
I18n.enforce_available_locales설정의 기본값이true로 설정되어,I18n에 전달되는 모든 로케일이available_locales목록에 선언되어 있어야 합니다. (Pull Request)Module#concerning도입: 책임을 분리하는 자연스럽고 간단한 방법
class. (Commit)
- 허용된 목록에 값을 추가하는 것을 단순화하기 위해
Object#presence_in이 추가되었습니다. (Commit)
9 Credits
Rails를 안정적이고 견고한 프레임워크로 만들기 위해 많은 시간을 투자한 수많은 사람들은 Rails 기여자 전체 목록에서 확인할 수 있습니다. 그들 모두에게 찬사를 보냅니다.