functions_framework 0.4.0 → 0.6.0
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/CHANGELOG.md +26 -0
- data/README.md +9 -9
- data/bin/functions-framework +1 -1
- data/bin/functions-framework-ruby +1 -1
- data/docs/deploying-functions.md +29 -14
- data/docs/overview.md +4 -4
- data/docs/testing-functions.md +9 -11
- data/docs/writing-functions.md +73 -13
- data/lib/functions_framework.rb +35 -7
- data/lib/functions_framework/cli.rb +97 -22
- data/lib/functions_framework/function.rb +3 -2
- data/lib/functions_framework/legacy_event_converter.rb +28 -29
- data/lib/functions_framework/registry.rb +40 -6
- data/lib/functions_framework/server.rb +14 -10
- data/lib/functions_framework/testing.rb +20 -8
- data/lib/functions_framework/version.rb +1 -1
- metadata +22 -108
- data/lib/functions_framework/cloud_events.rb +0 -45
- data/lib/functions_framework/cloud_events/content_type.rb +0 -216
- data/lib/functions_framework/cloud_events/errors.rb +0 -42
- data/lib/functions_framework/cloud_events/event.rb +0 -84
- data/lib/functions_framework/cloud_events/event/field_interpreter.rb +0 -150
- data/lib/functions_framework/cloud_events/event/v0.rb +0 -236
- data/lib/functions_framework/cloud_events/event/v1.rb +0 -223
- data/lib/functions_framework/cloud_events/http_binding.rb +0 -310
- data/lib/functions_framework/cloud_events/json_format.rb +0 -173
@@ -1,173 +0,0 @@
|
|
1
|
-
# Copyright 2020 Google LLC
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require "base64"
|
16
|
-
require "json"
|
17
|
-
|
18
|
-
module FunctionsFramework
|
19
|
-
module CloudEvents
|
20
|
-
##
|
21
|
-
# An implementation of JSON format and JSON batch format.
|
22
|
-
#
|
23
|
-
# Supports the CloudEvents 0.3 and CloudEvents 1.0 variants of this format.
|
24
|
-
# See https://github.com/cloudevents/spec/blob/v0.3/json-format.md and
|
25
|
-
# https://github.com/cloudevents/spec/blob/v1.0/json-format.md.
|
26
|
-
#
|
27
|
-
class JsonFormat
|
28
|
-
##
|
29
|
-
# Decode an event from the given input JSON string.
|
30
|
-
#
|
31
|
-
# @param json [String] A JSON-formatted string
|
32
|
-
# @return [FunctionsFramework::CloudEvents::Event]
|
33
|
-
#
|
34
|
-
def decode json, **_other_kwargs
|
35
|
-
structure = ::JSON.parse json
|
36
|
-
decode_hash_structure structure
|
37
|
-
end
|
38
|
-
|
39
|
-
##
|
40
|
-
# Encode an event to a JSON string.
|
41
|
-
#
|
42
|
-
# @param event [FunctionsFramework::CloudEvents::Event] An input event.
|
43
|
-
# @param sort [boolean] Whether to sort keys of the JSON output.
|
44
|
-
# @return [String] The JSON representation.
|
45
|
-
#
|
46
|
-
def encode event, sort: false, **_other_kwargs
|
47
|
-
structure = encode_hash_structure event
|
48
|
-
structure = sort_keys structure if sort
|
49
|
-
::JSON.dump structure
|
50
|
-
end
|
51
|
-
|
52
|
-
##
|
53
|
-
# Decode a batch of events from the given input string.
|
54
|
-
#
|
55
|
-
# @param json [String] A JSON-formatted string
|
56
|
-
# @return [Array<FunctionsFramework::CloudEvents::Event>]
|
57
|
-
#
|
58
|
-
def decode_batch json, **_other_kwargs
|
59
|
-
structure_array = Array(::JSON.parse(json))
|
60
|
-
structure_array.map do |structure|
|
61
|
-
decode_hash_structure structure
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
##
|
66
|
-
# Encode a batch of event to a JSON string.
|
67
|
-
#
|
68
|
-
# @param events [Array<FunctionsFramework::CloudEvents::Event>] An array
|
69
|
-
# of input events.
|
70
|
-
# @param sort [boolean] Whether to sort keys of the JSON output.
|
71
|
-
# @return [String] The JSON representation.
|
72
|
-
#
|
73
|
-
def encode_batch events, sort: false, **_other_kwargs
|
74
|
-
structure_array = Array(events).map do |event|
|
75
|
-
structure = encode_hash_structure event
|
76
|
-
sort ? sort_keys(structure) : structure
|
77
|
-
end
|
78
|
-
::JSON.dump structure_array
|
79
|
-
end
|
80
|
-
|
81
|
-
##
|
82
|
-
# Decode a single event from a hash data structure with keys and types
|
83
|
-
# conforming to the JSON envelope.
|
84
|
-
#
|
85
|
-
# @param structure [Hash] An input hash.
|
86
|
-
# @return [FunctionsFramework::CloudEvents::Event]
|
87
|
-
#
|
88
|
-
def decode_hash_structure structure
|
89
|
-
spec_version = structure["specversion"].to_s
|
90
|
-
case spec_version
|
91
|
-
when "0.3"
|
92
|
-
decode_hash_structure_v0 structure
|
93
|
-
when /^1(\.|$)/
|
94
|
-
decode_hash_structure_v1 structure
|
95
|
-
else
|
96
|
-
raise SpecVersionError, "Unrecognized specversion: #{spec_version}"
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
##
|
101
|
-
# Encode a single event to a hash data structure with keys and types
|
102
|
-
# conforming to the JSON envelope.
|
103
|
-
#
|
104
|
-
# @param event [FunctionsFramework::CloudEvents::Event] An input event.
|
105
|
-
# @return [String] The hash structure.
|
106
|
-
#
|
107
|
-
def encode_hash_structure event
|
108
|
-
case event
|
109
|
-
when Event::V0
|
110
|
-
encode_hash_structure_v0 event
|
111
|
-
when Event::V1
|
112
|
-
encode_hash_structure_v1 event
|
113
|
-
else
|
114
|
-
raise SpecVersionError, "Unrecognized specversion: #{event.spec_version}"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
private
|
119
|
-
|
120
|
-
def sort_keys hash
|
121
|
-
result = {}
|
122
|
-
hash.keys.sort.each do |key|
|
123
|
-
result[key] = hash[key]
|
124
|
-
end
|
125
|
-
result
|
126
|
-
end
|
127
|
-
|
128
|
-
def decode_hash_structure_v0 structure
|
129
|
-
data = structure["data"]
|
130
|
-
content_type = structure["datacontenttype"]
|
131
|
-
if data.is_a?(::String) && content_type.is_a?(::String)
|
132
|
-
content_type = ContentType.new content_type
|
133
|
-
if content_type.subtype == "json" || content_type.subtype_format == "json"
|
134
|
-
structure = structure.dup
|
135
|
-
structure["data"] = ::JSON.parse data rescue data
|
136
|
-
structure["datacontenttype"] = content_type
|
137
|
-
end
|
138
|
-
end
|
139
|
-
Event::V0.new attributes: structure
|
140
|
-
end
|
141
|
-
|
142
|
-
def decode_hash_structure_v1 structure
|
143
|
-
if structure.key? "data_base64"
|
144
|
-
structure = structure.dup
|
145
|
-
structure["data"] = ::Base64.decode64 structure.delete "data_base64"
|
146
|
-
end
|
147
|
-
Event::V1.new attributes: structure
|
148
|
-
end
|
149
|
-
|
150
|
-
def encode_hash_structure_v0 event
|
151
|
-
structure = event.to_h
|
152
|
-
data = event.data
|
153
|
-
content_type = event.data_content_type
|
154
|
-
if data.is_a?(::String) && !content_type.nil?
|
155
|
-
if content_type.subtype == "json" || content_type.subtype_format == "json"
|
156
|
-
structure["data"] = ::JSON.parse data rescue data
|
157
|
-
end
|
158
|
-
end
|
159
|
-
structure
|
160
|
-
end
|
161
|
-
|
162
|
-
def encode_hash_structure_v1 event
|
163
|
-
structure = event.to_h
|
164
|
-
data = structure["data"]
|
165
|
-
if data.is_a?(::String) && data.encoding == ::Encoding::ASCII_8BIT
|
166
|
-
structure.delete "data"
|
167
|
-
structure["data_base64"] = ::Base64.encode64 data
|
168
|
-
end
|
169
|
-
structure
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|