Module: Hg::Chunk

Defined in:
lib/hg/chunk.rb

Defined Under Namespace

Modules: ClassMethods, Initializer

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
6
7
8
9
10
11
12
# File 'lib/hg/chunk.rb', line 3

def self.included(base)
  base.extend ClassMethods
  base.prepend Initializer
  base.id = base.to_s
  base.deliverables = []
  base.dynamic = false
  base.add_to_router
  base.add_to_chunks
  base.include_chunks
end

Instance Method Details

#deliverObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/hg/chunk.rb', line 14

def deliver
  self.class.show_typing(@recipient)

  Rails.logger.info 'DELIVERABLES'
  Rails.logger.info self.class.deliverables.inspect

  self.class.deliverables.each do |deliverable|
    # If another chunk, deliver it
    if deliverable.is_a? Class
      deliverable.new(recipient: @recipient, context: @context).deliver
    # If dynamic, then it needs to be evaluated at delivery time. Create a
    # `template` with empty `@deliverables`, then evaluate
    # the dynamic block within it and deliver.
    elsif deliverable.is_a? Proc
      template = self.class.dup
      template.deliverables = []

      template.class_exec(@recipient, @context, &deliverable)

      template.new(recipient: @recipient, context: @context).deliver
    # Otherwise, it's just a raw message. Deliver it.
    else
      Facebook::Messenger::Bot.deliver(deliverable.merge(recipient: @recipient), access_token: ENV['ACCESS_TOKEN'])
    end
  end
end