1. 07 Oct, 2018 1 commit
    • gfyoung's avatar
      Enable more frozen string in lib/**/*.rb · d598e4fd
      gfyoung authored
      Enables frozen for the following:
      
      * lib/*.rb
      * lib/banzai/**/*.rb
      * lib/bitbucket/**/*.rb
      * lib/constraints/**/*.rb
      * lib/container_registry/**/*.rb
      * lib/declarative_policy/**/*.rb
      
      Partially addresses #47424.
      d598e4fd
  2. 02 Oct, 2018 1 commit
  3. 11 Apr, 2018 1 commit
    • Yorick Peterse's avatar
      Support Markdown rendering using multiple projects · daad7144
      Yorick Peterse authored
      This refactors the Markdown pipeline so it supports the rendering of
      multiple documents that may belong to different projects. An example of
      where this happens is when displaying the event feed of a group. In this
      case we retrieve events for all projects in the group. Previously we
      would group events per project and render these chunks separately, but
      this would result in many SQL queries being executed. By extending the
      Markdown pipeline to support this out of the box we can drastically
      reduce the number of SQL queries.
      
      To achieve this we introduce a new object to the pipeline:
      Banzai::RenderContext. This object simply wraps two other objects: an
      optional Project instance, and an optional User instance. On its own
      this wouldn't be very helpful, but a RenderContext can also be used to
      associate HTML documents with specific Project instances. This work is
      done in Banzai::ObjectRenderer and allows us to reuse as many queries
      (and results) as possible.
      daad7144
  4. 27 Feb, 2018 1 commit
  5. 22 Feb, 2018 1 commit
  6. 01 Nov, 2016 1 commit
  7. 11 Jul, 2016 1 commit
    • Stan Hu's avatar
      Optimize system note visibility checking by hiding notes that · af3727b3
      Stan Hu authored
      have been fully redacted and contain cross-project references.
      
      The previous implementation relied on Note#cross_reference_not_visible_for?,
      which essentially tries to render all the Markdown references in a system note
      and only displays the note if the user can see the referring project. But this
      duplicated the work that Banzai::NotesRenderer was doing already. Instead, for
      each note we render, we memoize the number of visible user references and
      use it later if it is available.
      
      Improves #19273
      af3727b3
  8. 24 Jun, 2016 1 commit
    • Yorick Peterse's avatar
      Support for rendering/redacting multiple documents · d470f3d1
      Yorick Peterse authored
      This commit changes the way certain documents are rendered (currently
      only Notes) and how documents are redacted. Previously both rendering
      and redacting would run on a per document basis. The result of this was
      that for every document we'd have to run countless queries just to
      figure out if we could display a set of links or not.
      
      This commit changes things around so that redacting Markdown documents
      is no longer tied into the html-pipeline Gem. This in turn allows it to
      redact multiple documents in a single pass, thus reducing the number of
      queries needed.
      
      In turn rendering issue/merge request notes has been adjusted to take
      advantage of this new setup. Instead of rendering Markdown somewhere
      deep down in a view the Markdown is rendered and redacted in the
      controller (taking the current user and all that into account). This has
      been done in such a way that the "markdown()" helper method can still be
      used on its own.
      
      This particular commit also paves the way for caching rendered HTML on
      object level. Right now there's an accessor method Note#note_html which
      is used for setting/getting the rendered HTML. Once we cache HTML on row
      level we can simply change this field to be a column and call a "save"
      whenever needed and we're pretty much done.
      d470f3d1