Nursing your code back to good health
Jason Gedge
Staff Developer
Shopify
def initialize(hash = {}, loaded_path = nil)
@loaded_path = loaded_path
@for_cop = Hash.new do |h, cop|
qualified_cop_name = Cop::Cop.qualified_cop_name(cop, loaded_path)
cop_options = self[qualified_cop_name] || {}
cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options)
h[cop] = cop_options
end
@hash = hash
@validator = ConfigValidator.new(self)
end
class Point
attr_reader :x, :y
def initialize(x, y)
@x = x
@y = y
end
def distance(p)
Math.sqrt(squared_delta(x, p.x) + squared_delta(y, p.y))
end
private
def squared_delta(a, b)
(a - b)**2
end
end
class Point
attr_reader :x, :y
def initialize(x, y)
@x = x
@y = y
end
def distance(p)
Math.hypot(x - p.x, y - p.y)
end
private
def squared_delta(a, b)
(a - b)**2
end
end
Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite… The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise.
Ward Cunningham, 1992
Technical debt | ˈtɛknɪk(ə)l dɛt
noun
Code artifacts that impose additional cognitive effort when they need to be understood, extended, or modified.
Lines of code
Who really needs more than one file?Cyclomatic Complexity
The road not taken (but maybe sometimes)Lack of cohesion methods
Apples and orangesPerfection is the enemy of progress
Winston Churchill
Dead code detection
- Find method definitions, collecting their names
- Find potential references to those names
- Ignore references in test files
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
Parser options
💎 parser
$ ruby-parse -e "class MyClass; def initialize; @ivar = 1; end; end"
(class
(const nil :MyClass) nil
(def :initialize
(args)
(ivasgn :@ivar
(int 1))))
$ ruby-parse -e "class MyClass; def initialize; @ivar = 1; end; end"
(class
(const nil :MyClass) nil
(def :initialize
(args)
(ivasgn :@ivar
(int 1))))
https://github.com/ruby/ruby/blob/master/node.h
enum node_type { ... }
https://github.com/ruby/ruby/blob/master/node.c
dump_node(VALUE buf, VALUE indent, int comment, const NODE * node)
case NODE_CLASS:
ANN("class definition");
ANN("format: class [nd_cpath] < [nd_super]; [nd_body]; end");
ANN("example: class C2 < C; ..; end");
F_NODE(nd_cpath, "class path");
F_NODE(nd_super, "superclass");
LAST_NODE;
F_NODE(nd_body, "class definition");
return;
case NODE_CLASS:
ANN("class definition");
ANN("format: class [nd_cpath] < [nd_super]; [nd_body]; end");
ANN("example: class C2 < C; ..; end");
F_NODE(nd_cpath, "class path");
F_NODE(nd_super, "superclass");
LAST_NODE;
F_NODE(nd_body, "class definition");
return;
Parser options
💎 parser
👮 Rubocop
🌲 RubyVM::AbstractSyntaxTree
This class is experimental and its API is not stable, therefore it might change without notice. As examples, the order of children nodes is not guaranteed, the number of children nodes might change, there is no way to access children nodes by name, etc.
If you are looking for a stable API or an API working under multiple Ruby implementations, consider using the parser gem or Ripper. If you would like to make RubyVM::AbstractSyntaxTree stable, please join the discussion at https://bugs.ruby-lang.org/issues/14844 .
RubyVM::AbstractSyntaxTree.parse_file(path)
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
def walk(node)
return unless node
return unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
yield node
node.children.each do |child|
walk(child) { |n| yield n }
end
end
def walk(node)
return unless node
return unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
yield node
node.children.each do |child|
walk(child) { |n| yield n }
end
end
def walk(node)
return unless node
return unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
yield node
node.children.each do |child|
walk(child) { |n| yield n }
end
end
def walk(node)
return unless node
return unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
yield node
node.children.each do |child|
walk(child) { |n| yield n }
end
end
def walk(node)
return unless node
return unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
yield node
node.children.each do |child|
walk(child) { |n| yield n }
end
end
walk(root) do |node|
case node.type.downcase
# def foo; end
when :defn
method_name = node.children[0].to_s
definitions << method_name
# def object.foo; end
when :defs
method_name = node.children[1].to_s
definitions << method_name
end
end
walk(root) do |node|
case node.type.downcase
# def foo; end
when :defn
method_name = node.children[0].to_s
definitions << method_name
# def object.foo; end
when :defs
method_name = node.children[1].to_s
definitions << method_name
end
end
walk(root) do |node|
case node.type.downcase
# def foo; end
when :defn
method_name = node.children[0].to_s
definitions << method_name
# def object.foo; end
when :defs
method_name = node.children[1].to_s
definitions << method_name
end
end
walk(root) do |node|
case node.type.downcase
# def foo; end
when :defn
method_name = node.children[0].to_s
definitions << method_name
# def object.foo; end
when :defs
method_name = node.children[1].to_s
definitions << method_name
end
end
walk(root) do |node|
case node.type.downcase
# def foo; end
when :defn
method_name = node.children[0].to_s
definitions << method_name
# def object.foo; end
when :defs
method_name = node.children[1].to_s
definitions << method_name
end
end
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
# foo(...)
when :fcall
references << node.children[0].to_s
# foo
when :vcall
references << node.children[0].to_s
# obj.foo(...)
when :call
references << node.children[1].to_s
# obj&.foo(...)
when :qcall
references << node.children[1].to_s
when :lit, :str, :sym
lit = node.children[0].to_s
called << lit.to_s if lit.is_a?(Symbol) || lit.is_a?(String)
definitions = Set.new
references = Set.new
files.each do |file|
ast = parse(file)
definitions |= method_names(ast)
unless test_file(file)
references |= references(ast)
end
end
return definitions - references
method_definitions.reject_if do |name|
next true if name.end_with?("_callback")
next true if name.start_with?("visit_")
next true if name.start_with?("on_")
false
end
Method Name,Defined In act,./app/models/post_action.rb actual_name,./lib/freedom_patches/raw_handlebars.rb add_admin_route,./lib/plugin/instance.rb add_body_class,./lib/plugin/instance.rb add_class_method,./lib/plugin/instance.rb add_custom_reviewable_filter,./lib/plugin/instance.rb add_default,./app/models/global_setting.rb add_detail,./app/models/post.rb add_members,./app/controllers/groups_controller.rb add_message,./script/import_scripts/smf2.rb add_owners,./app/controllers/admin/groups_controller.rb add_permitted_post_create_param,./lib/plugin/instance.rb add_preloaded_group_custom_field,./lib/plugin/instance.rb add_preloaded_topic_list_custom_field,./lib/plugin/instance.rb add_prev_data,./app/models/report.rb add_to_size_cache,./lib/cooked_post_processor.rb advanced_test,./app/controllers/admin/email_controller.rb age_in_minutes,./app/models/topic.rb all_reply_ids,./app/controllers/posts_controller.rb all_topics_search,./lib/search.rb application_logo_url,./app/helpers/application_helper.rb apply_transform!,./lib/content_buffer.rb approve_bulk,./app/controllers/admin/users_controller.rb available_scopes,./app/models/user_api_key.rb award,./app/controllers/admin/badges_controller.rb aws,./app/controllers/webhooks_controller.rb before_committed!,./lib/mini_sql_multisite_connection.rb best_post,./app/models/topic.rb bio_summary,./app/models/user_profile.rb body_classes,./app/helpers/application_helper.rb builder,./app/controllers/robots_txt_controller.rb builtin,./app/models/group.rb bulk_perform,./app/controllers/admin/groups_controller.rb cache_avatar,./lib/file_store/s3_store.rb callback_url,./lib/auth/discord_authenticator.rb can_admin_tag_groups?,./lib/guardian/tag_guardian.rb can_banner_topic?,./lib/guardian/topic_guardian.rb can_bulk_invite_to_forum?,./lib/guardian.rb can_change_post_owner?,./lib/guardian/post_guardian.rb can_change_post_timestamps?,./lib/guardian/post_guardian.rb can_change_post_type?,./lib/guardian/post_guardian.rb can_change_primary_group?,./lib/guardian.rb can_change_trust_level?,./lib/guardian.rb can_claim_reviewable_topic?,./lib/guardian/user_guardian.rb can_create_bookmark?,./lib/guardian/bookmark_guardian.rb can_create_category?,./lib/guardian/category_guardian.rb can_delete_bookmark?,./lib/guardian/bookmark_guardian.rb can_delete_category?,./lib/guardian/category_guardian.rb can_delete_post_action?,./lib/guardian/post_guardian.rb can_delete_reviewable_queued_post?,./lib/guardian.rb can_disable_second_factor?,./lib/guardian/user_guardian.rb can_edit_post?,./lib/guardian/post_guardian.rb can_edit_user?,./lib/guardian/user_guardian.rb can_export_entity?,./lib/guardian.rb can_get_access_to_topic?,./lib/guardian/topic_guardian.rb can_hide_post_revision?,./lib/guardian/post_revision_guardian.rb can_invite_group_to_private_message?,./lib/guardian.rb can_lock_post?,./lib/guardian/post_guardian.rb can_pick_avatar?,./lib/guardian/user_guardian.rb can_publish_topic?,./lib/guardian/topic_guardian.rb can_rebake?,./lib/guardian/post_guardian.rb can_rescind_all_invites?,./lib/guardian.rb can_resend_all_invites?,./lib/guardian.rb can_reset_bounce_score?,./lib/guardian/user_guardian.rb can_see_flagged_posts?,./lib/guardian/post_guardian.rb can_see_group?,./lib/guardian.rb can_see_groups_members?,./lib/guardian.rb can_see_post_revision?,./lib/guardian/post_revision_guardian.rb can_see_staff_info?,./lib/guardian/user_guardian.rb can_show_post_revision?,./lib/guardian/post_revision_guardian.rb can_sign_up?,./app/helpers/application_helper.rb can_silence_user?,./lib/guardian/user_guardian.rb can_unhide?,./lib/guardian/post_guardian.rb can_unsilence_user?,./lib/guardian/user_guardian.rb can_update_bumped_at?,./lib/guardian/topic_guardian.rb can_view_raw_email?,./lib/guardian/post_guardian.rb cancel_auto_bump_job,./app/models/topic_timer.rb cancel_auto_delete_job,./app/models/topic_timer.rb cancel_auto_delete_replies_job,./app/models/topic_timer.rb cancel_auto_publish_to_category_job,./app/models/topic_timer.rb cancel_auto_reminder_job,./app/models/topic_timer.rb cancel_preload,./app/models/topic_list.rb canonical_link_tag,./lib/canonical_url.rb cap_unread!,./app/models/topic_user.rb cards,./app/controllers/users_controller.rb categories_breadcrumb,./app/helpers/topics_helper.rb category_badge,./app/helpers/application_helper.rb category_hashtag_lookup,./lib/pretty_text/helpers.rb category_tag_hashtag_lookup,./lib/pretty_text/helpers.rb cdata,./script/import_scripts/support/convert_mysql_xml_to_mysql.rb cdata_block,./script/import_scripts/disqus.rb check_avatar_notification,./lib/composer_messages_finder.rb check_dominating_topic,./lib/composer_messages_finder.rb check_education_message,./lib/composer_messages_finder.rb check_get_a_room,./lib/composer_messages_finder.rb check_new_user_many_replies,./lib/composer_messages_finder.rb check_reviving_old_topic,./lib/composer_messages_finder.rb check_sequential_replies,./lib/composer_messages_finder.rb check_slug,./app/controllers/published_pages_controller.rb classified_name,./lib/generators/plugin/plugin_generator.rb clean_up_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb clear_all!,./lib/rate_limiter.rb clear_all,./app/controllers/admin/watched_words_controller.rb clear_all_global!,./lib/rate_limiter.rb clear_auto_bump_cache!,./app/models/category.rb clear_custom_filters!,./app/models/reviewable.rb clear_debounce_cache!,./app/models/search_log.rb clear_https_cache!,./lib/final_destination.rb clear_key,./app/jobs/scheduled/pending_reviewables_reminder.rb clear_problem_message,./app/models/admin_dashboard_data.rb clear_queue!,./app/services/badge_granter.rb click,./app/controllers/search_controller.rb client_overrides_exist?,./app/controllers/extra_locales_controller.rb client_side_setup_data,./app/helpers/application_helper.rb committed!,./lib/mini_sql_multisite_connection.rb compile_ember_handlebars,./lib/freedom_patches/better_handlebars_errors.rb compile_handlebars,./lib/freedom_patches/raw_handlebars.rb confirm_request,./app/controllers/users/omniauth_callbacks_controller.rb connect_info,./app/controllers/users/associate_accounts_controller.rb contains_gaps?,./lib/topic_view.rb correct_top_margin,./app/helpers/user_notifications_helper.rb crawlable_meta_data,./app/helpers/application_helper.rb create_gitignore_entry,./lib/generators/plugin/plugin_generator.rb create_plugin,./lib/generators/plugin/plugin_generator.rb create_upload_url,./app/controllers/admin/backups_controller.rb crop_instructions,./app/models/optimized_image.rb crop_instructions_animated,./app/models/optimized_image.rb custom_avatar_column,./lib/plugin/instance.rb custom_field_preloaded?,./app/models/concerns/has_custom_fields.rb cycles,./script/import_scripts/smf2.rb db_migrate_path,./lib/generators/rails/post_migration_generator.rb default_locale?,./lib/site_setting_extension.rb delayed_perform,./app/jobs/base.rb delete_other_accounts_with_same_ip,./app/controllers/admin/users_controller.rb deleted_posts,./app/controllers/posts_controller.rb demons,./lib/demon/base.rb destroy_bookmark,./app/controllers/posts_controller.rb destroy_unused,./app/controllers/tags_controller.rb digest_body,./lib/freedom_patches/rack_patches.rb digest_custom_html,./app/helpers/user_notifications_helper.rb digest_custom_text,./app/helpers/user_notifications_helper.rb dirty?,./lib/cooked_post_processor.rb disable_safe!,./lib/migration/safe_migrate.rb disallow_raw_sql!,./lib/freedom_patches/active_record_attribute_methods.rb discourse_csrf_tags,./app/helpers/application_helper.rb discourse_stylesheet_link_tag,./app/helpers/application_helper.rb do_all_work,./lib/scheduler/defer.rb downsize_instructions,./app/models/optimized_image.rb downsize_instructions_animated,./app/models/optimized_image.rb element_content,./lib/feed_item_accessor.rb email_already_exists_for?,./app/models/topic.rb email_html_template,./app/helpers/email_helper.rb email_image_url,./app/helpers/user_notifications_helper.rb email_login_info,./app/controllers/session_controller.rb email_topic_link,./app/helpers/email_helper.rb embed_post_date,./app/helpers/embed_helper.rb emoji_codes_to_img,./app/helpers/emoji_helper.rb enable_safe!,./lib/migration/safe_migrate.rb establish_peer_names,./lib/message_bus_diags.rb excerpts,./app/controllers/topics_controller.rb exclude_step,./lib/wizard.rb exec_migration,./lib/freedom_patches/schema_migration_details.rb exists_for?,./lib/admin_confirmation.rb extended,./lib/site_setting_extension.rb extract_from_apple_mail,./lib/email/receiver.rb extract_from_exchange,./lib/email/receiver.rb extract_from_gmail,./lib/email/receiver.rb extract_from_mozilla,./lib/email/receiver.rb extract_from_newton,./lib/email/receiver.rb extract_from_outlook,./lib/email/receiver.rb extract_from_protonmail,./lib/email/receiver.rb extract_from_word,./lib/email/receiver.rb extract_from_zimbra,./lib/email/receiver.rb extract_quoted_message_ids,./script/import_scripts/smf2.rb faq_path,./lib/configurable_urls.rb feature_stats,./app/controllers/topics_controller.rb find_by_detail,./app/models/post.rb find_duplicates,./lib/i18n/duplicate_key_finder.rb flagged_post_actions,./lib/flag_query.rb flagged_posts,./app/controllers/posts_controller.rb flagged_posts_report,./lib/flag_query.rb flush!,./lib/distributed_memoizer.rb flushdb,./lib/discourse_redis.rb ga_universal_json,./app/helpers/application_helper.rb gc_analyze,./script/require_profiler.rb general,./app/controllers/admin/dashboard_controller.rb generate_key_pair,./app/controllers/admin/themes_controller.rb generate_url,./app/models/discourse_single_sign_on.rb get_current_user,./lib/pretty_text/helpers.rb get_group_ids,./app/models/invite.rb get_html,./app/helpers/embed_helper.rb get_post_as_user,./script/import_scripts/disqus.rb get_reseed_options,./app/controllers/admin/site_texts_controller.rb get_topic_info,./lib/pretty_text/helpers.rb global_template_target,./lib/freedom_patches/raw_handlebars.rb google_tag_manager_json,./app/helpers/application_helper.rb grant_permission_to_user,./app/models/topic.rb gravatar_template,./app/models/user.rb groupable_user_fields,./plugins/poll/plugin.rb handle_stream,./lib/i18n/locale_file_walker.rb handle_unverified_request,./app/controllers/application_controller.rb handlebars?,./lib/freedom_patches/raw_handlebars.rb has_filter?,./app/models/top_menu_item.rb has_specific_category?,./app/models/top_menu_item.rb has_thumbnail?,./app/models/upload.rb has_uploaded_avatar,./app/models/user.rb hide_revision,./app/controllers/posts_controller.rb history,./app/models/reviewable.rb html_classes,./app/helpers/application_helper.rb html_lang,./app/helpers/application_helper.rb html_site_link,./app/helpers/user_notifications_helper.rb id_for_slug,./app/controllers/topics_controller.rb import_categories_from_thread_prefixes,./script/import_scripts/xenforo.rb import_gallery_topics,./script/import_scripts/ipboard.rb import_image_categories,./script/import_scripts/ipboard.rb imports,./lib/stylesheet/importer.rb include!,./lib/freedom_patches/ams_include_without_root.rb incoming,./app/controllers/admin/email_controller.rb incoming_from_bounced,./app/controllers/admin/email_controller.rb init_tutorial_edit,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_recover,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb initial_load?,./lib/topic_view.rb insert_like,./script/import_scripts/base/generic_database.rb interesting_after,./app/models/notification.rb invited,./app/controllers/users_controller.rb invited_count,./app/controllers/users_controller.rb ios_app_argument,./app/helpers/application_helper.rb ip_info,./app/controllers/admin/users_controller.rb is_embedded?,./lib/onebox/engine/whitelisted_generic_onebox.rb is_flagged?,./app/models/post.rb languages,./lib/highlight_js/highlight_js.rb last_db_duration,./app/jobs/base.rb last_post_url,./app/models/topic.rb latest_feed,./app/controllers/list_controller.rb list_bookmarks,./lib/topic_query.rb list_group_topics,./lib/topic_query.rb list_new,./lib/topic_query.rb list_posted,./lib/topic_query.rb list_private_messages,./lib/topic_query.rb list_private_messages_archive,./lib/topic_query.rb list_private_messages_group,./lib/topic_query.rb list_private_messages_group_archive,./lib/topic_query.rb list_private_messages_sent,./lib/topic_query.rb list_private_messages_tag,./lib/topic_query.rb list_private_messages_unread,./lib/topic_query.rb list_read,./lib/topic_query.rb list_unread,./lib/topic_query.rb list_unused,./app/controllers/tags_controller.rb log_action!,./app/models/user_action.rb log_change_upload_secure_status,./app/services/staff_action_logger.rb lookup_primary_user_group,./lib/pretty_text/helpers.rb lookup_urls,./app/controllers/uploads_controller.rb mailgun,./app/controllers/webhooks_controller.rb mailing_list_topic,./app/helpers/email_helper.rb mailing_list_topic_text,./app/helpers/email_helper.rb mailjet,./app/controllers/webhooks_controller.rb make_banner,./app/controllers/topics_controller.rb mandrill,./app/controllers/webhooks_controller.rb mark_read,./app/controllers/notifications_controller.rb mass_award,./app/controllers/admin/badges_controller.rb messages_for,./app/models/group.rb missing_mailgun_api_key,./app/models/admin_dashboard_data.rb moderation,./app/controllers/admin/dashboard_controller.rb new_from_params,./app/models/user.rb next_page_path,./lib/topic_view.rb no_reminder?,./app/models/bookmark.rb nokogiri_fix_blockquotes,./script/import_scripts/ipboard.rb normal_priority_types,./app/models/notification.rb not_close_topics,./script/import_scripts/modx.rb not_create_permalink_file,./script/import_scripts/modx.rb not_find_upload,./script/import_scripts/modx.rb not_found_body,./app/controllers/exceptions_controller.rb not_import_attachments,./script/import_scripts/modx.rb not_import_groups,./script/import_scripts/modx.rb not_import_private_messages,./script/import_scripts/modx.rb not_mark_topics_as_solved,./script/import_scripts/modx.rb not_post_process_posts,./script/import_scripts/modx.rb notification_rows,./app/services/user_action_manager.rb official_plugins,./lib/discourse.rb old_clean_up,./script/import_scripts/ipboard.rb only_security_keys_enabled?,./app/models/concerns/second_factor_manager.rb only_totp_or_backup_codes_enabled?,./app/models/concerns/second_factor_manager.rb order_basic_bumped,./lib/topic_query_sql.rb order_nocategory_basic_bumped,./lib/topic_query_sql.rb order_nocategory_with_pinned_sql,./lib/topic_query_sql.rb order_with_pinned_sql,./lib/topic_query_sql.rb ordered,./app/models/post_action_type.rb output_locale,./lib/js_locale_helper.rb page_links,./app/helpers/list_helper.rb page_title,./lib/topic_view.rb pause,./lib/scheduler/defer.rb perform_agree_and_hide,./app/models/reviewable_flagged_post.rb perform_agree_and_keep,./app/models/reviewable_flagged_post.rb perform_agree_and_restore,./app/models/reviewable_flagged_post.rb perform_approve_post_closed,./app/models/reviewable_queued_post.rb perform_approve_user,./app/models/reviewable_user.rb perform_delete_and_agree,./app/models/reviewable_flagged_post.rb perform_delete_and_agree_replies,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore_replies,./app/models/reviewable_flagged_post.rb perform_delete_spammer,./app/models/reviewable_flagged_post.rb perform_delete_user,./app/models/reviewable_queued_post.rb perform_disagree,./app/models/reviewable_flagged_post.rb perform_reject_post,./app/models/reviewable_queued_post.rb perform_reject_user_block,./app/models/reviewable_user.rb perform_unsubscribe,./app/controllers/email_controller.rb plugin_themes,./lib/discourse.rb post_action_rows,./app/services/user_action_manager.rb post_rows,./app/services/user_action_manager.rb postmark,./app/controllers/webhooks_controller.rb precompile_handlebars,./lib/freedom_patches/raw_handlebars.rb preload_script,./app/helpers/application_helper.rb preloaded_json,./app/helpers/application_helper.rb prettify_number,./lib/twitter_api.rb prettify_tweet,./lib/twitter_api.rb prev_page_path,./lib/topic_view.rb preview_digest,./app/controllers/admin/email_controller.rb print_banner,./config/initializers/100-sidekiq.rb print_spinner,./script/import_scripts/base.rb privacy_path,./lib/configurable_urls.rb private_messages_search,./lib/search.rb private_messages_stats,./app/models/user_action.rb process_and_upload_inline_images,./script/import_scripts/discuz_x.rb process_category,./script/bulk_import/base.rb process_category_group,./script/bulk_import/discourse_merger.rb process_category_tag,./script/bulk_import/discourse_merger.rb process_category_tag_stat,./script/bulk_import/discourse_merger.rb process_email_change_request,./script/bulk_import/discourse_merger.rb process_github_user_info,./script/bulk_import/discourse_merger.rb process_group,./script/bulk_import/base.rb process_group_archived_message,./script/bulk_import/discourse_merger.rb process_group_history,./script/bulk_import/discourse_merger.rb process_oauth2_user_info,./script/bulk_import/discourse_merger.rb process_post_reply,./script/bulk_import/discourse_merger.rb process_post_upload,./script/bulk_import/discourse_merger.rb process_quoted_post,./script/bulk_import/discourse_merger.rb process_single_sign_on_record,./script/bulk_import/discourse_merger.rb process_tag_group,./script/bulk_import/discourse_merger.rb process_tag_user,./script/bulk_import/discourse_merger.rb process_topic_allowed_user,./script/bulk_import/base.rb process_topic_link,./script/bulk_import/discourse_merger.rb process_user,./script/bulk_import/base.rb process_user_action,./script/bulk_import/discourse_merger.rb process_user_associated_account,./script/bulk_import/discourse_merger.rb process_user_avatar,./script/bulk_import/discourse_merger.rb process_user_badge,./script/bulk_import/discourse_merger.rb process_user_email,./script/bulk_import/base.rb process_user_history,./script/bulk_import/discourse_merger.rb process_user_profile,./script/bulk_import/base.rb process_user_stat,./script/bulk_import/base.rb process_user_warning,./script/bulk_import/discourse_merger.rb profile_hidden,./app/controllers/users_controller.rb profiling_enabled?,./script/require_profiler.rb purge,./lib/inline_oneboxer.rb query_parent_category,./app/models/category.rb raw_svg,./lib/svg_sprite/svg_sprite.rb raw_tweet_for,./lib/twitter_api.rb readable_name,./app/models/user.rb recent_posts,./lib/topic_view.rb redeliver_event,./app/controllers/admin/web_hooks_controller.rb redirected?,./lib/final_destination.rb refresh_gravatar,./app/controllers/user_avatars_controller.rb register_category_custom_field_type,./lib/plugin/instance.rb register_color_scheme,./lib/plugin/instance.rb register_custom_html,./lib/plugin/instance.rb register_detailed_request_logger,./lib/middleware/request_tracker.rb register_editable_group_custom_field,./lib/plugin/instance.rb register_editable_user_custom_field,./lib/plugin/instance.rb register_emoji,./lib/plugin/instance.rb register_group_custom_field_type,./lib/plugin/instance.rb register_ip_skipper,./lib/middleware/request_tracker.rb register_javascript,./lib/plugin/instance.rb register_operation,./lib/topics_bulk_action.rb register_plugin_post_custom_field,./lib/flag_query.rb register_reviewable_type,./lib/plugin/instance.rb register_seedfu_fixtures,./lib/plugin/instance.rb register_topic_custom_field_type,./lib/plugin/instance.rb register_user_custom_field_type,./lib/plugin/instance.rb regular_order,./app/models/post.rb reloadable_plugins,./lib/js_locale_helper.rb remove_act,./app/models/post_action.rb remove_banner,./app/controllers/topics_controller.rb remove_bookmarks,./app/controllers/topics_controller.rb remove_custom_filter,./lib/topic_query.rb remove_filter,./app/models/report.rb remove_member,./app/controllers/groups_controller.rb remove_owner,./app/controllers/admin/groups_controller.rb remove_review_groups,./app/models/group.rb render_google_tag_manager_body_code,./app/helpers/common_helper.rb render_google_tag_manager_head_code,./app/helpers/common_helper.rb render_google_universal_analytics_code,./app/helpers/common_helper.rb render_sitelinks_search_tag,./app/helpers/application_helper.rb render_topic_title,./app/helpers/topics_helper.rb replace_flags,./lib/plugin/instance.rb replace_plugin_html,./app/helpers/application_helper.rb reply_to_wiki,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb report_top_referred_topics,./app/models/incoming_links_report.rb report_top_referrers,./app/models/incoming_links_report.rb report_top_traffic_sources,./app/models/incoming_links_report.rb reset_last_cleanup!,./app/jobs/scheduled/clean_up_uploads.rb reset_redis_config!,./app/models/global_setting.rb reset_s3_cache!,./app/models/global_setting.rb resize_instructions,./app/models/optimized_image.rb resume,./lib/scheduler/defer.rb reverse_order,./app/models/post.rb revoke_account,./app/controllers/users_controller.rb revoke_key,./app/controllers/admin/api_controller.rb rolledback!,./lib/mini_sql_multisite_connection.rb run_immediately?,./app/jobs/base.rb run_on_change,./lib/autospec/reload_css.rb running_in_rack?,./lib/discourse.rb s3_inventory_path,./lib/s3_helper.rb s3_options_from_site_settings,./lib/file_store/to_s3_migration.rb save_badge_groupings,./app/controllers/admin/badges_controller.rb saved_change_to_value?,./lib/site_settings/local_process_provider.rb schedule_auto_bump_job,./app/models/topic_timer.rb schedule_auto_close_job,./app/models/topic_timer.rb schedule_auto_delete_job,./app/models/topic_timer.rb schedule_auto_delete_replies_job,./app/models/topic_timer.rb schedule_auto_open_job,./app/models/topic_timer.rb schedule_auto_publish_to_category_job,./app/models/topic_timer.rb schedule_auto_reminder_job,./app/models/topic_timer.rb search_users,./app/controllers/users_controller.rb security,./app/controllers/admin/dashboard_controller.rb seen_hosts,./lib/message_bus_diags.rb send_digest,./app/controllers/admin/email_controller.rb send_reminder_notification,./lib/bookmark_manager.rb sendgrid,./app/controllers/webhooks_controller.rb server_plugin_outlet,./app/helpers/application_helper.rb set_cookie,./lib/discourse_cookie_store.rb set_regardless_of_locale,./lib/site_settings/defaults_provider.rb setup!,./lib/active_record/connection_adapters/postgresql_fallback_adapter.rb show_card,./app/controllers/users_controller.rb show_image_with_url,./app/helpers/user_notifications_helper.rb show_name_on_post,./app/helpers/user_notifications_helper.rb show_revision,./app/controllers/posts_controller.rb show_username_on_post,./app/helpers/user_notifications_helper.rb site_setting,./app/models/site.rb small_avatar_url,./app/models/user.rb sort_order_for_post_number,./lib/topic_view.rb sorted_periods,./app/models/top_topic.rb sources,./lib/freedom_patches/raw_handlebars.rb spam_silence_score,./app/serializers/reviewable_explanation_serializer.rb sparkpost,./app/controllers/webhooks_controller.rb specific_category,./app/models/top_menu_item.rb staff_info,./app/controllers/users_controller.rb stopped?,./lib/scheduler/defer.rb stylesheet_fullpath_no_digest,./lib/stylesheet/manager.rb supports_advisory_locks?,./lib/freedom_patches/postgresql_adapter.rb supports_cache_versioning?,./lib/cache.rb sync_sso,./app/controllers/admin/users_controller.rb test_alias_creation,./lib/tasks/emoji.rake test_cell_index_patch,./lib/tasks/emoji.rake test_code_to_emoji,./lib/tasks/emoji.rake test_codepoints_to_code,./lib/tasks/emoji.rake test_codepoints_to_code_with_scale,./lib/tasks/emoji.rake test_db_json_creation,./lib/tasks/emoji.rake test_default_set,./lib/tasks/emoji.rake test_groups_js_es6_creation,./lib/tasks/emoji.rake test_scales,./lib/tasks/emoji.rake test_thread,./script/thread_detective.rb theme_js_lookup,./app/helpers/application_helper.rb theme_lookup,./app/helpers/application_helper.rb theme_translations_lookup,./app/helpers/application_helper.rb to_rfc2822,./lib/freedom_patches/rack_patches.rb to_utf8,./lib/encodings.rb top_feed,./app/controllers/list_controller.rb top_viewed,./app/models/topic.rb topic_featured_link_domain,./app/helpers/application_helper.rb topic_rows,./app/services/user_action_manager.rb total_other_accounts_with_same_ip,./app/controllers/admin/users_controller.rb total_unread_notifications,./app/models/user.rb translate_emoji,./lib/plugin/instance.rb trigger_transactional_callbacks?,./lib/mini_sql_multisite_connection.rb trust_level_badge_ids,./app/models/badge.rb tsort_each_child,./script/import_scripts/smf2.rb tsort_each_node,./script/import_scripts/smf2.rb twitter_credentials_missing?,./lib/twitter_api.rb undo_revoke_key,./app/controllers/admin/api_controller.rb unofficial_plugins,./lib/discourse.rb unregister_detailed_request_logger,./lib/middleware/request_tracker.rb unregister_ip_skipper,./lib/middleware/request_tracker.rb unsubscribed,./app/controllers/email_controller.rb unwatch_categories!,./app/models/topic_user.rb update_likes_count_for,./app/models/top_topic.rb update_meta_data,./app/models/topic.rb update_op_likes_count_for,./app/models/top_topic.rb update_posts_count_for,./app/models/top_topic.rb update_security_key,./app/controllers/users_controller.rb update_single_setting,./app/controllers/admin/themes_controller.rb update_slug,./app/controllers/categories_controller.rb update_tags,./app/controllers/topics_controller.rb update_views_count_for,./app/models/top_topic.rb upload_asset,./app/controllers/admin/themes_controller.rb upsert_custom_fields,./app/models/concerns/has_custom_fields.rb url_for_email,./app/helpers/user_notifications_helper.rb user_for_key,./app/models/unsubscribe_key.rb user_timeline,./lib/twitter_api.rb validate_backup_location,./lib/site_settings/validations.rb validate_default_categories_muted,./lib/site_settings/validations.rb validate_default_categories_tracking,./lib/site_settings/validations.rb validate_default_categories_watching,./lib/site_settings/validations.rb validate_default_categories_watching_first_post,./lib/site_settings/validations.rb validate_default_tags_muted,./lib/site_settings/validations.rb validate_default_tags_tracking,./lib/site_settings/validations.rb validate_default_tags_watching,./lib/site_settings/validations.rb validate_default_tags_watching_first_post,./lib/site_settings/validations.rb validate_enable_local_logins,./lib/site_settings/validations.rb validate_enable_s3_inventory,./lib/site_settings/validations.rb validate_enable_s3_uploads,./lib/site_settings/validations.rb validate_enforce_second_factor,./lib/site_settings/validations.rb validate_s3_backup_bucket,./lib/site_settings/validations.rb validate_s3_upload_bucket,./lib/site_settings/validations.rb validate_secure_media,./lib/site_settings/validations.rb value_changed?,./lib/site_settings/local_process_provider.rb welcome_topic,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb whitelist_public_user_custom_field,./lib/plugin/instance.rb whitelist_staff_user_custom_field,./lib/plugin/instance.rb with_format,./app/helpers/application_helper.rb
can_admin_tag_groups? can_banner_topic? can_bulk_invite_to_forum? can_change_post_owner? can_change_post_timestamps? can_change_post_type? can_change_primary_group? can_change_trust_level? can_claim_reviewable_topic? can_create_bookmark? can_create_category? can_delete_bookmark? can_delete_category? can_delete_post_action? can_delete_reviewable_queued_post? can_disable_second_factor? can_edit_post? can_edit_user? can_export_entity? can_get_access_to_topic? can_hide_post_revision? can_invite_group_to_private_message? can_lock_post? can_pick_avatar? can_publish_topic? can_rebake? can_rescind_all_invites? can_resend_all_invites? can_reset_bounce_score? can_see_flagged_posts? can_see_group? can_see_groups_members? can_see_post_revision? can_see_staff_info? can_show_post_revision? can_silence_user? can_unhide? can_unsilence_user? can_update_bumped_at? can_view_raw_email?
Method Name,Defined In act,./app/models/post_action.rb actual_name,./lib/freedom_patches/raw_handlebars.rb add_admin_route,./lib/plugin/instance.rb add_body_class,./lib/plugin/instance.rb add_class_method,./lib/plugin/instance.rb add_custom_reviewable_filter,./lib/plugin/instance.rb add_default,./app/models/global_setting.rb add_detail,./app/models/post.rb add_members,./app/controllers/groups_controller.rb add_message,./script/import_scripts/smf2.rb add_owners,./app/controllers/admin/groups_controller.rb add_permitted_post_create_param,./lib/plugin/instance.rb add_preloaded_group_custom_field,./lib/plugin/instance.rb add_preloaded_topic_list_custom_field,./lib/plugin/instance.rb add_prev_data,./app/models/report.rb add_to_size_cache,./lib/cooked_post_processor.rb advanced_test,./app/controllers/admin/email_controller.rb age_in_minutes,./app/models/topic.rb all_reply_ids,./app/controllers/posts_controller.rb all_topics_search,./lib/search.rb application_logo_url,./app/helpers/application_helper.rb apply_transform!,./lib/content_buffer.rb approve_bulk,./app/controllers/admin/users_controller.rb available_scopes,./app/models/user_api_key.rb award,./app/controllers/admin/badges_controller.rb aws,./app/controllers/webhooks_controller.rb before_committed!,./lib/mini_sql_multisite_connection.rb best_post,./app/models/topic.rb bio_summary,./app/models/user_profile.rb body_classes,./app/helpers/application_helper.rb builder,./app/controllers/robots_txt_controller.rb builtin,./app/models/group.rb bulk_perform,./app/controllers/admin/groups_controller.rb cache_avatar,./lib/file_store/s3_store.rb callback_url,./lib/auth/discord_authenticator.rb can_admin_tag_groups?,./lib/guardian/tag_guardian.rb can_banner_topic?,./lib/guardian/topic_guardian.rb can_bulk_invite_to_forum?,./lib/guardian.rb can_change_post_owner?,./lib/guardian/post_guardian.rb can_change_post_timestamps?,./lib/guardian/post_guardian.rb can_change_post_type?,./lib/guardian/post_guardian.rb can_change_primary_group?,./lib/guardian.rb can_change_trust_level?,./lib/guardian.rb can_claim_reviewable_topic?,./lib/guardian/user_guardian.rb can_create_bookmark?,./lib/guardian/bookmark_guardian.rb can_create_category?,./lib/guardian/category_guardian.rb can_delete_bookmark?,./lib/guardian/bookmark_guardian.rb can_delete_category?,./lib/guardian/category_guardian.rb can_delete_post_action?,./lib/guardian/post_guardian.rb can_delete_reviewable_queued_post?,./lib/guardian.rb can_disable_second_factor?,./lib/guardian/user_guardian.rb can_edit_post?,./lib/guardian/post_guardian.rb can_edit_user?,./lib/guardian/user_guardian.rb can_export_entity?,./lib/guardian.rb can_get_access_to_topic?,./lib/guardian/topic_guardian.rb can_hide_post_revision?,./lib/guardian/post_revision_guardian.rb can_invite_group_to_private_message?,./lib/guardian.rb can_lock_post?,./lib/guardian/post_guardian.rb can_pick_avatar?,./lib/guardian/user_guardian.rb can_publish_topic?,./lib/guardian/topic_guardian.rb can_rebake?,./lib/guardian/post_guardian.rb can_rescind_all_invites?,./lib/guardian.rb can_resend_all_invites?,./lib/guardian.rb can_reset_bounce_score?,./lib/guardian/user_guardian.rb can_see_flagged_posts?,./lib/guardian/post_guardian.rb can_see_group?,./lib/guardian.rb can_see_groups_members?,./lib/guardian.rb can_see_post_revision?,./lib/guardian/post_revision_guardian.rb can_see_staff_info?,./lib/guardian/user_guardian.rb can_show_post_revision?,./lib/guardian/post_revision_guardian.rb can_sign_up?,./app/helpers/application_helper.rb can_silence_user?,./lib/guardian/user_guardian.rb can_unhide?,./lib/guardian/post_guardian.rb can_unsilence_user?,./lib/guardian/user_guardian.rb can_update_bumped_at?,./lib/guardian/topic_guardian.rb can_view_raw_email?,./lib/guardian/post_guardian.rb cancel_auto_bump_job,./app/models/topic_timer.rb cancel_auto_delete_job,./app/models/topic_timer.rb cancel_auto_delete_replies_job,./app/models/topic_timer.rb cancel_auto_publish_to_category_job,./app/models/topic_timer.rb cancel_auto_reminder_job,./app/models/topic_timer.rb cancel_preload,./app/models/topic_list.rb canonical_link_tag,./lib/canonical_url.rb cap_unread!,./app/models/topic_user.rb cards,./app/controllers/users_controller.rb categories_breadcrumb,./app/helpers/topics_helper.rb category_badge,./app/helpers/application_helper.rb category_hashtag_lookup,./lib/pretty_text/helpers.rb category_tag_hashtag_lookup,./lib/pretty_text/helpers.rb cdata,./script/import_scripts/support/convert_mysql_xml_to_mysql.rb cdata_block,./script/import_scripts/disqus.rb check_avatar_notification,./lib/composer_messages_finder.rb check_dominating_topic,./lib/composer_messages_finder.rb check_education_message,./lib/composer_messages_finder.rb check_get_a_room,./lib/composer_messages_finder.rb check_new_user_many_replies,./lib/composer_messages_finder.rb check_reviving_old_topic,./lib/composer_messages_finder.rb check_sequential_replies,./lib/composer_messages_finder.rb check_slug,./app/controllers/published_pages_controller.rb classified_name,./lib/generators/plugin/plugin_generator.rb clean_up_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb clear_all!,./lib/rate_limiter.rb clear_all,./app/controllers/admin/watched_words_controller.rb clear_all_global!,./lib/rate_limiter.rb clear_auto_bump_cache!,./app/models/category.rb clear_custom_filters!,./app/models/reviewable.rb clear_debounce_cache!,./app/models/search_log.rb clear_https_cache!,./lib/final_destination.rb clear_key,./app/jobs/scheduled/pending_reviewables_reminder.rb clear_problem_message,./app/models/admin_dashboard_data.rb clear_queue!,./app/services/badge_granter.rb click,./app/controllers/search_controller.rb client_overrides_exist?,./app/controllers/extra_locales_controller.rb client_side_setup_data,./app/helpers/application_helper.rb committed!,./lib/mini_sql_multisite_connection.rb compile_ember_handlebars,./lib/freedom_patches/better_handlebars_errors.rb compile_handlebars,./lib/freedom_patches/raw_handlebars.rb confirm_request,./app/controllers/users/omniauth_callbacks_controller.rb connect_info,./app/controllers/users/associate_accounts_controller.rb contains_gaps?,./lib/topic_view.rb correct_top_margin,./app/helpers/user_notifications_helper.rb crawlable_meta_data,./app/helpers/application_helper.rb create_gitignore_entry,./lib/generators/plugin/plugin_generator.rb create_plugin,./lib/generators/plugin/plugin_generator.rb create_upload_url,./app/controllers/admin/backups_controller.rb crop_instructions,./app/models/optimized_image.rb crop_instructions_animated,./app/models/optimized_image.rb custom_avatar_column,./lib/plugin/instance.rb custom_field_preloaded?,./app/models/concerns/has_custom_fields.rb cycles,./script/import_scripts/smf2.rb db_migrate_path,./lib/generators/rails/post_migration_generator.rb default_locale?,./lib/site_setting_extension.rb delayed_perform,./app/jobs/base.rb delete_other_accounts_with_same_ip,./app/controllers/admin/users_controller.rb deleted_posts,./app/controllers/posts_controller.rb demons,./lib/demon/base.rb destroy_bookmark,./app/controllers/posts_controller.rb destroy_unused,./app/controllers/tags_controller.rb digest_body,./lib/freedom_patches/rack_patches.rb digest_custom_html,./app/helpers/user_notifications_helper.rb digest_custom_text,./app/helpers/user_notifications_helper.rb dirty?,./lib/cooked_post_processor.rb disable_safe!,./lib/migration/safe_migrate.rb disallow_raw_sql!,./lib/freedom_patches/active_record_attribute_methods.rb discourse_csrf_tags,./app/helpers/application_helper.rb discourse_stylesheet_link_tag,./app/helpers/application_helper.rb do_all_work,./lib/scheduler/defer.rb downsize_instructions,./app/models/optimized_image.rb downsize_instructions_animated,./app/models/optimized_image.rb element_content,./lib/feed_item_accessor.rb email_already_exists_for?,./app/models/topic.rb email_html_template,./app/helpers/email_helper.rb email_image_url,./app/helpers/user_notifications_helper.rb email_login_info,./app/controllers/session_controller.rb email_topic_link,./app/helpers/email_helper.rb embed_post_date,./app/helpers/embed_helper.rb emoji_codes_to_img,./app/helpers/emoji_helper.rb enable_safe!,./lib/migration/safe_migrate.rb establish_peer_names,./lib/message_bus_diags.rb excerpts,./app/controllers/topics_controller.rb exclude_step,./lib/wizard.rb exec_migration,./lib/freedom_patches/schema_migration_details.rb exists_for?,./lib/admin_confirmation.rb extended,./lib/site_setting_extension.rb extract_from_apple_mail,./lib/email/receiver.rb extract_from_exchange,./lib/email/receiver.rb extract_from_gmail,./lib/email/receiver.rb extract_from_mozilla,./lib/email/receiver.rb extract_from_newton,./lib/email/receiver.rb extract_from_outlook,./lib/email/receiver.rb extract_from_protonmail,./lib/email/receiver.rb extract_from_word,./lib/email/receiver.rb extract_from_zimbra,./lib/email/receiver.rb extract_quoted_message_ids,./script/import_scripts/smf2.rb faq_path,./lib/configurable_urls.rb feature_stats,./app/controllers/topics_controller.rb find_by_detail,./app/models/post.rb find_duplicates,./lib/i18n/duplicate_key_finder.rb flagged_post_actions,./lib/flag_query.rb flagged_posts,./app/controllers/posts_controller.rb flagged_posts_report,./lib/flag_query.rb flush!,./lib/distributed_memoizer.rb flushdb,./lib/discourse_redis.rb ga_universal_json,./app/helpers/application_helper.rb gc_analyze,./script/require_profiler.rb general,./app/controllers/admin/dashboard_controller.rb generate_key_pair,./app/controllers/admin/themes_controller.rb generate_url,./app/models/discourse_single_sign_on.rb get_current_user,./lib/pretty_text/helpers.rb get_group_ids,./app/models/invite.rb get_html,./app/helpers/embed_helper.rb get_post_as_user,./script/import_scripts/disqus.rb get_reseed_options,./app/controllers/admin/site_texts_controller.rb get_topic_info,./lib/pretty_text/helpers.rb global_template_target,./lib/freedom_patches/raw_handlebars.rb google_tag_manager_json,./app/helpers/application_helper.rb grant_permission_to_user,./app/models/topic.rb gravatar_template,./app/models/user.rb groupable_user_fields,./plugins/poll/plugin.rb handle_stream,./lib/i18n/locale_file_walker.rb handle_unverified_request,./app/controllers/application_controller.rb handlebars?,./lib/freedom_patches/raw_handlebars.rb has_filter?,./app/models/top_menu_item.rb has_specific_category?,./app/models/top_menu_item.rb has_thumbnail?,./app/models/upload.rb has_uploaded_avatar,./app/models/user.rb hide_revision,./app/controllers/posts_controller.rb history,./app/models/reviewable.rb html_classes,./app/helpers/application_helper.rb html_lang,./app/helpers/application_helper.rb html_site_link,./app/helpers/user_notifications_helper.rb id_for_slug,./app/controllers/topics_controller.rb import_categories_from_thread_prefixes,./script/import_scripts/xenforo.rb import_gallery_topics,./script/import_scripts/ipboard.rb import_image_categories,./script/import_scripts/ipboard.rb imports,./lib/stylesheet/importer.rb include!,./lib/freedom_patches/ams_include_without_root.rb incoming,./app/controllers/admin/email_controller.rb incoming_from_bounced,./app/controllers/admin/email_controller.rb init_tutorial_edit,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_recover,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb initial_load?,./lib/topic_view.rb insert_like,./script/import_scripts/base/generic_database.rb interesting_after,./app/models/notification.rb invited,./app/controllers/users_controller.rb invited_count,./app/controllers/users_controller.rb ios_app_argument,./app/helpers/application_helper.rb ip_info,./app/controllers/admin/users_controller.rb is_embedded?,./lib/onebox/engine/whitelisted_generic_onebox.rb is_flagged?,./app/models/post.rb languages,./lib/highlight_js/highlight_js.rb last_db_duration,./app/jobs/base.rb last_post_url,./app/models/topic.rb latest_feed,./app/controllers/list_controller.rb list_bookmarks,./lib/topic_query.rb list_group_topics,./lib/topic_query.rb list_new,./lib/topic_query.rb list_posted,./lib/topic_query.rb list_private_messages,./lib/topic_query.rb list_private_messages_archive,./lib/topic_query.rb list_private_messages_group,./lib/topic_query.rb list_private_messages_group_archive,./lib/topic_query.rb list_private_messages_sent,./lib/topic_query.rb list_private_messages_tag,./lib/topic_query.rb list_private_messages_unread,./lib/topic_query.rb list_read,./lib/topic_query.rb list_unread,./lib/topic_query.rb list_unused,./app/controllers/tags_controller.rb log_action!,./app/models/user_action.rb log_change_upload_secure_status,./app/services/staff_action_logger.rb lookup_primary_user_group,./lib/pretty_text/helpers.rb lookup_urls,./app/controllers/uploads_controller.rb mailgun,./app/controllers/webhooks_controller.rb mailing_list_topic,./app/helpers/email_helper.rb mailing_list_topic_text,./app/helpers/email_helper.rb mailjet,./app/controllers/webhooks_controller.rb make_banner,./app/controllers/topics_controller.rb mandrill,./app/controllers/webhooks_controller.rb mark_read,./app/controllers/notifications_controller.rb mass_award,./app/controllers/admin/badges_controller.rb messages_for,./app/models/group.rb missing_mailgun_api_key,./app/models/admin_dashboard_data.rb moderation,./app/controllers/admin/dashboard_controller.rb new_from_params,./app/models/user.rb next_page_path,./lib/topic_view.rb no_reminder?,./app/models/bookmark.rb nokogiri_fix_blockquotes,./script/import_scripts/ipboard.rb normal_priority_types,./app/models/notification.rb not_close_topics,./script/import_scripts/modx.rb not_create_permalink_file,./script/import_scripts/modx.rb not_find_upload,./script/import_scripts/modx.rb not_found_body,./app/controllers/exceptions_controller.rb not_import_attachments,./script/import_scripts/modx.rb not_import_groups,./script/import_scripts/modx.rb not_import_private_messages,./script/import_scripts/modx.rb not_mark_topics_as_solved,./script/import_scripts/modx.rb not_post_process_posts,./script/import_scripts/modx.rb notification_rows,./app/services/user_action_manager.rb official_plugins,./lib/discourse.rb old_clean_up,./script/import_scripts/ipboard.rb only_security_keys_enabled?,./app/models/concerns/second_factor_manager.rb only_totp_or_backup_codes_enabled?,./app/models/concerns/second_factor_manager.rb order_basic_bumped,./lib/topic_query_sql.rb order_nocategory_basic_bumped,./lib/topic_query_sql.rb order_nocategory_with_pinned_sql,./lib/topic_query_sql.rb order_with_pinned_sql,./lib/topic_query_sql.rb ordered,./app/models/post_action_type.rb output_locale,./lib/js_locale_helper.rb page_links,./app/helpers/list_helper.rb page_title,./lib/topic_view.rb pause,./lib/scheduler/defer.rb perform_agree_and_hide,./app/models/reviewable_flagged_post.rb perform_agree_and_keep,./app/models/reviewable_flagged_post.rb perform_agree_and_restore,./app/models/reviewable_flagged_post.rb perform_approve_post_closed,./app/models/reviewable_queued_post.rb perform_approve_user,./app/models/reviewable_user.rb perform_delete_and_agree,./app/models/reviewable_flagged_post.rb perform_delete_and_agree_replies,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore_replies,./app/models/reviewable_flagged_post.rb perform_delete_spammer,./app/models/reviewable_flagged_post.rb perform_delete_user,./app/models/reviewable_queued_post.rb perform_disagree,./app/models/reviewable_flagged_post.rb perform_reject_post,./app/models/reviewable_queued_post.rb perform_reject_user_block,./app/models/reviewable_user.rb perform_unsubscribe,./app/controllers/email_controller.rb plugin_themes,./lib/discourse.rb post_action_rows,./app/services/user_action_manager.rb post_rows,./app/services/user_action_manager.rb postmark,./app/controllers/webhooks_controller.rb precompile_handlebars,./lib/freedom_patches/raw_handlebars.rb preload_script,./app/helpers/application_helper.rb preloaded_json,./app/helpers/application_helper.rb prettify_number,./lib/twitter_api.rb prettify_tweet,./lib/twitter_api.rb prev_page_path,./lib/topic_view.rb preview_digest,./app/controllers/admin/email_controller.rb print_banner,./config/initializers/100-sidekiq.rb print_spinner,./script/import_scripts/base.rb privacy_path,./lib/configurable_urls.rb private_messages_search,./lib/search.rb private_messages_stats,./app/models/user_action.rb process_and_upload_inline_images,./script/import_scripts/discuz_x.rb process_category,./script/bulk_import/base.rb process_category_group,./script/bulk_import/discourse_merger.rb process_category_tag,./script/bulk_import/discourse_merger.rb process_category_tag_stat,./script/bulk_import/discourse_merger.rb process_email_change_request,./script/bulk_import/discourse_merger.rb process_github_user_info,./script/bulk_import/discourse_merger.rb process_group,./script/bulk_import/base.rb process_group_archived_message,./script/bulk_import/discourse_merger.rb process_group_history,./script/bulk_import/discourse_merger.rb process_oauth2_user_info,./script/bulk_import/discourse_merger.rb process_post_reply,./script/bulk_import/discourse_merger.rb process_post_upload,./script/bulk_import/discourse_merger.rb process_quoted_post,./script/bulk_import/discourse_merger.rb process_single_sign_on_record,./script/bulk_import/discourse_merger.rb process_tag_group,./script/bulk_import/discourse_merger.rb process_tag_user,./script/bulk_import/discourse_merger.rb process_topic_allowed_user,./script/bulk_import/base.rb process_topic_link,./script/bulk_import/discourse_merger.rb process_user,./script/bulk_import/base.rb process_user_action,./script/bulk_import/discourse_merger.rb process_user_associated_account,./script/bulk_import/discourse_merger.rb process_user_avatar,./script/bulk_import/discourse_merger.rb process_user_badge,./script/bulk_import/discourse_merger.rb process_user_email,./script/bulk_import/base.rb process_user_history,./script/bulk_import/discourse_merger.rb process_user_profile,./script/bulk_import/base.rb process_user_stat,./script/bulk_import/base.rb process_user_warning,./script/bulk_import/discourse_merger.rb profile_hidden,./app/controllers/users_controller.rb profiling_enabled?,./script/require_profiler.rb purge,./lib/inline_oneboxer.rb query_parent_category,./app/models/category.rb raw_svg,./lib/svg_sprite/svg_sprite.rb raw_tweet_for,./lib/twitter_api.rb readable_name,./app/models/user.rb recent_posts,./lib/topic_view.rb redeliver_event,./app/controllers/admin/web_hooks_controller.rb redirected?,./lib/final_destination.rb refresh_gravatar,./app/controllers/user_avatars_controller.rb register_category_custom_field_type,./lib/plugin/instance.rb register_color_scheme,./lib/plugin/instance.rb register_custom_html,./lib/plugin/instance.rb register_detailed_request_logger,./lib/middleware/request_tracker.rb register_editable_group_custom_field,./lib/plugin/instance.rb register_editable_user_custom_field,./lib/plugin/instance.rb register_emoji,./lib/plugin/instance.rb register_group_custom_field_type,./lib/plugin/instance.rb register_ip_skipper,./lib/middleware/request_tracker.rb register_javascript,./lib/plugin/instance.rb register_operation,./lib/topics_bulk_action.rb register_plugin_post_custom_field,./lib/flag_query.rb register_reviewable_type,./lib/plugin/instance.rb register_seedfu_fixtures,./lib/plugin/instance.rb register_topic_custom_field_type,./lib/plugin/instance.rb register_user_custom_field_type,./lib/plugin/instance.rb regular_order,./app/models/post.rb reloadable_plugins,./lib/js_locale_helper.rb remove_act,./app/models/post_action.rb remove_banner,./app/controllers/topics_controller.rb remove_bookmarks,./app/controllers/topics_controller.rb remove_custom_filter,./lib/topic_query.rb remove_filter,./app/models/report.rb remove_member,./app/controllers/groups_controller.rb remove_owner,./app/controllers/admin/groups_controller.rb remove_review_groups,./app/models/group.rb render_google_tag_manager_body_code,./app/helpers/common_helper.rb render_google_tag_manager_head_code,./app/helpers/common_helper.rb render_google_universal_analytics_code,./app/helpers/common_helper.rb render_sitelinks_search_tag,./app/helpers/application_helper.rb render_topic_title,./app/helpers/topics_helper.rb replace_flags,./lib/plugin/instance.rb replace_plugin_html,./app/helpers/application_helper.rb reply_to_wiki,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb report_top_referred_topics,./app/models/incoming_links_report.rb report_top_referrers,./app/models/incoming_links_report.rb report_top_traffic_sources,./app/models/incoming_links_report.rb reset_last_cleanup!,./app/jobs/scheduled/clean_up_uploads.rb reset_redis_config!,./app/models/global_setting.rb reset_s3_cache!,./app/models/global_setting.rb resize_instructions,./app/models/optimized_image.rb resume,./lib/scheduler/defer.rb reverse_order,./app/models/post.rb revoke_account,./app/controllers/users_controller.rb revoke_key,./app/controllers/admin/api_controller.rb rolledback!,./lib/mini_sql_multisite_connection.rb run_immediately?,./app/jobs/base.rb run_on_change,./lib/autospec/reload_css.rb running_in_rack?,./lib/discourse.rb s3_inventory_path,./lib/s3_helper.rb s3_options_from_site_settings,./lib/file_store/to_s3_migration.rb save_badge_groupings,./app/controllers/admin/badges_controller.rb saved_change_to_value?,./lib/site_settings/local_process_provider.rb schedule_auto_bump_job,./app/models/topic_timer.rb schedule_auto_close_job,./app/models/topic_timer.rb schedule_auto_delete_job,./app/models/topic_timer.rb schedule_auto_delete_replies_job,./app/models/topic_timer.rb schedule_auto_open_job,./app/models/topic_timer.rb schedule_auto_publish_to_category_job,./app/models/topic_timer.rb schedule_auto_reminder_job,./app/models/topic_timer.rb search_users,./app/controllers/users_controller.rb security,./app/controllers/admin/dashboard_controller.rb seen_hosts,./lib/message_bus_diags.rb send_digest,./app/controllers/admin/email_controller.rb send_reminder_notification,./lib/bookmark_manager.rb sendgrid,./app/controllers/webhooks_controller.rb server_plugin_outlet,./app/helpers/application_helper.rb set_cookie,./lib/discourse_cookie_store.rb set_regardless_of_locale,./lib/site_settings/defaults_provider.rb setup!,./lib/active_record/connection_adapters/postgresql_fallback_adapter.rb show_card,./app/controllers/users_controller.rb show_image_with_url,./app/helpers/user_notifications_helper.rb show_name_on_post,./app/helpers/user_notifications_helper.rb show_revision,./app/controllers/posts_controller.rb show_username_on_post,./app/helpers/user_notifications_helper.rb site_setting,./app/models/site.rb small_avatar_url,./app/models/user.rb sort_order_for_post_number,./lib/topic_view.rb sorted_periods,./app/models/top_topic.rb sources,./lib/freedom_patches/raw_handlebars.rb spam_silence_score,./app/serializers/reviewable_explanation_serializer.rb sparkpost,./app/controllers/webhooks_controller.rb specific_category,./app/models/top_menu_item.rb staff_info,./app/controllers/users_controller.rb stopped?,./lib/scheduler/defer.rb stylesheet_fullpath_no_digest,./lib/stylesheet/manager.rb supports_advisory_locks?,./lib/freedom_patches/postgresql_adapter.rb supports_cache_versioning?,./lib/cache.rb sync_sso,./app/controllers/admin/users_controller.rb test_alias_creation,./lib/tasks/emoji.rake test_cell_index_patch,./lib/tasks/emoji.rake test_code_to_emoji,./lib/tasks/emoji.rake test_codepoints_to_code,./lib/tasks/emoji.rake test_codepoints_to_code_with_scale,./lib/tasks/emoji.rake test_db_json_creation,./lib/tasks/emoji.rake test_default_set,./lib/tasks/emoji.rake test_groups_js_es6_creation,./lib/tasks/emoji.rake test_scales,./lib/tasks/emoji.rake test_thread,./script/thread_detective.rb theme_js_lookup,./app/helpers/application_helper.rb theme_lookup,./app/helpers/application_helper.rb theme_translations_lookup,./app/helpers/application_helper.rb to_rfc2822,./lib/freedom_patches/rack_patches.rb to_utf8,./lib/encodings.rb top_feed,./app/controllers/list_controller.rb top_viewed,./app/models/topic.rb topic_featured_link_domain,./app/helpers/application_helper.rb topic_rows,./app/services/user_action_manager.rb total_other_accounts_with_same_ip,./app/controllers/admin/users_controller.rb total_unread_notifications,./app/models/user.rb translate_emoji,./lib/plugin/instance.rb trigger_transactional_callbacks?,./lib/mini_sql_multisite_connection.rb trust_level_badge_ids,./app/models/badge.rb tsort_each_child,./script/import_scripts/smf2.rb tsort_each_node,./script/import_scripts/smf2.rb twitter_credentials_missing?,./lib/twitter_api.rb undo_revoke_key,./app/controllers/admin/api_controller.rb unofficial_plugins,./lib/discourse.rb unregister_detailed_request_logger,./lib/middleware/request_tracker.rb unregister_ip_skipper,./lib/middleware/request_tracker.rb unsubscribed,./app/controllers/email_controller.rb unwatch_categories!,./app/models/topic_user.rb update_likes_count_for,./app/models/top_topic.rb update_meta_data,./app/models/topic.rb update_op_likes_count_for,./app/models/top_topic.rb update_posts_count_for,./app/models/top_topic.rb update_security_key,./app/controllers/users_controller.rb update_single_setting,./app/controllers/admin/themes_controller.rb update_slug,./app/controllers/categories_controller.rb update_tags,./app/controllers/topics_controller.rb update_views_count_for,./app/models/top_topic.rb upload_asset,./app/controllers/admin/themes_controller.rb upsert_custom_fields,./app/models/concerns/has_custom_fields.rb url_for_email,./app/helpers/user_notifications_helper.rb user_for_key,./app/models/unsubscribe_key.rb user_timeline,./lib/twitter_api.rb validate_backup_location,./lib/site_settings/validations.rb validate_default_categories_muted,./lib/site_settings/validations.rb validate_default_categories_tracking,./lib/site_settings/validations.rb validate_default_categories_watching,./lib/site_settings/validations.rb validate_default_categories_watching_first_post,./lib/site_settings/validations.rb validate_default_tags_muted,./lib/site_settings/validations.rb validate_default_tags_tracking,./lib/site_settings/validations.rb validate_default_tags_watching,./lib/site_settings/validations.rb validate_default_tags_watching_first_post,./lib/site_settings/validations.rb validate_enable_local_logins,./lib/site_settings/validations.rb validate_enable_s3_inventory,./lib/site_settings/validations.rb validate_enable_s3_uploads,./lib/site_settings/validations.rb validate_enforce_second_factor,./lib/site_settings/validations.rb validate_s3_backup_bucket,./lib/site_settings/validations.rb validate_s3_upload_bucket,./lib/site_settings/validations.rb validate_secure_media,./lib/site_settings/validations.rb value_changed?,./lib/site_settings/local_process_provider.rb welcome_topic,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb whitelist_public_user_custom_field,./lib/plugin/instance.rb whitelist_staff_user_custom_field,./lib/plugin/instance.rb with_format,./app/helpers/application_helper.rb
Method Name,Defined In act,./app/models/post_action.rb actual_name,./lib/freedom_patches/raw_handlebars.rb add_admin_route,./lib/plugin/instance.rb add_body_class,./lib/plugin/instance.rb add_class_method,./lib/plugin/instance.rb add_custom_reviewable_filter,./lib/plugin/instance.rb add_default,./app/models/global_setting.rb add_detail,./app/models/post.rb add_message,./script/import_scripts/smf2.rb add_permitted_post_create_param,./lib/plugin/instance.rb add_preloaded_group_custom_field,./lib/plugin/instance.rb add_preloaded_topic_list_custom_field,./lib/plugin/instance.rb add_prev_data,./app/models/report.rb add_to_size_cache,./lib/cooked_post_processor.rb age_in_minutes,./app/models/topic.rb all_topics_search,./lib/search.rb apply_transform!,./lib/content_buffer.rb available_scopes,./app/models/user_api_key.rb before_committed!,./lib/mini_sql_multisite_connection.rb builtin,./app/models/group.rb cache_avatar,./lib/file_store/s3_store.rb callback_url,./lib/auth/discord_authenticator.rb can_admin_tag_groups?,./lib/guardian/tag_guardian.rb can_banner_topic?,./lib/guardian/topic_guardian.rb can_bulk_invite_to_forum?,./lib/guardian.rb can_change_post_owner?,./lib/guardian/post_guardian.rb can_change_post_timestamps?,./lib/guardian/post_guardian.rb can_change_post_type?,./lib/guardian/post_guardian.rb can_change_primary_group?,./lib/guardian.rb can_change_trust_level?,./lib/guardian.rb can_claim_reviewable_topic?,./lib/guardian/user_guardian.rb can_create_bookmark?,./lib/guardian/bookmark_guardian.rb can_create_category?,./lib/guardian/category_guardian.rb can_delete_bookmark?,./lib/guardian/bookmark_guardian.rb can_delete_category?,./lib/guardian/category_guardian.rb can_delete_post_action?,./lib/guardian/post_guardian.rb can_delete_reviewable_queued_post?,./lib/guardian.rb can_disable_second_factor?,./lib/guardian/user_guardian.rb can_edit_post?,./lib/guardian/post_guardian.rb can_edit_user?,./lib/guardian/user_guardian.rb can_export_entity?,./lib/guardian.rb can_get_access_to_topic?,./lib/guardian/topic_guardian.rb can_hide_post_revision?,./lib/guardian/post_revision_guardian.rb can_invite_group_to_private_message?,./lib/guardian.rb can_lock_post?,./lib/guardian/post_guardian.rb can_pick_avatar?,./lib/guardian/user_guardian.rb can_publish_topic?,./lib/guardian/topic_guardian.rb can_rebake?,./lib/guardian/post_guardian.rb can_rescind_all_invites?,./lib/guardian.rb can_resend_all_invites?,./lib/guardian.rb can_reset_bounce_score?,./lib/guardian/user_guardian.rb can_see_flagged_posts?,./lib/guardian/post_guardian.rb can_see_group?,./lib/guardian.rb can_see_groups_members?,./lib/guardian.rb can_see_post_revision?,./lib/guardian/post_revision_guardian.rb can_see_staff_info?,./lib/guardian/user_guardian.rb can_show_post_revision?,./lib/guardian/post_revision_guardian.rb can_silence_user?,./lib/guardian/user_guardian.rb can_unhide?,./lib/guardian/post_guardian.rb can_unsilence_user?,./lib/guardian/user_guardian.rb can_update_bumped_at?,./lib/guardian/topic_guardian.rb can_view_raw_email?,./lib/guardian/post_guardian.rb cancel_auto_bump_job,./app/models/topic_timer.rb cancel_auto_delete_job,./app/models/topic_timer.rb cancel_auto_delete_replies_job,./app/models/topic_timer.rb cancel_auto_publish_to_category_job,./app/models/topic_timer.rb cancel_auto_reminder_job,./app/models/topic_timer.rb cancel_preload,./app/models/topic_list.rb cap_unread!,./app/models/topic_user.rb category_hashtag_lookup,./lib/pretty_text/helpers.rb category_tag_hashtag_lookup,./lib/pretty_text/helpers.rb cdata,./script/import_scripts/support/convert_mysql_xml_to_mysql.rb cdata_block,./script/import_scripts/disqus.rb check_avatar_notification,./lib/composer_messages_finder.rb check_dominating_topic,./lib/composer_messages_finder.rb check_education_message,./lib/composer_messages_finder.rb check_get_a_room,./lib/composer_messages_finder.rb check_new_user_many_replies,./lib/composer_messages_finder.rb check_reviving_old_topic,./lib/composer_messages_finder.rb check_sequential_replies,./lib/composer_messages_finder.rb clean_up_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb clear_all!,./lib/rate_limiter.rb clear_all_global!,./lib/rate_limiter.rb clear_auto_bump_cache!,./app/models/category.rb clear_custom_filters!,./app/models/reviewable.rb clear_debounce_cache!,./app/models/search_log.rb clear_https_cache!,./lib/final_destination.rb clear_key,./app/jobs/scheduled/pending_reviewables_reminder.rb clear_problem_message,./app/models/admin_dashboard_data.rb clear_queue!,./app/services/badge_granter.rb committed!,./lib/mini_sql_multisite_connection.rb compile_ember_handlebars,./lib/freedom_patches/better_handlebars_errors.rb compile_handlebars,./lib/freedom_patches/raw_handlebars.rb contains_gaps?,./lib/topic_view.rb correct_top_margin,./app/helpers/user_notifications_helper.rb create_gitignore_entry,./lib/generators/plugin/plugin_generator.rb create_plugin,./lib/generators/plugin/plugin_generator.rb crop_instructions,./app/models/optimized_image.rb crop_instructions_animated,./app/models/optimized_image.rb custom_avatar_column,./lib/plugin/instance.rb custom_field_preloaded?,./app/models/concerns/has_custom_fields.rb cycles,./script/import_scripts/smf2.rb db_migrate_path,./lib/generators/rails/post_migration_generator.rb default_locale?,./lib/site_setting_extension.rb delayed_perform,./app/jobs/base.rb demons,./lib/demon/base.rb digest_body,./lib/freedom_patches/rack_patches.rb dirty?,./lib/cooked_post_processor.rb disable_safe!,./lib/migration/safe_migrate.rb disallow_raw_sql!,./lib/freedom_patches/active_record_attribute_methods.rb do_all_work,./lib/scheduler/defer.rb downsize_instructions,./app/models/optimized_image.rb downsize_instructions_animated,./app/models/optimized_image.rb element_content,./lib/feed_item_accessor.rb email_already_exists_for?,./app/models/topic.rb enable_safe!,./lib/migration/safe_migrate.rb establish_peer_names,./lib/message_bus_diags.rb exclude_step,./lib/wizard.rb exec_migration,./lib/freedom_patches/schema_migration_details.rb exists_for?,./lib/admin_confirmation.rb extended,./lib/site_setting_extension.rb extract_from_apple_mail,./lib/email/receiver.rb extract_from_exchange,./lib/email/receiver.rb extract_from_gmail,./lib/email/receiver.rb extract_from_mozilla,./lib/email/receiver.rb extract_from_newton,./lib/email/receiver.rb extract_from_outlook,./lib/email/receiver.rb extract_from_protonmail,./lib/email/receiver.rb extract_from_word,./lib/email/receiver.rb extract_from_zimbra,./lib/email/receiver.rb extract_quoted_message_ids,./script/import_scripts/smf2.rb find_by_detail,./app/models/post.rb find_duplicates,./lib/i18n/duplicate_key_finder.rb flagged_post_actions,./lib/flag_query.rb flagged_posts_report,./lib/flag_query.rb flush!,./lib/distributed_memoizer.rb flushdb,./lib/discourse_redis.rb gc_analyze,./script/require_profiler.rb generate_url,./app/models/discourse_single_sign_on.rb get_current_user,./lib/pretty_text/helpers.rb get_group_ids,./app/models/invite.rb get_post_as_user,./script/import_scripts/disqus.rb get_topic_info,./lib/pretty_text/helpers.rb global_template_target,./lib/freedom_patches/raw_handlebars.rb grant_permission_to_user,./app/models/topic.rb gravatar_template,./app/models/user.rb groupable_user_fields,./plugins/poll/plugin.rb handle_stream,./lib/i18n/locale_file_walker.rb handlebars?,./lib/freedom_patches/raw_handlebars.rb has_filter?,./app/models/top_menu_item.rb has_specific_category?,./app/models/top_menu_item.rb has_thumbnail?,./app/models/upload.rb has_uploaded_avatar,./app/models/user.rb history,./app/models/reviewable.rb import_categories_from_thread_prefixes,./script/import_scripts/xenforo.rb import_gallery_topics,./script/import_scripts/ipboard.rb import_image_categories,./script/import_scripts/ipboard.rb imports,./lib/stylesheet/importer.rb include!,./lib/freedom_patches/ams_include_without_root.rb init_tutorial_edit,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_recover,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb initial_load?,./lib/topic_view.rb insert_like,./script/import_scripts/base/generic_database.rb interesting_after,./app/models/notification.rb is_embedded?,./lib/onebox/engine/whitelisted_generic_onebox.rb is_flagged?,./app/models/post.rb languages,./lib/highlight_js/highlight_js.rb last_db_duration,./app/jobs/base.rb last_post_url,./app/models/topic.rb list_bookmarks,./lib/topic_query.rb list_group_topics,./lib/topic_query.rb list_new,./lib/topic_query.rb list_posted,./lib/topic_query.rb list_private_messages,./lib/topic_query.rb list_private_messages_archive,./lib/topic_query.rb list_private_messages_group,./lib/topic_query.rb list_private_messages_group_archive,./lib/topic_query.rb list_private_messages_sent,./lib/topic_query.rb list_private_messages_tag,./lib/topic_query.rb list_private_messages_unread,./lib/topic_query.rb list_read,./lib/topic_query.rb list_unread,./lib/topic_query.rb log_action!,./app/models/user_action.rb log_change_upload_secure_status,./app/services/staff_action_logger.rb lookup_primary_user_group,./lib/pretty_text/helpers.rb mailing_list_topic,./app/helpers/email_helper.rb mailing_list_topic_text,./app/helpers/email_helper.rb messages_for,./app/models/group.rb missing_mailgun_api_key,./app/models/admin_dashboard_data.rb new_from_params,./app/models/user.rb no_reminder?,./app/models/bookmark.rb nokogiri_fix_blockquotes,./script/import_scripts/ipboard.rb normal_priority_types,./app/models/notification.rb not_close_topics,./script/import_scripts/modx.rb not_create_permalink_file,./script/import_scripts/modx.rb not_find_upload,./script/import_scripts/modx.rb not_import_attachments,./script/import_scripts/modx.rb not_import_groups,./script/import_scripts/modx.rb not_import_private_messages,./script/import_scripts/modx.rb not_mark_topics_as_solved,./script/import_scripts/modx.rb not_post_process_posts,./script/import_scripts/modx.rb notification_rows,./app/services/user_action_manager.rb official_plugins,./lib/discourse.rb old_clean_up,./script/import_scripts/ipboard.rb only_security_keys_enabled?,./app/models/concerns/second_factor_manager.rb only_totp_or_backup_codes_enabled?,./app/models/concerns/second_factor_manager.rb order_basic_bumped,./lib/topic_query_sql.rb order_nocategory_basic_bumped,./lib/topic_query_sql.rb order_nocategory_with_pinned_sql,./lib/topic_query_sql.rb order_with_pinned_sql,./lib/topic_query_sql.rb ordered,./app/models/post_action_type.rb page_links,./app/helpers/list_helper.rb pause,./lib/scheduler/defer.rb perform_agree_and_hide,./app/models/reviewable_flagged_post.rb perform_agree_and_keep,./app/models/reviewable_flagged_post.rb perform_agree_and_restore,./app/models/reviewable_flagged_post.rb perform_approve_post_closed,./app/models/reviewable_queued_post.rb perform_approve_user,./app/models/reviewable_user.rb perform_delete_and_agree,./app/models/reviewable_flagged_post.rb perform_delete_and_agree_replies,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore_replies,./app/models/reviewable_flagged_post.rb perform_delete_spammer,./app/models/reviewable_flagged_post.rb perform_delete_user,./app/models/reviewable_queued_post.rb perform_disagree,./app/models/reviewable_flagged_post.rb perform_reject_post,./app/models/reviewable_queued_post.rb perform_reject_user_block,./app/models/reviewable_user.rb plugin_themes,./lib/discourse.rb post_action_rows,./app/services/user_action_manager.rb post_rows,./app/services/user_action_manager.rb precompile_handlebars,./lib/freedom_patches/raw_handlebars.rb prettify_number,./lib/twitter_api.rb prettify_tweet,./lib/twitter_api.rb print_banner,./config/initializers/100-sidekiq.rb print_spinner,./script/import_scripts/base.rb private_messages_search,./lib/search.rb private_messages_stats,./app/models/user_action.rb process_and_upload_inline_images,./script/import_scripts/discuz_x.rb process_category,./script/bulk_import/base.rb process_category_group,./script/bulk_import/discourse_merger.rb process_category_tag,./script/bulk_import/discourse_merger.rb process_category_tag_stat,./script/bulk_import/discourse_merger.rb process_email_change_request,./script/bulk_import/discourse_merger.rb process_github_user_info,./script/bulk_import/discourse_merger.rb process_group,./script/bulk_import/base.rb process_group_archived_message,./script/bulk_import/discourse_merger.rb process_group_history,./script/bulk_import/discourse_merger.rb process_oauth2_user_info,./script/bulk_import/discourse_merger.rb process_post_reply,./script/bulk_import/discourse_merger.rb process_post_upload,./script/bulk_import/discourse_merger.rb process_quoted_post,./script/bulk_import/discourse_merger.rb process_single_sign_on_record,./script/bulk_import/discourse_merger.rb process_tag_group,./script/bulk_import/discourse_merger.rb process_tag_user,./script/bulk_import/discourse_merger.rb process_topic_allowed_user,./script/bulk_import/base.rb process_topic_link,./script/bulk_import/discourse_merger.rb process_user,./script/bulk_import/base.rb process_user_action,./script/bulk_import/discourse_merger.rb process_user_associated_account,./script/bulk_import/discourse_merger.rb process_user_avatar,./script/bulk_import/discourse_merger.rb process_user_badge,./script/bulk_import/discourse_merger.rb process_user_email,./script/bulk_import/base.rb process_user_history,./script/bulk_import/discourse_merger.rb process_user_profile,./script/bulk_import/base.rb process_user_stat,./script/bulk_import/base.rb process_user_warning,./script/bulk_import/discourse_merger.rb profiling_enabled?,./script/require_profiler.rb purge,./lib/inline_oneboxer.rb query_parent_category,./app/models/category.rb raw_tweet_for,./lib/twitter_api.rb readable_name,./app/models/user.rb redirected?,./lib/final_destination.rb register_category_custom_field_type,./lib/plugin/instance.rb register_color_scheme,./lib/plugin/instance.rb register_custom_html,./lib/plugin/instance.rb register_detailed_request_logger,./lib/middleware/request_tracker.rb register_editable_group_custom_field,./lib/plugin/instance.rb register_editable_user_custom_field,./lib/plugin/instance.rb register_emoji,./lib/plugin/instance.rb register_group_custom_field_type,./lib/plugin/instance.rb register_ip_skipper,./lib/middleware/request_tracker.rb register_javascript,./lib/plugin/instance.rb register_operation,./lib/topics_bulk_action.rb register_plugin_post_custom_field,./lib/flag_query.rb register_reviewable_type,./lib/plugin/instance.rb register_seedfu_fixtures,./lib/plugin/instance.rb register_topic_custom_field_type,./lib/plugin/instance.rb register_user_custom_field_type,./lib/plugin/instance.rb regular_order,./app/models/post.rb remove_act,./app/models/post_action.rb remove_custom_filter,./lib/topic_query.rb remove_filter,./app/models/report.rb remove_review_groups,./app/models/group.rb replace_flags,./lib/plugin/instance.rb reply_to_wiki,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb report_top_referred_topics,./app/models/incoming_links_report.rb report_top_referrers,./app/models/incoming_links_report.rb report_top_traffic_sources,./app/models/incoming_links_report.rb reset_last_cleanup!,./app/jobs/scheduled/clean_up_uploads.rb reset_redis_config!,./app/models/global_setting.rb reset_s3_cache!,./app/models/global_setting.rb resize_instructions,./app/models/optimized_image.rb resume,./lib/scheduler/defer.rb reverse_order,./app/models/post.rb rolledback!,./lib/mini_sql_multisite_connection.rb run_immediately?,./app/jobs/base.rb run_on_change,./lib/autospec/reload_css.rb running_in_rack?,./lib/discourse.rb s3_inventory_path,./lib/s3_helper.rb s3_options_from_site_settings,./lib/file_store/to_s3_migration.rb saved_change_to_value?,./lib/site_settings/local_process_provider.rb schedule_auto_bump_job,./app/models/topic_timer.rb schedule_auto_close_job,./app/models/topic_timer.rb schedule_auto_delete_job,./app/models/topic_timer.rb schedule_auto_delete_replies_job,./app/models/topic_timer.rb schedule_auto_open_job,./app/models/topic_timer.rb schedule_auto_publish_to_category_job,./app/models/topic_timer.rb schedule_auto_reminder_job,./app/models/topic_timer.rb seen_hosts,./lib/message_bus_diags.rb send_reminder_notification,./lib/bookmark_manager.rb set_cookie,./lib/discourse_cookie_store.rb set_regardless_of_locale,./lib/site_settings/defaults_provider.rb setup!,./lib/active_record/connection_adapters/postgresql_fallback_adapter.rb site_setting,./app/models/site.rb sort_order_for_post_number,./lib/topic_view.rb sorted_periods,./app/models/top_topic.rb sources,./lib/freedom_patches/raw_handlebars.rb spam_silence_score,./app/serializers/reviewable_explanation_serializer.rb specific_category,./app/models/top_menu_item.rb stopped?,./lib/scheduler/defer.rb stylesheet_fullpath_no_digest,./lib/stylesheet/manager.rb supports_advisory_locks?,./lib/freedom_patches/postgresql_adapter.rb supports_cache_versioning?,./lib/cache.rb test_alias_creation,./lib/tasks/emoji.rake test_cell_index_patch,./lib/tasks/emoji.rake test_code_to_emoji,./lib/tasks/emoji.rake test_codepoints_to_code,./lib/tasks/emoji.rake test_codepoints_to_code_with_scale,./lib/tasks/emoji.rake test_db_json_creation,./lib/tasks/emoji.rake test_default_set,./lib/tasks/emoji.rake test_groups_js_es6_creation,./lib/tasks/emoji.rake test_scales,./lib/tasks/emoji.rake test_thread,./script/thread_detective.rb to_rfc2822,./lib/freedom_patches/rack_patches.rb to_utf8,./lib/encodings.rb top_viewed,./app/models/topic.rb topic_rows,./app/services/user_action_manager.rb total_unread_notifications,./app/models/user.rb translate_emoji,./lib/plugin/instance.rb trigger_transactional_callbacks?,./lib/mini_sql_multisite_connection.rb trust_level_badge_ids,./app/models/badge.rb tsort_each_child,./script/import_scripts/smf2.rb tsort_each_node,./script/import_scripts/smf2.rb twitter_credentials_missing?,./lib/twitter_api.rb unofficial_plugins,./lib/discourse.rb unregister_detailed_request_logger,./lib/middleware/request_tracker.rb unregister_ip_skipper,./lib/middleware/request_tracker.rb unwatch_categories!,./app/models/topic_user.rb update_likes_count_for,./app/models/top_topic.rb update_meta_data,./app/models/topic.rb update_op_likes_count_for,./app/models/top_topic.rb update_posts_count_for,./app/models/top_topic.rb update_views_count_for,./app/models/top_topic.rb upsert_custom_fields,./app/models/concerns/has_custom_fields.rb user_for_key,./app/models/unsubscribe_key.rb user_timeline,./lib/twitter_api.rb validate_backup_location,./lib/site_settings/validations.rb validate_default_categories_muted,./lib/site_settings/validations.rb validate_default_categories_tracking,./lib/site_settings/validations.rb validate_default_categories_watching,./lib/site_settings/validations.rb validate_default_categories_watching_first_post,./lib/site_settings/validations.rb validate_default_tags_muted,./lib/site_settings/validations.rb validate_default_tags_tracking,./lib/site_settings/validations.rb validate_default_tags_watching,./lib/site_settings/validations.rb validate_default_tags_watching_first_post,./lib/site_settings/validations.rb validate_enable_local_logins,./lib/site_settings/validations.rb validate_enable_s3_inventory,./lib/site_settings/validations.rb validate_enable_s3_uploads,./lib/site_settings/validations.rb validate_enforce_second_factor,./lib/site_settings/validations.rb validate_s3_backup_bucket,./lib/site_settings/validations.rb validate_s3_upload_bucket,./lib/site_settings/validations.rb validate_secure_media,./lib/site_settings/validations.rb value_changed?,./lib/site_settings/local_process_provider.rb welcome_topic,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb whitelist_public_user_custom_field,./lib/plugin/instance.rb whitelist_staff_user_custom_field,./lib/plugin/instance.rb with_format,./app/helpers/application_helper.rb
all_topics_search,./lib/search.rb
Method Name,Defined In act,./app/models/post_action.rb actual_name,./lib/freedom_patches/raw_handlebars.rb add_admin_route,./lib/plugin/instance.rb add_body_class,./lib/plugin/instance.rb add_class_method,./lib/plugin/instance.rb add_custom_reviewable_filter,./lib/plugin/instance.rb add_default,./app/models/global_setting.rb add_detail,./app/models/post.rb add_message,./script/import_scripts/smf2.rb add_permitted_post_create_param,./lib/plugin/instance.rb add_preloaded_group_custom_field,./lib/plugin/instance.rb add_preloaded_topic_list_custom_field,./lib/plugin/instance.rb add_prev_data,./app/models/report.rb add_to_size_cache,./lib/cooked_post_processor.rb age_in_minutes,./app/models/topic.rb all_topics_search,./lib/search.rb apply_transform!,./lib/content_buffer.rb available_scopes,./app/models/user_api_key.rb before_committed!,./lib/mini_sql_multisite_connection.rb builtin,./app/models/group.rb cache_avatar,./lib/file_store/s3_store.rb callback_url,./lib/auth/discord_authenticator.rb can_admin_tag_groups?,./lib/guardian/tag_guardian.rb can_banner_topic?,./lib/guardian/topic_guardian.rb can_bulk_invite_to_forum?,./lib/guardian.rb can_change_post_owner?,./lib/guardian/post_guardian.rb can_change_post_timestamps?,./lib/guardian/post_guardian.rb can_change_post_type?,./lib/guardian/post_guardian.rb can_change_primary_group?,./lib/guardian.rb can_change_trust_level?,./lib/guardian.rb can_claim_reviewable_topic?,./lib/guardian/user_guardian.rb can_create_bookmark?,./lib/guardian/bookmark_guardian.rb can_create_category?,./lib/guardian/category_guardian.rb can_delete_bookmark?,./lib/guardian/bookmark_guardian.rb can_delete_category?,./lib/guardian/category_guardian.rb can_delete_post_action?,./lib/guardian/post_guardian.rb can_delete_reviewable_queued_post?,./lib/guardian.rb can_disable_second_factor?,./lib/guardian/user_guardian.rb can_edit_post?,./lib/guardian/post_guardian.rb can_edit_user?,./lib/guardian/user_guardian.rb can_export_entity?,./lib/guardian.rb can_get_access_to_topic?,./lib/guardian/topic_guardian.rb can_hide_post_revision?,./lib/guardian/post_revision_guardian.rb can_invite_group_to_private_message?,./lib/guardian.rb can_lock_post?,./lib/guardian/post_guardian.rb can_pick_avatar?,./lib/guardian/user_guardian.rb can_publish_topic?,./lib/guardian/topic_guardian.rb can_rebake?,./lib/guardian/post_guardian.rb can_rescind_all_invites?,./lib/guardian.rb can_resend_all_invites?,./lib/guardian.rb can_reset_bounce_score?,./lib/guardian/user_guardian.rb can_see_flagged_posts?,./lib/guardian/post_guardian.rb can_see_group?,./lib/guardian.rb can_see_groups_members?,./lib/guardian.rb can_see_post_revision?,./lib/guardian/post_revision_guardian.rb can_see_staff_info?,./lib/guardian/user_guardian.rb can_show_post_revision?,./lib/guardian/post_revision_guardian.rb can_silence_user?,./lib/guardian/user_guardian.rb can_unhide?,./lib/guardian/post_guardian.rb can_unsilence_user?,./lib/guardian/user_guardian.rb can_update_bumped_at?,./lib/guardian/topic_guardian.rb can_view_raw_email?,./lib/guardian/post_guardian.rb cancel_auto_bump_job,./app/models/topic_timer.rb cancel_auto_delete_job,./app/models/topic_timer.rb cancel_auto_delete_replies_job,./app/models/topic_timer.rb cancel_auto_publish_to_category_job,./app/models/topic_timer.rb cancel_auto_reminder_job,./app/models/topic_timer.rb cancel_preload,./app/models/topic_list.rb cap_unread!,./app/models/topic_user.rb category_hashtag_lookup,./lib/pretty_text/helpers.rb category_tag_hashtag_lookup,./lib/pretty_text/helpers.rb cdata,./script/import_scripts/support/convert_mysql_xml_to_mysql.rb cdata_block,./script/import_scripts/disqus.rb check_avatar_notification,./lib/composer_messages_finder.rb check_dominating_topic,./lib/composer_messages_finder.rb check_education_message,./lib/composer_messages_finder.rb check_get_a_room,./lib/composer_messages_finder.rb check_new_user_many_replies,./lib/composer_messages_finder.rb check_reviving_old_topic,./lib/composer_messages_finder.rb check_sequential_replies,./lib/composer_messages_finder.rb clean_up_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb clear_all!,./lib/rate_limiter.rb clear_all_global!,./lib/rate_limiter.rb clear_auto_bump_cache!,./app/models/category.rb clear_custom_filters!,./app/models/reviewable.rb clear_debounce_cache!,./app/models/search_log.rb clear_https_cache!,./lib/final_destination.rb clear_key,./app/jobs/scheduled/pending_reviewables_reminder.rb clear_problem_message,./app/models/admin_dashboard_data.rb clear_queue!,./app/services/badge_granter.rb committed!,./lib/mini_sql_multisite_connection.rb compile_ember_handlebars,./lib/freedom_patches/better_handlebars_errors.rb compile_handlebars,./lib/freedom_patches/raw_handlebars.rb contains_gaps?,./lib/topic_view.rb correct_top_margin,./app/helpers/user_notifications_helper.rb create_gitignore_entry,./lib/generators/plugin/plugin_generator.rb create_plugin,./lib/generators/plugin/plugin_generator.rb crop_instructions,./app/models/optimized_image.rb crop_instructions_animated,./app/models/optimized_image.rb custom_avatar_column,./lib/plugin/instance.rb custom_field_preloaded?,./app/models/concerns/has_custom_fields.rb cycles,./script/import_scripts/smf2.rb db_migrate_path,./lib/generators/rails/post_migration_generator.rb default_locale?,./lib/site_setting_extension.rb delayed_perform,./app/jobs/base.rb demons,./lib/demon/base.rb digest_body,./lib/freedom_patches/rack_patches.rb dirty?,./lib/cooked_post_processor.rb disable_safe!,./lib/migration/safe_migrate.rb disallow_raw_sql!,./lib/freedom_patches/active_record_attribute_methods.rb do_all_work,./lib/scheduler/defer.rb downsize_instructions,./app/models/optimized_image.rb downsize_instructions_animated,./app/models/optimized_image.rb element_content,./lib/feed_item_accessor.rb email_already_exists_for?,./app/models/topic.rb enable_safe!,./lib/migration/safe_migrate.rb establish_peer_names,./lib/message_bus_diags.rb exclude_step,./lib/wizard.rb exec_migration,./lib/freedom_patches/schema_migration_details.rb exists_for?,./lib/admin_confirmation.rb extended,./lib/site_setting_extension.rb extract_from_apple_mail,./lib/email/receiver.rb extract_from_exchange,./lib/email/receiver.rb extract_from_gmail,./lib/email/receiver.rb extract_from_mozilla,./lib/email/receiver.rb extract_from_newton,./lib/email/receiver.rb extract_from_outlook,./lib/email/receiver.rb extract_from_protonmail,./lib/email/receiver.rb extract_from_word,./lib/email/receiver.rb extract_from_zimbra,./lib/email/receiver.rb extract_quoted_message_ids,./script/import_scripts/smf2.rb find_by_detail,./app/models/post.rb find_duplicates,./lib/i18n/duplicate_key_finder.rb flagged_post_actions,./lib/flag_query.rb flagged_posts_report,./lib/flag_query.rb flush!,./lib/distributed_memoizer.rb flushdb,./lib/discourse_redis.rb gc_analyze,./script/require_profiler.rb generate_url,./app/models/discourse_single_sign_on.rb get_current_user,./lib/pretty_text/helpers.rb get_group_ids,./app/models/invite.rb get_post_as_user,./script/import_scripts/disqus.rb get_topic_info,./lib/pretty_text/helpers.rb global_template_target,./lib/freedom_patches/raw_handlebars.rb grant_permission_to_user,./app/models/topic.rb gravatar_template,./app/models/user.rb groupable_user_fields,./plugins/poll/plugin.rb handle_stream,./lib/i18n/locale_file_walker.rb handlebars?,./lib/freedom_patches/raw_handlebars.rb has_filter?,./app/models/top_menu_item.rb has_specific_category?,./app/models/top_menu_item.rb has_thumbnail?,./app/models/upload.rb has_uploaded_avatar,./app/models/user.rb history,./app/models/reviewable.rb import_categories_from_thread_prefixes,./script/import_scripts/xenforo.rb import_gallery_topics,./script/import_scripts/ipboard.rb import_image_categories,./script/import_scripts/ipboard.rb imports,./lib/stylesheet/importer.rb include!,./lib/freedom_patches/ams_include_without_root.rb init_tutorial_edit,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_recover,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb init_tutorial_search,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb initial_load?,./lib/topic_view.rb insert_like,./script/import_scripts/base/generic_database.rb interesting_after,./app/models/notification.rb is_embedded?,./lib/onebox/engine/whitelisted_generic_onebox.rb is_flagged?,./app/models/post.rb languages,./lib/highlight_js/highlight_js.rb last_db_duration,./app/jobs/base.rb last_post_url,./app/models/topic.rb list_bookmarks,./lib/topic_query.rb list_group_topics,./lib/topic_query.rb list_new,./lib/topic_query.rb list_posted,./lib/topic_query.rb list_private_messages,./lib/topic_query.rb list_private_messages_archive,./lib/topic_query.rb list_private_messages_group,./lib/topic_query.rb list_private_messages_group_archive,./lib/topic_query.rb list_private_messages_sent,./lib/topic_query.rb list_private_messages_tag,./lib/topic_query.rb list_private_messages_unread,./lib/topic_query.rb list_read,./lib/topic_query.rb list_unread,./lib/topic_query.rb log_action!,./app/models/user_action.rb log_change_upload_secure_status,./app/services/staff_action_logger.rb lookup_primary_user_group,./lib/pretty_text/helpers.rb mailing_list_topic,./app/helpers/email_helper.rb mailing_list_topic_text,./app/helpers/email_helper.rb messages_for,./app/models/group.rb missing_mailgun_api_key,./app/models/admin_dashboard_data.rb new_from_params,./app/models/user.rb no_reminder?,./app/models/bookmark.rb nokogiri_fix_blockquotes,./script/import_scripts/ipboard.rb normal_priority_types,./app/models/notification.rb not_close_topics,./script/import_scripts/modx.rb not_create_permalink_file,./script/import_scripts/modx.rb not_find_upload,./script/import_scripts/modx.rb not_import_attachments,./script/import_scripts/modx.rb not_import_groups,./script/import_scripts/modx.rb not_import_private_messages,./script/import_scripts/modx.rb not_mark_topics_as_solved,./script/import_scripts/modx.rb not_post_process_posts,./script/import_scripts/modx.rb notification_rows,./app/services/user_action_manager.rb official_plugins,./lib/discourse.rb old_clean_up,./script/import_scripts/ipboard.rb only_security_keys_enabled?,./app/models/concerns/second_factor_manager.rb only_totp_or_backup_codes_enabled?,./app/models/concerns/second_factor_manager.rb order_basic_bumped,./lib/topic_query_sql.rb order_nocategory_basic_bumped,./lib/topic_query_sql.rb order_nocategory_with_pinned_sql,./lib/topic_query_sql.rb order_with_pinned_sql,./lib/topic_query_sql.rb ordered,./app/models/post_action_type.rb page_links,./app/helpers/list_helper.rb pause,./lib/scheduler/defer.rb perform_agree_and_hide,./app/models/reviewable_flagged_post.rb perform_agree_and_keep,./app/models/reviewable_flagged_post.rb perform_agree_and_restore,./app/models/reviewable_flagged_post.rb perform_approve_post_closed,./app/models/reviewable_queued_post.rb perform_approve_user,./app/models/reviewable_user.rb perform_delete_and_agree,./app/models/reviewable_flagged_post.rb perform_delete_and_agree_replies,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore,./app/models/reviewable_flagged_post.rb perform_delete_and_ignore_replies,./app/models/reviewable_flagged_post.rb perform_delete_spammer,./app/models/reviewable_flagged_post.rb perform_delete_user,./app/models/reviewable_queued_post.rb perform_disagree,./app/models/reviewable_flagged_post.rb perform_reject_post,./app/models/reviewable_queued_post.rb perform_reject_user_block,./app/models/reviewable_user.rb plugin_themes,./lib/discourse.rb post_action_rows,./app/services/user_action_manager.rb post_rows,./app/services/user_action_manager.rb precompile_handlebars,./lib/freedom_patches/raw_handlebars.rb prettify_number,./lib/twitter_api.rb prettify_tweet,./lib/twitter_api.rb print_banner,./config/initializers/100-sidekiq.rb print_spinner,./script/import_scripts/base.rb private_messages_search,./lib/search.rb private_messages_stats,./app/models/user_action.rb process_and_upload_inline_images,./script/import_scripts/discuz_x.rb process_category,./script/bulk_import/base.rb process_category_group,./script/bulk_import/discourse_merger.rb process_category_tag,./script/bulk_import/discourse_merger.rb process_category_tag_stat,./script/bulk_import/discourse_merger.rb process_email_change_request,./script/bulk_import/discourse_merger.rb process_github_user_info,./script/bulk_import/discourse_merger.rb process_group,./script/bulk_import/base.rb process_group_archived_message,./script/bulk_import/discourse_merger.rb process_group_history,./script/bulk_import/discourse_merger.rb process_oauth2_user_info,./script/bulk_import/discourse_merger.rb process_post_reply,./script/bulk_import/discourse_merger.rb process_post_upload,./script/bulk_import/discourse_merger.rb process_quoted_post,./script/bulk_import/discourse_merger.rb process_single_sign_on_record,./script/bulk_import/discourse_merger.rb process_tag_group,./script/bulk_import/discourse_merger.rb process_tag_user,./script/bulk_import/discourse_merger.rb process_topic_allowed_user,./script/bulk_import/base.rb process_topic_link,./script/bulk_import/discourse_merger.rb process_user,./script/bulk_import/base.rb process_user_action,./script/bulk_import/discourse_merger.rb process_user_associated_account,./script/bulk_import/discourse_merger.rb process_user_avatar,./script/bulk_import/discourse_merger.rb process_user_badge,./script/bulk_import/discourse_merger.rb process_user_email,./script/bulk_import/base.rb process_user_history,./script/bulk_import/discourse_merger.rb process_user_profile,./script/bulk_import/base.rb process_user_stat,./script/bulk_import/base.rb process_user_warning,./script/bulk_import/discourse_merger.rb profiling_enabled?,./script/require_profiler.rb purge,./lib/inline_oneboxer.rb query_parent_category,./app/models/category.rb raw_tweet_for,./lib/twitter_api.rb readable_name,./app/models/user.rb redirected?,./lib/final_destination.rb register_category_custom_field_type,./lib/plugin/instance.rb register_color_scheme,./lib/plugin/instance.rb register_custom_html,./lib/plugin/instance.rb register_detailed_request_logger,./lib/middleware/request_tracker.rb register_editable_group_custom_field,./lib/plugin/instance.rb register_editable_user_custom_field,./lib/plugin/instance.rb register_emoji,./lib/plugin/instance.rb register_group_custom_field_type,./lib/plugin/instance.rb register_ip_skipper,./lib/middleware/request_tracker.rb register_javascript,./lib/plugin/instance.rb register_operation,./lib/topics_bulk_action.rb register_plugin_post_custom_field,./lib/flag_query.rb register_reviewable_type,./lib/plugin/instance.rb register_seedfu_fixtures,./lib/plugin/instance.rb register_topic_custom_field_type,./lib/plugin/instance.rb register_user_custom_field_type,./lib/plugin/instance.rb regular_order,./app/models/post.rb remove_act,./app/models/post_action.rb remove_custom_filter,./lib/topic_query.rb remove_filter,./app/models/report.rb remove_review_groups,./app/models/group.rb replace_flags,./lib/plugin/instance.rb reply_to_wiki,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/advanced_user_narrative.rb report_top_referred_topics,./app/models/incoming_links_report.rb report_top_referrers,./app/models/incoming_links_report.rb report_top_traffic_sources,./app/models/incoming_links_report.rb reset_last_cleanup!,./app/jobs/scheduled/clean_up_uploads.rb reset_redis_config!,./app/models/global_setting.rb reset_s3_cache!,./app/models/global_setting.rb resize_instructions,./app/models/optimized_image.rb resume,./lib/scheduler/defer.rb reverse_order,./app/models/post.rb rolledback!,./lib/mini_sql_multisite_connection.rb run_immediately?,./app/jobs/base.rb run_on_change,./lib/autospec/reload_css.rb running_in_rack?,./lib/discourse.rb s3_inventory_path,./lib/s3_helper.rb s3_options_from_site_settings,./lib/file_store/to_s3_migration.rb saved_change_to_value?,./lib/site_settings/local_process_provider.rb schedule_auto_bump_job,./app/models/topic_timer.rb schedule_auto_close_job,./app/models/topic_timer.rb schedule_auto_delete_job,./app/models/topic_timer.rb schedule_auto_delete_replies_job,./app/models/topic_timer.rb schedule_auto_open_job,./app/models/topic_timer.rb schedule_auto_publish_to_category_job,./app/models/topic_timer.rb schedule_auto_reminder_job,./app/models/topic_timer.rb seen_hosts,./lib/message_bus_diags.rb send_reminder_notification,./lib/bookmark_manager.rb set_cookie,./lib/discourse_cookie_store.rb set_regardless_of_locale,./lib/site_settings/defaults_provider.rb setup!,./lib/active_record/connection_adapters/postgresql_fallback_adapter.rb site_setting,./app/models/site.rb sort_order_for_post_number,./lib/topic_view.rb sorted_periods,./app/models/top_topic.rb sources,./lib/freedom_patches/raw_handlebars.rb spam_silence_score,./app/serializers/reviewable_explanation_serializer.rb specific_category,./app/models/top_menu_item.rb stopped?,./lib/scheduler/defer.rb stylesheet_fullpath_no_digest,./lib/stylesheet/manager.rb supports_advisory_locks?,./lib/freedom_patches/postgresql_adapter.rb supports_cache_versioning?,./lib/cache.rb test_alias_creation,./lib/tasks/emoji.rake test_cell_index_patch,./lib/tasks/emoji.rake test_code_to_emoji,./lib/tasks/emoji.rake test_codepoints_to_code,./lib/tasks/emoji.rake test_codepoints_to_code_with_scale,./lib/tasks/emoji.rake test_db_json_creation,./lib/tasks/emoji.rake test_default_set,./lib/tasks/emoji.rake test_groups_js_es6_creation,./lib/tasks/emoji.rake test_scales,./lib/tasks/emoji.rake test_thread,./script/thread_detective.rb to_rfc2822,./lib/freedom_patches/rack_patches.rb to_utf8,./lib/encodings.rb top_viewed,./app/models/topic.rb topic_rows,./app/services/user_action_manager.rb total_unread_notifications,./app/models/user.rb translate_emoji,./lib/plugin/instance.rb trigger_transactional_callbacks?,./lib/mini_sql_multisite_connection.rb trust_level_badge_ids,./app/models/badge.rb tsort_each_child,./script/import_scripts/smf2.rb tsort_each_node,./script/import_scripts/smf2.rb twitter_credentials_missing?,./lib/twitter_api.rb unofficial_plugins,./lib/discourse.rb unregister_detailed_request_logger,./lib/middleware/request_tracker.rb unregister_ip_skipper,./lib/middleware/request_tracker.rb unwatch_categories!,./app/models/topic_user.rb update_likes_count_for,./app/models/top_topic.rb update_meta_data,./app/models/topic.rb update_op_likes_count_for,./app/models/top_topic.rb update_posts_count_for,./app/models/top_topic.rb update_views_count_for,./app/models/top_topic.rb upsert_custom_fields,./app/models/concerns/has_custom_fields.rb user_for_key,./app/models/unsubscribe_key.rb user_timeline,./lib/twitter_api.rb validate_backup_location,./lib/site_settings/validations.rb validate_default_categories_muted,./lib/site_settings/validations.rb validate_default_categories_tracking,./lib/site_settings/validations.rb validate_default_categories_watching,./lib/site_settings/validations.rb validate_default_categories_watching_first_post,./lib/site_settings/validations.rb validate_default_tags_muted,./lib/site_settings/validations.rb validate_default_tags_tracking,./lib/site_settings/validations.rb validate_default_tags_watching,./lib/site_settings/validations.rb validate_default_tags_watching_first_post,./lib/site_settings/validations.rb validate_enable_local_logins,./lib/site_settings/validations.rb validate_enable_s3_inventory,./lib/site_settings/validations.rb validate_enable_s3_uploads,./lib/site_settings/validations.rb validate_enforce_second_factor,./lib/site_settings/validations.rb validate_s3_backup_bucket,./lib/site_settings/validations.rb validate_s3_upload_bucket,./lib/site_settings/validations.rb validate_secure_media,./lib/site_settings/validations.rb value_changed?,./lib/site_settings/local_process_provider.rb welcome_topic,./plugins/discourse-narrative-bot/lib/discourse_narrative_bot/new_user_narrative.rb whitelist_public_user_custom_field,./lib/plugin/instance.rb whitelist_staff_user_custom_field,./lib/plugin/instance.rb with_format,./app/helpers/application_helper.rb
Death stars
“Codebase killers”Complexity/Churn Detector
🧬 Calculate file complexity
📊 Determine how frequently a file has changed recently
$ flog action_dispatch/routing/mapper.rb
1324.7: flog total
8.7: flog/method average
75.0: ActionDispatch::Routing::Mapper::Mapping#initialize action_dispatch/routing/mapper.rb:118-163
62.6: ActionDispatch::Routing::Mapper::Scoping#scope action_dispatch/routing/mapper.rb:865-914
56.4: ActionDispatch::Routing::Mapper::Mapping#build_path action_dispatch/routing/mapper.rb:201-226
54.5: ActionDispatch::Routing::Mapper::Resources#map_match action_dispatch/routing/mapper.rb:1901-1939
51.6: ActionDispatch::Routing::Mapper::Resources#resources action_dispatch/routing/mapper.rb:1488-1515
49.4: ActionDispatch::Routing::Mapper::Resources#apply_common_behavior_for action_dispatch/routing/mapper.rb:1715-1746
43.4: ActionDispatch::Routing::Mapper::Resources#resource action_dispatch/routing/mapper.rb:1322-1348
43.3: ActionDispatch::Routing::Mapper::Base#define_generate_prefix action_dispatch/routing/mapper.rb:688-715
30.5: ActionDispatch::Routing::Mapper::Resources#match action_dispatch/routing/mapper.rb:1643-1673
...
$ git log --since='6 months ago' \
actionpack/lib/action_dispatch/routing/mapper.rb \
commit fa292703e1b733a7a55a8d6f0d749ddf590c61fd
Merge: 285cc00128 b44740d48d
Author: Aaron Patterson <aaron.patterson@gmail.com>
Date: Thu Dec 12 15:34:30 2019
Merge pull request #37075 from woahdae/fix-multiple-choice-route-options
Fix route from "(:a)(foo/:b)" when only given :b
commit 285cc00128c8810fbc73243cea2ed81247fa620f
Merge: cad13033fc c218233472
Author: Aaron Patterson <aaron.patterson@gmail.com>
Date: Thu Dec 12 15:25:19 2019
Merge pull request #37073 from woahdae/fix-hierarchical-route-options
Fix route from "(:a)(:b)" when given only :a or :b
...
$ git log --since='6 months ago' \
actionpack/lib/action_dispatch/routing/mapper.rb \
commit fa292703e1b733a7a55a8d6f0d749ddf590c61fd
Merge: 285cc00128 b44740d48d
Author: Aaron Patterson <aaron.patterson@gmail.com>
Date: Thu Dec 12 15:34:30 2019
Merge pull request #37075 from woahdae/fix-multiple-choice-route-options
Fix route from "(:a)(foo/:b)" when only given :b
commit 285cc00128c8810fbc73243cea2ed81247fa620f
Merge: cad13033fc c218233472
Author: Aaron Patterson <aaron.patterson@gmail.com>
Date: Thu Dec 12 15:25:19 2019
Merge pull request #37073 from woahdae/fix-hierarchical-route-options
Fix route from "(:a)(:b)" when given only :a or :b
...
$ git log --since='6 months ago' \
actionpack/lib/action_dispatch/routing/mapper.rb
commit fa292703e1b733a7a55a8d6f0d749ddf590c61fd
Merge: 285cc00128 b44740d48d
Author: Aaron Patterson <aaron.patterson@gmail.com>
Date: Thu Dec 12 15:34:30 2019
Merge pull request #37075 from woahdae/fix-multiple-choice-route-options
Fix route from "(:a)(foo/:b)" when only given :b
commit 285cc00128c8810fbc73243cea2ed81247fa620f
Merge: cad13033fc c218233472
Author: Aaron Patterson <aaron.patterson@gmail.com>
Date: Thu Dec 12 15:25:19 2019
Merge pull request #37073 from woahdae/fix-hierarchical-route-options
Fix route from "(:a)(:b)" when given only :a or :b
...
$ git log --since='6 months ago' \
actionpack/lib/action_dispatch/routing/mapper.rb \
| grep '^commit' \
| wc -l
7
$ git log --name-only --since="6 months ago" --format=""
railties/test/application/rake/dbs_test.rb
railties/test/isolation/abstract_unit.rb
activerecord/lib/active_record/railties/databases.rake
activerecord/lib/active_record/tasks/database_tasks.rb
guides/source/debugging_rails_applications.md
railties/test/generators/app_generator_test.rb
activesupport/lib/active_support.rb
activesupport/lib/active_support/core_ext/string/inquiry.rb
activesupport/lib/active_support/environment_inquirer.rb
railties/lib/rails.rb
activerecord/lib/active_record/railties/databases.rake
activerecord/lib/active_record/tasks/database_tasks.rb
activesupport/lib/active_support/core_ext/string/inquiry.rb
activesupport/lib/active_support/environment_inquirer.rb
railties/lib/rails.rb
activejob/lib/active_job/exceptions.rb
...
$ git log --name-only --since="6 months ago" --format="" origin/main \
| sort \
| uniq -c
1 .codeclimate.yml
1 .github/CODEOWNERS
1 .github/stale.yml
13 .github/workflows/rubocop.yml
4 .rubocop.yml
1 .travis.yml
1 Brewfile
4 Gemfile
26 Gemfile.lock
1 MIT-LICENSE
$ ~/bin/complexity_churn.rb actionpack
0.556 actionpack/lib/action_dispatch/middleware/stack.rb
0.500 actionpack/lib/action_dispatch/routing/mapper.rb
0.281 actionpack/lib/action_dispatch/routing/route_set.rb
0.162 actionpack/lib/action_controller/metal/strong_parameters.rb
0.157 actionpack/lib/action_dispatch/middleware/cookies.rb
0.132 actionpack/lib/action_controller/test_case.rb
0.121 actionpack/lib/action_dispatch/http/mime_type.rb
0.115 actionpack/lib/action_dispatch/testing/integration.rb
0.108 actionpack/test/abstract_unit.rb
0.102 actionpack/lib/action_controller/metal/http_authentication.rb
Cohupling Detection
👛 Use git history to find methods that change together
$ git log --name-only --format="format:--> %aI %H %P" --since="01 01 2018" origin/main
--> 2020-03-06T10:01:14-05:00 2dcf07a53aeebb0f63c44feba69bd215f983a1e2 150fcf7b37dfc3fef2be87542b2803343b3b935d
railties/test/application/rake/dbs_test.rb
--> 2020-03-06T09:33:18-05:00 150fcf7b37dfc3fef2be87542b2803343b3b935d 712cee174161bf03cd05df8a10bd571b3657781c
railties/test/isolation/abstract_unit.rb
--> 2020-03-06T08:40:28-05:00 712cee174161bf03cd05df8a10bd571b3657781c 82d7e3e21708dcb21b47198f996cf3ec9f372612 3b882deb0c125f6ee4781b261ab04e17afc7b07e
--> 2020-03-05T18:20:51-05:00 82d7e3e21708dcb21b47198f996cf3ec9f372612 cfd1ed5a324cfa571fef96f2da0b35558b232f0d 2d37ea04c801245061baaca9703d1de48413fb0f
--> 2020-03-05T18:15:47-05:00 2d37ea04c801245061baaca9703d1de48413fb0f cfd1ed5a324cfa571fef96f2da0b35558b232f0d
activerecord/lib/active_record/railties/databases.rake
$ git log --name-only --format="format:--> %aI %H %P" --since="01 01 2018" origin/main
--> 2020-03-06T10:01:14-05:00 2dcf07a53aeebb0f63c44feba69bd215f983a1e2 150fcf7b37dfc3fef2be87542b2803343b3b935d
railties/test/application/rake/dbs_test.rb
--> 2020-03-06T09:33:18-05:00 150fcf7b37dfc3fef2be87542b2803343b3b935d 712cee174161bf03cd05df8a10bd571b3657781c
railties/test/isolation/abstract_unit.rb
--> 2020-03-06T08:40:28-05:00 712cee174161bf03cd05df8a10bd571b3657781c 82d7e3e21708dcb21b47198f996cf3ec9f372612
--> 2020-03-05T18:20:51-05:00 82d7e3e21708dcb21b47198f996cf3ec9f372612 cfd1ed5a324cfa571fef96f2da0b35558b232f0d
--> 2020-03-05T18:15:47-05:00 2d37ea04c801245061baaca9703d1de48413fb0f cfd1ed5a324cfa571fef96f2da0b35558b232f0d
activerecord/lib/active_record/railties/databases.rake
--> %aI
--> 2020-03-06T10:01:14-05:00
--> 2020-03-06T09:33:18-05:00
--> 2020-03-06T08:40:28-05:00
--> 2020-03-05T18:20:51-05:00
--> 2020-03-05T18:15:47-05:00
$ git log --name-only --format="format:--> %aI %H %P" --since="01 01 2018" origin/main
--> 2020-03-06T10:01:14-05:00 2dcf07a53aeebb0f63c44feba69bd215f983a1e2 150fcf7b37dfc3fef2be87542b2803343b3b935d
railties/test/application/rake/dbs_test.rb
--> 2020-03-06T09:33:18-05:00 150fcf7b37dfc3fef2be87542b2803343b3b935d 712cee174161bf03cd05df8a10bd571b3657781c
railties/test/isolation/abstract_unit.rb
--> 2020-03-06T08:40:28-05:00 712cee174161bf03cd05df8a10bd571b3657781c 3b882deb0c125f6ee4781b261ab04e17afc7b07e
--> 2020-03-05T18:20:51-05:00 82d7e3e21708dcb21b47198f996cf3ec9f372612 cfd1ed5a324cfa571fef96f2da0b35558b232f0d
--> 2020-03-05T18:15:47-05:00 2d37ea04c801245061baaca9703d1de48413fb0f cfd1ed5a324cfa571fef96f2da0b35558b232f0d
activerecord/lib/active_record/railties/databases.rake
%H
2dcf07a53aeebb0f63c44feba69bd215f983a1e2
150fcf7b37dfc3fef2be87542b2803343b3b935d
712cee174161bf03cd05df8a10bd571b3657781c
82d7e3e21708dcb21b47198f996cf3ec9f372612
2d37ea04c801245061baaca9703d1de48413fb0f
$ git log --name-only --format="format:--> %aI %H %P" --since="01 01 2018" origin/main
--> 2020-03-06T10:01:14-05:00 2dcf07a53aeebb0f63c44feba69bd215f983a1e2 150fcf7b37dfc3fef2be87542b2803343b3b935d
railties/test/application/rake/dbs_test.rb
--> 2020-03-06T09:33:18-05:00 150fcf7b37dfc3fef2be87542b2803343b3b935d 712cee174161bf03cd05df8a10bd571b3657781c
railties/test/isolation/abstract_unit.rb
--> 2020-03-06T08:40:28-05:00 712cee174161bf03cd05df8a10bd571b3657781c 3b882deb0c125f6ee4781b261ab04e17afc7b07e
--> 2020-03-05T18:20:51-05:00 82d7e3e21708dcb21b47198f996cf3ec9f372612 cfd1ed5a324cfa571fef96f2da0b35558b232f0d
--> 2020-03-05T18:15:47-05:00 2d37ea04c801245061baaca9703d1de48413fb0f cfd1ed5a324cfa571fef96f2da0b35558b232f0d
activerecord/lib/active_record/railties/databases.rake
%P
150fcf7b37dfc3fef2be87542b2803343b3b935d
712cee174161bf03cd05df8a10bd571b3657781c
3b882deb0c125f6ee4781b261ab04e17afc7b07e
cfd1ed5a324cfa571fef96f2da0b35558b232f0d
cfd1ed5a324cfa571fef96f2da0b35558b232f0d
$ git log --name-only --format="format:--> %aI %H %P" --since="01 01 2018" origin/main
--> 2020-03-06T10:01:14-05:00 2dcf07a53aeebb0f63c44feba69bd215f983a1e2 150fcf7b37dfc3fef2be87542b2803343b3b935d
railties/test/application/rake/dbs_test.rb
--> 2020-03-06T09:33:18-05:00 150fcf7b37dfc3fef2be87542b2803343b3b935d 712cee174161bf03cd05df8a10bd571b3657781c
railties/test/isolation/abstract_unit.rb
--> 2020-03-06T08:40:28-05:00 712cee174161bf03cd05df8a10bd571b3657781c 3b882deb0c125f6ee4781b261ab04e17afc7b07e
--> 2020-03-05T18:20:51-05:00 82d7e3e21708dcb21b47198f996cf3ec9f372612 cfd1ed5a324cfa571fef96f2da0b35558b232f0d
--> 2020-03-05T18:15:47-05:00 2d37ea04c801245061baaca9703d1de48413fb0f cfd1ed5a324cfa571fef96f2da0b35558b232f0d
activerecord/lib/active_record/railties/databases.rake
$ ~/bin/find_cohesive_changes.rb activerecord/lib/active_record/core.rb
[
{
"github_url": "https://github.com/rails/rails/pull/38646",
"targeted_methods": [
"ActiveRecord::Core::ClassMethods.find_by"
],
"associated_methods": [
"ActionView::CollectionCaching.fetch_or_cache_partial",
"ActiveRecord::Associations::Preloader::AlreadyLoaded.records_by_owner",
"ActiveRecord::AttributeMethods.attributes_with_values",
"ActiveRecord::Calculations.execute_grouped_calculation",
"ActiveRecord::InsertAll::Builder.extract_types_from_columns_on",
"ActiveRecord::TestFixtures.load_fixtures",
"ActiveSupport::Cache::MemCacheStore.read_multi_entries",
"ActiveSupport::Cache::Store.fetch_multi",
"ActiveSupport::CurrentAttributes.compute_attributes",
"ActiveSupport::Testing::Assertions.assert_difference",
"FakeRecord::Connection.initialize",
"Rails::Generators.find_by_namespace"
]
},
...
]
$ ~/bin/find_cohesive_changes.rb activerecord/lib/active_record/core.rb
[
{
"github_url": "https://github.com/rails/rails/pull/38646",
"targeted_methods": [
"ActiveRecord::Core::ClassMethods.find_by"
],
"associated_methods": [
"ActionView::CollectionCaching.fetch_or_cache_partial",
"ActiveRecord::Associations::Preloader::AlreadyLoaded.records_by_owner",
"ActiveRecord::AttributeMethods.attributes_with_values",
"ActiveRecord::Calculations.execute_grouped_calculation",
"ActiveRecord::InsertAll::Builder.extract_types_from_columns_on",
"ActiveRecord::TestFixtures.load_fixtures",
"ActiveSupport::Cache::MemCacheStore.read_multi_entries",
"ActiveSupport::Cache::Store.fetch_multi",
"ActiveSupport::CurrentAttributes.compute_attributes",
"ActiveSupport::Testing::Assertions.assert_difference",
"FakeRecord::Connection.initialize",
"Rails::Generators.find_by_namespace"
]
},
...
]
$ ~/bin/find_cohesive_changes.rb activerecord/lib/active_record/core.rb
[
{
"github_url": "https://github.com/rails/rails/pull/38646",
"targeted_methods": [
"ActiveRecord::Core::ClassMethods.find_by"
],
"associated_methods": [
"ActionView::CollectionCaching.fetch_or_cache_partial",
"ActiveRecord::Associations::Preloader::AlreadyLoaded.records_by_owner",
"ActiveRecord::AttributeMethods.attributes_with_values",
"ActiveRecord::Calculations.execute_grouped_calculation",
"ActiveRecord::InsertAll::Builder.extract_types_from_columns_on",
"ActiveRecord::TestFixtures.load_fixtures",
"ActiveSupport::Cache::MemCacheStore.read_multi_entries",
"ActiveSupport::Cache::Store.fetch_multi",
"ActiveSupport::CurrentAttributes.compute_attributes",
"ActiveSupport::Testing::Assertions.assert_difference",
"FakeRecord::Connection.initialize",
"Rails::Generators.find_by_namespace"
]
},
...
]
$ git diff --format=oneline --unified=0 <SHA>
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 575d9faf9d..bb961e45f6 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -349 +349 @@ def split_to(to)
- if to && /#/.match?(to)
+ if /#/.match?(to)
@@ -358 +358 @@ def add_controller_module(controller, modyoule)
- if controller && controller.to_s.start_with?("/")
+ if controller.to_s.start_with?("/")
@@ -401,3 +401,3 @@ def dispatcher(raise_on_name_error)
- # Invokes Journey::Router::Utils.normalize_path and ensure that
- # (:locale) becomes (/:locale) instead of /(:locale). Except
- # for root cases, where the latter is the correct one.
+ # Invokes Journey::Router::Utils.normalize_path, then ensures that
+ # /(:locale) becomes (/:locale). Except for root cases, where the
+ # former is the correct one.
@@ -406 +406,12 @@ def self.normalize_path(path)
- path.gsub!(%r{/(\(+)/?}, '\1/') unless %r{^/(\(+[^)]+\)){1,}$}.match?(path)
+
+ # the path for a root URL at this point can be something like
+ # "/(/:locale)(/:platform)/(:browser)", and we would want
+ # "/(:locale)(/:platform)(/:browser)"
+
+ # reverse "/(", "/((" etc to "(/", "((/" etc
+ path.gsub!(%r{/(\(+)/?}, '\1/')
+ # if a path is all optional segments, change the leading "(/" back to
+ # "/(" so it evaluates to "/" when interpreted with no options.
+ # Unless, however, at least one secondary segment consists of a static
+ # part, ex. "(/:locale)(/pages/:page)"
+ path.sub!(%r{^(\(+)/}, '/\1') if %r{^(\(+[^)]+\))(\(+/:[^)]+\))*$}.match?(path)
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 575d9faf9d..bb961e45f6 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -349 +349 @@ def split_to(to)
- if to && /#/.match?(to)
+ if /#/.match?(to)
@@ -358 +358 @@ def add_controller_module(controller, modyoule)
- if controller && controller.to_s.start_with?("/")
+ if controller.to_s.start_with?("/")
@@ -401,3 +401,3 @@ def dispatcher(raise_on_name_error)
- # Invokes Journey::Router::Utils.normalize_path and ensure that
- # (:locale) becomes (/:locale) instead of /(:locale). Except
- # for root cases, where the latter is the correct one.
+ # Invokes Journey::Router::Utils.normalize_path, then ensures that
+ # /(:locale) becomes (/:locale). Except for root cases, where the
+ # former is the correct one.
@@ -406 +406,12 @@ def self.normalize_path(path)
- path.gsub!(%r{/(\(+)/?}, '\1/') unless %r{^/(\(+[^)]+\)){1,}$}.match?(path)
+
+ # the path for a root URL at this point can be something like
+ # "/(/:locale)(/:platform)/(:browser)", and we would want
+ # "/(:locale)(/:platform)(/:browser)"
+
+ # reverse "/(", "/((" etc to "(/", "((/" etc
+ path.gsub!(%r{/(\(+)/?}, '\1/')
+ # if a path is all optional segments, change the leading "(/" back to
+ # "/(" so it evaluates to "/" when interpreted with no options.
+ # Unless, however, at least one secondary segment consists of a static
+ # part, ex. "(/:locale)(/pages/:page)"
+ path.sub!(%r{^(\(+)/}, '/\1') if %r{^(\(+[^)]+\))(\(+/:[^)]+\))*$}.match?(path)
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 575d9faf9d..bb961e45f6 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -349 +349 @@ def split_to(to)
- if to && /#/.match?(to)
+ if /#/.match?(to)
@@ -358 +358 @@ def add_controller_module(controller, modyoule)
- if controller && controller.to_s.start_with?("/")
+ if controller.to_s.start_with?("/")
@@ -401,3 +401,3 @@ def dispatcher(raise_on_name_error)
- # Invokes Journey::Router::Utils.normalize_path and ensure that
- # (:locale) becomes (/:locale) instead of /(:locale). Except
- # for root cases, where the latter is the correct one.
+ # Invokes Journey::Router::Utils.normalize_path, then ensures that
+ # /(:locale) becomes (/:locale). Except for root cases, where the
+ # former is the correct one.
@@ -406 +406,12 @@ def self.normalize_path(path)
- path.gsub!(%r{/(\(+)/?}, '\1/') unless %r{^/(\(+[^)]+\)){1,}$}.match?(path)
+
+ # the path for a root URL at this point can be something like
+ # "/(/:locale)(/:platform)/(:browser)", and we would want
+ # "/(:locale)(/:platform)(/:browser)"
+
+ # reverse "/(", "/((" etc to "(/", "((/" etc
+ path.gsub!(%r{/(\(+)/?}, '\1/')
+ # if a path is all optional segments, change the leading "(/" back to
+ # "/(" so it evaluates to "/" when interpreted with no options.
+ # Unless, however, at least one secondary segment consists of a static
+ # part, ex. "(/:locale)(/pages/:page)"
+ path.sub!(%r{^(\(+)/}, '/\1') if %r{^(\(+[^)]+\))(\(+/:[^)]+\))*$}.match?(path)
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 575d9faf9d..bb961e45f6 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -349 +349 @@ def split_to(to)
- if to && /#/.match?(to)
+ if /#/.match?(to)
@@ -358 +358 @@ def add_controller_module(controller, modyoule)
- if controller && controller.to_s.start_with?("/")
+ if controller.to_s.start_with?("/")
@@ -401,3 +401,3 @@ def dispatcher(raise_on_name_error)
- # Invokes Journey::Router::Utils.normalize_path and ensure that
- # (:locale) becomes (/:locale) instead of /(:locale). Except
- # for root cases, where the latter is the correct one.
+ # Invokes Journey::Router::Utils.normalize_path, then ensures that
+ # /(:locale) becomes (/:locale). Except for root cases, where the
+ # former is the correct one.
@@ -406 +406,12 @@ def self.normalize_path(path)
- path.gsub!(%r{/(\(+)/?}, '\1/') unless %r{^/(\(+[^)]+\)){1,}$}.match?(path)
+
+ # the path for a root URL at this point can be something like
+ # "/(/:locale)(/:platform)/(:browser)", and we would want
+ # "/(:locale)(/:platform)(/:browser)"
+
+ # reverse "/(", "/((" etc to "(/", "((/" etc
+ path.gsub!(%r{/(\(+)/?}, '\1/')
+ # if a path is all optional segments, change the leading "(/" back to
+ # "/(" so it evaluates to "/" when interpreted with no options.
+ # Unless, however, at least one secondary segment consists of a static
+ # part, ex. "(/:locale)(/pages/:page)"
+ path.sub!(%r{^(\(+)/}, '/\1') if %r{^(\(+[^)]+\))(\(+/:[^)]+\))*$}.match?(path)
$ ~/bin/find_cohesive_changes.rb activerecord/lib/active_record/core.rb
[
{
"github_url": "https://github.com/rails/rails/pull/38646",
"targeted_methods": [
"ActiveRecord::Core::ClassMethods.find_by"
],
"associated_methods": [
"ActionView::CollectionCaching.fetch_or_cache_partial",
"ActiveRecord::Associations::Preloader::AlreadyLoaded.records_by_owner",
"ActiveRecord::AttributeMethods.attributes_with_values",
"ActiveRecord::Calculations.execute_grouped_calculation",
"ActiveRecord::InsertAll::Builder.extract_types_from_columns_on",
"ActiveRecord::TestFixtures.load_fixtures",
"ActiveSupport::Cache::MemCacheStore.read_multi_entries",
"ActiveSupport::Cache::Store.fetch_multi",
"ActiveSupport::CurrentAttributes.compute_attributes",
"ActiveSupport::Testing::Assertions.assert_difference",
"FakeRecord::Connection.initialize",
"Rails::Generators.find_by_namespace"
]
},
...
]
Le Fin