diff options
Diffstat (limited to 'app/services/projects/record_target_platforms_service.rb')
-rw-r--r-- | app/services/projects/record_target_platforms_service.rb | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/app/services/projects/record_target_platforms_service.rb b/app/services/projects/record_target_platforms_service.rb index 224e16f53b3..664e72e9785 100644 --- a/app/services/projects/record_target_platforms_service.rb +++ b/app/services/projects/record_target_platforms_service.rb @@ -4,26 +4,50 @@ module Projects class RecordTargetPlatformsService < BaseService include Gitlab::Utils::StrongMemoize + def initialize(project, detector_service) + @project = project + @detector_service = detector_service + end + def execute record_target_platforms end private + attr_reader :project, :detector_service + def target_platforms strong_memoize(:target_platforms) do - AppleTargetPlatformDetectorService.new(project).execute + Array(detector_service.new(project).execute) end end def record_target_platforms return unless target_platforms.present? - setting = ::ProjectSetting.find_or_initialize_by(project: project) # rubocop:disable CodeReuse/ActiveRecord - setting.target_platforms = target_platforms - setting.save + project_setting.target_platforms = target_platforms + project_setting.save + + send_build_ios_app_guide_email + + project_setting.target_platforms + end + + def project_setting + @project_setting ||= ::ProjectSetting.find_or_initialize_by(project: project) # rubocop:disable CodeReuse/ActiveRecord + end + + def experiment_candidate? + experiment(:build_ios_app_guide_email, project: project).run + end + + def send_build_ios_app_guide_email + return unless target_platforms.include? :ios + return unless experiment_candidate? - setting.target_platforms + campaign = Users::InProductMarketingEmail::BUILD_IOS_APP_GUIDE + Projects::InProductMarketingCampaignEmailsService.new(project, campaign).execute end end end |