class ReviseElixirRadarEntry def call(entry) result = Validation() do check { check_url_points_to_an_existing_page(entry[:url]) } check { check_domain_matches_url_host(entry[:domain], entry[:url]) } check { check_entry_title_matches_page_title(entry[:url], entry[:title]) } check { check_utm_campaign_is_valid(entry[:url]) } end review_result = { title: entry[:title] } case result when Success review_result[:status] = 'valid' when Failure review_result[:status] = 'invalid' review_result[:errors] = result end review_result end private def check_url_points_to_an_existing_page(url) if CheckUrlPointsToAnExistingPage.new.call(url) Success(url) else Failure('page_not_found') end end def check_domain_matches_url_host(domain, url) # case CheckDomainMatchesUrlHost.new.call(domain, url) # when true then Success(url) # when false then Failure('domain_does_not_match') # end if CheckDomainMatchesUrlHost.new.call(domain, url) Success(url) else Failure('domain_does_not_match') end end def check_entry_title_matches_page_title(url, entry_title) if CheckEntryTitleMatchesPageTitle.new.call(url, entry_title) Success(url) else Failure('page_title_does_not_match') end end def check_utm_campaign_is_valid(url) if CheckUtmCampaignIsValid.new.call(url) Success(url) else Failure('wrong_utm_campaign') end end end