functions_framework 0.4.1 → 0.7.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.
@@ -17,5 +17,5 @@ module FunctionsFramework
17
17
  # Version of the Ruby Functions Framework
18
18
  # @return [String]
19
19
  #
20
- VERSION = "0.4.1".freeze
20
+ VERSION = "0.7.0".freeze
21
21
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: functions_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-08 00:00:00.000000000 Z
11
+ date: 2020-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cloud_events
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: puma
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +52,10 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '2.1'
41
- description: The Functions Framework implementation for Ruby.
55
+ description: The Functions Framework is an open source framework for writing lightweight,
56
+ portable Ruby functions that run in a serverless environment. Functions written
57
+ to this Framework will run on Google Cloud Functions, Google Cloud Run, or any other
58
+ Knative-based environment.
42
59
  email:
43
60
  - dazuma@google.com
44
61
  executables:
@@ -60,15 +77,6 @@ files:
60
77
  - docs/writing-functions.md
61
78
  - lib/functions_framework.rb
62
79
  - lib/functions_framework/cli.rb
63
- - lib/functions_framework/cloud_events.rb
64
- - lib/functions_framework/cloud_events/content_type.rb
65
- - lib/functions_framework/cloud_events/errors.rb
66
- - lib/functions_framework/cloud_events/event.rb
67
- - lib/functions_framework/cloud_events/event/field_interpreter.rb
68
- - lib/functions_framework/cloud_events/event/v0.rb
69
- - lib/functions_framework/cloud_events/event/v1.rb
70
- - lib/functions_framework/cloud_events/http_binding.rb
71
- - lib/functions_framework/cloud_events/json_format.rb
72
80
  - lib/functions_framework/function.rb
73
81
  - lib/functions_framework/legacy_event_converter.rb
74
82
  - lib/functions_framework/registry.rb
@@ -79,10 +87,10 @@ homepage: https://github.com/GoogleCloudPlatform/functions-framework-ruby
79
87
  licenses:
80
88
  - Apache-2.0
81
89
  metadata:
82
- changelog_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby/blob/master/CHANGELOG.md
90
+ changelog_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v0.7.0/file.CHANGELOG.html
83
91
  source_code_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby
84
92
  bug_tracker_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby/issues
85
- documentation_uri: https://rubydoc.info/gems/functions_framework/0.4.1
93
+ documentation_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v0.7.0
86
94
  post_install_message:
87
95
  rdoc_options: []
88
96
  require_paths:
@@ -91,14 +99,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
99
  requirements:
92
100
  - - ">="
93
101
  - !ruby/object:Gem::Version
94
- version: 2.4.0
102
+ version: 2.5.0
95
103
  required_rubygems_version: !ruby/object:Gem::Requirement
96
104
  requirements:
97
105
  - - ">="
98
106
  - !ruby/object:Gem::Version
99
107
  version: '0'
100
108
  requirements: []
101
- rubygems_version: 3.1.2
109
+ rubygems_version: 3.0.3
102
110
  signing_key:
103
111
  specification_version: 4
104
112
  summary: Functions Framework for Ruby
@@ -1,45 +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 "functions_framework/cloud_events/content_type"
16
- require "functions_framework/cloud_events/errors"
17
- require "functions_framework/cloud_events/event"
18
- require "functions_framework/cloud_events/http_binding"
19
- require "functions_framework/cloud_events/json_format"
20
-
21
- module FunctionsFramework
22
- ##
23
- # CloudEvents implementation.
24
- #
25
- # This is a Ruby implementation of the [CloudEvents](https://cloudevents.io)
26
- # specification. It supports both
27
- # [CloudEvents 0.3](https://github.com/cloudevents/spec/blob/v0.3/spec.md) and
28
- # [CloudEvents 1.0](https://github.com/cloudevents/spec/blob/v1.0/spec.md).
29
- #
30
- module CloudEvents
31
- # @private
32
- SUPPORTED_SPEC_VERSIONS = ["0.3", "1.0"].freeze
33
-
34
- class << self
35
- ##
36
- # The spec versions supported by this implementation.
37
- #
38
- # @return [Array<String>]
39
- #
40
- def supported_spec_versions
41
- SUPPORTED_SPEC_VERSIONS
42
- end
43
- end
44
- end
45
- end
@@ -1,222 +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
- module FunctionsFramework
16
- module CloudEvents
17
- ##
18
- # A parsed content-type header.
19
- #
20
- # This object represents the information contained in a Content-Type,
21
- # obtained by parsing the header according to RFC 2045.
22
- #
23
- # Case-insensitive fields, such as media_type and subtype, are normalized
24
- # to lower case.
25
- #
26
- # If parsing fails, this class will try to get as much information as it
27
- # can, and fill the rest with defaults as recommended in RFC 2045 sec 5.2.
28
- # In case of a parsing error, the {#error_message} field will be set.
29
- #
30
- class ContentType
31
- ##
32
- # Parse the given header value.
33
- #
34
- # @param string [String] Content-Type header value in RFC 2045 format
35
- #
36
- def initialize string
37
- @string = string
38
- @media_type = "text"
39
- @subtype_base = @subtype = "plain"
40
- @subtype_format = nil
41
- @params = []
42
- @charset = "us-ascii"
43
- @error_message = nil
44
- parse consume_comments string.strip
45
- @canonical_string = "#{@media_type}/#{@subtype}" +
46
- @params.map { |k, v| "; #{k}=#{maybe_quote v}" }.join
47
- end
48
-
49
- ##
50
- # The original header content string.
51
- # @return [String]
52
- #
53
- attr_reader :string
54
- alias to_s string
55
-
56
- ##
57
- # A "canonical" header content string with spacing and capitalization
58
- # normalized.
59
- # @return [String]
60
- #
61
- attr_reader :canonical_string
62
-
63
- ##
64
- # The media type.
65
- # @return [String]
66
- #
67
- attr_reader :media_type
68
-
69
- ##
70
- # The entire content subtype (which could include an extension delimited
71
- # by a plus sign).
72
- # @return [String]
73
- #
74
- attr_reader :subtype
75
-
76
- ##
77
- # The portion of the content subtype before any plus sign.
78
- # @return [String]
79
- #
80
- attr_reader :subtype_base
81
-
82
- ##
83
- # The portion of the content subtype after any plus sign, or nil if there
84
- # is no plus sign in the subtype.
85
- # @return [String,nil]
86
- #
87
- attr_reader :subtype_format
88
-
89
- ##
90
- # An array of parameters, each element as a two-element array of the
91
- # parameter name and value.
92
- # @return [Array<Array(String,String)>]
93
- #
94
- attr_reader :params
95
-
96
- ##
97
- # The charset, defaulting to "us-ascii" if none is explicitly set.
98
- # @return [String]
99
- #
100
- attr_reader :charset
101
-
102
- ##
103
- # The error message when parsing, or `nil` if there was no error message.
104
- # @return [String,nil]
105
- #
106
- attr_reader :error_message
107
-
108
- ##
109
- # An array of values for the given parameter name
110
- # @param key [String]
111
- # @return [Array<String>]
112
- #
113
- def param_values key
114
- key = key.downcase
115
- @params.inject([]) { |a, (k, v)| key == k ? a << v : a }
116
- end
117
-
118
- ## @private
119
- def == other
120
- other.is_a?(ContentType) && canonical_string == other.canonical_string
121
- end
122
- alias eql? ==
123
-
124
- ## @private
125
- def hash
126
- canonical_string.hash
127
- end
128
-
129
- ## @private
130
- class ParseError < ::StandardError
131
- end
132
-
133
- private
134
-
135
- def parse str
136
- @media_type, str = consume_token str, downcase: true, error_message: "Failed to parse media type"
137
- str = consume_special str, "/"
138
- @subtype, str = consume_token str, downcase: true, error_message: "Failed to parse subtype"
139
- @subtype_base, @subtype_format = @subtype.split "+", 2
140
- until str.empty?
141
- str = consume_special str, ";"
142
- name, str = consume_token str, downcase: true, error_message: "Faled to parse attribute name"
143
- str = consume_special str, "=", error_message: "Failed to find value for attribute #{name}"
144
- val, str = consume_token_or_quoted str, error_message: "Failed to parse value for attribute #{name}"
145
- @params << [name, val]
146
- @charset = val if name == "charset"
147
- end
148
- rescue ParseError => e
149
- @error_message = e.message
150
- end
151
-
152
- def consume_token str, downcase: false, error_message: nil
153
- match = /^([\w!#\$%&'\*\+\.\^`\{\|\}-]+)(.*)$/.match str
154
- raise ParseError, error_message || "Expected token" unless match
155
- token = match[1]
156
- token.downcase! if downcase
157
- str = consume_comments match[2].strip
158
- [token, str]
159
- end
160
-
161
- def consume_special str, expected, error_message: nil
162
- raise ParseError, error_message || "Expected #{expected.inspect}" unless str.start_with? expected
163
- consume_comments str[1..-1].strip
164
- end
165
-
166
- def consume_token_or_quoted str, error_message: nil
167
- return consume_token str unless str.start_with? '"'
168
- arr = []
169
- index = 1
170
- loop do
171
- char = str[index]
172
- case char
173
- when nil
174
- raise ParseError, error_message || "Quoted-string never finished"
175
- when "\""
176
- break
177
- when "\\"
178
- char = str[index + 1]
179
- raise ParseError, error_message || "Quoted-string never finished" unless char
180
- arr << char
181
- index += 2
182
- else
183
- arr << char
184
- index += 1
185
- end
186
- end
187
- index += 1
188
- str = consume_comments str[index..-1].strip
189
- [arr.join, str]
190
- end
191
-
192
- def consume_comments str
193
- return str unless str.start_with? "("
194
- index = 1
195
- loop do
196
- char = str[index]
197
- case char
198
- when nil
199
- raise ParseError, "Comment never finished"
200
- when ")"
201
- break
202
- when "\\"
203
- index += 2
204
- when "("
205
- str = consume_comments str[index..-1]
206
- index = 0
207
- else
208
- index += 1
209
- end
210
- end
211
- index += 1
212
- consume_comments str[index..-1].strip
213
- end
214
-
215
- def maybe_quote str
216
- return str if /^[\w!#\$%&'\*\+\.\^`\{\|\}-]+$/ =~ str
217
- str = str.gsub("\\", "\\\\\\\\").gsub("\"", "\\\\\"")
218
- "\"#{str}\""
219
- end
220
- end
221
- end
222
- end
@@ -1,42 +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
- module FunctionsFramework
16
- module CloudEvents
17
- ##
18
- # Base class for all CloudEvents errors.
19
- #
20
- class CloudEventsError < ::StandardError
21
- end
22
-
23
- ##
24
- # Errors indicating unsupported or incorrectly formatted HTTP content or
25
- # headers.
26
- #
27
- class HttpContentError < CloudEventsError
28
- end
29
-
30
- ##
31
- # Errors indicating an unsupported or incorrect spec version.
32
- #
33
- class SpecVersionError < CloudEventsError
34
- end
35
-
36
- ##
37
- # Errors related to CloudEvent attributes.
38
- #
39
- class AttributeError < CloudEventsError
40
- end
41
- end
42
- end
@@ -1,84 +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 "date"
16
- require "uri"
17
-
18
- require "functions_framework/cloud_events/event/field_interpreter"
19
- require "functions_framework/cloud_events/event/v0"
20
- require "functions_framework/cloud_events/event/v1"
21
-
22
- module FunctionsFramework
23
- module CloudEvents
24
- ##
25
- # An Event object represents a complete CloudEvent, including both data and
26
- # context attributes. The following are true of all event objects:
27
- #
28
- # * Event classes are defined within this module. For example, events
29
- # conforming to the CloudEvents 1.0 specification are of type
30
- # {FunctionsFramework::CloudEvents::Event::V1}.
31
- # * All event classes include this module, so you can use
32
- # `is_a? FunctionsFramework::CloudEvents::Event` to test whether an
33
- # object is an event.
34
- # * All event objects are immutable. Data and atribute values can be
35
- # retrieved but not modified. To "modify" an event, make a copy with
36
- # the desired changes. Generally, event classes will provide a helper
37
- # method for this purpose.
38
- # * All event objects have a `spec_version` method that returns the
39
- # version of the CloudEvents spec implemented by that event. (Other
40
- # methods may be different, depending on the spec version.)
41
- #
42
- # To create an event, you may either:
43
- #
44
- # * Construct an instance of the event class directly, for example by
45
- # calling {Event::V1.new} and passing a set of attributes.
46
- # * Call {Event.create} and pass a spec version and a set of attributes.
47
- # This will choose the appropriate event class based on the version.
48
- # * Decode an event from another representation. For example, use
49
- # {CloudEvents::JsonFormat} to decode an event from JSON, or use
50
- # {CloudEvents::HttpBinding} to decode an event from an HTTP request.
51
- #
52
- # See https://github.com/cloudevents/spec for more information about
53
- # CloudEvents. The documentation for the individual event classes
54
- # {FunctionsFramework::CloudEvents::Event::V0} and
55
- # {FunctionsFramework::CloudEvents::Event::V1} also include links to their
56
- # respective specifications.
57
- #
58
- module Event
59
- class << self
60
- ##
61
- # Create a new cloud event object with the given version. Generally,
62
- # you must also pass additional keyword arguments providing the event's
63
- # data and attributes. For example, if you pass `1.0` as the
64
- # `spec_version`, the remaining keyword arguments will be passed
65
- # through to the {Event::V1.new} constructor.
66
- #
67
- # @param spec_version [String] The required `specversion` field.
68
- # @param kwargs [keywords] Additional parameters for the event.
69
- #
70
- def create spec_version:, **kwargs
71
- case spec_version
72
- when "0.3"
73
- V0.new spec_version: spec_version, **kwargs
74
- when /^1(\.|$)/
75
- V1.new spec_version: spec_version, **kwargs
76
- else
77
- raise SpecVersionError, "Unrecognized specversion: #{spec_version}"
78
- end
79
- end
80
- alias new create
81
- end
82
- end
83
- end
84
- end