* feat: fix of there is no article * feat: set the feed order in a data structure rather than in a view * feat: update yarn.lock * feat: push the items to the array * feat: update feed to only show billboards if we have the correct length of items in the feed * fix: organizedFeedItems.legth * feat: rename 'featured' to 'image' * feat: rename 'featured' to 'image' * feat: rename 'featured' to 'image' * feat: add some utilities for the feed that we can use in the FeedTest * feat/WIP: the setup for the feed tests and a first working test * test: imageItem * fix: the podcasts can be passed through as an array of objects in the feedItems so that they can be grouped in one card * feat: remove podcastEpisode state and the attribute in the object * fix: check that the items exist before trying to slice them * feat: setup the userdata and the podcast data in the test * whoops - commit the podcast episodes * feat: write soem more tests for the feed and including the podcasts * feat: add some more tests * feat: add more billboards tests to chcek the order of stuff * feat: set the timeframe not empty * feat: update the logic for organizaed feed by inserting the last on first * doc: jsdoc for functions * refactor: break the code up into smaller functions * refactor: make the code more readable and easier to follow * refactor: pull function out into a utlity * feat: add specs to utility * feat: chcek if pinned post * test the latest timeframe correctly * chore: update var name * move the podcast items out of the object clause * feat: update text * feat: add a pack file that duplicates initializeDisplayAdVisibility * feat: create callbacks that will help us to determine when the feed has been rendered so that we can observe the dsplay ads accordingly * chore: rename to billboards instead of display ad * feat: abstract out a function that will work for any tagged resource and also limit the article tags within a scope of the article_id * feat: update the spec for the previous changes * feat: write tests for the user_tags * feat: add user_tags to for_display adn the query * feat: add user_tags to the endpoint where we query the tags to send it through to for_display * feat: pass through the suer tags to the async request * feat: update the user_tags fiter query + tests * feat: update the admin view to show targeted tags on the new feed option billboards too * feat: add tests for targeted tags field on admin * refactor: consolidate all of the options into one * feat: move comment close to attribute * feat: use a helper method * feat: include helper on ads query * feat: move the query from the frontend to live on the backend * feat: first pass at some error handling whilst maintaining the order of the items * test: for feed error * feat: abstract out some code * update the feed items for errors * chore: comment * feat: update the variable names * feat: update honeybadger message * feat: update the name of the variable * refactor: do not conflate the duty of the untagged_ads * refactor: rename the variables + add note for clarity * fix: update var
42 lines
1.1 KiB
Ruby
42 lines
1.1 KiB
Ruby
class DisplayAdsController < ApplicationController
|
|
before_action :set_cache_control_headers, only: %i[show], unless: -> { current_user }
|
|
include DisplayAdHelper
|
|
CACHE_EXPIRY_FOR_DISPLAY_ADS = 15.minutes.to_i.freeze
|
|
|
|
def show
|
|
skip_authorization
|
|
set_cache_control_headers(CACHE_EXPIRY_FOR_DISPLAY_ADS) unless session_current_user_id
|
|
|
|
if placement_area
|
|
if params[:username].present? && params[:slug].present?
|
|
@article = Article.find_by(slug: params[:slug])
|
|
end
|
|
|
|
@display_ad = DisplayAd.for_display(
|
|
area: placement_area,
|
|
user_signed_in: user_signed_in?,
|
|
user_id: current_user&.id,
|
|
article: @article ? ArticleDecorator.new(@article) : nil,
|
|
user_tags: user_tags,
|
|
)
|
|
|
|
if @display_ad && !session_current_user_id
|
|
set_surrogate_key_header @display_ad.record_key
|
|
end
|
|
end
|
|
|
|
render layout: false
|
|
end
|
|
|
|
private
|
|
|
|
def placement_area
|
|
params[:placement_area]
|
|
end
|
|
|
|
def user_tags
|
|
return unless feed_targeted_tag_placement?(placement_area)
|
|
|
|
current_user.cached_followed_tag_names
|
|
end
|
|
end
|