neon_operations 0.0.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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +61 -0
- data/README.md +30 -0
- data/Rakefile +6 -0
- data/lib/neon_operations.rb +38 -0
- data/lib/neon_operations/version.rb +3 -0
- data/neon_operations.gemspec +24 -0
- metadata +55 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ee06454f2b8cc9eb84b6399068b6cbae7f0c4ab30a96f2ce0247e992f459a020
|
4
|
+
data.tar.gz: b357c634e70488b51dc5316e910b76cd6eff4d3ef5e8f2fb6c3e74461efbca55
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d3d0ccc9ec32f7574a099d26e5805b32dba7dd7e4b457d7f1bb50169723bf986b203832d2aa1838ddb1b8a7fb474db9c55554c4cabff6712fcafc8d47878400b
|
7
|
+
data.tar.gz: 90164987ec62d7f417cad4685aae497f399ce9d191b40c8139f2f25a825eb08a4de03ca8fe10dbad3508d4fb0c45ec1a63f7b8d75169ce45b40fa8420ec1f899
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
neon_operations (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ast (2.4.2)
|
10
|
+
diff-lcs (1.4.4)
|
11
|
+
parallel (1.20.1)
|
12
|
+
parser (3.0.1.0)
|
13
|
+
ast (~> 2.4.1)
|
14
|
+
rainbow (3.0.0)
|
15
|
+
rake (12.3.3)
|
16
|
+
regexp_parser (2.1.1)
|
17
|
+
rexml (3.2.5)
|
18
|
+
rspec (3.10.0)
|
19
|
+
rspec-core (~> 3.10.0)
|
20
|
+
rspec-expectations (~> 3.10.0)
|
21
|
+
rspec-mocks (~> 3.10.0)
|
22
|
+
rspec-core (3.10.1)
|
23
|
+
rspec-support (~> 3.10.0)
|
24
|
+
rspec-expectations (3.10.1)
|
25
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
+
rspec-support (~> 3.10.0)
|
27
|
+
rspec-mocks (3.10.2)
|
28
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
+
rspec-support (~> 3.10.0)
|
30
|
+
rspec-support (3.10.2)
|
31
|
+
rubocop (1.12.1)
|
32
|
+
parallel (~> 1.10)
|
33
|
+
parser (>= 3.0.0.0)
|
34
|
+
rainbow (>= 2.2.2, < 4.0)
|
35
|
+
regexp_parser (>= 1.8, < 3.0)
|
36
|
+
rexml
|
37
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
38
|
+
ruby-progressbar (~> 1.7)
|
39
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
40
|
+
rubocop-ast (1.4.1)
|
41
|
+
parser (>= 2.7.1.5)
|
42
|
+
rubocop-performance (1.10.1)
|
43
|
+
rubocop (>= 0.90.0, < 2.0)
|
44
|
+
rubocop-ast (>= 0.4.0)
|
45
|
+
ruby-progressbar (1.11.0)
|
46
|
+
standard (1.0.5)
|
47
|
+
rubocop (= 1.12.1)
|
48
|
+
rubocop-performance (= 1.10.1)
|
49
|
+
unicode-display_width (2.0.0)
|
50
|
+
|
51
|
+
PLATFORMS
|
52
|
+
ruby
|
53
|
+
|
54
|
+
DEPENDENCIES
|
55
|
+
neon_operations!
|
56
|
+
rake (~> 12.0)
|
57
|
+
rspec (~> 3.0)
|
58
|
+
standard
|
59
|
+
|
60
|
+
BUNDLED WITH
|
61
|
+
2.1.4
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Neon Operations
|
2
|
+
|
3
|
+
This gem is a thin wrapper around Dry-RB libraries to standardize our use
|
4
|
+
testable, incremental functional programming written in Ruby.
|
5
|
+
|
6
|
+
## API
|
7
|
+
|
8
|
+
This gem only exposes two classes, `Operation` and `GCPFunctionsManager`.
|
9
|
+
|
10
|
+
### `Operation`
|
11
|
+
|
12
|
+
This is the base class from which all Dry-RB Operations (Monads) should inherit
|
13
|
+
from. We mandate that:
|
14
|
+
|
15
|
+
* all operations contain a schema_contract from the `NeonSchemas` gem
|
16
|
+
* all operations contain one class method `self.call` with one param, `input`.
|
17
|
+
This `input` should be a hash that can be validated against the passed in
|
18
|
+
schema_contract
|
19
|
+
* the method `validate_input` **always** be the first function applied in the
|
20
|
+
chain of functions within an operation.
|
21
|
+
|
22
|
+
### `GCPFunctionsManager`
|
23
|
+
|
24
|
+
This class takes GCP Cloud Functions events and invokes the `call` method on an
|
25
|
+
operation. This class is specific to Google Cloud Platform.
|
26
|
+
|
27
|
+
## Contributing
|
28
|
+
|
29
|
+
Bug reports and pull requests are welcome on GitHub at
|
30
|
+
https://github.com/neonlaw/codebase.
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require "neon_operations/version"
|
2
|
+
|
3
|
+
module NeonOperations
|
4
|
+
class GCPFunctionsManager
|
5
|
+
def self.invoke_operation(operation, gcp_functions_event)
|
6
|
+
data = JSON.parse(
|
7
|
+
Base64.strict_decode64(
|
8
|
+
gcp_functions_event.data.fetch("message").fetch("data")
|
9
|
+
)
|
10
|
+
)
|
11
|
+
|
12
|
+
operation.call(input: data)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Operation
|
17
|
+
def self.call(input:)
|
18
|
+
new(input: input).call
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(input:, schema_contract: nil)
|
22
|
+
@input = input
|
23
|
+
@schema_contract = schema_contract
|
24
|
+
end
|
25
|
+
|
26
|
+
def call
|
27
|
+
validate_input
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :input, :schema_contract
|
33
|
+
|
34
|
+
def validate_input
|
35
|
+
schema_contract.validate(input)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative "lib/neon_operations/version"
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "neon_operations"
|
5
|
+
spec.version = NeonOperations::VERSION
|
6
|
+
spec.authors = ["Neon Law"]
|
7
|
+
spec.email = ["support@neonlaw.com"]
|
8
|
+
|
9
|
+
spec.summary = "A gem to standardize our use of Dry-RB"
|
10
|
+
spec.description = spec.summary
|
11
|
+
spec.homepage = "https://github.com/neonlaw/codebase"
|
12
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
13
|
+
|
14
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
15
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
16
|
+
spec.metadata["changelog_uri"] = spec.homepage
|
17
|
+
|
18
|
+
# Specify which files should be added to the gem when it is released.
|
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(__dir__)) do
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
|
+
end
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: neon_operations
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Neon Law
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-06-29 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A gem to standardize our use of Dry-RB
|
14
|
+
email:
|
15
|
+
- support@neonlaw.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- ".rspec"
|
22
|
+
- ".ruby-version"
|
23
|
+
- Gemfile
|
24
|
+
- Gemfile.lock
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- lib/neon_operations.rb
|
28
|
+
- lib/neon_operations/version.rb
|
29
|
+
- neon_operations.gemspec
|
30
|
+
homepage: https://github.com/neonlaw/codebase
|
31
|
+
licenses: []
|
32
|
+
metadata:
|
33
|
+
homepage_uri: https://github.com/neonlaw/codebase
|
34
|
+
source_code_uri: https://github.com/neonlaw/codebase
|
35
|
+
changelog_uri: https://github.com/neonlaw/codebase
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 2.3.0
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubygems_version: 3.2.15
|
52
|
+
signing_key:
|
53
|
+
specification_version: 4
|
54
|
+
summary: A gem to standardize our use of Dry-RB
|
55
|
+
test_files: []
|