gitlab-org--gitlab-foss/app/finders
Yorick Peterse 38b8ae641f
Clean up ActiveRecord code in TodoService
This refactors the TodoService class according to our code reuse
guidelines. The resulting code is a wee bit more verbose, but it allows
us to decouple the column names from the input, resulting in fewer
changes being necessary when we change the schema.

One particular noteworthy line in TodoService is the following:

    todos_ids = todos.update_state(state)

Technically this is a violation of the guidelines, because
`update_state` is a class method, which services are not supposed to use
(safe for a few allowed ones). I decided to keep this, since there is no
alternative. `update_state` doesn't produce a relation so it doesn't
belong in a Finder, and we can't move it to another Service either. As
such I opted to just use the method directly.

Cases like this may happen more frequently, at which point we should
update our documentation with some sort of recommendation. For now, I
want to refrain from doing so until we have a few more examples.
2018-10-08 15:19:12 +02:00
..
admin add type filter to admin runners page 2018-09-24 16:04:10 +02:00
autocomplete Disable existing offenses for the CodeReuse cops 2018-09-11 17:32:00 +02:00
concerns Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
access_requests_finder.rb Enable frozen string in app/graphql + app/finders 2018-09-11 12:15:23 -07:00
awarded_emoji_finder.rb Refactor AutocompleteController 2018-08-20 13:53:00 +02:00
branches_finder.rb Enable frozen string in app/graphql + app/finders 2018-09-11 12:15:23 -07:00
clusters_finder.rb Enable frozen string in app/graphql + app/finders 2018-09-11 12:15:23 -07:00
contributed_projects_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
environments_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
events_finder.rb Redact events shown in the events API 2018-09-21 14:33:08 +01:00
fork_projects_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
group_descendants_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
group_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
group_labels_finder.rb Add subscribe filter to labels page 2018-10-04 10:24:50 +02:00
group_members_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
group_projects_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
groups_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
issuable_finder.rb Put issues group search CTE behind a (default on) flag 2018-10-05 11:46:54 +01:00
issues_finder.rb Remove confidential access checks if user has group access 2018-10-05 11:25:11 +01:00
joined_groups_finder.rb Applies the CE backport of EE#657 2018-09-24 12:02:01 +01:00
labels_finder.rb Merge branch 'mao/48221-issues_show_sql_count' into 'master' 2018-10-05 08:04:12 +00:00
license_template_finder.rb Backport project template API to CE 2018-10-05 11:34:43 +01:00
members_finder.rb Added FromUnion to easily select from a UNION 2018-09-17 12:39:43 +02:00
merge_request_target_project_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
merge_requests_finder.rb Remove vestigial method from MergeRequestsFinder 2018-10-04 10:40:16 +01:00
milestones_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
notes_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
pending_todos_finder.rb Clean up ActiveRecord code in TodoService 2018-10-08 15:19:12 +02:00
personal_access_tokens_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
personal_projects_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
pipeline_schedules_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
pipelines_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
projects_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
README.md
runner_jobs_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
snippets_finder.rb Added FromUnion to easily select from a UNION 2018-09-17 12:39:43 +02:00
tags_finder.rb Enable frozen string in app/graphql + app/finders 2018-09-11 12:15:23 -07:00
template_finder.rb Backport project template API to CE 2018-10-05 11:34:43 +01:00
todos_finder.rb Clean up ActiveRecord code in TodoService 2018-10-08 15:19:12 +02:00
union_finder.rb Added FromUnion to easily select from a UNION 2018-09-17 12:39:43 +02:00
user_finder.rb Disable existing offenses for the CodeReuse cops 2018-09-11 17:32:00 +02:00
user_recent_events_finder.rb Resolve "Add new "Overview" tab on user profile page" 2018-10-04 07:55:37 +00:00
users_finder.rb Merge branch 'frozen-string-app-finders-graphql' into 'master' 2018-09-13 19:44:31 +00:00
users_with_pending_todos_finder.rb Clean up ActiveRecord code in TodoService 2018-10-08 15:19:12 +02:00

Finders

This type of classes responsible for collection items based on different conditions. To prevent lookup methods in models like this:

class Project
  def issues_for_user_filtered_by(user, filter)
    # A lot of logic not related to project model itself
  end
end

issues = project.issues_for_user_filtered_by(user, params)

Better use this:

issues = IssuesFinder.new(project, user, filter).execute

It will help keep models thiner.