neon_schemas 0.1.3 → 0.1.6
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 +4 -4
- data/Gemfile.lock +39 -1
- data/lib/neon_schemas.rb +5 -31
- data/lib/neon_schemas/avro.rb +34 -0
- data/lib/neon_schemas/contracts/authentication/successful_login_contract.rb +16 -0
- data/lib/neon_schemas/contracts/documents/process_document_contract.rb +9 -0
- data/lib/neon_schemas/contracts/outbound_emails/welcome_email_contract.rb +17 -0
- data/lib/neon_schemas/contracts/slack/send_message_contract.rb +16 -0
- data/lib/neon_schemas/version.rb +1 -1
- data/neon_schemas.gemspec +3 -1
- data/package.json +1 -1
- data/pyproject.toml +1 -1
- data/schemas/outbound_emails/welcome_email.avsc +3 -3
- metadata +35 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a424270038e2855b7fb950dde4ce047aff75553b0e3aa4bf6aaf6afedf295547
|
4
|
+
data.tar.gz: dbaeeae211db24dba2be55c5be3a0671026649d9987dbf50eb17dc6727511f35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 843bd7a29981c338aa3507cb9d097a3b7b009b1e5c947b623047db425a1a8fa72d62bb5c151f2fe75265d3c3b6e8ea704d0fb19e0ba80fa49faa3d7e110987c8
|
7
|
+
data.tar.gz: '03947621adb4591ee887956d7fe0d53081ea31130cc508bcc3853fd296bfc3f20b60d7c198ef443f0cbb9987552c3e04ca2419375a5afe810384d081348536ca'
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
neon_schemas (0.1.
|
4
|
+
neon_schemas (0.1.6)
|
5
5
|
avro (~> 1.10)
|
6
|
+
dry-validation (= 1.6)
|
7
|
+
neon_operations (= 0.0.1)
|
6
8
|
|
7
9
|
GEM
|
8
10
|
remote: https://rubygems.org/
|
@@ -11,9 +13,45 @@ GEM
|
|
11
13
|
avro (1.10.2)
|
12
14
|
multi_json (~> 1)
|
13
15
|
coderay (1.1.3)
|
16
|
+
concurrent-ruby (1.1.9)
|
14
17
|
diff-lcs (1.4.4)
|
18
|
+
dry-configurable (0.12.1)
|
19
|
+
concurrent-ruby (~> 1.0)
|
20
|
+
dry-core (~> 0.5, >= 0.5.0)
|
21
|
+
dry-container (0.8.0)
|
22
|
+
concurrent-ruby (~> 1.0)
|
23
|
+
dry-configurable (~> 0.1, >= 0.1.3)
|
24
|
+
dry-core (0.6.0)
|
25
|
+
concurrent-ruby (~> 1.0)
|
26
|
+
dry-equalizer (0.3.0)
|
27
|
+
dry-inflector (0.2.0)
|
28
|
+
dry-initializer (3.0.4)
|
29
|
+
dry-logic (1.2.0)
|
30
|
+
concurrent-ruby (~> 1.0)
|
31
|
+
dry-core (~> 0.5, >= 0.5)
|
32
|
+
dry-schema (1.7.0)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
dry-configurable (~> 0.8, >= 0.8.3)
|
35
|
+
dry-core (~> 0.5, >= 0.5)
|
36
|
+
dry-initializer (~> 3.0)
|
37
|
+
dry-logic (~> 1.0)
|
38
|
+
dry-types (~> 1.5)
|
39
|
+
dry-types (1.5.1)
|
40
|
+
concurrent-ruby (~> 1.0)
|
41
|
+
dry-container (~> 0.3)
|
42
|
+
dry-core (~> 0.5, >= 0.5)
|
43
|
+
dry-inflector (~> 0.1, >= 0.1.2)
|
44
|
+
dry-logic (~> 1.0, >= 1.0.2)
|
45
|
+
dry-validation (1.6.0)
|
46
|
+
concurrent-ruby (~> 1.0)
|
47
|
+
dry-container (~> 0.7, >= 0.7.1)
|
48
|
+
dry-core (~> 0.4)
|
49
|
+
dry-equalizer (~> 0.2)
|
50
|
+
dry-initializer (~> 3.0)
|
51
|
+
dry-schema (~> 1.5, >= 1.5.2)
|
15
52
|
method_source (1.0.0)
|
16
53
|
multi_json (1.15.0)
|
54
|
+
neon_operations (0.0.1)
|
17
55
|
parallel (1.20.1)
|
18
56
|
parser (3.0.1.1)
|
19
57
|
ast (~> 2.4.1)
|
data/lib/neon_schemas.rb
CHANGED
@@ -1,36 +1,10 @@
|
|
1
1
|
require "neon_schemas/version"
|
2
|
-
require "avro"
|
3
2
|
|
4
3
|
module NeonSchemas
|
5
|
-
|
6
|
-
|
7
|
-
class Avro
|
8
|
-
SCHEMA_DIRECTORY = "#{__dir__}/../schemas"
|
9
|
-
|
10
|
-
def self.encode(record:, schema_name:)
|
11
|
-
avro_schema = ::Avro::Schema.parse(
|
12
|
-
File.read("#{SCHEMA_DIRECTORY}/#{schema_name}.avsc")
|
13
|
-
)
|
14
|
-
writer = ::Avro::IO::DatumWriter.new avro_schema
|
15
|
-
buffer = ::StringIO.new
|
16
|
-
encoder = ::Avro::IO::BinaryEncoder.new buffer
|
17
|
-
|
18
|
-
writer.write record, encoder
|
19
|
-
|
20
|
-
buffer
|
21
|
-
end
|
4
|
+
module Contracts; end
|
22
5
|
|
23
|
-
|
24
|
-
avro_schema = ::Avro::Schema.parse(
|
25
|
-
File.read("#{SCHEMA_DIRECTORY}/#{schema_name}.avsc")
|
26
|
-
)
|
27
|
-
buffer = ::StringIO.new string
|
28
|
-
decoder = ::Avro::IO::BinaryDecoder.new buffer
|
29
|
-
reader = ::Avro::IO::DatumReader.new avro_schema
|
30
|
-
|
31
|
-
json = reader.read(decoder).to_json
|
32
|
-
|
33
|
-
JSON.parse(json, symbolize_names: true)
|
34
|
-
end
|
35
|
-
end
|
6
|
+
class Error < StandardError; end
|
36
7
|
end
|
8
|
+
|
9
|
+
require "neon_schemas/avro"
|
10
|
+
Dir["#{__dir__}/neon_schemas/contracts/**/*.rb"].sort.each { |f| require f }
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "neon_schemas/version"
|
2
|
+
require "avro"
|
3
|
+
|
4
|
+
module NeonSchemas
|
5
|
+
class Avro
|
6
|
+
SCHEMA_DIRECTORY = "#{__dir__}/../../schemas"
|
7
|
+
|
8
|
+
def self.encode(record:, schema_name:)
|
9
|
+
avro_schema = ::Avro::Schema.parse(
|
10
|
+
File.read("#{SCHEMA_DIRECTORY}/#{schema_name.tr(".", "/")}.avsc")
|
11
|
+
)
|
12
|
+
writer = ::Avro::IO::DatumWriter.new avro_schema
|
13
|
+
buffer = ::StringIO.new
|
14
|
+
encoder = ::Avro::IO::BinaryEncoder.new buffer
|
15
|
+
|
16
|
+
writer.write record, encoder
|
17
|
+
|
18
|
+
buffer
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.decode(string:, schema_name:)
|
22
|
+
avro_schema = ::Avro::Schema.parse(
|
23
|
+
File.read("#{SCHEMA_DIRECTORY}/#{schema_name.tr(".", "/")}.avsc")
|
24
|
+
)
|
25
|
+
buffer = ::StringIO.new string
|
26
|
+
decoder = ::Avro::IO::BinaryDecoder.new buffer
|
27
|
+
reader = ::Avro::IO::DatumReader.new avro_schema
|
28
|
+
|
29
|
+
json = reader.read(decoder).to_json
|
30
|
+
|
31
|
+
JSON.parse(json, symbolize_names: true)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "dry-validation"
|
2
|
+
|
3
|
+
module NeonSchemas::Contracts::Authentication
|
4
|
+
class SuccessfulLoginContract < Dry::Validation::Contract
|
5
|
+
json do
|
6
|
+
required(:email).filled(:string)
|
7
|
+
required(:sub).value(:string)
|
8
|
+
end
|
9
|
+
|
10
|
+
rule(:email) do
|
11
|
+
return if EMAIL_REGEX.match?(value)
|
12
|
+
|
13
|
+
key.failure("has invalid format")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "dry-validation"
|
2
|
+
|
3
|
+
module NeonSchemas::Contracts::OutboundEmails
|
4
|
+
class WelcomeEmailContract < Dry::Validation::Contract
|
5
|
+
json do
|
6
|
+
required(:email).filled(:string)
|
7
|
+
end
|
8
|
+
|
9
|
+
rule(:email) do
|
10
|
+
email_regex = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
|
11
|
+
|
12
|
+
return if email_regex.match?(value)
|
13
|
+
|
14
|
+
key.failure("has invalid format")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "dry-validation"
|
2
|
+
|
3
|
+
module NeonSchemas::Contracts::Slack
|
4
|
+
class SendMessageContract < Dry::Validation::Contract
|
5
|
+
json do
|
6
|
+
required(:message).filled(:string)
|
7
|
+
required(:channel).value(:string)
|
8
|
+
end
|
9
|
+
|
10
|
+
rule(:channel) do
|
11
|
+
return if channel == "devops"
|
12
|
+
|
13
|
+
key.failure("invalid channel")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/neon_schemas/version.rb
CHANGED
data/neon_schemas.gemspec
CHANGED
@@ -17,10 +17,12 @@ Gem::Specification.new do |spec|
|
|
17
17
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
-
spec.files = Dir.chdir(File.expand_path(
|
20
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
21
21
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
22
|
end
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
25
|
spec.add_runtime_dependency "avro", "~> 1.10"
|
26
|
+
spec.add_runtime_dependency "dry-validation", "1.6"
|
27
|
+
spec.add_runtime_dependency "neon_operations", "0.0.1"
|
26
28
|
end
|
data/package.json
CHANGED
data/pyproject.toml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"namespace": "com.neon_law.
|
2
|
+
"namespace": "com.neon_law.outbound_emails",
|
3
3
|
"name": "welcome_email",
|
4
4
|
"type": "record",
|
5
5
|
"fields": [
|
@@ -9,8 +9,8 @@
|
|
9
9
|
"doc": "The 'to' email to send the email to."
|
10
10
|
},
|
11
11
|
{
|
12
|
-
"type"
|
13
|
-
"name"
|
12
|
+
"type": "string",
|
13
|
+
"name": "sub",
|
14
14
|
"doc": "The 'sub' from Auth0."
|
15
15
|
}
|
16
16
|
]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neon_schemas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neon Law
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dry-validation
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: neon_operations
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.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.0.1
|
27
55
|
description: A gem containing schemas and encoding/decoding Avro classes
|
28
56
|
email:
|
29
57
|
- support@neonlaw.com
|
@@ -40,6 +68,11 @@ files:
|
|
40
68
|
- bin/console
|
41
69
|
- bin/setup
|
42
70
|
- lib/neon_schemas.rb
|
71
|
+
- lib/neon_schemas/avro.rb
|
72
|
+
- lib/neon_schemas/contracts/authentication/successful_login_contract.rb
|
73
|
+
- lib/neon_schemas/contracts/documents/process_document_contract.rb
|
74
|
+
- lib/neon_schemas/contracts/outbound_emails/welcome_email_contract.rb
|
75
|
+
- lib/neon_schemas/contracts/slack/send_message_contract.rb
|
43
76
|
- lib/neon_schemas/version.rb
|
44
77
|
- neon_schemas.gemspec
|
45
78
|
- neon_schemas/__init__.py
|