lib/xcodeproj/scheme/execution_action.rb
module Xcodeproj class XCScheme # This class wraps the ExecutionAction node of a .xcscheme XML file # class ExecutionAction < XMLElementWrapper # @param [REXML::Element] node # The 'ExecutionAction' XML node that this object will wrap. # If nil, will create an empty one # # @param [Symbol] action_type # One of `EXECUTION_ACTION_TYPE.keys` # def initialize(node = nil, action_type = nil) create_xml_element_with_fallback(node, 'ExecutionAction') do type = action_type || node.action_type raise "[Xcodeproj] Invalid ActionType `#{type}`" unless Constants::EXECUTION_ACTION_TYPE.keys.include?(type) @xml_element.attributes['ActionType'] = Constants::EXECUTION_ACTION_TYPE[type] end end # @return [String] # The ActionType of this ExecutionAction. One of two values: # # Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction, # Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.SendEmailAction # def action_type @xml_element.attributes['ActionType'] end # @return [ShellScriptActionContent] # If action_type is 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction' # returns the contents of the shell script to run pre/post action. # # @return [SendEmailActionContent] # If action_type is 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.SendEmailAction' # returns the contents of the email to send pre/post action. # def action_content case action_type when Constants::EXECUTION_ACTION_TYPE[:shell_script] ShellScriptActionContent.new(@xml_element.elements['ActionContent']) when Constants::EXECUTION_ACTION_TYPE[:send_email] SendEmailActionContent.new(@xml_element.elements['ActionContent']) else raise "[Xcodeproj] Invalid ActionType `#{action_type}`" end end # @param [ShellScriptActionContent, SendEmailActionContent] value # Set either the contents of the shell script to run pre/post action # or the contents of the email to send pre/post action. # def action_content=(value) raise "[Xcodeproj] Invalid ActionContent `#{value.class}` for " \ "ActionType `#{action_type}`" unless valid_action_content?(value) @xml_element.delete_element('ActionContent') @xml_element.add_element(value.xml_element) end #-------------------------------------------------------------------------# private # @!group Private helpers # @return [Bool] # True if value (ActionContent) is valid for current action_type # # @param [ShellScriptActionContent, SendEmailActionContent] value # Checks if value matches the expected action_type if present. # def valid_action_content?(value) case action_type when Constants::EXECUTION_ACTION_TYPE[:shell_script] value.is_a?(ShellScriptActionContent) when Constants::EXECUTION_ACTION_TYPE[:send_email] value.is_a?(SendEmailActionContent) else false end end end end end