Class: Gitlab::Chat::Command
- Inherits:
-
Object
- Object
- Gitlab::Chat::Command
- Includes:
- Utils::StrongMemoize
- Defined in:
- lib/gitlab/chat/command.rb
Overview
Class for scheduling chat pipelines.
A Command takes care of creating a ‘Ci::Pipeline` with all the data necessary to execute a chat command. This includes data such as the chat data (e.g. the response URL) and any environment variables that should be exposed to the chat command.
Instance Attribute Summary collapse
-
#arguments ⇒ Object
readonly
Returns the value of attribute arguments.
-
#channel ⇒ Object
readonly
Returns the value of attribute channel.
-
#chat_name ⇒ Object
readonly
Returns the value of attribute chat_name.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#project ⇒ Object
readonly
Returns the value of attribute project.
-
#response_url ⇒ Object
readonly
Returns the value of attribute response_url.
Instance Method Summary collapse
- #branch ⇒ Object
-
#build_chat_data(pipeline) ⇒ Object
pipeline - The ‘Ci::Pipeline` to create the chat data for.
-
#build_environment_variables(pipeline) ⇒ Object
pipeline - The ‘Ci::Pipeline` to create the environment variables for.
- #commit ⇒ Object
- #create_pipeline ⇒ Object
-
#initialize(project:, chat_name:, name:, arguments:, channel:, response_url:) ⇒ Command
constructor
project - The Project to schedule the command for.
-
#try_create_pipeline ⇒ Object
Tries to create a new pipeline.
- #valid? ⇒ Boolean
Constructor Details
#initialize(project:, chat_name:, name:, arguments:, channel:, response_url:) ⇒ Command
project - The Project to schedule the command for. chat_name - The ChatName belonging to the user that scheduled the
command.
name - The name of the chat command to run. arguments - The arguments (as a String) to pass to the command. channel - The channel the message was sent from. response_url - The URL to send the response back to.
24 25 26 27 28 29 30 31 |
# File 'lib/gitlab/chat/command.rb', line 24 def initialize(project:, chat_name:, name:, arguments:, channel:, response_url:) @project = project @chat_name = chat_name @name = name @arguments = arguments @channel = channel @response_url = response_url end |
Instance Attribute Details
#arguments ⇒ Object (readonly)
Returns the value of attribute arguments.
14 15 16 |
# File 'lib/gitlab/chat/command.rb', line 14 def arguments @arguments end |
#channel ⇒ Object (readonly)
Returns the value of attribute channel.
14 15 16 |
# File 'lib/gitlab/chat/command.rb', line 14 def channel @channel end |
#chat_name ⇒ Object (readonly)
Returns the value of attribute chat_name.
14 15 16 |
# File 'lib/gitlab/chat/command.rb', line 14 def chat_name @chat_name end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
14 15 16 |
# File 'lib/gitlab/chat/command.rb', line 14 def name @name end |
#project ⇒ Object (readonly)
Returns the value of attribute project.
14 15 16 |
# File 'lib/gitlab/chat/command.rb', line 14 def project @project end |
#response_url ⇒ Object (readonly)
Returns the value of attribute response_url.
14 15 16 |
# File 'lib/gitlab/chat/command.rb', line 14 def response_url @response_url end |
Instance Method Details
#branch ⇒ Object
86 87 88 |
# File 'lib/gitlab/chat/command.rb', line 86 def branch strong_memoize(:branch) { project.default_branch } end |
#build_chat_data(pipeline) ⇒ Object
pipeline - The ‘Ci::Pipeline` to create the chat data for.
75 76 77 78 79 80 |
# File 'lib/gitlab/chat/command.rb', line 75 def build_chat_data(pipeline) pipeline.build_chat_data( chat_name_id: chat_name.id, response_url: response_url ) end |
#build_environment_variables(pipeline) ⇒ Object
pipeline - The ‘Ci::Pipeline` to create the environment variables for.
66 67 68 69 70 71 72 |
# File 'lib/gitlab/chat/command.rb', line 66 def build_environment_variables(pipeline) pipeline.variables.build( [{ key: 'CHAT_INPUT', value: arguments }, { key: 'CHAT_CHANNEL', value: channel }, { key: 'CHAT_USER_ID', value: chat_name.chat_id }] ) end |
#commit ⇒ Object
90 91 92 93 94 |
# File 'lib/gitlab/chat/command.rb', line 90 def commit strong_memoize(:commit) do project.commit(branch)&.id if branch end end |
#create_pipeline ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/gitlab/chat/command.rb', line 43 def create_pipeline service = ::Ci::CreatePipelineService.new( project, chat_name.user, ref: branch, sha: commit, chat_data: { chat_name_id: chat_name.id, command: name, arguments: arguments, response_url: response_url } ) response = service.execute(:chat) do |pipeline| build_environment_variables(pipeline) build_chat_data(pipeline) end response.payload end |
#try_create_pipeline ⇒ Object
Tries to create a new pipeline.
This method will return a pipeline that may be persisted, or ‘nil` if the pipeline could not be created.
37 38 39 40 41 |
# File 'lib/gitlab/chat/command.rb', line 37 def try_create_pipeline return unless valid? create_pipeline end |
#valid? ⇒ Boolean
82 83 84 |
# File 'lib/gitlab/chat/command.rb', line 82 def valid? branch && commit end |