module Bot module Message class Base attr_accessor :message def initialize(to, options=false) raise NotImplementedError end def as_json(options=nil) self.message.to_h end def method_missing(m, *args, &block) if m =~ /.+=/ args.each do |arg| self.message[m.to_s.gsub('=', '')] = arg end else self.message[m.to_s] end end protected def suggested_responses=(suggested_responses) case suggested_responses when Array self.message['keyboards'] = [{ 'type' => 'suggested', 'responses' => build_suggested_responses(suggested_responses) }] when Hash self.message.merge!(suggested_responses) end end def build_suggested_responses(suggested_responses) suggested_responses.map do |response| case response when String { 'type' => 'text', 'body' => response } when Hash response end end end end end end