bns 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a422fa03f80a83a9c8ba021d998a00b90ee7381a5167d96e23562c67cc6d73d1
4
- data.tar.gz: 168f81ac480dc71796c2123c24ad27a5b04cbd1a9543388c1010425a037ad08f
3
+ metadata.gz: '088295440471344d853d850bf071e7fb885fa824a49bfcd182fe5d6a6de03b6c'
4
+ data.tar.gz: 909cec977526aaf735599e1b6dcbf8a0144eeb0dc8f02a37e371a4f90fb62405
5
5
  SHA512:
6
- metadata.gz: 28919c76616533281768cd65bb00e4e2d0d7c0e22c480ffe38bf75d23e5d46a3b768f3e1e99bc68e55b3d822eb01fd598731e12e35351f8b29a15b60f80bee3d
7
- data.tar.gz: d88313f8d80abce0480c63a4e35d8b5ccfa0151c2afb13205b2ae31a755974d72f2be87fdd726ac573b6b80ac4f1fcd133899936b04728af70e95d3be4a358e7
6
+ metadata.gz: 473e834fb819c4f8b36a053643b883b2cf5704c89aa470f9a58c063e148fbdfa7c8f78ac745b85f9ef193066f4e00e4b084f2add8385a58f892759297a23fa1f
7
+ data.tar.gz: bc15074b2628619f25786b8da2edcd5a0ec20eb5154df50027450886bc7e2f3c6cceba8897081ef78d0ac9770d19c2ca349ff799c64842bdef8ef4736a6b6fe6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.1 (07.02.2024)
4
+ - [Add custom templates option](https://github.com/kommitters/bns/issues/25)
5
+ - [PTO's formatting use cases](https://github.com/kommitters/bns/issues/24)
6
+
3
7
  ## 0.1.0 (06.02.2024)
4
8
 
5
9
  - [Build initial codebase](https://github.com/kommitters/bns/issues/6)
data/README.md CHANGED
@@ -2,10 +2,13 @@
2
2
 
3
3
  The business notification system is designed to be a versatile platform, offering key components for building various use cases. It provides an easy-to-use tool for implementing notifications without excessive complexity.
4
4
 
5
+ ![Gem Version](https://img.shields.io/gem/v/bns?style=for-the-badge)
6
+ ![Gem Total Downloads](https://img.shields.io/gem/dt/bns?style=for-the-badge)
5
7
  ![Build Badge](https://img.shields.io/github/actions/workflow/status/kommitters/bns/ci.yml?branch=project-opensource-config&style=for-the-badge)
6
8
  [![Coverage Status](https://img.shields.io/coveralls/github/kommitters/bns?style=for-the-badge)](https://coveralls.io/github/kommitters/bns?branch=main)
7
- [![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/kommitters/bns?style=for-the-badge)](https://api.securityscorecards.dev/projects/github.com/kommitters/bns)
8
9
  ![GitHub License](https://img.shields.io/github/license/kommitters/bns?style=for-the-badge)
10
+ [![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/kommitters/bns?label=openssf%20scorecard&style=for-the-badge)](https://api.securityscorecards.dev/projects/github.com/kommitters/bns)
11
+ [![OpenSSF Best Practices](https://img.shields.io/cii/summary/8383?label=openssf%20best%20practices&style=for-the-badge)](https://bestpractices.coreinfrastructure.org/projects/8383)
9
12
 
10
13
  ## Installation
11
14
 
data/SECURITY.md ADDED
@@ -0,0 +1,13 @@
1
+ # Security Policy
2
+
3
+ ## Reporting Security Issues
4
+
5
+ To report a security issue, you can either:
6
+ - Privately report a vulnerability through repository's Security tab by clicking "Report a vulnerability".
7
+ - Email us at [oss@kommit.co](mailto:oss@kommit.co).
8
+
9
+ Please, make sure to provide a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue.
10
+
11
+ ## Responsible Disclosure
12
+
13
+ If the issue is confirmed as a vulnerability, we will open a Security Advisory and acknowledge your contributions as part of it.
@@ -8,6 +8,8 @@ module Domain
8
8
  class Birthday
9
9
  attr_reader :individual_name, :birth_date
10
10
 
11
+ ATTRIBUTES = %w[individual_name birth_date].freeze
12
+
11
13
  # Initializes a Domain::Birthday instance with the specified individual name, and date of birth.
12
14
  #
13
15
  # <br>
@@ -9,6 +9,8 @@ module Domain
9
9
  class Pto
10
10
  attr_reader :individual_name, :start_date, :end_date
11
11
 
12
+ ATTRIBUTES = %w[individual_name start_date end_date].freeze
13
+
12
14
  # Initializes a Domain::Pto instance with the specified individual name, start date, and end date.
13
15
  #
14
16
  # <br>
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../domain/exceptions/function_not_implemented"
4
+ require "erb"
4
5
 
5
6
  module Formatter
6
7
  ##
@@ -8,7 +9,7 @@ module Formatter
8
9
  # within the Formatter module. Defines essential methods, that provide a blueprint for creating custom
9
10
  # formatters tailored to different use cases.
10
11
  #
11
- module Base
12
+ class Base
12
13
  # A method meant to give an specified format depending on the implementation to the data coming from an
13
14
  # implementation of the Mapper::Base interface.
14
15
  # Must be overridden by subclasses, with specific logic based on the use case.
@@ -22,8 +23,28 @@ module Formatter
22
23
  #
23
24
  # <b>returns</b> <tt>String</tt> Formatted payload suitable for a Dispatcher::Base implementation.
24
25
  #
26
+ attr_reader :template
27
+
28
+ def initialize(config = {})
29
+ @template = config[:template]
30
+ end
31
+
25
32
  def format(_domain_data)
26
33
  raise Domain::Exceptions::FunctionNotImplemented
27
34
  end
35
+
36
+ protected
37
+
38
+ def build_template(attributes, instance)
39
+ formated_template = format_template(attributes, instance)
40
+
41
+ "#{ERB.new(formated_template).result(binding)}\n"
42
+ end
43
+
44
+ def format_template(attributes, _instance)
45
+ attributes.reduce(template) do |formated_template, attribute|
46
+ formated_template.gsub(attribute, "<%= instance.#{attribute} %>")
47
+ end
48
+ end
28
49
  end
29
50
  end
@@ -9,9 +9,7 @@ module Formatter
9
9
  ##
10
10
  # This class implementats the methods of the Formatter::Base module, specifically designed for formatting birthday
11
11
  # data in a way suitable for Discord messages.
12
- class Birthday
13
- include Base
14
-
12
+ class Birthday < Base
15
13
  # Implements the logic for building a formatted payload with the given template for birthdays.
16
14
  #
17
15
  # <br>
@@ -29,14 +27,9 @@ module Formatter
29
27
  brithday.is_a?(Domain::Birthday)
30
28
  end
31
29
 
32
- template = "NAME, Wishing you a very happy birthday! Enjoy your special day! :birthday: :gift:"
33
- payload = ""
34
-
35
- birthdays_list.each do |birthday|
36
- payload += "#{template.gsub("NAME", birthday.individual_name)}\n"
30
+ birthdays_list.reduce("") do |payload, birthday|
31
+ payload + build_template(Domain::Birthday::ATTRIBUTES, birthday)
37
32
  end
38
-
39
- payload
40
33
  end
41
34
  end
42
35
  end
@@ -8,9 +8,7 @@ module Formatter
8
8
  ##
9
9
  # This class is an implementation of the Formatter::Base interface, specifically designed for formatting PTO
10
10
  # data in a way suitable for Discord messages.
11
- class Pto
12
- include Base
13
-
11
+ class Pto < Base
14
12
  # Implements the logic for building a formatted payload with the given template for PTO's.
15
13
  #
16
14
  # <br>
@@ -23,28 +21,27 @@ module Formatter
23
21
  # <br>
24
22
  # <b>returns</b> <tt>String</tt> payload, formatted payload suitable for a Discord message.
25
23
  #
24
+
26
25
  def format(ptos_list)
27
26
  raise Formatter::Discord::Exceptions::InvalidData unless ptos_list.all? { |pto| pto.is_a?(Domain::Pto) }
28
27
 
29
- template = ":beach: NAME is on PTO"
30
- payload = ""
31
-
32
- ptos_list.each do |pto|
33
- payload += "#{template.gsub("NAME", pto.individual_name)} #{build_pto_message(pto)}\n"
28
+ ptos_list.reduce("") do |payload, pto|
29
+ built_template = build_template(Domain::Pto::ATTRIBUTES, pto)
30
+ payload + format_message_by_case(built_template.gsub("\n", ""), pto)
34
31
  end
35
-
36
- payload
37
32
  end
38
33
 
39
34
  private
40
35
 
41
- def build_pto_message(pto)
36
+ def format_message_by_case(built_template, pto)
42
37
  if pto.start_date.include?("|")
43
38
  start_time = pto.start_date.split("|")
44
39
  end_time = pto.end_date.split("|")
45
- "#{start_time[1]} - #{end_time[1]}"
40
+ "#{built_template} #{start_time[1]} - #{end_time[1]}\n"
41
+ elsif pto.start_date == pto.end_date
42
+ "#{built_template} all day\n"
46
43
  else
47
- "all day"
44
+ "#{built_template} #{pto.start_date} - #{pto.end_date}\n"
48
45
  end
49
46
  end
50
47
  end
@@ -73,7 +73,7 @@ module UseCases
73
73
  def self.notify_birthday_from_notion_to_discord(options)
74
74
  fetcher = Fetcher::Notion::Birthday.new(options[:fetch_options])
75
75
  mapper = Mapper::Notion::Birthday.new
76
- formatter = Formatter::Discord::Birthday.new
76
+ formatter = Formatter::Discord::Birthday.new(options[:format_options])
77
77
  dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
78
78
  use_case_cofig = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
79
79
 
@@ -141,7 +141,7 @@ module UseCases
141
141
  def self.notify_pto_from_notion_to_discord(options)
142
142
  fetcher = Fetcher::Notion::Pto.new(options[:fetch_options])
143
143
  mapper = Mapper::Notion::Pto.new
144
- formatter = Formatter::Discord::Pto.new
144
+ formatter = Formatter::Discord::Pto.new(options[:format_options])
145
145
  dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
146
146
  use_case_cofig = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
147
147
 
data/lib/bns/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Bns
4
4
  # Gem version
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.1"
6
6
  end
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:semverAllMonthly"
5
+ ]
6
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - kommitters Open Source
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-06 00:00:00.000000000 Z
11
+ date: 2024-02-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A versatile business notification system offering key components for
14
14
  building various use cases. It provides an easy-to-use tool for implementing
@@ -25,10 +25,10 @@ files:
25
25
  - CODE_OF_CONDUCT.md
26
26
  - CONTRIBUTING.md
27
27
  - Gemfile
28
- - Gemfile.lock
29
28
  - LICENSE
30
29
  - README.md
31
30
  - Rakefile
31
+ - SECURITY.md
32
32
  - lib/bns.rb
33
33
  - lib/bns/dispatcher/base.rb
34
34
  - lib/bns/dispatcher/discord/exceptions/invalid_webhook_token.rb
@@ -55,6 +55,7 @@ files:
55
55
  - lib/bns/use_cases/use_case.rb
56
56
  - lib/bns/use_cases/use_cases.rb
57
57
  - lib/bns/version.rb
58
+ - renovate.json
58
59
  - sig/business_notification_system.rbs
59
60
  homepage: https://github.com/kommitters/bns
60
61
  licenses:
data/Gemfile.lock DELETED
@@ -1,91 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- bns (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- addressable (2.8.6)
10
- public_suffix (>= 2.0.2, < 6.0)
11
- ast (2.4.2)
12
- crack (0.4.5)
13
- rexml
14
- diff-lcs (1.5.0)
15
- docile (1.4.0)
16
- hashdiff (1.1.0)
17
- httparty (0.21.0)
18
- mini_mime (>= 1.0.0)
19
- multi_xml (>= 0.5.2)
20
- json (2.7.1)
21
- language_server-protocol (3.17.0.3)
22
- mini_mime (1.1.5)
23
- multi_xml (0.6.0)
24
- parallel (1.24.0)
25
- parser (3.3.0.3)
26
- ast (~> 2.4.1)
27
- racc
28
- public_suffix (5.0.4)
29
- racc (1.7.3)
30
- rainbow (3.1.1)
31
- rake (13.1.0)
32
- regexp_parser (2.9.0)
33
- rexml (3.2.6)
34
- rspec (3.12.0)
35
- rspec-core (~> 3.12.0)
36
- rspec-expectations (~> 3.12.0)
37
- rspec-mocks (~> 3.12.0)
38
- rspec-core (3.12.2)
39
- rspec-support (~> 3.12.0)
40
- rspec-expectations (3.12.3)
41
- diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.12.0)
43
- rspec-mocks (3.12.6)
44
- diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.12.0)
46
- rspec-support (3.12.1)
47
- rubocop (1.59.0)
48
- json (~> 2.3)
49
- language_server-protocol (>= 3.17.0)
50
- parallel (~> 1.10)
51
- parser (>= 3.2.2.4)
52
- rainbow (>= 2.2.2, < 4.0)
53
- regexp_parser (>= 1.8, < 3.0)
54
- rexml (>= 3.2.5, < 4.0)
55
- rubocop-ast (>= 1.30.0, < 2.0)
56
- ruby-progressbar (~> 1.7)
57
- unicode-display_width (>= 2.4.0, < 3.0)
58
- rubocop-ast (1.30.0)
59
- parser (>= 3.2.1.0)
60
- ruby-progressbar (1.13.0)
61
- simplecov (0.22.0)
62
- docile (~> 1.1)
63
- simplecov-html (~> 0.11)
64
- simplecov_json_formatter (~> 0.1)
65
- simplecov-html (0.12.3)
66
- simplecov-lcov (0.8.0)
67
- simplecov_json_formatter (0.1.4)
68
- unicode-display_width (2.5.0)
69
- vcr (6.2.0)
70
- webmock (3.19.1)
71
- addressable (>= 2.8.0)
72
- crack (>= 0.3.2)
73
- hashdiff (>= 0.4.0, < 2.0.0)
74
-
75
- PLATFORMS
76
- arm64-darwin-23
77
- x86_64-linux
78
-
79
- DEPENDENCIES
80
- bns!
81
- httparty
82
- rake (~> 13.0)
83
- rspec (~> 3.0)
84
- rubocop (~> 1.21)
85
- simplecov
86
- simplecov-lcov (~> 0.8.0)
87
- vcr
88
- webmock
89
-
90
- BUNDLED WITH
91
- 2.4.10