Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/str_enum/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def str_enum(column, values, validate: true, scopes: true, accessor_methods: tru
end
default_value = default == true ? values.first : default
after_initialize do
send("#{column}=", default_value) if has_attribute?(column) && !try(column)
send("#{column}=", default_value) if !persisted? && has_attribute?(column) && !try(column)
end
define_singleton_method column.to_s.pluralize do
values
Expand Down
6 changes: 6 additions & 0 deletions test/str_enum_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,10 @@ def test_negative_scopes
assert_equal 0, User.not_active.count
assert_equal 1, User.not_archived.count
end

def test_attr_readonly
user = User.create!
# Should not raise
User.find(user.id)
end
end
5 changes: 5 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
require "minitest/pride"
require "active_record"

ActiveRecord.raise_on_assign_to_attr_readonly = true
ActiveRecord::Base.logger = Logger.new(ENV["VERBOSE"] ? STDOUT : nil)
ActiveRecord::Migration.verbose = ENV["VERBOSE"]

Expand All @@ -15,11 +16,15 @@
t.string :status
t.string :address_status
t.string :kind
t.string :type
end
end

class User < ActiveRecord::Base
str_enum :status, [:active, :archived]
str_enum :address_status, [:active, :archived], prefix: :address
str_enum :kind, [:guest, :vip], suffix: true
str_enum :type, [:permanent, :temporary], allow_nil: true, default: nil

attr_readonly :type
end