class Talktome::Client::Local

Builds a local client, that applies strategies synchronously and runs locally

Public Instance Methods

talktome(message, user, tpldata, strategies, &callback) click to toggle source
# File lib/talktome/client/local.rb, line 9
def talktome(message, user, tpldata, strategies, &callback)
  message, handler = load_message!(message, strategies)
  message = message.instantiate(tpldata)
  options[:debugger].call(message, user, handler) if options[:debugger]
  handler.send_message message, user, &callback
end

Protected Instance Methods

load_message!(identifier, strategies) click to toggle source
# File lib/talktome/client/local.rb, line 18
def load_message!(identifier, strategies)
  folder = self.folder/identifier
  raise TemplateNotFoundError, "No such message `#{identifier}`"            unless folder.exists?
  raise InvalidMessageError, "Message `#{identifier}` should be a folder" unless folder.directory?
  strategies.each do |s|
    if (file = folder.glob("#{s}.*").first) && file.file?
      handler = get_handler(s)
      options = {}
      options[:templater] = templater(s)
      message = Message.new(file, options)
      return [ message, handler ]
    end
  end
  files = folder.glob("*").map{|f| f.basename.to_s }
  raise InvalidMessageError, "No available strategy for `#{identifier}`\n#{files.inspect} vs. #{strategies.inspect}"
end
templater(strategy) click to toggle source
# File lib/talktome/client/local.rb, line 35
def templater(strategy)
  return nil unless tpl_folder = options[:layouts] || options[:templates]
  ->(message, src, ctype) {
    if (file = tpl_folder/"#{strategy}.#{ctype}").file?
      data = { metadata: message.metadata, yield: src }
      Mustache.render(file.read, data)
    else
      src
    end
  }
end