uc3-dmp-dynamo 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/README.md +3 -0
- data/lib/uc3-dmp-dynamo/client.rb +83 -0
- data/lib/uc3-dmp-dynamo/version.rb +5 -0
- data/lib/uc3-dmp-dynamo.rb +11 -0
- metadata +146 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 58ed099abf0a13ea6a5e296d5b9cb1705e91323ecf0c11175aaa26548e601df4
|
4
|
+
data.tar.gz: e071931916566776591f79c380750834fc2474a2233ae15ddfb76dbd06dc594d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c74365c564c6762dc2429583611cfb69daec13fa6c3df7e1d624a1c8630df8e5440c31cac301a65f4182f9fdc168c165bf132ecff60f4381bbc906eb5d79aeb8
|
7
|
+
data.tar.gz: aa410b9a0fb4f84df58a4c6e5c8ef495359e290bbfeb5a50a45da8aa9544764d023d21d06282e7c350f729e3b7bca2a10a7cf05cc7f8e494113b5fd1d73c8a8c
|
data/README.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
|
4
|
+
# TODO: Be sure to update the API functions so that they call cleanse_dmp_json before
|
5
|
+
# calling Uc3DmpApiCore::Responder.respond !!!!!!!!!!
|
6
|
+
|
7
|
+
|
8
|
+
module Uc3DmpDynamo
|
9
|
+
class Uc3DmpDynamoError < StandardError; end
|
10
|
+
|
11
|
+
# Helper functions for working with Dynamo JSON
|
12
|
+
class Client
|
13
|
+
SOURCE = 'Uc3DmpDynamo::Client'
|
14
|
+
|
15
|
+
MSG_INVALID_KEY = 'Invalid key specified. Expecting Hash containing `PK` and `SK`'
|
16
|
+
MSG_MISSING_TABLE = 'No Dynamo Table defined! Looking for `ENV[\'DYNAMO_TABLE\']`'
|
17
|
+
MSG_DYNAMO_ERROR = 'Dynamo DB Table Error - %{msg} - %{trace}'
|
18
|
+
|
19
|
+
attr_accessor: :connection, :table, :log_writer
|
20
|
+
|
21
|
+
def initialize(**args)
|
22
|
+
@table = ENV['DYNAMO_TABLE']
|
23
|
+
raise Uc3DmpDynamoError, MSG_MISSING_TABLE if @table.nil?
|
24
|
+
|
25
|
+
@log_writer = args[:log_writer]
|
26
|
+
@connection = args.fetch(:client, Aws::DynamoDB::Client.new(region: ENV.fetch('AWS_REGION', 'us-west-2')))
|
27
|
+
end
|
28
|
+
|
29
|
+
# Fetch a single item
|
30
|
+
def get_item(key:, debug: false)
|
31
|
+
raise Uc3DmpDynamoError, MSG_INVALID_KEY unless key.is_a?(Hash)
|
32
|
+
|
33
|
+
resp = @client.get_item(
|
34
|
+
{ table_name: @table,
|
35
|
+
key: key,
|
36
|
+
consistent_read: false,
|
37
|
+
return_consumed_capacity: debug ? 'TOTAL' : 'NONE'
|
38
|
+
}
|
39
|
+
)
|
40
|
+
# If debug is enabled then write the response to the LogWriter
|
41
|
+
if debug && @log_writer
|
42
|
+
@log_writer.log_message(source: SOURCE, message: "get_item - #{key}", details: resp[:item].first)
|
43
|
+
end
|
44
|
+
resp[:item].first
|
45
|
+
rescue Aws::Errors::ServiceError => e
|
46
|
+
raise Uc3DmpDynamoError, MSG_DYNAMO_ERROR % { msg: e.message, trace: e.backtrace }
|
47
|
+
end
|
48
|
+
|
49
|
+
# Perform a table scan if a filter was specified.
|
50
|
+
# For example:
|
51
|
+
# key_conditions: { PK: { attribute_value_list: ['DMP#12345'] }, comparison_operator: 'EQ' }
|
52
|
+
# projection_expression: 'title, dmp_id, modified'
|
53
|
+
#
|
54
|
+
# See the DynamoDB docs for examples of key_conditions and projection_expressions
|
55
|
+
def query(debug: false, **args)
|
56
|
+
raise Uc3DmpDynamoError, MSG_INVALID_KEY unless args[:key_conditions].is_a?(Hash) &&
|
57
|
+
!args[:key_conditions].keys.empty?
|
58
|
+
|
59
|
+
hash = {
|
60
|
+
table_name: @table,
|
61
|
+
key_conditions: args[:key_conditions],
|
62
|
+
consistent_read: false,
|
63
|
+
return_consumed_capacity: debug ? 'TOTAL' : 'NONE'
|
64
|
+
}
|
65
|
+
# Look for and add any other filtering or projection args
|
66
|
+
%i[filter_expression, expression_attribute_values, projection_expression, scan_index_forward].each do |key|
|
67
|
+
next if args[key.to_sym].nil?
|
68
|
+
|
69
|
+
hash[key.to_sym] = args[key.to_sym]
|
70
|
+
end
|
71
|
+
|
72
|
+
resp = @client.query(hash)
|
73
|
+
# If debug is enabled then write the response to the LogWriter
|
74
|
+
if debug && @log_writer
|
75
|
+
msg = "query - key_conditions: #{key_conditions}, projection_expression: #{projection_expression}"
|
76
|
+
@log_writer.log_message(source: SOURCE, message: msg, details: resp.items)
|
77
|
+
end
|
78
|
+
resp.items
|
79
|
+
rescue Aws::Errors::ServiceError => e
|
80
|
+
raise Uc3DmpDynamoError, MSG_DYNAMO_ERROR % { msg: e.message, trace: e.backtrace }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: uc3-dmp-dynamo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brian Riley
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-05-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: logger
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-dynamodb
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.83'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.83'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 11.1.3
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 11.1.3
|
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.9.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.9.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.50.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.50.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.20.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 2.20.0
|
111
|
+
description: Helpers for Dynamo DB Table access
|
112
|
+
email:
|
113
|
+
- brian.riley@ucop.edu
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- README.md
|
119
|
+
- lib/uc3-dmp-dynamo.rb
|
120
|
+
- lib/uc3-dmp-dynamo/client.rb
|
121
|
+
- lib/uc3-dmp-dynamo/version.rb
|
122
|
+
homepage: https://github.com/CDLUC3/dmp-hub-cfn/blob/main/src/sam/gems/uc3-dmp-dynamo
|
123
|
+
licenses:
|
124
|
+
- MIT
|
125
|
+
metadata:
|
126
|
+
rubygems_mfa_required: 'false'
|
127
|
+
post_install_message:
|
128
|
+
rdoc_options: []
|
129
|
+
require_paths:
|
130
|
+
- lib
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '2.7'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
requirements: []
|
142
|
+
rubygems_version: 3.1.6
|
143
|
+
signing_key:
|
144
|
+
specification_version: 4
|
145
|
+
summary: DMPTool gem that provides support for Dynamo DB
|
146
|
+
test_files: []
|