functions_framework 0.9.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a4d1e19c5565de4604964e48ff818b05460b2211ef2c8cfbd100bd572d802d7
4
- data.tar.gz: 380d987acf157075cfe7fca5bf038404eb800f48b80614ce9781f44cbd6de764
3
+ metadata.gz: eca52587c3a84a8fdfc58792bc87fb6908e5bbf1c65b265b12ccdc1eb943848d
4
+ data.tar.gz: 2226f0ba38007a22bbd046093a9d726aadcb25feaf18a7c6b24d780b5bdfc749
5
5
  SHA512:
6
- metadata.gz: c76cb765863334411e7ab3bd448912fabc14c7725ae66465426ee996b05557d44653f64d47c98eb429d077f0df558b550b228a3fce014dd5aa9e02e4933cbc62
7
- data.tar.gz: af8d74d419c75dc8f850fa989d48780a26e2639045ff945d4b0a1cd29fa0085d3a82d058db6e49ed9c9f2c2855b3bc495a44ab530e129a846b24c111c76f79f2
6
+ metadata.gz: '08d533e4c06749aeee4feb6988a775186a392a18b3c50a79bc93700b99c56ea6a16da7195c89afd44e4313770e620e3071a7d6207d568a3dd9aed4a9339da71d'
7
+ data.tar.gz: 1c145d4178b2d86bdde76c38340c3ea51f2b54bb9897304eb84ce1f3586467f7e205a4007d06a98dcfa8d78c5b8dbdb8afc919b8e0801bdf5c2420266e3b4dff
data/CHANGELOG.md CHANGED
@@ -1,21 +1,41 @@
1
1
  # Changelog
2
2
 
3
- ### v0.9.0 / 2021-03-18
3
+ ## 1.0.1 (2021-09-10)
4
+
5
+ * FIXED: Update legacy event conversion to set the correct types for firebase database events
6
+
7
+ ## 1.0.0 (2021-07-07)
8
+
9
+ * Bumped the version to 1.0.
10
+ * Removed the "preview" notices for Google Cloud Functions since the Ruby runtime is now GA.
11
+
12
+ ## v0.11.0 / 2021-06-28
13
+
14
+ * UPDATED: Update CloudEvents dependency to 0.5 to get fixes for JSON formatting cases
15
+ * FIXED: Updated Pub/Sub and Firebase event conversion logic to better align to Eventarc
16
+
17
+ ## v0.10.0 / 2021-06-01
18
+
19
+ * ADDED: Support raw pubsub events sent by the pubsub emulator
20
+ * FIXED: Set proper response content-type charset when a function returns a string (plain text) or hash (JSON)
21
+ * FIXED: Properly handle conversion of non-ascii characters in legacy event strings
22
+
23
+ ## v0.9.0 / 2021-03-18
4
24
 
5
25
  * BREAKING CHANGE: Servers are configured as single-threaded in production by default, matching the current behavior of Google Cloud Functions.
6
26
  * FIXED: Fixed conversion of Firebase events to CloudEvents to conform to the specs used by Cloud Functions and Cloud Run.
7
27
  * FIXED: Fixed an error when reading a global set to a Minitest::Mock. This will make it easier to write tests that use mocks for global resources.
8
28
 
9
- ### v0.8.0 / 2021-03-02
29
+ ## v0.8.0 / 2021-03-02
10
30
 
11
31
  * ADDED: Support for lazily-initialized globals
12
32
 
13
- ### v0.7.1 / 2021-01-26
33
+ ## v0.7.1 / 2021-01-26
14
34
 
15
35
  * DOCS: Fixed several errors in the writing-functions doc samples
16
36
  * DOCS: Updated documentation to note public release of GCF support
17
37
 
18
- ### v0.7.0 / 2020-09-25
38
+ ## v0.7.0 / 2020-09-25
19
39
 
20
40
  * Now requires Ruby 2.5 or later.
21
41
  * BREAKING CHANGE: Renamed "context" hash to "globals" and made it read-only for normal functions.
@@ -29,33 +49,33 @@
29
49
  * DOCS: Expanded documentation on initialization, execution context, and shared resources.
30
50
  * DEPRECATED: The functions-framework executable is deprecated. Use functions-framework-ruby instead.
31
51
 
32
- ### v0.6.0 / 2020-09-17
52
+ ## v0.6.0 / 2020-09-17
33
53
 
34
54
  * ADDED: You can use the --version flag to print the framework version
35
55
  * ADDED: You can use the --verify flag to verify that a given function is defined
36
56
  * ADDED: You can now define blocks that are executed at server startup
37
57
 
38
- ### v0.5.2 / 2020-09-06
58
+ ## v0.5.2 / 2020-09-06
39
59
 
40
60
  * FIXED: Use global $stderr rather than STDERR for logger
41
61
  * DOCS: Fix instructions for deployment to Google Cloud Functions
42
62
 
43
- ### v0.5.1 / 2020-07-20
63
+ ## v0.5.1 / 2020-07-20
44
64
 
45
65
  * Updated some documentation links. No functional changes.
46
66
 
47
- ### v0.5.0 / 2020-07-09
67
+ ## v0.5.0 / 2020-07-09
48
68
 
49
69
  * Removed embedded CloudEvents classes and added the official CloudEvents SDK as a dependency. A `FunctionsFramework::CloudEvents` alias provides backward compatibility.
50
70
 
51
- ### v0.4.1 / 2020-07-08
71
+ ## v0.4.1 / 2020-07-08
52
72
 
53
73
  * Fixed unsupported signal error on Windows.
54
74
  * Fixed several edge case errors in legacy event conversion.
55
75
  * Generated Content-Type headers now properly quote param values if needed.
56
76
  * Minor documentation updates.
57
77
 
58
- ### v0.4.0 / 2020-06-29
78
+ ## v0.4.0 / 2020-06-29
59
79
 
60
80
  * Dropped the legacy and largely unsupported `:event` function type. All event functions should be of type `:cloud_event`.
61
81
  * Define the object context for function execution, and include an extensible context helper.
@@ -66,21 +86,21 @@
66
86
  * Removed redundant `_string` accessors from event classes since raw forms are already available via `[]`.
67
87
  * A variety of corrections to event-related class documentation.
68
88
 
69
- ### v0.3.1 / 2020-06-27
89
+ ## v0.3.1 / 2020-06-27
70
90
 
71
91
  * Fixed crash when using "return" directly in a function block.
72
92
  * Added a more flexible request generation helper in the testing module.
73
93
  * Fixed several typos in the documentation.
74
94
 
75
- ### v0.3.0 / 2020-06-26
95
+ ## v0.3.0 / 2020-06-26
76
96
 
77
97
  * Updated the CloudEvent data format for converted pubsub events to conform to Cloud Run's conversion.
78
98
 
79
- ### v0.2.1 / 2020-06-25
99
+ ## v0.2.1 / 2020-06-25
80
100
 
81
101
  * The `--signature-type` check recognizes the legacy `event` type for `:cloud_event` functions.
82
102
 
83
- ### v0.2.0 / 2020-06-24
103
+ ## v0.2.0 / 2020-06-24
84
104
 
85
105
  Significant changes:
86
106
 
@@ -99,11 +119,11 @@ Minor changes:
99
119
  * Renamed a few undocumented environment variables, and added support for a logging level environment variable. All CLI flags now have associated environment variables.
100
120
  * Several fixes to the example code, and added a new Sinatra example.
101
121
 
102
- ### v0.1.1 / 2020-02-27
122
+ ## v0.1.1 / 2020-02-27
103
123
 
104
124
  * Server returns 404 when receiving a /favicon.ico or /robots.txt request.
105
125
  * Correct a rack constant name in Testing#make_post_request
106
126
 
107
- ### v0.1.0 / 2020-01-30
127
+ ## v0.1.0 / 2020-01-30
108
128
 
109
129
  * Initial release
data/README.md CHANGED
@@ -4,7 +4,7 @@ An open source framework for writing lightweight, portable Ruby functions that
4
4
  run in a serverless environment. Functions written to this Framework will run
5
5
  in many different environments, including:
6
6
 
7
- * [Google Cloud Functions](https://cloud.google.com/functions) *(public preview)*
7
+ * [Google Cloud Functions](https://cloud.google.com/functions)
8
8
  * [Google Cloud Run](https://cloud.google.com/run)
9
9
  * Any other [Knative](https://github.com/knative)-based environment
10
10
  * Your local development machine
@@ -60,7 +60,7 @@ Create a `Gemfile` listing the Functions Framework as a dependency:
60
60
  ```ruby
61
61
  # Gemfile
62
62
  source "https://rubygems.org"
63
- gem "functions_framework", "~> 0.9"
63
+ gem "functions_framework", "~> 1.0"
64
64
  ```
65
65
 
66
66
  Create a file called `app.rb` and include the following code. This defines a
data/docs/overview.md CHANGED
@@ -8,7 +8,7 @@ The Functions Framework is an open source framework for writing lightweight,
8
8
  portable Ruby functions that run in a serverless environment. Functions written
9
9
  to this Framework will run in many different environments, including:
10
10
 
11
- * [Google Cloud Functions](https://cloud.google.com/functions) *(public preview)*
11
+ * [Google Cloud Functions](https://cloud.google.com/functions)
12
12
  * [Google Cloud Run](https://cloud.google.com/run)
13
13
  * Any other [Knative](https://github.com/knative)-based environment
14
14
  * Your local development machine
@@ -64,7 +64,7 @@ Create a `Gemfile` listing the Functions Framework as a dependency:
64
64
  ```ruby
65
65
  # Gemfile
66
66
  source "https://rubygems.org"
67
- gem "functions_framework", "~> 0.9"
67
+ gem "functions_framework", "~> 1.0"
68
68
  ```
69
69
 
70
70
  Create a file called `app.rb` and include the following code. This defines a
@@ -111,7 +111,7 @@ dependency on Sinatra in your `Gemfile`:
111
111
 
112
112
  ```ruby
113
113
  source "https://rubygems.org"
114
- gem "functions_framework", "~> 0.9"
114
+ gem "functions_framework", "~> 1.0"
115
115
  gem "sinatra", "~> 2.0"
116
116
  ```
117
117
 
@@ -152,7 +152,7 @@ information about it:
152
152
  require "functions_framework"
153
153
 
154
154
  FunctionsFramework.cloud_event "hello" do |event|
155
- FunctionsFramework.logger.info "I received an event of type #{event.type}!"
155
+ logger.info "I received an event of type #{event.type}!"
156
156
  end
157
157
  ```
158
158
 
@@ -470,7 +470,7 @@ Following is a typical layout for a Functions Framework based project.
470
470
  ```ruby
471
471
  # Gemfile
472
472
  source "https://rubygems.org"
473
- gem "functions_framework", "~> 0.9"
473
+ gem "functions_framework", "~> 1.0"
474
474
  ```
475
475
 
476
476
  ```ruby
@@ -27,10 +27,11 @@ module FunctionsFramework
27
27
  # @return [nil] if the event format was not recognized.
28
28
  #
29
29
  def decode_rack_env env
30
- content_type = ::CloudEvents::ContentType.new env["CONTENT_TYPE"]
30
+ content_type = ::CloudEvents::ContentType.new env["CONTENT_TYPE"], default_charset: "utf-8"
31
31
  return nil unless content_type.media_type == "application" && content_type.subtype_base == "json"
32
32
  input = read_input_json env["rack.input"], content_type.charset
33
33
  return nil unless input
34
+ input = convert_raw_pubsub_event input, env if raw_pubsub_payload? input
34
35
  context = normalized_context input
35
36
  return nil unless context
36
37
  construct_cloud_event context, input["data"]
@@ -40,7 +41,7 @@ module FunctionsFramework
40
41
 
41
42
  def read_input_json input, charset
42
43
  input = input.read if input.respond_to? :read
43
- input = input.encode charset if charset
44
+ input.force_encoding charset if charset
44
45
  content = ::JSON.parse input
45
46
  content = nil unless content.is_a? ::Hash
46
47
  content
@@ -48,14 +49,46 @@ module FunctionsFramework
48
49
  nil
49
50
  end
50
51
 
52
+ def raw_pubsub_payload? input
53
+ return false if input.include?("context") || !input.include?("subscription")
54
+ message = input["message"]
55
+ message.is_a?(::Hash) && message.include?("data") && message.include?("messageId")
56
+ end
57
+
58
+ def convert_raw_pubsub_event input, env
59
+ message = input["message"]
60
+ path = "#{env['SCRIPT_NAME']}#{env['PATH_INFO']}"
61
+ path_match = %r{projects/[^/?]+/topics/[^/?]+}.match path
62
+ topic = path_match ? path_match[0] : "UNKNOWN_PUBSUB_TOPIC"
63
+ timestamp = message["publishTime"] || ::Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.%6NZ")
64
+ {
65
+ "context" => {
66
+ "eventId" => message["messageId"],
67
+ "timestamp" => timestamp,
68
+ "eventType" => "google.pubsub.topic.publish",
69
+ "resource" => {
70
+ "service" => "pubsub.googleapis.com",
71
+ "type" => "type.googleapis.com/google.pubsub.v1.PubsubMessage",
72
+ "name" => topic
73
+ }
74
+ },
75
+ "data" => {
76
+ "@type" => "type.googleapis.com/google.pubsub.v1.PubsubMessage",
77
+ "data" => message["data"],
78
+ "attributes" => message["attributes"]
79
+ }
80
+ }
81
+ end
82
+
51
83
  def normalized_context input
52
84
  id = normalized_context_field input, "eventId"
53
85
  timestamp = normalized_context_field input, "timestamp"
54
86
  type = normalized_context_field input, "eventType"
87
+ domain = normalized_context_field input, "domain"
55
88
  service, resource = analyze_resource normalized_context_field input, "resource"
56
89
  service ||= service_from_type type
57
90
  return nil unless id && timestamp && type && service && resource
58
- { id: id, timestamp: timestamp, type: type, service: service, resource: resource }
91
+ { id: id, timestamp: timestamp, type: type, service: service, resource: resource, domain: domain }
59
92
  end
60
93
 
61
94
  def normalized_context_field input, field
@@ -82,10 +115,10 @@ module FunctionsFramework
82
115
  end
83
116
 
84
117
  def construct_cloud_event context, data
85
- source, subject = convert_source context[:service], context[:resource]
118
+ source, subject = convert_source context[:service], context[:resource], context[:domain]
86
119
  type = LEGACY_TYPE_TO_CE_TYPE[context[:type]]
87
120
  return nil unless type && source
88
- ce_data, data_subject = convert_data context[:service], data
121
+ ce_data, data_subject = convert_data context, data
89
122
  content_type = "application/json"
90
123
  ::CloudEvents::Event.new id: context[:id],
91
124
  source: source,
@@ -97,17 +130,36 @@ module FunctionsFramework
97
130
  time: context[:timestamp]
98
131
  end
99
132
 
100
- def convert_source service, resource
133
+ def convert_source service, resource, domain
101
134
  return ["//#{service}/#{resource}", nil] unless CE_SERVICE_TO_RESOURCE_RE.key? service
102
135
 
103
136
  match = CE_SERVICE_TO_RESOURCE_RE[service].match resource
104
137
  return [nil, nil] unless match
105
- ["//#{service}/#{match[1]}", match[2]]
138
+ resource_fragment = match[1]
139
+ subject = match[2]
140
+
141
+ if service == "firebasedatabase.googleapis.com"
142
+ location =
143
+ case domain
144
+ when "firebaseio.com"
145
+ "us-central1"
146
+ when /^([\w-]+)\./
147
+ Regexp.last_match[1]
148
+ else
149
+ return [nil, nil]
150
+ end
151
+ ["//#{service}/projects/_/locations/#{location}/#{resource_fragment}", subject]
152
+ else
153
+ ["//#{service}/#{resource_fragment}", subject]
154
+ end
106
155
  end
107
156
 
108
- def convert_data service, data
157
+ def convert_data context, data
158
+ service = context[:service]
109
159
  case service
110
160
  when "pubsub.googleapis.com"
161
+ data["messageId"] = context[:id]
162
+ data["publishTime"] = context[:timestamp]
111
163
  [{ "message" => data }, nil]
112
164
  when "firebaseauth.googleapis.com"
113
165
  if data.key? "metadata"
@@ -148,16 +200,16 @@ module FunctionsFramework
148
200
  "providers/firebase.auth/eventTypes/user.create" => "google.firebase.auth.user.v1.created",
149
201
  "providers/firebase.auth/eventTypes/user.delete" => "google.firebase.auth.user.v1.deleted",
150
202
  "providers/google.firebase.analytics/eventTypes/event.log" => "google.firebase.analytics.log.v1.written",
151
- "providers/google.firebase.database/eventTypes/ref.create" => "google.firebase.database.document.v1.created",
152
- "providers/google.firebase.database/eventTypes/ref.write" => "google.firebase.database.document.v1.written",
153
- "providers/google.firebase.database/eventTypes/ref.update" => "google.firebase.database.document.v1.updated",
154
- "providers/google.firebase.database/eventTypes/ref.delete" => "google.firebase.database.document.v1.deleted",
203
+ "providers/google.firebase.database/eventTypes/ref.create" => "google.firebase.database.ref.v1.created",
204
+ "providers/google.firebase.database/eventTypes/ref.write" => "google.firebase.database.ref.v1.written",
205
+ "providers/google.firebase.database/eventTypes/ref.update" => "google.firebase.database.ref.v1.updated",
206
+ "providers/google.firebase.database/eventTypes/ref.delete" => "google.firebase.database.ref.v1.deleted",
155
207
  "providers/cloud.storage/eventTypes/object.change" => "google.cloud.storage.object.v1.finalized"
156
208
  }.freeze
157
209
 
158
210
  CE_SERVICE_TO_RESOURCE_RE = {
159
211
  "firebase.googleapis.com" => %r{^(projects/[^/]+)/(events/[^/]+)$},
160
- "firebasedatabase.googleapis.com" => %r{^(projects/_/instances/[^/]+)/(refs/.+)$},
212
+ "firebasedatabase.googleapis.com" => %r{^projects/_/(instances/[^/]+)/(refs/.+)$},
161
213
  "firestore.googleapis.com" => %r{^(projects/[^/]+/databases/\(default\))/(documents/.+)$},
162
214
  "storage.googleapis.com" => %r{^(projects/[^/]+/buckets/[^/]+)/([^#]+)(?:#.*)?$}
163
215
  }.freeze
@@ -346,9 +346,9 @@ module FunctionsFramework
346
346
  when ::Rack::Response
347
347
  response.finish
348
348
  when ::String
349
- string_response response, "text/plain", 200
349
+ string_response response, 200
350
350
  when ::Hash
351
- string_response ::JSON.dump(response), "application/json", 200
351
+ string_response ::JSON.dump(response), 200, content_type: "application/json"
352
352
  when ::CloudEvents::CloudEventsError
353
353
  cloud_events_error_response response
354
354
  when ::StandardError
@@ -359,10 +359,17 @@ module FunctionsFramework
359
359
  end
360
360
 
361
361
  def notfound_response
362
- string_response "Not found", "text/plain", 404
362
+ string_response "Not found", 404
363
363
  end
364
364
 
365
- def string_response string, content_type, status
365
+ def string_response string, status, content_type: nil
366
+ string.force_encoding ::Encoding::ASCII_8BIT unless string.valid_encoding?
367
+ if string.encoding == ::Encoding::ASCII_8BIT
368
+ content_type ||= "application/octet-stream"
369
+ else
370
+ content_type ||= "text/plain"
371
+ content_type = "#{content_type}; charset=#{string.encoding.name.downcase}"
372
+ end
366
373
  headers = {
367
374
  "Content-Type" => content_type,
368
375
  "Content-Length" => string.bytesize
@@ -372,13 +379,13 @@ module FunctionsFramework
372
379
 
373
380
  def cloud_events_error_response error
374
381
  @config.logger.warn error
375
- string_response "#{error.class}: #{error.message}", "text/plain", 400
382
+ string_response "#{error.class}: #{error.message}", 400
376
383
  end
377
384
 
378
385
  def error_response message
379
386
  @config.logger.error message
380
387
  message = "Unexpected internal error" unless @config.show_error_details?
381
- string_response message, "text/plain", 500
388
+ string_response message, 500
382
389
  end
383
390
  end
384
391
 
@@ -424,7 +431,7 @@ module FunctionsFramework
424
431
  when ::CloudEvents::Event
425
432
  handle_cloud_event event, logger
426
433
  when ::Array
427
- ::CloudEvents::HttpContentError.new "Batched CloudEvents are not supported"
434
+ ::CloudEvents::CloudEventsError.new "Batched CloudEvents are not supported"
428
435
  when ::CloudEvents::CloudEventsError
429
436
  event
430
437
  else
@@ -436,9 +443,13 @@ module FunctionsFramework
436
443
  private
437
444
 
438
445
  def decode_event env
439
- @cloud_events.decode_rack_env(env) ||
446
+ begin
447
+ @cloud_events.decode_event env
448
+ rescue ::CloudEvents::NotCloudEventError
449
+ env["rack.input"].rewind rescue nil
440
450
  @legacy_events.decode_rack_env(env) ||
441
- raise(::CloudEvents::HttpContentError, "Unrecognized event format")
451
+ raise(::CloudEvents::CloudEventsError, "Unrecognized event format")
452
+ end
442
453
  rescue ::CloudEvents::CloudEventsError => e
443
454
  e
444
455
  end
@@ -330,20 +330,27 @@ module FunctionsFramework
330
330
  when ::Array
331
331
  ::Rack::Response.new response[2], response[0], response[1]
332
332
  when ::String
333
- string_response response, "text/plain", 200
333
+ string_response response, 200
334
334
  when ::Hash
335
335
  json = ::JSON.dump response
336
- string_response json, "application/json", 200
336
+ string_response json, 200, content_type: "application/json"
337
337
  when ::StandardError
338
338
  message = "#{response.class}: #{response.message}\n#{response.backtrace}\n"
339
- string_response message, "text/plain", 500
339
+ string_response message, 500
340
340
  else
341
341
  raise "Unexpected response type: #{response.inspect}"
342
342
  end
343
343
  end
344
344
 
345
345
  ## @private
346
- def string_response string, content_type, status
346
+ def string_response string, status, content_type: nil
347
+ string.force_encoding ::Encoding::ASCII_8BIT unless string.valid_encoding?
348
+ if string.encoding == ::Encoding::ASCII_8BIT
349
+ content_type ||= "application/octet-stream"
350
+ else
351
+ content_type ||= "text/plain"
352
+ content_type = "#{content_type}; charset=#{string.encoding.name.downcase}"
353
+ end
347
354
  headers = {
348
355
  "Content-Type" => content_type,
349
356
  "Content-Length" => string.bytesize
@@ -17,5 +17,5 @@ module FunctionsFramework
17
17
  # Version of the Ruby Functions Framework
18
18
  # @return [String]
19
19
  #
20
- VERSION = "0.9.0".freeze
20
+ VERSION = "1.0.1".freeze
21
21
  end
metadata CHANGED
@@ -1,43 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: functions_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-18 00:00:00.000000000 Z
11
+ date: 2021-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cloud_events
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.6.0
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '0.1'
22
+ version: 2.a
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.6.0
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '0.1'
32
+ version: 2.a
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: puma
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 4.3.0
40
+ - - "<"
32
41
  - !ruby/object:Gem::Version
33
- version: '4.3'
42
+ version: 6.a
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
- - - "~>"
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 4.3.0
50
+ - - "<"
39
51
  - !ruby/object:Gem::Version
40
- version: '4.3'
52
+ version: 6.a
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: rack
43
55
  requirement: !ruby/object:Gem::Requirement
@@ -87,10 +99,10 @@ homepage: https://github.com/GoogleCloudPlatform/functions-framework-ruby
87
99
  licenses:
88
100
  - Apache-2.0
89
101
  metadata:
90
- changelog_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v0.9.0/file.CHANGELOG.html
102
+ changelog_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v1.0.1/file.CHANGELOG.html
91
103
  source_code_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby
92
104
  bug_tracker_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby/issues
93
- documentation_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v0.9.0
105
+ documentation_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v1.0.1
94
106
  post_install_message:
95
107
  rdoc_options: []
96
108
  require_paths:
@@ -106,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
118
  - !ruby/object:Gem::Version
107
119
  version: '0'
108
120
  requirements: []
109
- rubygems_version: 3.2.11
121
+ rubygems_version: 3.2.17
110
122
  signing_key:
111
123
  specification_version: 4
112
124
  summary: Functions Framework for Ruby