diff options
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/enum.rb | 7 | ||||
-rw-r--r-- | activerecord/test/cases/enum_test.rb | 9 | ||||
-rw-r--r-- | activerecord/test/cases/serialized_attribute_test.rb | 4 | ||||
-rw-r--r-- | guides/source/routing.md | 2 | ||||
-rw-r--r-- | tasks/release.rb | 15 | ||||
-rw-r--r-- | tasks/release_announcement_draft.erb | 10 |
7 files changed, 41 insertions, 10 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index db291726e7..587831f1bb 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Allow disabling scopes generated by `ActiveRecord.enum`. + + *Alfred Dominic* + * Ensure that `delete_all` on collection proxy returns affected count. *Ryuta Kamizono* diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb index d62cd3f92a..d7cb7691e0 100644 --- a/activerecord/lib/active_record/enum.rb +++ b/activerecord/lib/active_record/enum.rb @@ -149,6 +149,7 @@ module ActiveRecord klass = self enum_prefix = definitions.delete(:_prefix) enum_suffix = definitions.delete(:_suffix) + enum_scopes = definitions.delete(:_scopes) definitions.each do |name, values| assert_valid_enum_definition_values(values) # statuses = { } @@ -195,8 +196,10 @@ module ActiveRecord define_method("#{value_method_name}!") { update!(attr => value) } # scope :active, -> { where(status: 0) } - klass.send(:detect_enum_conflict!, name, value_method_name, true) - klass.scope value_method_name, -> { where(attr => value) } + if enum_scopes != false + klass.send(:detect_enum_conflict!, name, value_method_name, true) + klass.scope value_method_name, -> { where(attr => value) } + end end end enum_values.freeze diff --git a/activerecord/test/cases/enum_test.rb b/activerecord/test/cases/enum_test.rb index fef06e6edd..8a0f6f6df1 100644 --- a/activerecord/test/cases/enum_test.rb +++ b/activerecord/test/cases/enum_test.rb @@ -551,4 +551,13 @@ class EnumTest < ActiveRecord::TestCase test "data type of Enum type" do assert_equal :integer, Book.type_for_attribute("status").type end + + test "scopes can be disabled" do + klass = Class.new(ActiveRecord::Base) do + self.table_name = "books" + enum status: [:proposed, :written], _scopes: false + end + + assert_raises(NoMethodError) { klass.proposed } + end end diff --git a/activerecord/test/cases/serialized_attribute_test.rb b/activerecord/test/cases/serialized_attribute_test.rb index 1192b30b14..08ab4dc600 100644 --- a/activerecord/test/cases/serialized_attribute_test.rb +++ b/activerecord/test/cases/serialized_attribute_test.rb @@ -13,6 +13,10 @@ class SerializedAttributeTest < ActiveRecord::TestCase MyObject = Struct.new :attribute1, :attribute2 + # NOTE: Use a duplicate of Topic so attribute + # changes don't bleed into other tests + Topic = ::Topic.dup + teardown do Topic.serialize("content") end diff --git a/guides/source/routing.md b/guides/source/routing.md index 84de727c11..0a0f1b6754 100644 --- a/guides/source/routing.md +++ b/guides/source/routing.md @@ -543,6 +543,8 @@ resources :photos do end ``` +NOTE: If you're defining additional resource routes with a symbol as the first positional argument, be mindful that it is not equivalent to using a string. Symbols infer controller actions while strings infer paths. + #### Adding Routes for Additional New Actions To add an alternate new action using the `:on` shortcut: diff --git a/tasks/release.rb b/tasks/release.rb index 1e83814bae..a13003aa27 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -122,15 +122,20 @@ namespace :changelog do end end - task :release_summary do - (FRAMEWORKS + ["guides"]).each do |fw| - puts "## #{fw}" + task :release_summary, [:base_release] do |_, args| + release_regexp = args[:base_release] ? Regexp.escape(args[:base_release]) : /\d+\.\d+\.\d+/ + + FRAMEWORKS.each do |fw| + puts "## #{FRAMEWORK_NAMES[fw]}" fname = File.join fw, "CHANGELOG.md" contents = File.readlines fname contents.shift changes = [] - changes << contents.shift until contents.first =~ /^\*Rails \d+\.\d+\.\d+/ - puts changes.reject { |change| change.strip.empty? }.join + until contents.first =~ /^## Rails #{release_regexp}.*$/ + changes << contents.shift + end + + puts changes.join puts end end diff --git a/tasks/release_announcement_draft.erb b/tasks/release_announcement_draft.erb index 3dbb8c053f..4840d0b9e2 100644 --- a/tasks/release_announcement_draft.erb +++ b/tasks/release_announcement_draft.erb @@ -12,15 +12,19 @@ If you find one, please open an [issue on GitHub](https://github.com/rails/rails ## CHANGES since <%= version.previous %> To view the changes for each gem, please read the changelogs on GitHub: - <% FRAMEWORKS.sort.each do |framework| %> + <%- FRAMEWORKS.sort.each do |framework| -%> <%= "* [#{FRAMEWORK_NAMES[framework]} CHANGELOG](https://github.com/rails/rails/blob/v#{version}/#{framework}/CHANGELOG.md)" %> - <% end %> + <%- end -%> + +To see a summary of changes, please read the release on GitHub: + +<%= "[#{version} CHANGELOG](https://github.com/rails/rails/releases/tag/v#{version})" %> *Full listing* To see the full list of changes, [check out all the commits on GitHub](https://github.com/rails/rails/compare/v<%= "#{version.previous}...v#{version}" %>). - <% end %> +<% end %> ## SHA-256 If you'd like to verify that your gem is the same as the one I've uploaded, |