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_controller
rake 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
까지의 메서드가first
finder처럼 동작합니다. (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_json
hook에 대한 지원이 제거되었습니다. 이 기능은 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된
Logger
core 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 기여자 전체 목록에서 확인할 수 있습니다. 그들 모두에게 찬사를 보냅니다.