Sha256: 96deccd4504fe7adf2a88f868fe163331ac9f225f4c95652e8c8d8f91daf161c

Contents?: true

Size: 1.73 KB

Versions: 32

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.classify
      klass.tasks.each do |task|
        task.class_name = class_name
        task.type = "function"
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 2 rubygems

Version Path
jets-1.9.4 lib/jets/lambda/function_constructor.rb
jets-1.9.3 lib/jets/lambda/function_constructor.rb
jets-1.9.2 lib/jets/lambda/function_constructor.rb
jets-1.9.1 lib/jets/lambda/function_constructor.rb
jets-1.9.0 lib/jets/lambda/function_constructor.rb
jets-1.8.14 lib/jets/lambda/function_constructor.rb
jets-1.8.13 lib/jets/lambda/function_constructor.rb
jets-1.8.12 lib/jets/lambda/function_constructor.rb
jets-1.8.11 lib/jets/lambda/function_constructor.rb
jets-1.8.10 lib/jets/lambda/function_constructor.rb
jets-1.8.9 lib/jets/lambda/function_constructor.rb
jets-1.8.8 lib/jets/lambda/function_constructor.rb
jets-1.8.7 lib/jets/lambda/function_constructor.rb
jets-1.8.6 lib/jets/lambda/function_constructor.rb
jets-1.8.5 lib/jets/lambda/function_constructor.rb
jets-1.8.4 lib/jets/lambda/function_constructor.rb
jets-1.8.3 lib/jets/lambda/function_constructor.rb
jets-1.8.2 lib/jets/lambda/function_constructor.rb
jets-1.8.1 lib/jets/lambda/function_constructor.rb
jets-1.8.0 lib/jets/lambda/function_constructor.rb