Sha256: ed8ecbffa32681fcd58fc81cf85dd37d6514ce4feeb6b590bfe32f3efdad63e0

Contents?: true

Size: 1.78 KB

Versions: 15

Compression:

Stored size: 1.78 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, @code_path)
      adjust_definitions(function_klass)
      function_klass # assign this to a Constant for a pretty class name
    end

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

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
jets-5.0.13 lib/jets/lambda/function_constructor.rb
jets-5.0.12 lib/jets/lambda/function_constructor.rb
jets-5.0.11 lib/jets/lambda/function_constructor.rb
jets-5.0.10 lib/jets/lambda/function_constructor.rb
jets-5.0.9 lib/jets/lambda/function_constructor.rb
jets-5.0.8 lib/jets/lambda/function_constructor.rb
jets-5.0.7 lib/jets/lambda/function_constructor.rb
jets-5.0.6 lib/jets/lambda/function_constructor.rb
jets-5.0.5 lib/jets/lambda/function_constructor.rb
jets-5.0.4 lib/jets/lambda/function_constructor.rb
jets-5.0.3 lib/jets/lambda/function_constructor.rb
jets-5.0.2 lib/jets/lambda/function_constructor.rb
jets-5.0.1 lib/jets/lambda/function_constructor.rb
jets-5.0.0 lib/jets/lambda/function_constructor.rb
jets-5.0.0.beta1 lib/jets/lambda/function_constructor.rb