Ruby on Rails 4.1 릴리스 노트

Rails 4.1의 주요 기능:

  • Spring 애플리케이션 프리로더
  • config/secrets.yml
  • Action Pack 변형
  • Action Mailer 미리보기

이 릴리스 노트에서는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 메인 저장소에서 커밋 목록을 확인하세요.


Rails 4.1로 업그레이드하기

기존 애플리케이션을 업그레이드하는 경우, 업그레이드 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 4.0으로 먼저 업그레이드하고 애플리케이션이 예상대로 작동하는지 확인한 후에 Rails 4.1로 업그레이드를 시도해야 합니다. Rails 4.0에서 Rails 4.1로 업그레이드할 때 주의해야 할 사항은 “Ruby on Rails 업그레이드” 가이드를 참조하세요.

주요 기능

Spring 애플리케이션 프리로더

Spring은 Rails 애플리케이션 프리로더입니다. 테스트, Rake 작업 또는 마이그레이션을 실행할 때마다 애플리케이션을 부팅할 필요가 없어 개발 속도를 높입니다.

새로운 Rails 4.1 애플리케이션은 “springified” 실행 파일과 함께 제공됩니다. 즉, bin/railsbin/rake가 자동으로 미리 로드된 Spring 환경을 활용합니다.

Rake 작업 실행:

$ bin/rake test:models

Rails 명령 실행:

$ bin/rails console

Spring 내부 살펴보기:

$ bin/spring status
Spring is running:

 1182 spring server | my_app | started 29 mins ago
 3656 spring app    | my_app | started 23 secs ago | test mode
 3746 spring app    | my_app | started 10 secs ago | development mode

Spring의 모든 기능을 보려면 Spring README를 참고하세요.

기존 애플리케이션을 이 기능으로 마이그레이션하는 방법은 “Ruby on Rails 업그레이드” 가이드를 참조하세요.

config/secrets.yml

Rails 4.1은 config 폴더에 새로운 secrets.yml 파일을 생성합니다. 기본적으로 이 파일에는 애플리케이션의 secret_key_base가 포함되어 있지만, 외부 API에 대한 액세스 키와 같은 다른 비밀 정보도 저장할 수 있습니다.

이 파일에 추가된 비밀은 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 업그레이드” 가이드를 참조하세요.

Action Pack 변형

우리는 종종 스마트폰, 태블릿 및 데스크톱 브라우저에 대해 다른 HTML/JSON/XML 템플릿을 렌더링하고 싶습니다. 변형은 이를 쉽게 처리할 수 있습니다.

요청 변형은 요청 형식의 특수화로, :tablet, :phone 또는 :desktop과 같은 형태입니다.

before_action에서 변형을 설정할 수 있습니다:

request.variant = :tablet if request.user_agent =~ /iPad/

작업에서 형식과 마찬가지로 변형에 응답할 수 있습니다:

respond_to do |format|
  format.html do |html|
    html.tablet # app/views/projects/show.html+tablet.erb 렌더링
    html.phone { extra_setup; render ... }
  end
end

각 형식과 변형에 대한 별도의 템플릿을 제공합니다:

app/views/projects/show.html.erb
app/views/projects/show.html+tablet.erb
app/views/projects/show.html+phone.erb

인라인 구문을 사용하여 변형 정의를 간소화할 수도 있습니다:

respond_to do |format|
  format.js         { render "trash" }
  format.html.phone { redirect_to progress_path }
  format.html.none  { render "trash" }
end

Action Mailer 미리보기

Action Mailer 미리보기는 이메일의 모습을 확인할 수 있는 특별한 URL을 통해 제공됩니다.

미리보기 클래스를 구현하고 메서드에서 확인하고 싶은 메일 객체를 반환합니다:

class NotifierPreview < ActionMailer::Preview
  def welcome
    Notifier.welcome(User.first)
  end
end

http://localhost:3000/rails/mailers/notifier/welcome에서 미리보기를 확인할 수 있으며, http://localhost:3000/rails/mailers에서 모든 미리보기 목록을 볼 수 있습니다.

기본적으로 이러한 미리보기 클래스는 test/mailers/previews에 있습니다. preview_path 옵션을 사용하여 이 위치를 구성할 수 있습니다.

자세한 내용은 문서를 참조하세요.

Active Record 열거형

데이터베이스의 정수 값에 매핑되는 열거형 속성을 선언할 수 있습니다. 이를 통해 이름으로 쿼리할 수 있습니다.

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

conversation.archived!
conversation.active? # => false
conversation.status  # => "archived"

Conversation.archived # => 모든 보관된 대화 관계

Conversation.statuses # => { "active" => 0, "archived" => 1 }

자세한 내용은 문서를 참조하세요.

메시지 검증기

메시지 검증기를 사용하여 서명된 메시지를 생성하고 확인할 수 있습니다. 이는 remember-me 토큰 및 친구와 같은 중요한 데이터를 안전하게 전송하는 데 유용할 수 있습니다.

Rails.application.message_verifier 메서드는 secretkeybase와 지정된 메시지 검증기 이름을 사용하여 서명된 메시지를 생성하는 새 메시지 검증기를 반환합니다:

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)
# raises ActiveSupport::MessageVerifier::InvalidSignature

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 클래스에 믹스인하는 것과 동일합니다.

자세한 내용과 사용 사례는 문서를 참조하세요.

원격 <script> 태그에서의 CSRF 보호

교차 사이트 요청 위조(CSRF) 보호가 이제 JavaScript 응답이 포함된 GET 요청에도 적용됩니다. 이를 통해 타사 사이트에서 중요한 데이터를 추출하려는 JavaScript URL을 참조하는 것을 방지할 수 있습니다.

이는 .js URL을 호출하는 테스트가 CSRF 보호를 통과하지 못하게 됨을 의미합니다. 테스트를 명시적으로 XmlHttpRequest를 기대하도록 업그레이드하세요. post :create, format: :jsxhr :post, :create, format: :js로 변경하세요.

Railties

자세한 변경 사항은 변경 로그를 참조하세요.

제거된 기능

  • update:application_controller Rake 작업이 제거되었습니다.

  • 더 이상 사용되지 않는 Rails.application.railties.engines가 제거되었습니다.

  • Rails 구성에서 더 이상 사용되지 않는 threadsafe!가 제거되었습니다.

  • 더 이상 사용되지 않는 ActiveRecord::Generators::ActiveModel#update_attributesActiveRecord::Generators::ActiveModel#update로 대체되었습니다.

  • 더 이상 사용되지 않는 config.whiny_nils �션이 제거되었습니다.

  • 더 이상 사용되지 않는 테스트 실행 Rake 작업 rake test:uncommittedrake test:recent가 제거되었습니다.

주요 변경 사항

  • Spring 애플리케이션 프리로더가 새로운 애플리케이션에 기본적으로 설치됩니다. Gemfile의 개발 그룹을 사용하므로 프로덕션에는 설치되지 않습니다. (Pull Request)

  • 테스트 실패에 대한 필터링되지 않은 백트레이스를 표시하는 BACKTRACE 환경 변수가 추가되었습니다. (Commit)

  • MiddlewareStack#unshift가 환경 구성에 노출되었습니다. (Pull Request)

  • Application#message_verifier 메서드가 추가되어 메시지 검증기를 반환합니다. (Pull Request)

  • test_help.rb 파일은 db/schema.rb(또는 db/structure.sql)와 데이터베이스를 자동으로 최신 상태로 유지합니다. 보류 중인 마이그레이션을 해결할 수 없는 경우 오류를 발생시킵니다. config.active_record.maintain_test_schema = false로 옵트아웃할 수 있습니다. (Pull Request)

  • Rails.gem_version을 도입하여 Gem::Version.new(Rails.version)을 반환하는 편리한 메서드를 제공하여 버전 비교를 더 안정적으로 수행할 수 있습니다. (Pull Request)

Action Pack

자세한 변경 사항은 변경 로그를 참조하세요.

제거된 기능

  • 통합 테스트에 대한 Rails 애플리케이션 폴백이 제거되었습니다. ActionDispatch.test_app을 대신 설정하세요.

  • 더 이상 사용되지 않는 page_cache_extension 구성이 제거되었습니다.

  • 더 이상 사용되지 않는 ActionController::RecordIdentifier가 제거되었습니다. 대신 ActionView::RecordIdentifier를 사용하세요.

  • Action Controller에서 더 이상 사용되지 않는 상수가 제거되었습니다:

제거된 상수 대체 상수
ActionController::AbstractRequest ActionDisp네, 번역을 계속하겠습니다.

주요 변경 사항

  • protect_from_forgery가 이제 교차 원본 <script> 태그도 방지합니다. 테스트를 xhr :get, :foo, format: :js로 업데이트하세요. get :foo, format: :js는 더 이상 작동하지 않습니다. (Pull Request)

  • #url_for가 배열 내부의 옵션 해시를 허용합니다. (Pull Request)

  • session#fetch 메서드가 추가되었습니다. 이는 Hash#fetch와 유사하게 동작하지만, 반환된 값은 항상 세션에 저장됩니다. (Pull Request)

  • Action View가 Action Pack에서 완전히 분리되었습니다. (Pull Request)

  • 깊은 munge에 영향을 받은 키를 기록합니다. (Pull Request)

  • config.action_dispatch.perform_deep_munge 구성 옵션이 추가되어 CVE-2013-0155 보안 취약점을 해결하기 위해 사용된 params “deep munging"을 비활성화할 수 있습니다. (Pull Request)

  • config.action_dispatch.cookies_serializer 구성 옵션이 추가되어 서명된 및 암호화된 쿠키 저장소에 대한 직렬화기를 지정할 수 있습니다. (Pull Request 1, Pull Request 2 / 자세한 내용)

  • render :plain, render :htmlrender :body가 추가되었습니다. (Pull Request / 자세한 내용)

Action Mailer

자세한 변경 사항은 변경 로그를 참조하세요.

주요 변경 사항

  • 37 Signals mail_view 젬을 기반으로 한 메일러 미리보기 기능이 추가되었습니다. (Commit)

  • Action Mailer 메시지 생성을 계측합니다. 메시지 생성에 걸리는 시간이 로그에 기록됩니다. (Pull Request)

Active Record

자세한 변경 사항은 변경 로그를 참조하세요.

제거된 기능

  • SchemaCache 메서드 primary_keys, tables, columnscolumns_hash에 대한 더 이상 사용되지 않는 nil 전달이 제거되었습니다.

  • ActiveRecord::Migrator#migrate에서 더 이상 사용되지 않는 블록 필터가 제거되었습니다.

  • ActiveRecord::Migrator의 더 이상 사용되지 않는 문자열 생성자가 제거되었습니다.

  • 호출 가능한 객체를 전달하지 않는 더 이상 사용되지 않는 scope 사용이 제거되었습니다.

  • :joinable 옵션이 있는 begin_transaction으로 대체된 더 이상 사용되지 않는 transaction_joinable=이 제거되었습니다.

  • 더 이상 사용되지 않는 decrement_open_transactions가 제거되었습니다.

  • 더 이상 사용되지 않는 increment_open_transactions가 제거되었습니다.

  • 더 이상 사용되지 않는 PostgreSQLAdapter#outside_transaction? 메서드가 제거되었습니다. 대신 #transaction_open?을 사용할 수 있습니다.

  • 더 이상 사용되지 않는 ActiveRecord::Fixtures.find_table_nameActiveRecord::Fixtures.default_fixture_model_name로 대체되었습니다.

  • SchemaStatements에서 더 이상 사용되지 않는 columns_for_remove가 제거되었습니다.

  • 더 이상 사용되지 않는 SchemaStatements#distinct가 제거되었습니다.

  • ActiveRecord::TestCase가 Rails 테스트 스위트로 이동되었습니다. 이 클래스는 더 이상 공개되지 않으며 내부 Rails 테스트에만 사용됩니다.

  • 연관 관계의 :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= 메서드가 제거되었습니다.

  • 더 이상 사용되지 않는 scoped 메서드가 제거되었습니다.

  • 더 이상 사용되지 않는 default_scopes? 메서드가 제거되었습니다.

  • 4.0에서 더 이상 사용되지 않던 암시적 조인 참조가 제거되었습니다.

  • activerecord-deprecated_finders 젬에 대한 종속성이 제거되었습니다. 자세한 내용은 젬 README를 참조하세요.

  • implicit_readonly의 사용이 제거되었습니다. 명시적으로 readonly 메서드를 사용하여 레코드를 읽기 전용으로 표시하세요. (Pull Request)

더 이상 사용되지 않는 기능

  • quoted_locking_column 메서드가 더 이상 사용되지 않습니다. 이 메서드는 어디에서도 사용되지 않습니다.

  • ConnectionAdapters::SchemaStatements#distinct가 더 이상 사용되지 않습니다. 내부적으로 더 이상 사용되지 않습니다. (Pull Request)

  • rake db:test:* 작업이 더 이상 사용되지 않습니다. 테스트 데이터베이스가 이제 자동으로 유지됩니다. Railties 릴리스 노트 참조. (Pull Request)

  • 더 이상 사용되지 않는 ActiveRecord::Base.symbolized_base_classActiveRecord::Base.symbolized_sti_name이 대체 없이 제거되었습니다. (Commit)

주요 변경 사항

  • 기본 범위가 더 이상 연쇄된 조건에 의해 재정의되지 않습니다.

이 변경 전에는 모델에 default_scope를 정의하면 동일한 필드에 대한 연쇄된 조건에 의해 재정의되었습니다. 이제는 다른 범위와 마찬가지로 병합됩니다. 자세한 내용

  • ActiveRecord::Base.to_param이 추가되어 모델의 속성 또는 메서드에서 "예쁜” URL을 파생할 수 있습니다. (Pull Request)

  • ActiveRecord::Base.no_touching이 추가되어 모델의 터치를 무시할 수 있습니다. (Pull Request)

  • MysqlAdapterMysql2Adapter의 부울 유형 캐스팅이 통일되었습니다. type_casttrue에 대해 1을, false에 대해 0을 반환합니다. (Pull Request)

  • .unscope가 이제 default_scope에 지정된 조건을 제거합니다. (Commit)

  • 기존 명명된 where 조건을 덮어쓰는 ActiveRecord::QueryMethods#rewhere가 추가되었습니다. (Commit)

  • ActiveRecord::Base#cache_key가 선택적 타임스탬프 속성 목록을 허용하도록 확장되었습니다. 이 중 가장 높은 값이 사용됩니다. (Commit)

  • 데이터베이스의 정수 값에 매핑되는 열거형 속성을 선언하는 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)

  • 액티브 레코드 모델 클래스의 inspect가 새 연결을 시작하지 않습니다. 즉, 데이터베이스가 없는 경우 inspect를 호출해도 예외가 발생하지 않습니다. (Pull Request)

  • count에 대한 열 제한이 제거되었습니다. SQL이 잘못된 경우 데이터베이스에서 오류를 발생시킵니다. (Pull Request)

  • Rails는 이제 역관계를 자동으로 감지합니다. :inverse_of 옵션을 연관 관계에 설정하지 않으면 Active Record가 휴리스틱을 기반으로 역관계를 추측합니다. (Pull Request)

  • Active Record 관계에서 별칭된 속성을 처리합니다. 심볼 키를 사용할 때 Active Record는 데이터베이스에서 사용되는 실제 열 이름으로 별칭된네, 번역을 계속하겠습니다.

  • 속성 이름을 변환합니다. (Pull Request)

  • 픽스처 파일의 ERB가 더 이상 메인 객체의 컨텍스트에서 평가되지 않습니다. 여러 픽스처에서 사용되는 헬퍼 메서드는 ActiveRecord::FixtureSet.context_class에 포함된 모듈에 정의해야 합니다. (Pull Request)

  • RAILS_ENV이 명시적으로 지정된 경우 테스트 데이터베이스를 생성하거나 삭제하지 않습니다. (Pull Request)

  • Relation에 더 이상 #map!#delete_if와 같은 변이 메서드가 없습니다. 이러한 메서드를 사용하려면 먼저 #to_a를 호출하여 배열로 변환해야 합니다. (Pull Request)

  • find_in_batches, find_each, Result#eachEnumerable#index_by가 이제 크기를 계산할 수 있는 Enumerator를 반환합니다. (Pull Request)

  • scope, enum 및 연관 관계에서 “위험한” 이름 충돌이 발생하면 오류가 발생합니다. (Pull Request, Pull Request)

  • second부터 fifth까지의 메서드가 first 파인더와 같이 동작합니다. (Pull Request)

  • touchafter_commitafter_rollback 콜백을 발생시킵니다. (Pull Request)

  • sqlite >= 3.8.0에 대한 부분 인덱스 지원이 추가되었습니다. (Pull Request)

  • change_column_null가 되돌릴 수 있게 되었습니다. (Commit)

  • 마이그레이션 후 스키마 덤프를 비활성화하는 플래그가 추가되었습니다. 새 애플리케이션의 프로덕션 환경에서는 기본적으로 false로 설정됩니다. (Pull Request)

Active Model

자세한 변경 사항은 변경 로그를 참조하세요.

더 이상 사용되지 않는 기능

  • Validator#setup이 더 이상 사용되지 않습니다. 이제 검증기의 생성자에서 수동으로 수행해야 합니다. (Commit)

주요 변경 사항

  • ActiveModel::Dirtyreset_changeschanges_applied API 메서드가 추가되어 변경 상태를 제어할 수 있습니다.

  • 여러 컨텍스트에서 유효성 검사를 정의할 수 있습니다. (Pull Request)

  • attribute_changed?가 이제 속성이 :from 및/또는 :to 지정된 값으로 변경되었는지 확인하는 해시를 허용합니다. (Pull Request)

Active Support

자세한 변경 사항은 변경 로그를 참조하세요.

제거된 기능

  • MultiJSON 종속성이 제거되었습니다. 결과적으로 ActiveSupport::JSON.decode는 더 이상 MultiJSON에 대한 옵션 해시를 허용하지 않습니다. (Pull Request / 자세한 내용)

  • 사용자 정의 객체를 JSON으로 인코딩하는 데 사용되던 encode_json 훅에 대한 지원이 제거되었습니다. 이 기능은 activesupport-json_encoder 젬으로 추출되었습니다. (관련 Pull Request / 자세한 내용)

  • 더 이상 사용되지 않는 ActiveSupport::JSON::Variable이 제거되었습니다.

  • 더 이상 사용되지 않는 String#encoding_aware? 코어 확장(core_ext/string/encoding)이 제거되었습니다.

  • 더 이상 사용되지 않는 Module#local_constant_namesModule#local_constants로 대체되었습니다.

  • 더 이상 사용되지 않는 DateTime.local_offsetDateTime.civil_from_format으로 대체되었습니다.

  • 더 이상 사용되지 않는 Logger 코어 확장(core_ext/logger.rb)이 제거되었습니다.

  • 더 이상 사용되지 않는 Time#time_with_datetime_fallback, Time#utc_timeTime#local_timeTime#utcTime#local로 대체되었습니다.

  • 더 이상 사용되지 않는 Hash#diff가 제거되었습니다.

  • 더 이상 사용되지 않는 Date#to_time_in_current_zoneDate#in_time_zone으로 대체되었습니다.

  • 더 이상 사용되지 않는 Proc#bind가 제거되었습니다.

  • 더 이상 사용되지 않는 Array#uniq_byArray#uniq_by!가 제거되었습니다. 대신 기본 Array#uniqArray#uniq!를 사용하세요.

  • 더 이상 사용되지 않는 ActiveSupport::BasicObject가 제거되었습니다. 대신 ActiveSupport::ProxyObject를 사용하세요.

  • 더 이상 사용되지 않는 BufferedLogger가 제거되었습니다. 대신 ActiveSupport::Logger를 사용하세요.

  • 더 이상 사용되지 않는 assert_presentassert_blank 메서드가 제거되었습니다. 대신 assert object.blank?assert object.present?를 사용하세요.

  • 필터 객체의 더 이상 사용되지 않는 #filter 메서드가 제거되었습니다. 대신 해당 메서드(예: 이전 필터의 #before)를 사용하세요.

  • 기본 불규칙 변화에서 “cow” => “kine” 변화가 제거되었습니다. (Commit)

더 이상 사용되지 않는 기능

  • Numeric#{ago,until,since,from_now}가 더 이상 사용되지 않습니다. 사용자는 명시적으로 AS::Duration으로 변환해야 합니다. 예: 5.ago => 5.seconds.ago (Pull Request)

  • active_support/core_ext/object/to_json에 대한 require 경로가 더 이상 사용되지 않습니다. 대신 active_support/core_ext/object/json을 require하세요. (Pull Request)

  • ActiveSupport::JSON::Encoding::CircularReferenceError가 더 이상 사용되지 않습니다. 이 기능은 activesupport-json_encoder 젬으로 추출되었습니다. (Pull Request / 자세한 내용)

  • ActiveSupport.encode_big_decimal_as_string 옵션이 더 이상 사용되지 않습니다. 이 기능은 activesupport-json_encoder 젬으로 추출되었습니다. (Pull Request / 자세한 내용)

  • 사용자 정의 BigDecimal 직렬화가 더 이상 사용되지 않습니다. (Pull Request)

주요 변경 사항

  • ActiveSupport의 JSON 인코더가 JSON 젬을 활용하도록 재작성되어 순수 Ruby 사용자 정의 인코딩을 수행하지 않습니다. (Pull Request / 자세한 내용)

  • JSON 젬과의 호환성이 향상되었습니다. (Pull Request / 자세한 내용)

  • ActiveSupport::Testing::TimeHelpers#travel#travel_to가 추가되었습니다. 이 메서드는 Time.nowDate.today를 스텁하여 현재 시간을 지정된 시간 또는 기간으로 변경합니다.

  • ActiveSupport::Testing::TimeHelpers#travel_back이 추가되었습니다. 이 메서드는 traveltravel_to에 의해 추가된 스텁을 제거하여 현재 시간을 원래 상태로 되돌립니다. (Pull Request)

  • Numeric#in_milliseconds가 추가되었습니다. 예: 1.hour.in_milliseconds와 같이 JavaScript의 getTime()과 같은 함수에 전달할 수 있습니다. (Commit)

  • Date#middle_of_day, DateTime#middle_of_dayTime#middle_of_day 메서드가 추가되었습니다. midday, noon, at_midday, at_noonat_middle_of_day도 별칭으로 추가되었습니다. (Pull Request)

  • 날짜 범위를 생성하는 Date#all_week/month/quarter/year가 추가되었습니다. (Pull Request)

  • Time.zone.yesterdayTime.zone.tomorrow가 추가되었습니다. (Pull Request)

  • String#remove(pattern)이 추가되어 String#gsub(pattern,'')의 일반적인 패턴에 대한 간단한 단축키를 제공합니다. (Commit)

  • Hash#compactHash#compact!가 추가되어 nil 값이 있는 항목을 해시에서 제거할 수 있습니다. (Pull Request)

  • blank?present?가 싱글톤을 반환하도록 변경되었습니다. (Commit)

  • 새로운 I18n.enforce_available_locales 구성의 기본값이 true로 설정되어 I18navailable_locales 목록에 선언된 모든 로케일을 사용하도록 강제합니다. (Pull Request)

  • Module#concerning이 도입되어 클래스 내에서 책임을 자연스럽고 간단하게 분리할 수 있습니다. ([Commit](https://github.com/rails/rails/commit/1eee0ca네, 번역을 계속하겠습니다.

  • Object#presence_in이 추가되어 허용 목록에 값을 추가하는 것을 간소화합니다. (Commit)

크레딧

Rails에 많은 시간을 투자하여 안정적이고 견고한 프레임워크로 만든 많은 기여자들의 전체 목록을 참조하세요. 모든 분들께 박수를 보냅니다.