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
1 change: 1 addition & 0 deletions .ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.1.4
6 changes: 4 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

source 'http://rubygems.org'

gem 'activerecord', '~> 6.0.0'
gem 'rspec'
gem 'activerecord'
gem 'sqlite3-ruby'
gem 'sqlite3'
69 changes: 41 additions & 28 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,37 +1,50 @@
GEM
remote: http://rubygems.org/
specs:
activemodel (3.0.5)
activesupport (= 3.0.5)
builder (~> 2.1.2)
i18n (~> 0.4)
activerecord (3.0.5)
activemodel (= 3.0.5)
activesupport (= 3.0.5)
arel (~> 2.0.2)
tzinfo (~> 0.3.23)
activesupport (3.0.5)
arel (2.0.9)
builder (2.1.2)
diff-lcs (1.1.2)
i18n (0.5.0)
rspec (2.5.0)
rspec-core (~> 2.5.0)
rspec-expectations (~> 2.5.0)
rspec-mocks (~> 2.5.0)
rspec-core (2.5.1)
rspec-expectations (2.5.0)
diff-lcs (~> 1.1.2)
rspec-mocks (2.5.0)
sqlite3 (1.3.3)
sqlite3-ruby (1.3.3)
sqlite3 (>= 1.3.3)
tzinfo (0.3.25)
activemodel (6.0.6.1)
activesupport (= 6.0.6.1)
activerecord (6.0.6.1)
activemodel (= 6.0.6.1)
activesupport (= 6.0.6.1)
activesupport (6.0.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
concurrent-ruby (1.2.2)
diff-lcs (1.5.0)
i18n (1.13.0)
concurrent-ruby (~> 1.0)
mini_portile2 (2.8.2)
minitest (5.18.0)
rspec (3.12.0)
rspec-core (~> 3.12.0)
rspec-expectations (~> 3.12.0)
rspec-mocks (~> 3.12.0)
rspec-core (3.12.2)
rspec-support (~> 3.12.0)
rspec-expectations (3.12.3)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-mocks (3.12.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-support (3.12.0)
sqlite3 (1.6.2)
mini_portile2 (~> 2.8.0)
thread_safe (0.3.6)
tzinfo (1.2.11)
thread_safe (~> 0.1)
zeitwerk (2.6.8)

PLATFORMS
ruby

DEPENDENCIES
activerecord
activerecord (~> 6.0.0)
rspec
sqlite3-ruby
sqlite3

BUNDLED WITH
2.4.13
2 changes: 2 additions & 0 deletions lib/custom_error_message.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

if defined?(ActiveModel)
require 'rails/extensions/active_model'
else
Expand Down
15 changes: 9 additions & 6 deletions lib/rails/extensions/active_model.rb
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
# frozen_string_literal: true

module ActiveModel
class Errors
def full_message(attribute, message)
return message if attribute == :base

attr_name = attribute.to_s.tr('.', '_').humanize
attr_name = @base.class.human_attribute_name(attribute, default: attr_name)

if message.start_with?('^')
I18n.t(:"errors.format", {
default: "%{message}",
I18n.t(:"errors.format",
default: "%{message}",
attribute: '',
message: message[1..-1]
})
).strip
else
I18n.t(:"errors.format", {
default: "%{attribute} %{message}",
I18n.t(:"errors.format",
default: "%{attribute} %{message}",
attribute: attr_name,
message: message
})
)
end
end
end
Expand Down
12 changes: 7 additions & 5 deletions lib/rails/extensions/active_record.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

module ActiveRecord
class Error

Expand All @@ -9,17 +11,17 @@ def generate_full_message(options = {})
'full_messages.format''full_messages.format'
]

if self.message.start_with?('^')
if message.start_with?('^')
keys.push('{{message}}')

options.merge!(:default => self.message[1..-1])
options.merge!(default: message[1..])
else
keys.push('%{attribute} %{message}')

options.merge!(:default => keys, :message => self.message)
options.merge!(default: keys, message: message)
end
I18n.translate(keys.shift, options)

I18n.translate(keys.shift, **options)
end
end
end
18 changes: 9 additions & 9 deletions spec/custom_error_message_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
class User < ActiveRecord::Base
has_many :user_roles
has_many :roles, :through => :user_roles

validates_presence_of :name
validates_presence_of :email, :message => "^Your email is invalid"
accepts_nested_attributes_for :roles

accepts_nested_attributes_for :roles
end

class Role < ActiveRecord::Base
has_many :user_roles
has_many :users, :through => :user_roles

validates_presence_of :role, :message => "^You must enter a role"
end

Expand All @@ -30,25 +30,25 @@ class UserRole < ActiveRecord::Base
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
load File.join(File.dirname(__FILE__), 'db', 'schema.rb')
end

describe "with standard messages" do
it "should return a standard error message" do
@user = User.create
@user.errors.full_messages.should include "Name can't be blank"
end
end

describe "with custom messages" do
it "should return the full message specified" do
@user = User.create
@user.errors.full_messages.should include "Your email is invalid"
end

describe "on nested attributes" do
it "should return the full message specified" do
@user = User.create(:roles_attributes => [{}])
@user.errors.full_messages.should include "You must enter a role"
end
end
end
end
end
end