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?
screenshot of a terminal with lots of code

Cyclomatic Complexity

The road not taken (but maybe sometimes)
an acyclic directed graph

Lack of cohesion methods

Apples and oranges
a suit-wearing dog sitting at a desk

Perfection 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
the death star from Star Wars

Death stars

“Codebase killers”
a traced death star from Star Wars

Complexity/Churn Detector

🧬 Calculate file complexity

📊 Determine how frequently a file has changed recently

=Assignments
🌲Branches
📞Calls
$ 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 \
$ 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
000.250.250.50.50.750.7511ComplexityChurn👋 mapper.rbschema_statements.rbquery_methods.rbconnection_pool.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"
    ]
  },
  ...
]
graph showing related changes
graph showing related changesgraph showing related changes
graph showing related changesgraph showing related changes

Le Fin