1
0
Fork 0

Add scope FederalSubject.order_by_display_name

This commit is contained in:
Alex Kotov 2019-07-19 00:47:48 +05:00
parent ee03c66757
commit 6f58f71ab2
Signed by: kotovalexarian
GPG key ID: 553C0EBBEB5D5F08
3 changed files with 89 additions and 1 deletions

View file

@ -6,7 +6,7 @@ class FederalSubjectsController < ApplicationController
# GET /federal_subjects
def index
authorize :federal_subject
@federal_subjects = policy_scope(FederalSubject)
@federal_subjects = policy_scope(FederalSubject).order_by_display_name
end
# GET /federal_subjects/:id

View file

@ -1,6 +1,18 @@
# frozen_string_literal: true
class FederalSubject < ApplicationRecord
##########
# Scopes #
##########
scope :order_by_display_name, lambda { |dir = :asc|
if I18n.locale == :ru
order(native_name: dir)
else
order(english_name: dir)
end
}
################
# Associations #
################

View file

@ -19,6 +19,82 @@ RSpec.describe FederalSubject do
it { is_expected.to validate_uniqueness_of :english_name }
it { is_expected.to validate_uniqueness_of :native_name }
describe '.order_by_display_name' do
let! :federal_subject_1 do
create :federal_subject, english_name: '1', native_name: '3'
end
let! :federal_subject_2 do
create :federal_subject, english_name: '3', native_name: '5'
end
let! :federal_subject_3 do
create :federal_subject, english_name: '4', native_name: '4'
end
let! :federal_subject_4 do
create :federal_subject, english_name: '2', native_name: '1'
end
let! :federal_subject_5 do
create :federal_subject, english_name: '5', native_name: '2'
end
around do |example|
I18n.with_locale locale do
example.run
end
end
context 'when locale is "en"' do
let(:locale) { :en }
specify do
expect(described_class.order_by_display_name).to eq [
federal_subject_1,
federal_subject_4,
federal_subject_2,
federal_subject_3,
federal_subject_5,
]
end
specify do
expect(described_class.order_by_display_name(:desc)).to eq [
federal_subject_5,
federal_subject_3,
federal_subject_2,
federal_subject_4,
federal_subject_1,
]
end
end
context 'when locale is "ru"' do
let(:locale) { :ru }
specify do
expect(described_class.order_by_display_name).to eq [
federal_subject_4,
federal_subject_5,
federal_subject_1,
federal_subject_3,
federal_subject_2,
]
end
specify do
expect(described_class.order_by_display_name(:desc)).to eq [
federal_subject_2,
federal_subject_3,
federal_subject_1,
federal_subject_5,
federal_subject_4,
]
end
end
end
describe '#display_name' do
subject do
create :federal_subject, native_name: Faker::Address.unique.state