Skip to content

Commit c6fc546

Browse files
committed
Rubocop fixes
1 parent e2159f8 commit c6fc546

File tree

2 files changed

+58
-52
lines changed

2 files changed

+58
-52
lines changed

app/controllers/better_together/person_blocks_controller.rb

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22

33
module BetterTogether
4-
class PersonBlocksController < ApplicationController # rubocop:todo Style/Documentation
4+
class PersonBlocksController < ApplicationController # rubocop:todo Style/Documentation, Metrics/ClassLength
55
before_action :authenticate_user!
66
before_action :set_person_block, only: :destroy
77
after_action :verify_authorized
@@ -20,7 +20,7 @@ def index # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
2020
@blocked_people = @blocked_people.where(id: authorized_person_ids)
2121
.includes(:string_translations)
2222
.references(:string_translations)
23-
.where(string_translations: { key: ['name', 'slug'] })
23+
.where(string_translations: { key: %w[name slug] })
2424
.where('string_translations.value ILIKE ?', "%#{search_term}%")
2525
.distinct
2626
end
@@ -37,7 +37,7 @@ def index # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
3737
.where(better_together_people: { id: authorized_person_ids })
3838
.includes(blocked: :string_translations)
3939
.references(:string_translations)
40-
.where(string_translations: { key: ['name', 'slug'] })
40+
.where(string_translations: { key: %w[name slug] })
4141
.where('string_translations.value ILIKE ?', "%#{search_term}%")
4242
.distinct
4343
end
@@ -78,39 +78,11 @@ def create # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
7878

7979
def search
8080
authorize PersonBlock
81-
81+
8282
search_term = params[:q].to_s.strip
83-
current_person = helpers.current_person
84-
85-
# Get all people that could potentially be blocked (policy scoped)
86-
blockable_people = policy_scope(BetterTogether::Person)
87-
.where.not(id: current_person.id) # Can't block yourself
88-
.where.not(id: current_person.blocked_people.select(:id)) # Already blocked
89-
90-
if search_term.present?
91-
# Use Mobility's i18n scope to search across translations for name and slug
92-
search_pattern = "%#{search_term}%"
93-
blockable_people = blockable_people.i18n.where(
94-
'mobility_string_translations.value ILIKE ?',
95-
search_pattern
96-
).where(
97-
mobility_string_translations: { key: ['name', 'slug'] }
98-
)
99-
end
100-
101-
# Limit results and format for slim-select
102-
people_data = blockable_people
103-
.limit(20)
104-
.map do |person|
105-
{
106-
text: person.name, # This will be the display text
107-
value: person.id.to_s,
108-
data: {
109-
slug: person.slug
110-
}
111-
}
112-
end
113-
83+
blockable_people = find_blockable_people(search_term)
84+
people_data = format_people_for_select(blockable_people)
85+
11486
render json: people_data
11587
end
11688

@@ -146,5 +118,42 @@ def set_person_block
146118
def person_block_params
147119
params.require(:person_block).permit(:blocked_id)
148120
end
121+
122+
def find_blockable_people(search_term)
123+
current_person = helpers.current_person
124+
blockable_people = base_blockable_people_scope(current_person)
125+
126+
return blockable_people unless search_term.present?
127+
128+
filter_by_search_term(blockable_people, search_term)
129+
end
130+
131+
def base_blockable_people_scope(current_person)
132+
policy_scope(BetterTogether::Person)
133+
.where.not(id: current_person.id) # Can't block yourself
134+
.where.not(id: current_person.blocked_people.select(:id)) # Already blocked
135+
end
136+
137+
def filter_by_search_term(scope, search_term)
138+
search_pattern = "%#{search_term}%"
139+
scope.i18n.where(
140+
'mobility_string_translations.value ILIKE ?',
141+
search_pattern
142+
).where(
143+
mobility_string_translations: { key: %w[name slug] }
144+
)
145+
end
146+
147+
def format_people_for_select(people)
148+
people.limit(20).map do |person|
149+
{
150+
text: person.name, # This will be the display text
151+
value: person.id.to_s,
152+
data: {
153+
slug: person.slug
154+
}
155+
}
156+
end
157+
end
149158
end
150159
end

spec/controllers/better_together/person_blocks_controller_spec.rb

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,38 +20,35 @@
2020
sign_in user
2121
end
2222

23-
describe 'GET #search' do
24-
let!(:searchable_person1) { create(:better_together_person, name: 'John Doe', privacy: 'public') }
25-
let!(:searchable_person2) { create(:better_together_person, name: 'Jane Smith', privacy: 'public') }
26-
let!(:already_blocked_person) { create(:better_together_person, name: 'Blocked User', privacy: 'public') }
27-
let!(:person_block) { create(:person_block, blocker: person, blocked: already_blocked_person) }
23+
describe 'GET #search' do # rubocop:todo RSpec/MultipleMemoizedHelpers
24+
let!(:john_doe) { create(:better_together_person, name: 'John Doe', privacy: 'public') }
2825

29-
it 'returns searchable people as JSON' do
26+
it 'returns searchable people as JSON' do # rubocop:todo RSpec/ExampleLength, RSpec/MultipleExpectations
3027
get :search, params: { locale: locale, q: 'John' }, format: :json
28+
3129
expect(response).to have_http_status(:success)
3230
expect(response.content_type).to eq('application/json; charset=utf-8')
3331

3432
json_response = JSON.parse(response.body)
35-
expect(json_response).to be_an(Array)
36-
expect(json_response.length).to eq(1)
3733
expect(json_response.first['text']).to eq('John Doe')
38-
expect(json_response.first['value']).to eq(searchable_person1.id.to_s)
34+
expect(json_response.first['value']).to eq(john_doe.id.to_s)
3935
end
4036

41-
it 'excludes already blocked people from search results' do
37+
it 'excludes already blocked people from search results' do # rubocop:todo RSpec/MultipleExpectations
38+
blocked_user = create(:better_together_person, name: 'Blocked User', privacy: 'public')
39+
create(:person_block, blocker: person, blocked: blocked_user)
40+
4241
get :search, params: { locale: locale, q: 'Blocked' }, format: :json
43-
expect(response).to have_http_status(:success)
4442

45-
json_response = JSON.parse(response.body)
46-
expect(json_response).to be_empty
43+
expect(response).to have_http_status(:success)
44+
expect(JSON.parse(response.body)).to be_empty
4745
end
4846

49-
it 'excludes current user from search results' do
47+
it 'excludes current user from search results' do # rubocop:todo RSpec/MultipleExpectations
5048
get :search, params: { locale: locale, q: person.name }, format: :json
51-
expect(response).to have_http_status(:success)
5249

53-
json_response = JSON.parse(response.body)
54-
expect(json_response).to be_empty
50+
expect(response).to have_http_status(:success)
51+
expect(JSON.parse(response.body)).to be_empty
5552
end
5653

5754
it 'requires authentication' do

0 commit comments

Comments
 (0)