-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add company survey example #158
Changes from 9 commits
6799e21
3210d88
36a9f4e
1c8dcaf
44237d2
d6cb28f
732b02d
733ff89
c1f6931
7a004ca
1e55c24
4d7a39a
f32ca59
cc910da
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
# Examples | ||
|
||
The `ballerinax/slack` connector provides practical examples illustrating usage in various scenarios, covering use cases like cache management, session management, and rate limiting. | ||
|
||
## Prerequisites | ||
|
||
1. Generate Slack token to authenticate the connector as described in the [Setup guide](https://central.ballerina.io/ballerinax/slack/latest#prerequisites). | ||
|
||
2. For each example, create a `Config.toml` file the related configuration. Here's an example of how your `Config.toml` file should look: | ||
|
||
```toml | ||
token = "<token>" | ||
``` | ||
|
||
## Running an Example | ||
|
||
Execute the following commands to build an example from the source: | ||
|
||
- To build an example: | ||
|
||
```bash | ||
bal build | ||
``` | ||
|
||
- To run an example: | ||
|
||
```bash | ||
bal run | ||
``` | ||
|
||
## Building the Examples with the Local Module | ||
|
||
**Warning**: Due to the absence of support for reading local repositories for single Ballerina files, the Bala of the module is manually written to the central repository as a workaround. Consequently, the bash script may modify your local Ballerina repositories. | ||
|
||
Execute the following commands to build all the examples against the changes you have made to the module locally: | ||
|
||
- To build all the examples: | ||
|
||
```bash | ||
./build.sh build | ||
``` | ||
|
||
- To run all the examples: | ||
|
||
```bash | ||
./build.sh run | ||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
/* | ||
* Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). | ||
* | ||
* WSO2 LLC. licenses this file to you under the Apache License, | ||
* Version 2.0 (the "License"); you may not use this file except | ||
* in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
import org.apache.tools.ant.taskdefs.condition.Os | ||
|
||
apply plugin: 'java' | ||
|
||
def graalvmFlag = "" | ||
|
||
task testExamples { | ||
if (project.hasProperty("balGraalVMTest")) { | ||
graalvmFlag = "--graalvm" | ||
} | ||
doLast { | ||
try { | ||
exec { | ||
workingDir project.projectDir | ||
println("Working dir: ${workingDir}") | ||
if (Os.isFamily(Os.FAMILY_WINDOWS)) { | ||
commandLine 'cmd', "/c", "chmod +x ./build.sh && ./build.sh run && exit %%ERRORLEVEL%%" | ||
} else { | ||
commandLine 'sh', "-c", "chmod +x ./build.sh && ./build.sh run" | ||
} | ||
} | ||
} catch (Exception e) { | ||
println("Example Build failed: " + e.message) | ||
throw e | ||
} | ||
} | ||
} | ||
|
||
task buildExamples { | ||
gradle.taskGraph.whenReady { graph -> | ||
if (graph.hasTask(":slack-examples:test")) { | ||
buildExamples.enabled = false | ||
} else { | ||
testExamples.enabled = false | ||
} | ||
} | ||
doLast { | ||
try { | ||
exec { | ||
workingDir project.projectDir | ||
println("Working dir: ${workingDir}") | ||
if (Os.isFamily(Os.FAMILY_WINDOWS)) { | ||
commandLine 'cmd', "/c", "chmod +x ./build.sh && ./build.sh build && exit %%ERRORLEVEL%%" | ||
} else { | ||
commandLine 'sh', "-c", "chmod +x ./build.sh && ./build.sh build" | ||
} | ||
} | ||
} catch (Exception e) { | ||
println("Example Build failed: " + e.message) | ||
throw e | ||
} | ||
} | ||
} | ||
|
||
buildExamples.dependsOn ":slack-ballerina:build" | ||
testExamples.dependsOn ":slack-ballerina:build" | ||
|
||
// TODO: Enable the examples build once https://github.com/ballerina-platform/ballerina-library/issues/6135 is fixed | ||
// test.dependsOn testExamples | ||
// build.dependsOn buildExamples |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
#!/bin/bash | ||
|
||
BAL_EXAMPLES_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
BAL_CENTRAL_DIR="$HOME/.ballerina/repositories/central.ballerina.io" | ||
BAL_HOME_DIR="$BAL_EXAMPLES_DIR/../ballerina" | ||
|
||
set -e | ||
|
||
case "$1" in | ||
build) | ||
BAL_CMD="build" | ||
;; | ||
run) | ||
BAL_CMD="run" | ||
;; | ||
*) | ||
echo "Invalid command provided: '$1'. Please provide 'build' or 'run' as the command." | ||
exit 1 | ||
;; | ||
esac | ||
|
||
# Read Ballerina package name | ||
BAL_PACKAGE_NAME=$(awk -F'"' '/^name/ {print $2}' "$BAL_HOME_DIR/Ballerina.toml") | ||
|
||
# Push the package to the local repository | ||
cd "$BAL_HOME_DIR" && | ||
bal pack && | ||
bal push --repository=local | ||
|
||
# Remove the cache directories in the repositories | ||
cacheDirs=$(ls -d $BAL_CENTRAL_DIR/cache-* 2>/dev/null) || true | ||
for dir in "${cacheDirs[@]}"; do | ||
[ -d "$dir" ] && rm -r "$dir" | ||
done | ||
echo "Successfully cleaned the cache directories" | ||
|
||
# Create the package directory in the central repository, this will not be present if no modules are pulled | ||
mkdir -p "$BAL_CENTRAL_DIR/bala/ballerinax/$BAL_PACKAGE_NAME" | ||
|
||
# Update the central repository | ||
BAL_DESTINATION_DIR="$HOME/.ballerina/repositories/central.ballerina.io/bala/ballerinax/$BAL_PACKAGE_NAME" | ||
BAL_SOURCE_DIR="$HOME/.ballerina/repositories/local/bala/ballerinax/$BAL_PACKAGE_NAME" | ||
[ -d "$BAL_DESTINATION_DIR" ] && rm -r "$BAL_DESTINATION_DIR" | ||
[ -d "$BAL_SOURCE_DIR" ] && cp -r "$BAL_SOURCE_DIR" "$BAL_DESTINATION_DIR" | ||
echo "Successfully updated the local central repositories" | ||
|
||
echo "$BAL_DESTINATION_DIR" | ||
echo "$BAL_SOURCE_DIR" | ||
|
||
# Loop through examples in the examples directory | ||
cd "$BAL_EXAMPLES_DIR" | ||
for dir in $(find "$BAL_EXAMPLES_DIR" -type d -maxdepth 1 -mindepth 1); do | ||
# Skip the build directory | ||
if [[ "$dir" == *build ]]; then | ||
continue | ||
fi | ||
(cd "$dir" && bal "$BAL_CMD" --offline && cd ..); | ||
done | ||
|
||
# Remove generated JAR files | ||
find "$BAL_HOME_DIR" -maxdepth 1 -type f -name "*.jar" | while read -r JAR_FILE; do | ||
rm "$JAR_FILE" | ||
done |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
token = "<token>" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Slack Company Survey | ||
|
||
This use case demonstrates how the Slack API can be utilized to perform a company-wide survey by creating a dedicated channel to receive and track feedback replies. | ||
|
||
## Prerequisites | ||
|
||
### 1. Setup Slack account | ||
|
||
Generate Slack token to authenticate the connector as described in the [Setup guide](https://central.ballerina.io/ballerinax/slack/latest#prerequisites). | ||
|
||
### 2. Configuration | ||
|
||
Update your Slack account related configurations in the `Config.toml` file in the example root directory: | ||
|
||
```toml | ||
token = "<token>" | ||
``` | ||
|
||
## Run the example | ||
|
||
Execute the following command to run the example: | ||
|
||
```ballerina | ||
bal run | ||
``` |
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -0,0 +1,5 @@ | ||||
[package] | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rename is file to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Made the changes. Thanks There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||
org = "wso2" | ||||
name = "company_survey" | ||||
version = "0.1.0" | ||||
distribution = "2201.9.0" | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. missing newline |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,24 @@ | ||||||
import ballerina/io; //importing the io module | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. missing license header |
||||||
import ballerinax/slack; //importing the slack connector module | ||||||
|
||||||
configurable string value = ?; //initializing of the configurable token value variable | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
final slack:Client slack = check new ({ //the initialization of the slack client at module variable | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No need to comment on self-explanatory code |
||||||
auth: { | ||||||
token: value | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
} | ||||||
}); | ||||||
|
||||||
public function companySurvey() returns error? { | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
json conversationsResponse = check slack->/conversations\.create.post({name: "survey-coordination"}); | ||||||
io:println(conversationsResponse); //creation of a channel to coordinate surveys | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. no need to print these intermediate reponses |
||||||
|
||||||
json messageResponse = check slack->/chat\.postMessage.post({channel: "survey-coordination", text: "Reply to this survey message to give input on the company"}); | ||||||
io:println(messageResponse); //posting a message to the newly-created conversation | ||||||
|
||||||
string timestamp_value = check messageResponse.message.ts; //the message response is used to extract the timestamp of the posted message | ||||||
|
||||||
json replyResponse = check slack->/conversations\.replies({channel: "survey-coordination", ts: timestamp_value}); | ||||||
io:println(replyResponse); //the timestamp is used to extract the replies to the posted message | ||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need to keep the
Config.toml
file