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