# rubocop:disable Metrics/BlockLength namespace :navigation_links do def image_path(*paths) Rails.root.join("app/assets/images/#{paths.join('/')}").read.freeze end def twemoji_path(name) image_path("twemoji", name) end home_icon = twemoji_path("house.svg") reading_icon = twemoji_path("drawer.svg") contact_icon = twemoji_path("contact.svg") thumb_up_icon = twemoji_path("thumb-up.svg") smart_icon = twemoji_path("smart.svg") look_icon = twemoji_path("look.svg") listing_icon = twemoji_path("listing.svg") mic_icon = twemoji_path("mic.svg") camera_icon = twemoji_path("camera.svg") tag_icon = twemoji_path("tag.svg") bulb_icon = twemoji_path("bulb.svg") shopping_icon = twemoji_path("shopping.svg") rainbowdev = image_path("rainbowdev.svg") def perform_create_of_navigation_links? # Someone really wants this return true if ApplicationConfig["CREATE_NAVIGATION_LINKS"] # This logic echoes the InternalPolicy behavior which is used in the # Admin::AppliciationController. return false if User.with_any_role(*Authorizer::RoleBasedQueries::ANY_ADMIN_ROLES).any? true end desc "Create navigation links for new forem" task create: :environment do if perform_create_of_navigation_links? puts "Creating navigation links" # [@jeremyf] I went ahead and atomized these tasks so we _could_ call them individually if # desired. I did not add descriptions so those tasks will not show up in the task # list. Rake::Task["navigation_links:find_or_create:home"].invoke Rake::Task["navigation_links:find_or_create:readinglist"].invoke Rake::Task["navigation_links:find_or_create:contact"].invoke Rake::Task["navigation_links:find_or_create:code_of_conduct"].invoke Rake::Task["navigation_links:find_or_create:privacy"].invoke Rake::Task["navigation_links:find_or_create:terms"].invoke else # Adding just a bit of logging Rails.logger.info "Skipping creation of navigation links" end end namespace :find_or_create do task home: :environment do NavigationLink.create_or_update_by_identity( name: "Home", url: URL.url("/"), icon: home_icon, display_to: :all, position: 1, section: :default, ) end task readinglist: :environment do NavigationLink.create_or_update_by_identity( url: URL.url("readinglist"), name: "Reading List", icon: reading_icon, display_to: :logged_in, position: 2, section: :default, ) end task contact: :environment do NavigationLink.create_or_update_by_identity( name: "Contact", url: URL.url("contact"), icon: contact_icon, display_to: :all, position: 3, section: :default, ) end task code_of_conduct: :environment do NavigationLink.create_or_update_by_identity( name: "Code of Conduct", url: URL.url(Page::CODE_OF_CONDUCT_SLUG), icon: thumb_up_icon, display_to: :all, position: 1, section: :other, ) end task privacy: :environment do NavigationLink.create_or_update_by_identity( name: "Privacy Policy", url: URL.url(Page::PRIVACY_SLUG), icon: smart_icon, display_to: :all, position: 2, section: :other, ) end task terms: :environment do NavigationLink.create_or_update_by_identity( name: "Terms of Use", url: URL.url(Page::TERMS_SLUG), icon: look_icon, display_to: :all, position: 3, section: :other, ) end end desc "Update DEV's navigation_links" task update: :environment do protocol = ApplicationConfig["APP_PROTOCOL"].freeze domain = Rails.application&.initialized? ? Settings::General.app_domain : ApplicationConfig["APP_DOMAIN"] base_url = "#{protocol}#{domain}".freeze NavigationLink.create_or_update_by_identity( url: "/", name: "Home", icon: home_icon, display_to: :all, position: 1, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/readinglist", name: "Reading List", icon: reading_icon, display_to: :logged_in, position: 2, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/listings", name: "Listings", icon: listing_icon, display_to: :all, position: 3, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/pod", name: "Podcasts", icon: mic_icon, display_to: :all, position: 4, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/videos", name: "Videos", icon: camera_icon, display_to: :all, position: 5, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/tags", name: "Tags", icon: tag_icon, display_to: :all, position: 6, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/faq", name: "FAQ", icon: bulb_icon, display_to: :all, position: 7, section: :default, ) NavigationLink.create_or_update_by_identity( url: "https://shop.dev.to/", name: "DEV Shop", icon: shopping_icon, display_to: :all, position: 6, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/about", name: "About", icon: rainbowdev, display_to: :all, position: 8, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/contact", name: "Contact", icon: contact_icon, display_to: :all, position: 9, section: :default, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/code-of-conduct", name: "Code of Conduct", icon: thumb_up_icon, display_to: :all, position: 1, section: :other, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/privacy", name: "Privacy Policy", icon: smart_icon, display_to: :all, position: 2, section: :other, ) NavigationLink.create_or_update_by_identity( url: "#{base_url}/terms", name: "Terms of Use", icon: look_icon, display_to: :all, position: 3, section: :other, ) end end # rubocop:enable Metrics/BlockLength