DEV: Add true_fields method for CustomFields (#24876)

This is useful for plugins that might otherwise rely on the
CUSTOM_FIELD_TRUE constant.
This commit is contained in:
Daniel Waterworth 2023-12-14 11:06:21 -06:00 committed by GitHub
parent 74f964f2b4
commit d7a09fb08d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 47 additions and 0 deletions

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
class CategoryCustomField < ActiveRecord::Base
include CustomField
belongs_to :category
end

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
module CustomField
extend ActiveSupport::Concern
class_methods do
def true_fields
where(value: HasCustomFields::Helpers::CUSTOM_FIELD_TRUE)
end
end
end

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
class GroupCustomField < ActiveRecord::Base
include CustomField
belongs_to :group
end

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
class PostCustomField < ActiveRecord::Base
include CustomField
belongs_to :post
end

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
class TopicCustomField < ActiveRecord::Base
include CustomField
belongs_to :topic
end

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
class UserCustomField < ActiveRecord::Base
include CustomField
belongs_to :user
scope :searchable,

View File

@ -17,6 +17,8 @@ RSpec.describe HasCustomFields do
end
class CustomFieldsTestItemCustomField < ActiveRecord::Base
include CustomField
belongs_to :custom_fields_test_item
end
end
@ -196,6 +198,30 @@ RSpec.describe HasCustomFields do
expect(db_item.custom_fields).to eq("a" => %w[b 10 d])
end
it "that are true can be fetched" do
test_item = CustomFieldsTestItem.new
CustomFieldsTestItem.register_custom_field_type("bool", :boolean)
test_item.save!
expect(
CustomFieldsTestItemCustomField
.true_fields
.where(custom_fields_test_item_id: test_item.id)
.count,
).to eq(0)
test_item.custom_fields["bool"] = true
test_item.save!
expect(
CustomFieldsTestItemCustomField
.true_fields
.where(custom_fields_test_item_id: test_item.id)
.count,
).to eq(1)
end
it "supports type coercion" do
test_item = CustomFieldsTestItem.new
CustomFieldsTestItem.register_custom_field_type("bool", :boolean)