Sha256: e7dd341c5ac4c587d5418d795fa2db25b606031a1f5760a025f54b500d4ca52a

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

module JohnDoe
  class Response
    attr_accessor :text, :emotion
    def initialize(t,e)
      @text = t
      @emotion = e[rand(e.size)]
    end
  end
  class Responser
    def initialize(data)
      @data = data
    end

    def response(sentence)
      @data.patterns.each do |k,v|
        if (/^#{k}/i =~ sentence)
          return Response.new(sub_v(random_quote(@data.responses[v[:resp]], /^#{k}/i.match(sentence).captures)),v[:emotions])
        end
      end
      return Response.new(sub_v(random_quote(@data.default["dontunderstand"])),["none"])
    end

    #substitute variables
    def sub_v(s)
      while (nil != (match = /(([a-z]+:)([a-z]+)+)/.match s))
        s.gsub!(match[0],get_data(match[0]))
      end
      return s
    end

    #get_data bot:name
    def get_data(path)
      root = @data.knowledge
      path.split(":").each {|v|root = root[v]}
      return root
    end

    def random_quote(s, subjects = [])
      return subject_replace(s[rand(s.size)], subjects)
    end

    def subject_replace(s,subjects = [])
      return s if subjects.empty?
      return s.gsub("$",describe_who(subjects[0]))
    end

    def describe_who(s)
      s.gsub(/([^a-z])me([^a-z]|$)/,"\\1###\\2").gsub(/([^a-z])you([^a-z]|$)/,"\\1me\\2").gsub("###","you")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
john-doe-0.1.0 lib/johndoe/responser.rb