konsierge-notifier 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3679299ae685f421a56aeb7158c38c02d54d2202b42912cb16389ec0c49c6453
4
+ data.tar.gz: 1f617cb829dc394371c9b123765c767171bc335b43345baadc43a30ad0d9ccdf
5
+ SHA512:
6
+ metadata.gz: 9ad9637bf1d6e037cbbfd1dd94ff5c1b3876a47c8028a6dfd75e453eb854e0925101fc9610477510e12e07e3995a1be6f75218ef4cf4a2d43c410da8afe51a31
7
+ data.tar.gz: 5f7db0f81d015207a1cee5d48828f7ea1745e3702d65a4eeec980163157d840bd8853ba40990ae489c40bfcaad80f649e2957138888faa6bdcd88199ca3033d5
data/.env.sample ADDED
@@ -0,0 +1,7 @@
1
+ TELEGRAM_BOT_ENABLED=""
2
+ TELEGRAM_BOT_TOKEN=""
3
+ TELEGRAM_BOT_USERNAME=""
4
+ TELEGRAM_CHANNEL_ID=""
5
+
6
+ KONSIERGE_SMTP_MAILER_HOST=""
7
+ KONSIERGE_SMTP_MAILER_AUTH_KEY=""
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,64 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rspec
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7.4
7
+ SuggestExtensions: false
8
+ NewCops: enable
9
+
10
+ Gemspec/DevelopmentDependencies:
11
+ EnforcedStyle: gemspec
12
+
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Layout/SpaceInsideHashLiteralBraces:
17
+ EnforcedStyle: no_space
18
+
19
+ Layout/HashAlignment:
20
+ EnforcedColonStyle: table
21
+ EnforcedHashRocketStyle: table
22
+
23
+ Style/OpenStructUse:
24
+ Enabled: false
25
+
26
+ Metrics/BlockLength:
27
+ Exclude:
28
+ - 'spec/**/*'
29
+
30
+ Lint/NonDeterministicRequireOrder:
31
+ Exclude:
32
+ - 'spec/**/*'
33
+
34
+ Style/StringLiterals:
35
+ Exclude:
36
+ - 'spec/**/*'
37
+
38
+ RSpec/NamedSubject:
39
+ Enabled: false
40
+
41
+ RSpec/NestedGroups:
42
+ Enabled: false
43
+
44
+ RSpec/VerifiedDoubles:
45
+ Enabled: false
46
+
47
+ RSpec/VerifiedDoubleReference:
48
+ Enabled: false
49
+
50
+ RSpec/MessageSpies:
51
+ Enabled: false
52
+
53
+ RSpec/ExampleLength:
54
+ Enabled: false
55
+
56
+ RSpec/NoExpectationExample:
57
+ Enabled: false
58
+
59
+ RSpec/MultipleMemoizedHelpers:
60
+ Enabled: false
61
+
62
+ RSpec/MultipleExpectations:
63
+ Exclude:
64
+ - 'spec/support/shared_examples/**/*'
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [Unreleased]
2
+
3
+ ## [0.1.0] - 2024-03-11
4
+
5
+ - Initial release
data/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # Konsierge::Notifier
2
+
3
+ ## Installation
4
+
5
+ ## Usage
6
+
7
+ ### Telegram
8
+
9
+
10
+ ### Mailer
11
+
12
+
13
+ ## Development
14
+
15
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/Rakefile ADDED
@@ -0,0 +1,12 @@
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
+ require 'rubocop/rake_task'
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task default: %i[spec rubocop]
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'konsierge/notifier'
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/konsierge/notifier'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'konsierge-notifier'
7
+ spec.version = Konsierge::Notifier::VERSION
8
+ spec.author = 'David Rybolovlev'
9
+ spec.email = ['golifox911@gmail.com']
10
+
11
+ spec.summary = 'Notifier for Konsierge.'
12
+ spec.description = spec.summary
13
+ spec.required_ruby_version = '>= 2.7.4'
14
+
15
+ spec.metadata['source_code_uri'] = 'https://gitlab.konsierge.com/digitalbox/gem/konsierge-notifier'
16
+
17
+ spec.files = Dir.chdir(__dir__) do
18
+ `git ls-files -z`.split("\x0").reject do |f|
19
+ (File.expand_path(f) == __FILE__) ||
20
+ f.start_with?(*%w[bin/ spec/ features/ .git .circleci appveyor Gemfile])
21
+ end
22
+ end
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_dependency 'dotenv', '~> 2.7'
28
+
29
+ # All notifiers
30
+ spec.add_dependency 'dry-configurable', '~> 1.0'
31
+
32
+ # Telegram notifier
33
+ spec.add_dependency 'telegram-bot', '~> 0.16.1'
34
+
35
+ # Development and test dependencies
36
+ spec.add_development_dependency 'bundler', '~> 2.0'
37
+ spec.add_development_dependency 'rspec', '~> 3.10'
38
+ spec.add_development_dependency 'rspec-mocks', '~> 3.10'
39
+ spec.add_development_dependency 'rubocop', '~> 1.60'
40
+ spec.add_development_dependency 'rubocop-performance', '~> 1.11'
41
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.11'
42
+ spec.add_development_dependency 'simplecov', '~> 0.22'
43
+
44
+ spec.metadata['rubygems_mfa_required'] = 'true'
45
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # lib/generators/install/install_generator.rb
4
+ require 'rails/generators/base'
5
+
6
+ namespace 'konsierge-notifier'
7
+
8
+ module Generators
9
+ class KonsiergeNotifier < Rails::Generators::Base
10
+ def self.source_root
11
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
12
+ end
13
+
14
+ desc 'Creates a Konsierge::Notifier initializer for your application'
15
+
16
+ def copy_initializer
17
+ template 'konsierge_notifier_telegram.rb', 'config/initializers/konsierge_notifier_telegram.rb'
18
+
19
+ # Code to copy the message and error_message erb templates
20
+ copy_file 'message_template.html.erb', 'lib/templates/konsierge_notifier/message.html.erb'
21
+ copy_file 'error_template.html.erb', 'lib/templates/konsierge_notifier/error.html.erb'
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ <b><%= CGI.escape_html(app_name.to_s) %></b>
2
+ <% "\n" %>
3
+ <b>Error</b>: <%= CGI.escape_html(error.class.to_s) %> - <%= CGI.escape_html(error.message) %>
4
+ <% "\n" %>
5
+ <b>Source</b>: <%= CGI.escape_html(source) %>
6
+ <% "\n" %>
7
+ <b>Trace:</b>
8
+ <%= error.backtrace[0..2].flatten.map { |trace| "===> #{CGI.escape_html(trace)}" }.join("\n") %>
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'konsierge'
4
+
5
+ Telegram.bots_config = {
6
+ default: {
7
+ token: ENV.fetch('TELEGRAM_BOT_TOKEN', nil),
8
+ username: 'Konsierge notifier'
9
+ }
10
+ }
11
+
12
+ Konsierge::Notifier::Telegram.configure do |config|
13
+ config.app_name = Rails.application.class.module_parent_name
14
+ config.bot_enabled = ENV.fetch('TELEGRAM_BOT_ENABLED', false)
15
+ config.chat_id = ENV.fetch('TELEGRAM_CHANNEL_ID', nil)
16
+ config.logger = Rails.logger
17
+ end
@@ -0,0 +1,2 @@
1
+ <b><%= "#{CGI.escape_html(app_name.to_s)}\n" %></b>
2
+ <%= CGI.escape_html(message.to_s) %>
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+
5
+ module KonsiergeSmtpMailer
6
+ class InstallGenerator < ::Rails::Generators::Base
7
+ source_root File.expand_path('templates', __dir__)
8
+ desc 'Installs KonsiergeSmtpMailer.'
9
+
10
+ def install
11
+ template 'initializer.rb', 'config/initializers/konsierge-smtp-mailer.rb'
12
+ readme 'README'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ ===============================================================================
2
+
3
+ There is a setup that you need to do before you can use KonsiergeSmtpMailer.
4
+
5
+ Step 1.
6
+ Go to config/initializers/konsierge-smtp-mailer.rb and configure
7
+ smtp_mailer_host and smtp_mailer_auth_key.
8
+
9
+ Step 2.
10
+ Set new mailer in environment files:
11
+
12
+ config.action_mailer.delivery_method = :konsierge_smtp_mailer
13
+
14
+ Step 3.
15
+ That's it, that's all. Enjoy!
16
+
17
+ ===============================================================================
18
+
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ ActionMailer::Base.add_delivery_method :konsierge_notifier, Konsierge::Notifier::Mailer
4
+
5
+ Konsierge::Notifier::Mailer.configure do |config|
6
+ config.smtp_mailer_host = ENV.fetch('KONSIERGE_SMTP_MAILER_HOST', nil)
7
+ config.smtp_mailer_auth_key = ENV.fetch('KONSIERGE_SMTP_MAILER_AUTH_KEY', nil)
8
+ end
@@ -0,0 +1,8 @@
1
+ <b><%= CGI.escape_html(app_name.to_s) %></b>
2
+ <% "\n" %>
3
+ <b>Error</b>: <%= CGI.escape_html(error.class.to_s) %> - <%= CGI.escape_html(error.message.to_s) %>
4
+ <% "\n" %>
5
+ <b>Source</b>: <%= CGI.escape_html(source.to_s) %>
6
+ <% "\n" %>
7
+ <b>Trace:</b>
8
+ <%= error.backtrace[0..2].flatten.map { |trace| "===> #{CGI.escape_html(trace.to_s)}" }.join("\n") %>
@@ -0,0 +1,2 @@
1
+ <b><%= "#{app_name}\n" %></b>
2
+ <%= message %>
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dry-configurable'
4
+ require 'logger'
5
+ require 'telegram/bot'
6
+
7
+ module Konsierge
8
+ class Notifier
9
+ extend ::Dry::Configurable
10
+
11
+ setting :app_name
12
+ setting :chat_id, default: ENV.fetch('TELEGRAM_CHANNEL_ID', nil)
13
+ setting :bot_enabled, default: ENV.fetch('TELEGRAM_BOT_ENABLED', false)
14
+ setting :message_template_path, default: File.expand_path('notifier/template.html.erb', __dir__)
15
+ setting :error_template_path, default: File.expand_path('notifier/error_template.html.erb', __dir__)
16
+ setting :logger, default: Logger.new($stdout)
17
+ setting :parse_mode, default: 'HTML'
18
+
19
+ VERSION = '0.1.2'
20
+
21
+ TELEGRAM_CHAT_ID_NOT_SET = 'Telegram Chat ID is not set'
22
+ TELEGRAM_BOT_ERROR = 'TelegramBot Error: %s'
23
+ TELEGRAM_BOT_DISABLED = 'TelegramBot is disabled! Message not sent.'
24
+ PATH_OR_CHAT_ID_NOT_PROVIDED = 'Please, provide path and chat_id'
25
+
26
+ class << self
27
+ def send_message(text, chat_id: nil)
28
+ send_with_message_template(
29
+ path: config.message_template_path,
30
+ chat_id: chat_id,
31
+ app_name: config.app_name,
32
+ message: text
33
+ )
34
+ end
35
+
36
+ def report_error(error, source: nil, chat_id: nil)
37
+ send_with_message_template(
38
+ path: config.error_template_path,
39
+ chat_id: chat_id,
40
+ app_name: config.app_name,
41
+ error: error,
42
+ source: source
43
+ )
44
+ end
45
+
46
+ alias send_error report_error
47
+
48
+ private
49
+
50
+ def send_with_message_template(**options)
51
+ return log_disabled_bot_warning unless bot_enabled?
52
+
53
+ opts = sanitize_template_options!(options)
54
+ chat_id = check_chat_id!(opts[:chat_id])
55
+
56
+ template = ERB.new(File.read(opts[:path]))
57
+
58
+ template_params = opts.except(:path, :chat_id)
59
+ message = template.result_with_hash(template_params)
60
+
61
+ send_to_telegram(message, chat_id: chat_id)
62
+ end
63
+
64
+ def send_to_telegram(text, chat_id:)
65
+ ::Telegram.bot.send_message(chat_id: chat_id, text: text, parse_mode: config.parse_mode)
66
+
67
+ true
68
+ rescue StandardError => e
69
+ config.logger.error(TELEGRAM_BOT_ERROR % e.message)
70
+ false
71
+ end
72
+
73
+ def sanitize_template_options!(options)
74
+ opts = options.dup
75
+ raise ArgumentError, PATH_OR_CHAT_ID_NOT_PROVIDED unless %i[path chat_id].all? { |key| opts.key?(key) }
76
+
77
+ opts
78
+ end
79
+
80
+ def check_chat_id!(chat_id)
81
+ chat_id ||= config.chat_id
82
+
83
+ raise TELEGRAM_CHAT_ID_NOT_SET unless chat_id
84
+
85
+ chat_id
86
+ end
87
+
88
+ def bot_enabled?
89
+ config.bot_enabled
90
+ end
91
+
92
+ def log_disabled_bot_warning
93
+ config.logger.warn(TELEGRAM_BOT_DISABLED)
94
+ false
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,31 @@
1
+ module Konsierge
2
+ module Notifier
3
+ class Mailer
4
+ @connection: ::Faraday::Connection
5
+
6
+ def initialize: (*untyped, **untyped) -> void
7
+
8
+ def configure: -> void
9
+
10
+ def config: -> ::Dry::Configurable::Config
11
+
12
+ def deliver!: (::Mail mail) -> void
13
+
14
+ private
15
+
16
+ def build_payload: (::Mail mail) -> Hash[Symbol, Object]
17
+
18
+ def check_config!: -> void
19
+
20
+ def connection: -> ::Faraday::Connection
21
+
22
+ def determine_body: (::Mail mail) -> String
23
+
24
+ def process_attachments: (Array[untyped] attachments) -> Array[::Faraday::Multipart::FilePart]
25
+
26
+ def with_error_handle: -> void
27
+
28
+ def with_temp_file_deletion: -> void
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ module Konsierge
2
+ module Notifier
3
+ class Telegram
4
+ TELEGRAM_CHAT_ID_NOT_SET: String
5
+ TELEGRAM_BOT_ERROR: String
6
+ TELEGRAM_BOT_DISABLED: String
7
+ PATH_OR_CHAT_ID_NOT_PROVIDED: String
8
+
9
+ def self.send_message: (String) -> bool
10
+
11
+ def self.report_error: (Exception, source?: String) -> bool
12
+
13
+ def self.send_error: (Exception, source?: String) -> bool
14
+
15
+ private
16
+
17
+ def self.send_with_message_template: (Hash[Symbol, String]) -> bool
18
+
19
+ def self.sanitize_template_options!: (Hash[Symbol, String]) -> Hash[Symbol, String]
20
+
21
+ def self.check_chat_id!: (String | NilClass) -> String
22
+
23
+ def self.send_to_telegram: (String, chat_id?: String) -> bool
24
+
25
+ def self.bot_enabled?: () -> bool
26
+
27
+ def self.log_disabled_bot_warning: () -> false
28
+ end
29
+ end
30
+ end
data/sig/konsierge.rbs ADDED
@@ -0,0 +1,3 @@
1
+ module Konsierge
2
+ VERSION: String
3
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: konsierge-notifier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - David Rybolovlev
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dotenv
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-configurable
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: telegram-bot
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.16.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.16.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-mocks
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.10'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.10'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.60'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.60'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-performance
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.11'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.11'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.11'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.11'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.22'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.22'
153
+ description: Notifier for Konsierge.
154
+ email:
155
+ - golifox911@gmail.com
156
+ executables:
157
+ - konsierge-notifier
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - ".env.sample"
162
+ - ".rspec"
163
+ - ".rubocop.yml"
164
+ - CHANGELOG.md
165
+ - README.md
166
+ - Rakefile
167
+ - exe/konsierge-notifier
168
+ - konsierge-notifier.gemspec
169
+ - lib/generators/install/konsierge_notifier.rb
170
+ - lib/generators/install/templates/error_template.html.erb
171
+ - lib/generators/install/templates/konsierge_notifier_telegram.rb
172
+ - lib/generators/install/templates/template.html.erb
173
+ - lib/generators/konsierge/notifier/mailer/install_generator.rb
174
+ - lib/generators/konsierge/notifier/mailer/templates/README
175
+ - lib/generators/konsierge/notifier/mailer/templates/initializer.rb
176
+ - lib/konsierge/notifier.rb
177
+ - lib/konsierge/notifier/error_template.html.erb
178
+ - lib/konsierge/notifier/template.html.erb
179
+ - sig/konsierge.rbs
180
+ - sig/konsierge/notifier/mailer.rbs
181
+ - sig/konsierge/notifier/telegram.rbs
182
+ homepage:
183
+ licenses: []
184
+ metadata:
185
+ source_code_uri: https://gitlab.konsierge.com/digitalbox/gem/konsierge-notifier
186
+ rubygems_mfa_required: 'true'
187
+ post_install_message:
188
+ rdoc_options: []
189
+ require_paths:
190
+ - lib
191
+ required_ruby_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 2.7.4
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ requirements: []
202
+ rubygems_version: 3.1.6
203
+ signing_key:
204
+ specification_version: 4
205
+ summary: Notifier for Konsierge.
206
+ test_files: []