* 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
28 lines
874 B
Ruby
28 lines
874 B
Ruby
class DisplayAdsController < ApplicationController
|
|
before_action :set_cache_control_headers, only: %i[show], unless: -> { current_user }
|
|
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 params[:placement_area]
|
|
if params[:username].present? && params[:slug].present?
|
|
@article = Article.find_by(slug: params[:slug])
|
|
end
|
|
|
|
@display_ad = DisplayAd.for_display(
|
|
area: params[:placement_area],
|
|
user_signed_in: user_signed_in?,
|
|
user_id: current_user&.id,
|
|
article: @article ? ArticleDecorator.new(@article) : nil,
|
|
)
|
|
|
|
if @display_ad && !session_current_user_id
|
|
set_surrogate_key_header @display_ad.record_key
|
|
end
|
|
end
|
|
|
|
render layout: false
|
|
end
|
|
end
|