Class: Jets::Processors::Deducer

Inherits:
Object
  • Object
show all
Defined in:
lib/jets/processors/deducer.rb

Overview

Jets::Processors::Deducer class figures out information that allows the controller or job to be called. Sme key methods for deducer:

code - code to instance eval.  IE: PostsController.new(event, context).index
path - full path to the app code. IE: #{Jets.root}app/controllers/posts_controller.rb

Instance Method Summary collapse

Constructor Details

#initialize(handler) ⇒ Deducer

Returns a new instance of Deducer.



8
9
10
11
12
13
# File 'lib/jets/processors/deducer.rb', line 8

def initialize(handler)
  @handler = handler # handlers/controllers/posts.show
  # @handler_path: "handlers/controllers/posts"
  # @handler_method: "show"
  @handler_path, @handler_method = @handler.split('.')
end

Instance Method Details

#class_nameObject

Example underscored_class_name:

class_name = underscored_class_name
class_name = class_name # PostsController


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/jets/processors/deducer.rb', line 44

def class_name
  regexp = shared? ?
    Regexp.new(".*handlers/shared/functions/") :
    Regexp.new(".*handlers/#{process_type.pluralize}/")

  # Example regexp:
  #   /.*handlers\/controllers\//
  #   /.*handlers\/jobs\//
  class_name = @handler_path.sub(regexp, "")
  # Example class names:
  #   posts_controller
  #   hard_job
  #   hello
  #   hello_function

  class_name.camelize
end

#codeObject



15
16
17
18
19
# File 'lib/jets/processors/deducer.rb', line 15

def code
  # code: "PostsController.process(event, context, meth: "show")"
  # code: "HardJob.process(event, context, meth: "dig")"
  %|#{class_name}.process(event, context, "#{@handler_method}")|
end

#load_classObject



62
63
64
# File 'lib/jets/processors/deducer.rb', line 62

def load_class
  Jets::Klass.from_path(path)
end

#pathObject

Input: @handler_path: handlers/jobs/hard_job.rb Output: #{Jets.root/app/jobs/hard_job.rb



23
24
25
# File 'lib/jets/processors/deducer.rb', line 23

def path
  @handler_path.sub("handlers", "app") + ".rb"
end

#process_typeObject

process_type is key. It can be either “controller” or “job”. It is used to deduce the rest of the methods: code, path.



29
30
31
32
33
34
35
# File 'lib/jets/processors/deducer.rb', line 29

def process_type
  if shared?
    "function" # all app/shared/functions are always function process_type
  else
    @handler.split('/')[1].singularize # controller, job, rule, etc
  end
end

#shared?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/jets/processors/deducer.rb', line 37

def shared?
  @handler.include?("/shared/functions")
end