slack_bot-events 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 672fb67f9f0c21233f2dd8b1033f2be26532f6a619922af541cdec7645db4005
4
+ data.tar.gz: 8b7a3ec2b87ae3c881a59638c9b3acfd4dcb03453a125288d4894a9aa681d94f
5
+ SHA512:
6
+ metadata.gz: bdc46b80e5696c237ea14f087d549059fc7cbcc207fe604858be99298a09fd5b8b19b2b9785be75151ac834f296ad4f3c5b85c8d19aacbbd3eef018c8edda25b
7
+ data.tar.gz: 232a0dd741b28bed0a63c721fc635b3dee1ec3434b31c886726285beaa5f006ebefecf0e0c6148a3d601dec2e41d8396eedeaabff6f24f29ee83743e306b7b6e
@@ -0,0 +1,29 @@
1
+ version: 2.1
2
+
3
+ orbs:
4
+ ruby: circleci/ruby@1.0
5
+ node: circleci/node@2
6
+ cst: cst/framework@1
7
+
8
+ workflows:
9
+ version: 2
10
+ yeet-le-jobs:
11
+ jobs:
12
+ - cst/enforce-gem-version-bump
13
+ - cst/rspec-ruby:
14
+ rspec-system-args: "SIMPLE_COV_RUN=true"
15
+ cc-report-collect-ruby: "3.2.3"
16
+ matrix:
17
+ parameters:
18
+ ruby-version: ["3.2.3" , "3.2"]
19
+ alias: required-matrix-tests
20
+ name: test-ruby<< matrix.ruby-version >>
21
+ - cst/publish-gem:
22
+ publish-git: true
23
+ publish-default-gem: true
24
+ requires:
25
+ - required-matrix-tests
26
+ filters:
27
+ branches:
28
+ only:
29
+ - main
@@ -0,0 +1 @@
1
+ * @matttaylor
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ .DS_Store
10
+ .bash_history
11
+ .pry_history
12
+ .byebug_history
13
+ .idea
14
+
15
+ # rspec failure tracking
16
+ .rspec_status
17
+
18
+ # generated gems
19
+ *.gem
20
+ .env
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.3
data/Dockerfile ADDED
@@ -0,0 +1,13 @@
1
+ FROM ruby:3.2.3
2
+
3
+ WORKDIR /gem
4
+ COPY Gemfile /gem/Gemfile
5
+
6
+ COPY slack_bot-events.gemspec /gem/slack_bot-events.gemspec
7
+ COPY lib/slack_bot/events/version.rb /gem/lib/slack_bot/events/version.rb
8
+
9
+ RUN gem update --system
10
+ RUN gem install bundler
11
+
12
+ COPY . /gem
13
+
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies incl. version constraints in the gemspec
6
+ gemspec
7
+
8
+
9
+ gem 'rspec', '~> 3.0'
10
+ gem 'rspec_junit_formatter'
11
+ gem 'simplecov', require: false, group: :test
data/Gemfile.lock ADDED
@@ -0,0 +1,75 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ slack_bot-events (0.0.1)
5
+ class_composer (~> 1.0)
6
+ faraday
7
+ faye-websocket
8
+ json_schematize
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ byebug (11.1.3)
14
+ class_composer (1.0.2)
15
+ coderay (1.1.3)
16
+ diff-lcs (1.5.1)
17
+ docile (1.4.0)
18
+ eventmachine (1.2.7)
19
+ faraday (2.9.1)
20
+ faraday-net_http (>= 2.0, < 3.2)
21
+ faraday-net_http (3.1.0)
22
+ net-http
23
+ faye-websocket (0.11.3)
24
+ eventmachine (>= 0.12.0)
25
+ websocket-driver (>= 0.5.1)
26
+ json (2.7.2)
27
+ json_schematize (0.9.0)
28
+ class_composer (~> 1.0)
29
+ method_source (1.1.0)
30
+ net-http (0.4.1)
31
+ uri
32
+ pry (0.14.2)
33
+ coderay (~> 1.1)
34
+ method_source (~> 1.0)
35
+ pry-byebug (3.10.1)
36
+ byebug (~> 11.0)
37
+ pry (>= 0.13, < 0.15)
38
+ rspec (3.13.0)
39
+ rspec-core (~> 3.13.0)
40
+ rspec-expectations (~> 3.13.0)
41
+ rspec-mocks (~> 3.13.0)
42
+ rspec-core (3.13.0)
43
+ rspec-support (~> 3.13.0)
44
+ rspec-expectations (3.13.1)
45
+ diff-lcs (>= 1.2.0, < 2.0)
46
+ rspec-support (~> 3.13.0)
47
+ rspec-mocks (3.13.1)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.13.0)
50
+ rspec-support (3.13.1)
51
+ rspec_junit_formatter (0.6.0)
52
+ rspec-core (>= 2, < 4, != 2.12.0)
53
+ simplecov (0.17.1)
54
+ docile (~> 1.1)
55
+ json (>= 1.8, < 3)
56
+ simplecov-html (~> 0.10.0)
57
+ simplecov-html (0.10.2)
58
+ uri (0.13.0)
59
+ websocket-driver (0.7.6)
60
+ websocket-extensions (>= 0.1.0)
61
+ websocket-extensions (0.1.5)
62
+
63
+ PLATFORMS
64
+ aarch64-linux
65
+ ruby
66
+
67
+ DEPENDENCIES
68
+ pry-byebug
69
+ rspec (~> 3.0)
70
+ rspec_junit_formatter
71
+ simplecov
72
+ slack_bot-events!
73
+
74
+ BUNDLED WITH
75
+ 2.5.13
data/Makefile ADDED
@@ -0,0 +1,18 @@
1
+ .PHONY: help bash build bundle rspec rubocop rubocop-todo
2
+
3
+ GEM=slack_bot-events
4
+ DC_FILE?=docker-compose.yml
5
+ FILES?=.
6
+
7
+ help: #: Show help topics
8
+ @grep "#:" Makefile | grep -v "@grep" | sed "s/.*:\([A-Za-z_ -]*\):.*#\(.*\)/$$(tput setaf 3)\1$$(tput sgr0)\2/g" | sort
9
+
10
+ bash: #: Get a bash prompt on your service container
11
+ @touch .bash_history
12
+ docker-compose -f $(DC_FILE) run $(GEM) bash
13
+
14
+ build: #: Build the containers that we'll need
15
+ docker-compose -f $(DC_FILE) build --pull
16
+
17
+ rspec: #: Run RSPEC, set TEST_FILE to run a specific file
18
+ docker-compose -f $(DC_FILE) run --rm -e RAILS_ENV=test $(GEM) bundle exec rspec --fail-fast $(FILES)
data/README.md ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'slack_bot/events'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier.
8
+
9
+ require 'pry'
10
+
11
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ lefthook install
9
+
10
+ # Do any other automated setup that you need to do here
data/bin/start ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'slack_bot/events'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier.
8
+
9
+ SlackBot::Events::Client.new.start!
@@ -0,0 +1,14 @@
1
+ services:
2
+ slack_bot-events:
3
+ command: tail -f /dev/null
4
+ env_file: .env
5
+ build:
6
+ context: .
7
+ dockerfile: ./Dockerfile
8
+ volumes:
9
+ - .:/gem
10
+ - ..:/local
11
+ - bundle-cache:/usr/local/bundle:delegated
12
+
13
+ volumes:
14
+ bundle-cache:
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "eventmachine"
4
+ require "faraday"
5
+ require "faye/websocket"
6
+ require "pry"
7
+
8
+ module SlackBot
9
+ module Events
10
+ class Client
11
+ BASE_API = "https://slack.com/api"
12
+
13
+ def start!
14
+ EM.run do
15
+ websocket.on :open do |event|
16
+ p [:open]
17
+ end
18
+
19
+ websocket.on :message do |event|
20
+ parsed_data = JSON.parse(event.data)
21
+ if parsed_data["type"] == "events_api"
22
+ puts parsed_data.to_json
23
+ item = SlackBot::Events::Schemas::SocketPayload.new(parsed_data)
24
+ s = {
25
+ type: item.payload.event.type,
26
+ tldr: item.payload.event.tldr,
27
+ }
28
+ puts s
29
+ websocket.send("#{{ envelope_id: item.envelope_id }.to_json}")
30
+ else
31
+ puts event.data
32
+ end
33
+ end
34
+
35
+ websocket.on :close do |event|
36
+ p [:close, event.code, event.reason]
37
+ @websocket = nil
38
+ end
39
+ end
40
+ end
41
+
42
+ def websocket
43
+ @websocket ||= Faye::WebSocket::Client.new(socket_endpoint)
44
+ end
45
+
46
+ # TODO: Error handling here
47
+ def socket_endpoint
48
+ result = faraday_client.post("apps.connections.open")
49
+ json_body = JSON.parse(result.body)
50
+ json_body["url"]
51
+ end
52
+
53
+ def faraday_client
54
+ @faraday_client ||= Faraday.new(url: "https://slack.com/api", headers: faraday_headers)
55
+ end
56
+
57
+ def faraday_headers
58
+ {
59
+ 'Authorization' => "Bearer #{SlackBot::Events.config.client_socket_token}"
60
+ }
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "class_composer"
4
+
5
+ module SlackBot
6
+ module Events
7
+ class Configuration
8
+ include ClassComposer::Generator
9
+ add_composer :client_id, allowed: String, default: ENV["SLACK_CLIENT_ID"]
10
+ add_composer :client_secret, allowed: String, default: ENV["SLACK_CLIENT_SECRET"]
11
+ add_composer :client_signing_secret, allowed: String, default: ENV["SLACK_SIGNING_SECRET"]
12
+ add_composer :client_socket_token, allowed: String, default: ENV["SLACK_SOCKET_TOKEN"]
13
+ add_composer :client_verification_token, allowed: String, default: ENV["SLACK_VERIFICATION_TOKEN"]
14
+
15
+ def register_listener(name:, handler:)
16
+ @listeners ||= {}
17
+
18
+ if @listeners.has_key(name.to_sym)
19
+ end
20
+
21
+ @listeners[name] = handler
22
+
23
+ true
24
+ end
25
+
26
+ def remove_listener(name:)
27
+ @listeners ||= {}
28
+
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ module SlackBot
7
+ module Events
8
+ module Schemas
9
+ class Authorization < JsonSchematize::Generator
10
+ schema_default option: :dig_type, value: :string
11
+
12
+ add_field name: :enterprise_id, type: String, required: false
13
+ add_field name: :team_id, type: String
14
+ add_field name: :user_id, type: String
15
+ add_field name: :is_bot, type: JsonSchematize::Boolean
16
+ add_field name: :is_enterprise_install, type: JsonSchematize::Boolean
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ require "slack_bot/events/schemas/authorization"
7
+ require "slack_bot/events/schemas/type/base"
8
+ require "slack_bot/events/schemas/type/reaction_modified"
9
+ require "slack_bot/events/schemas/type/message"
10
+
11
+ module SlackBot
12
+ module Events
13
+ module Schemas
14
+ class DataPayload < JsonSchematize::Generator
15
+ schema_default option: :dig_type, value: :string
16
+
17
+ ALLOWED_EVENT_TYPES = [
18
+ SlackBot::Events::Schemas::Type::ReactionModified,
19
+ SlackBot::Events::Schemas::Type::Message,
20
+ SlackBot::Events::Schemas::Type::Base,
21
+ ]
22
+
23
+ add_field name: :token, type: String
24
+ add_field name: :team_id, type: String
25
+ add_field name: :context_team_id, type: String, required: false
26
+ add_field name: :api_app_id, type: String, required: false
27
+
28
+ add_field name: :event, type: ALLOWED_EVENT_TYPES.first, types: ALLOWED_EVENT_TYPES, converter: ->(data) { DataPayload.event_type(data) }
29
+
30
+ add_field name: :type, type: String, required: false
31
+ add_field name: :event_id, type: String, required: false
32
+ add_field name: :event_time, type: Integer
33
+
34
+ add_field name: :authorizations, type: SlackBot::Events::Schemas::Authorization, array_of_types: true
35
+
36
+ add_field name: :is_ext_shared_channel, type: JsonSchematize::Boolean
37
+ add_field name: :event_context, type: String
38
+
39
+ def self.event_type(payload)
40
+ case payload["type"]
41
+ when "reaction_removed", "reaction_added"
42
+ SlackBot::Events::Schemas::Type::ReactionModified.new(payload)
43
+ when "message"
44
+ case payload["subtype"]
45
+ when nil
46
+ SlackBot::Events::Schemas::Type::Message.new(payload)
47
+ when "message_changed", "message_deleted"
48
+ SlackBot::Events::Schemas::Type::Base.new(payload.merge("tldr" => "subtype: #{payload["subtype"]}"))
49
+ else
50
+ # messages that were changed can be considered, but not at this time
51
+ SlackBot::Events::Schemas::Type::Base.new(payload)
52
+ end
53
+ else
54
+ # When the event type does not exist yet; dont fret, give it the bare bones base objet that delegates
55
+ SlackBot::Events::Schemas::Type::Base.new(payload)
56
+ end
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ require "slack_bot/events/schemas/data_payload"
7
+
8
+ module SlackBot
9
+ module Events
10
+ module Schemas
11
+ class SocketPayload < JsonSchematize::Generator
12
+ schema_default option: :dig_type, value: :string
13
+
14
+ add_field name: :envelope_id, type: String
15
+
16
+ add_field name: :payload, type: SlackBot::Events::Schemas::DataPayload
17
+
18
+ add_field name: :type, type: String
19
+ add_field name: :accepts_response_payload, type: JsonSchematize::Boolean
20
+ add_field name: :retry_attempt, type: Integer
21
+ add_field name: :retry_reason, type: String
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ module SlackBot
7
+ module Events
8
+ module Schemas
9
+ module Type
10
+ class Base < JsonSchematize::Generator
11
+ schema_default option: :dig_type, value: :string
12
+
13
+ add_field name: :tldr, type: String, required: false
14
+
15
+ def tldr
16
+ if @tldr
17
+ "type: #{type}; #{@tldr}"
18
+ else
19
+ "type: #{type}; unknown;"
20
+ end
21
+ end
22
+
23
+ def method_missing(m, *args, &block)
24
+ if __raw_params.has_key?(m.to_s)
25
+ return __raw_params[m.to_s]
26
+ end
27
+
28
+ super
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ require "slack_bot/events/schemas/type/element"
7
+
8
+ module SlackBot
9
+ module Events
10
+ module Schemas
11
+ module Type
12
+ class Block < JsonSchematize::Generator
13
+ schema_default option: :dig_type, value: :string
14
+
15
+ add_field name: :type, type: String
16
+ add_field name: :block_id, type: String
17
+ add_field name: :elements, type: SlackBot::Events::Schemas::Type::Element, array_of_types: true
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ require "slack_bot/events/schemas/type/item"
7
+
8
+ module SlackBot
9
+ module Events
10
+ module Schemas
11
+ module Type
12
+ class Element < JsonSchematize::Generator
13
+ schema_default option: :dig_type, value: :string
14
+
15
+ add_field name: :type, type: String
16
+ add_field name: :elements, type: SlackBot::Events::Schemas::Type::Element, array_of_types: true, required: false
17
+ add_field name: :text, type: String, required: false
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ module SlackBot
7
+ module Events
8
+ module Schemas
9
+ module Type
10
+ class Item < JsonSchematize::Generator
11
+ schema_default option: :dig_type, value: :string
12
+
13
+ add_field name: :type, type: String
14
+ add_field name: :channel, type: String
15
+ add_field name: :ts, type: String
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ require "slack_bot/events/schemas/type/block"
7
+
8
+ module SlackBot
9
+ module Events
10
+ module Schemas
11
+ module Type
12
+ class Message < JsonSchematize::Generator
13
+ schema_default option: :dig_type, value: :string
14
+
15
+ add_field name: :type, type: String
16
+ add_field name: :user, type: String
17
+ add_field name: :ts, type: String
18
+ add_field name: :client_msg_id, type: String
19
+ add_field name: :text, type: String
20
+ add_field name: :team, type: String
21
+
22
+ add_field name: :blocks, type: SlackBot::Events::Schemas::Type::Block, array_of_types: true
23
+
24
+ add_field name: :channel, type: String
25
+ add_field name: :event_ts, type: String
26
+ add_field name: :channel_type, type: String
27
+
28
+ def tldr
29
+ "type: #{type}; channel:#{channel}; raw_text:#{text}"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json_schematize"
4
+ require "json_schematize/generator"
5
+
6
+ require "slack_bot/events/schemas/type/item"
7
+
8
+ module SlackBot
9
+ module Events
10
+ module Schemas
11
+ module Type
12
+ class ReactionModified < JsonSchematize::Generator
13
+ schema_default option: :dig_type, value: :string
14
+
15
+ add_field name: :type, type: String
16
+ add_field name: :user, type: String
17
+ add_field name: :reaction, type: String
18
+ add_field name: :item, type: SlackBot::Events::Schemas::Type::Item
19
+ add_field name: :item_user, type: String
20
+ add_field name: :event_ts, type: String
21
+
22
+ def channel
23
+ item.channel
24
+ end
25
+
26
+ def tldr
27
+ "type: #{type}; channel:#{channel}; reaction:#{reaction}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackBot
4
+ module Events
5
+ VERSION = "0.0.2"
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "slack_bot/events/configuration"
4
+ require "slack_bot/events/client"
5
+ require "slack_bot/events/schemas/socket_payload"
6
+
7
+ module SlackBot
8
+ module Events
9
+ class Error < StandardError; end
10
+
11
+ def self.configure
12
+ yield configuration if block_given?
13
+ end
14
+
15
+ def self.configuration
16
+ @configuration ||= SlackBot::Events::Configuration.new
17
+ end
18
+
19
+ def self.config
20
+ configuration
21
+ end
22
+
23
+ def self.configuration=(object)
24
+ if SlackBot::Events::Configuration === obj
25
+ @configuration = object
26
+ return @configuration
27
+ end
28
+
29
+ raise Error, "Expected configuration to be a SlackBot::Events::Configuration"
30
+ end
31
+
32
+ def self.register_listener(name:, handler:)
33
+ config.register_listener(name: name, handler: handler)
34
+ end
35
+
36
+ def self.remove_listener(name:)
37
+ config.remove_listener(name: name)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+
5
+ require "slack_bot/events/version"
6
+ circle_ci_build = ENV['CIRCLECI'] == 'true'
7
+ pre_release_tag = ENV["CIRCLE_TAG"]&.match?(/^pre-.*/)
8
+ gets_pre_release_version = circle_ci_build && pre_release_tag
9
+
10
+ patch_level = gets_pre_release_version ? ".99.pre.#{ENV.fetch('CIRCLE_BUILD_NUM', '')}" : ""
11
+
12
+ Gem::Specification.new do |spec|
13
+ spec.name = "slack_bot-events"
14
+ spec.version = SlackBot::Events::VERSION + patch_level
15
+ spec.authors = ["Matt Taylor"]
16
+ spec.email = ["mattius.taylor@gmail.com"]
17
+
18
+ spec.summary = "Slack Events API is here! Receive events without making a public endpoint. This Gem taps into the Events Websocket Architecture"
19
+ spec.description = "Describe the gem here"
20
+ spec.homepage = "https://github.com/matt-taylor/slack_bot-events"
21
+
22
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.2")
23
+
24
+ spec.metadata = {
25
+ "github_repo" => spec.homepage,
26
+ "homepage_uri" => spec.homepage,
27
+ "source_code_uri" => spec.homepage,
28
+ }
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
33
+ %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ spec.require_paths = ["lib"]
38
+
39
+ spec.add_dependency "faraday"
40
+ spec.add_dependency "json_schematize"
41
+ spec.add_dependency "class_composer", "~> 1.0"
42
+ spec.add_dependency "faye-websocket"
43
+
44
+ spec.add_development_dependency "pry-byebug"
45
+ spec.add_development_dependency "rspec", "~> 3.0"
46
+ spec.add_development_dependency "simplecov"
47
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: slack_bot-events
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Matt Taylor
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json_schematize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: class_composer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faye-websocket
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Describe the gem here
112
+ email:
113
+ - mattius.taylor@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".circleci/config.yml"
119
+ - ".github/CODEOWNERS"
120
+ - ".gitignore"
121
+ - ".rspec"
122
+ - ".ruby-version"
123
+ - Dockerfile
124
+ - Gemfile
125
+ - Gemfile.lock
126
+ - Makefile
127
+ - README.md
128
+ - Rakefile
129
+ - bin/console
130
+ - bin/setup
131
+ - bin/start
132
+ - docker-compose.yml
133
+ - lib/slack_bot/events.rb
134
+ - lib/slack_bot/events/client.rb
135
+ - lib/slack_bot/events/configuration.rb
136
+ - lib/slack_bot/events/schemas/authorization.rb
137
+ - lib/slack_bot/events/schemas/data_payload.rb
138
+ - lib/slack_bot/events/schemas/socket_payload.rb
139
+ - lib/slack_bot/events/schemas/type/base.rb
140
+ - lib/slack_bot/events/schemas/type/block.rb
141
+ - lib/slack_bot/events/schemas/type/element.rb
142
+ - lib/slack_bot/events/schemas/type/item.rb
143
+ - lib/slack_bot/events/schemas/type/message.rb
144
+ - lib/slack_bot/events/schemas/type/reaction_modified.rb
145
+ - lib/slack_bot/events/version.rb
146
+ - slack_bot-events.gemspec
147
+ homepage: https://github.com/matt-taylor/slack_bot-events
148
+ licenses: []
149
+ metadata:
150
+ github_repo: https://github.com/matt-taylor/slack_bot-events
151
+ homepage_uri: https://github.com/matt-taylor/slack_bot-events
152
+ source_code_uri: https://github.com/matt-taylor/slack_bot-events
153
+ post_install_message:
154
+ rdoc_options: []
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '3.2'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubygems_version: 3.5.13
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Slack Events API is here! Receive events without making a public endpoint.
172
+ This Gem taps into the Events Websocket Architecture
173
+ test_files: []