Sha256: ea9328ef0f7f51989ae61980a4528c50877014d7e91c88ed35b9d9575152faad

Contents?: true

Size: 1.73 KB

Versions: 61

Compression:

Stored size: 1.73 KB

Contents

# Builds an anonymous class that represents a single Lambda function from code
# in app/functions.
#
# The build method returns an anonymous class using Class.new that contains
# the methods defined in the app/functions/hello.rb code.
#
# Ruby Class.new docs:
#
# Creates a new anonymous (unnamed) class with the given superclass (or
# Object if no parameter is given). You can give a class a name by
# assigning the class object to a constant.
# http://ruby-doc.org/core-2.1.1/Class.html#method-c-new
#
# So assigning the result of build to a constant makes for a prettier
# class name. Example:
#
#   constructor = FunctionConstructor.new(code_path)
#   HelloFunction = constructor.build
#
# The class name will be HelloFunction instead of (anonymous). Then usage would
# be:
#
#   hello_function = HelloFunction.new
#   hello_function(hello_function.handler, event, context)
#
# Or call with the process class method:
#
#   HelloFunction.process(event, context, "world")
module Jets::Lambda
  class FunctionConstructor
    def initialize(code_path)
      @code_path = "#{Jets.root}/#{code_path}"
    end

    def build
      code = IO.read(@code_path)
      function_klass = Class.new(Jets::Lambda::Function)
      function_klass.module_eval(code)
      adjust_tasks(function_klass)
      function_klass # assign this to a Constant for a pretty class name
    end

    # For anonymous classes method_added during task registration contains ""
    # for the class name.  We adjust it here.
    def adjust_tasks(klass)
      class_name = @code_path.to_s.sub(/.*\/functions\//,'').sub(/\.rb$/, '')
      class_name = class_name.camelize
      klass.tasks.each do |task|
        task.class_name = class_name
        task.type = "function"
      end
    end
  end
end

Version data entries

61 entries across 61 versions & 2 rubygems

Version Path
jets-2.3.11 lib/jets/lambda/function_constructor.rb
jets-2.3.10 lib/jets/lambda/function_constructor.rb
jets-2.3.9 lib/jets/lambda/function_constructor.rb
jets-2.3.8 lib/jets/lambda/function_constructor.rb
jets-2.3.7 lib/jets/lambda/function_constructor.rb
jets-2.3.6 lib/jets/lambda/function_constructor.rb
jets-2.3.5 lib/jets/lambda/function_constructor.rb
jets-2.3.4 lib/jets/lambda/function_constructor.rb
jets-2.3.3 lib/jets/lambda/function_constructor.rb
jets-2.3.2 lib/jets/lambda/function_constructor.rb
jets-2.3.1 lib/jets/lambda/function_constructor.rb
jets-2.3.0 lib/jets/lambda/function_constructor.rb
jets-2.2.5 lib/jets/lambda/function_constructor.rb
jets-2.2.4 lib/jets/lambda/function_constructor.rb
jets-2.2.3 lib/jets/lambda/function_constructor.rb
jets-2.2.2 lib/jets/lambda/function_constructor.rb
jets-2.2.1 lib/jets/lambda/function_constructor.rb
jets-2.2.0 lib/jets/lambda/function_constructor.rb
jets-2.1.7 lib/jets/lambda/function_constructor.rb
jets-2.1.6 lib/jets/lambda/function_constructor.rb