Class: FunctionsFramework::Registry
- Inherits:
- 
      Object
      
        - Object
- FunctionsFramework::Registry
 
- Defined in:
- lib/functions_framework/registry.rb
Overview
Registry providing lookup of functions by name.
Instance Method Summary collapse
- 
  
    
      #[](name)  ⇒ FunctionsFramework::Function? 
    
    
  
  
  
  
  
  
  
  
  
    Look up a function definition by name. 
- 
  
    
      #add_cloud_event(name, &block)  ⇒ self 
    
    
  
  
  
  
  
  
  
  
  
    Add a CloudEvent function to the registry. 
- 
  
    
      #add_http(name, &block)  ⇒ self 
    
    
  
  
  
  
  
  
  
  
  
    Add an HTTP function to the registry. 
- 
  
    
      #add_startup_task(&block)  ⇒ self 
    
    
  
  
  
  
  
  
  
  
  
    Add a startup task. 
- 
  
    
      #add_typed(name, request_class: nil, &block)  ⇒ self 
    
    
  
  
  
  
  
  
  
  
  
    Add a Typed function to the registry. 
- 
  
    
      #initialize  ⇒ Registry 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Create a new empty registry. 
- 
  
    
      #names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    Returns the list of defined names. 
- 
  
    
      #startup_tasks  ⇒ Array<FunctionsFramework::Function> 
    
    
  
  
  
  
  
  
  
  
  
    Return an array of startup tasks. 
Constructor Details
#initialize ⇒ Registry
Create a new empty registry.
| 23 24 25 26 27 | # File 'lib/functions_framework/registry.rb', line 23 def initialize @mutex = ::Mutex.new @functions = {} @start_tasks = [] end | 
Instance Method Details
#[](name) ⇒ FunctionsFramework::Function?
Look up a function definition by name.
| 36 37 38 | # File 'lib/functions_framework/registry.rb', line 36 def [] name @mutex.synchronize { @functions[name.to_s] } end | 
#add_cloud_event(name, &block) ⇒ self
Add a CloudEvent function to the registry.
You must provide a name for the function, and a block that implemets the
function. The block should take one argument: the event object of type
CloudEvents::Event.
Any return value is ignored.
| 119 120 121 122 123 124 125 126 | # File 'lib/functions_framework/registry.rb', line 119 def add_cloud_event name, &block name = name.to_s @mutex.synchronize do raise ::ArgumentError, "Function already defined: #{name}" if @functions.key? name @functions[name] = Function.cloud_event name, &block end self end | 
#add_http(name, &block) ⇒ self
Add an HTTP function to the registry.
You must provide a name for the function, and a block that implemets the
function. The block should take a single Rack::Request argument. It
should return one of the following:
- A standard 3-element Rack response array. See https://github.com/rack/rack/blob/master/SPEC
-  A Rack::Responseobject.
- A simple String that will be sent as the response body.
- A Hash object that will be encoded as JSON and sent as the response body.
| 75 76 77 78 79 80 81 82 | # File 'lib/functions_framework/registry.rb', line 75 def add_http name, &block name = name.to_s @mutex.synchronize do raise ::ArgumentError, "Function already defined: #{name}" if @functions.key? name @functions[name] = Function.http name, &block end self end | 
#add_startup_task(&block) ⇒ self
Add a startup task.
Startup tasks are generally run just before a server starts. They are passed the Function identifying the function to execute, and have no return value.
| 138 139 140 141 142 143 | # File 'lib/functions_framework/registry.rb', line 138 def add_startup_task &block @mutex.synchronize do @start_tasks << Function.startup_task(&block) end self end | 
#add_typed(name, request_class: nil, &block) ⇒ self
Add a Typed function to the registry.
You must provide a name for the function, and a block that implements the
function. The block should take a single Hash argument which will be the
JSON decoded request payload. It should return a Hash response which
will be JSON encoded and written to the response.
| 98 99 100 101 102 103 104 105 | # File 'lib/functions_framework/registry.rb', line 98 def add_typed name, request_class: nil, &block name = name.to_s @mutex.synchronize do raise ::ArgumentError, "Function already defined: #{name}" if @functions.key? name @functions[name] = Function.typed name, request_class: request_class, &block end self end | 
#names ⇒ Array<String>
Returns the list of defined names
| 45 46 47 | # File 'lib/functions_framework/registry.rb', line 45 def names @mutex.synchronize { @functions.keys.sort } end | 
#startup_tasks ⇒ Array<FunctionsFramework::Function>
Return an array of startup tasks.
| 54 55 56 | # File 'lib/functions_framework/registry.rb', line 54 def startup_tasks @mutex.synchronize { @start_tasks.dup } end |