rubyonrails.org에서 더 보기:

GitHub에서 이 파일을 읽지 마세요. 가이드는 https://guides.rubyonrails.org 에 게시되어 있습니다.

Ruby on Rails 4.1 릴리스 노트

Rails 4.1의 주요 내용:

  • Spring application preloader
  • config/secrets.yml
  • Action Pack variants
  • Action Mailer previews

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

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/railsbin/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_keySOMEKEY를 반환합니다.

이 기능을 기존 애플리케이션에서 사용하도록 마이그레이션하는 방법은 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:uncommittedrake 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, columnscolumns_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_classActiveRecord::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)

  • MysqlAdapterMysql2Adapter의 boolean 타입 캐스팅을 통일했습니다. type_casttrue에 대해 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#eachEnumerable#index_by는 이제 크기를 계산할 수 있는 Enumerator를 반환합니다. (Pull Request)

  • scope, enum과 Associations는 이제 "위험한" 이름 충돌에 대해 오류를 발생시킵니다. (Pull Request, Pull Request)

  • second부터 fifth까지의 메서드가 first finder처럼 동작합니다. (Pull Request)

  • touchafter_commitafter_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_changeschanges_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_namesModule#local_constants를 위해 제거되었습니다.

  • deprecated된 DateTime.local_offsetDateTime.civil_from_format을 위해 제거되었습니다.

  • deprecated된 Logger core extensions(core_ext/logger.rb)이 제거되었습니다.

  • deprecated된 Time#time_with_datetime_fallback, Time#utc_time, Time#local_timeTime#utcTime#local을 위해 제거되었습니다.

  • 대체 없이 deprecated된 Hash#diff가 제거되었습니다.

  • deprecated된 Date#to_time_in_current_zoneDate#in_time_zone을 위해 제거되었습니다.

  • 대체 없이 deprecated된 Proc#bind가 제거되었습니다.

  • deprecated된 Array#uniq_byArray#uniq_by!가 제거되었습니다. 대신 네이티브 Array#uniqArray#uniq!를 사용하세요.

  • deprecated된 ActiveSupport::BasicObject가 제거되었습니다. 대신 ActiveSupport::ProxyObject를 사용하세요.

  • deprecated된 BufferedLogger가 제거되었습니다. 대신 ActiveSupport::Logger를 사용하세요.

  • deprecated된 assert_presentassert_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.nowDate.today를 stub하여 현재 시간을 주어진 시간이나 기간으로 변경합니다.

  • ActiveSupport::Testing::TimeHelpers#travel_back이 추가되었습니다. 이 메서드는 traveltravel_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.yesterdayTime.zone.tomorrow가 추가되었습니다. (Pull Request)

  • 일반적인 패턴인 String#gsub(pattern,'')의 단축형으로 String#remove(pattern)이 추가되었습니다. (Commit)

  • 해시에서 nil 값을 가진 항목을 제거하는 Hash#compactHash#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 기여자 전체 목록에서 확인할 수 있습니다. 그들 모두에게 찬사를 보냅니다.



맨 위로