chatterbot 2.0.0.pre → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +19 -0
- data/Gemfile +9 -17
- data/README.markdown +27 -34
- data/Rakefile +2 -18
- data/bin/chatterbot-register +6 -2
- data/chatterbot.gemspec +11 -12
- data/docs/Gemfile +3 -0
- data/docs/README.md +3 -0
- data/docs/_config.yml +37 -0
- data/docs/_includes/footer.html +3 -0
- data/docs/_includes/header.html +4 -0
- data/docs/_includes/navigation.html +23 -0
- data/docs/_layouts/default.html +98 -0
- data/docs/_layouts/page.html +11 -0
- data/docs/_posts/.gitkeep +0 -0
- data/docs/_site/Gemfile +3 -0
- data/docs/_site/advanced.html +465 -0
- data/docs/_site/configuration.html +436 -0
- data/docs/_site/contributing.html +414 -0
- data/docs/_site/css/main.css +58 -0
- data/docs/_site/css/syntax.css +61 -0
- data/docs/_site/deploying.html +451 -0
- data/docs/_site/examples.html +559 -0
- data/docs/_site/features.html +496 -0
- data/docs/_site/images/01-create-application.png +0 -0
- data/docs/_site/images/02-application-permissions.png +0 -0
- data/docs/_site/images/03-mobile-number.png +0 -0
- data/docs/_site/images/04-access-token.png +0 -0
- data/docs/_site/index.html +461 -0
- data/docs/_site/javascripts/main.js +1 -0
- data/docs/_site/other-tools.html +419 -0
- data/docs/_site/params.json +1 -0
- data/docs/_site/rdoc.html +409 -0
- data/docs/_site/setup.html +491 -0
- data/docs/_site/stylesheets/pygment_trac.css +68 -0
- data/docs/_site/stylesheets/stylesheet.css +247 -0
- data/docs/_site/tut.html +402 -0
- data/docs/_site/twitter-docs.html +409 -0
- data/docs/_site/walkthrough.html +447 -0
- data/docs/advanced.md +62 -0
- data/docs/basics.md +12 -0
- data/docs/bin/jekyll-page +109 -0
- data/docs/configuration.md +32 -0
- data/docs/contributing.md +14 -0
- data/docs/css/main.css +58 -0
- data/docs/css/syntax.css +61 -0
- data/docs/deploying.md +47 -0
- data/docs/examples.md +120 -0
- data/docs/features.md +88 -0
- data/docs/images/01-create-application.png +0 -0
- data/docs/images/02-application-permissions.png +0 -0
- data/docs/images/03-mobile-number.png +0 -0
- data/docs/images/04-access-token.png +0 -0
- data/docs/index.md +69 -0
- data/docs/javascripts/main.js +1 -0
- data/docs/other-tools.md +17 -0
- data/docs/params.json +1 -0
- data/docs/rdoc.md +6 -0
- data/docs/setup.md +84 -0
- data/docs/stylesheets/pygment_trac.css +68 -0
- data/docs/stylesheets/stylesheet.css +247 -0
- data/docs/tips.md +22 -0
- data/docs/tut.md +6 -0
- data/docs/twitter-docs.md +6 -0
- data/docs/walkthrough.md +46 -0
- data/ext/mkrf_conf.rb +28 -0
- data/lib/chatterbot.rb +0 -1
- data/lib/chatterbot/bot.rb +7 -63
- data/lib/chatterbot/client.rb +6 -12
- data/lib/chatterbot/config.rb +2 -2
- data/lib/chatterbot/config_manager.rb +7 -1
- data/lib/chatterbot/dsl.rb +20 -47
- data/lib/chatterbot/home_timeline.rb +1 -2
- data/lib/chatterbot/search.rb +26 -3
- data/lib/chatterbot/skeleton.rb +1 -3
- data/lib/chatterbot/tweet.rb +14 -3
- data/lib/chatterbot/ui.rb +88 -20
- data/lib/chatterbot/version.rb +1 -1
- data/spec/bot_spec.rb +2 -77
- data/spec/client_spec.rb +2 -6
- data/spec/config_manager_spec.rb +6 -5
- data/spec/config_spec.rb +4 -1
- data/spec/dsl_spec.rb +10 -35
- data/spec/fixtures/update_with_media.png +0 -0
- data/spec/search_spec.rb +40 -1
- data/spec/spec_helper.rb +1 -4
- data/spec/tweet_spec.rb +75 -38
- data/templates/skeleton.txt +26 -56
- metadata +84 -141
- data/.document +0 -5
- data/.travis.yml +0 -8
- data/examples/streaming_bot.rb +0 -48
- data/examples/tweet_logger.rb +0 -68
- data/lib/chatterbot/streaming.rb +0 -60
- data/spec/streaming_spec.rb +0 -170
data/lib/chatterbot/skeleton.rb
CHANGED
@@ -13,13 +13,11 @@ module Chatterbot
|
|
13
13
|
path = File.join(Chatterbot.libdir, "..", "templates", "skeleton.txt")
|
14
14
|
src = File.read(path)
|
15
15
|
|
16
|
-
opts = bot.config.merge({
|
16
|
+
opts = bot.config.to_h.merge({
|
17
17
|
:name => bot.botname,
|
18
18
|
:timestamp => Time.now
|
19
19
|
})
|
20
20
|
|
21
|
-
puts opts.inspect
|
22
|
-
|
23
21
|
src % opts
|
24
22
|
end
|
25
23
|
end
|
data/lib/chatterbot/tweet.rb
CHANGED
@@ -13,7 +13,16 @@ module Chatterbot
|
|
13
13
|
debug "I'm in debug mode, otherwise I would tweet: #{txt}"
|
14
14
|
else
|
15
15
|
debug txt
|
16
|
-
|
16
|
+
if params.has_key?(:media)
|
17
|
+
file = params.delete(:media)
|
18
|
+
if ! file.is_a?(File)
|
19
|
+
file = File.new(file)
|
20
|
+
end
|
21
|
+
|
22
|
+
client.update_with_media txt, file, params
|
23
|
+
else
|
24
|
+
client.update txt, params
|
25
|
+
end
|
17
26
|
end
|
18
27
|
rescue Twitter::Error::Forbidden => e
|
19
28
|
#:nocov:
|
@@ -22,10 +31,12 @@ module Chatterbot
|
|
22
31
|
#:nocov:
|
23
32
|
end
|
24
33
|
|
34
|
+
|
25
35
|
# reply to a tweet
|
26
|
-
def reply(txt, source)
|
36
|
+
def reply(txt, source, params = {})
|
27
37
|
debug txt
|
28
|
-
|
38
|
+
params = {:in_reply_to_status_id => source.id}.merge(params)
|
39
|
+
tweet txt, params, source
|
29
40
|
end
|
30
41
|
end
|
31
42
|
end
|
data/lib/chatterbot/ui.rb
CHANGED
@@ -5,7 +5,7 @@ module Chatterbot
|
|
5
5
|
#
|
6
6
|
module UI
|
7
7
|
# Where to send users who need to get API keys
|
8
|
-
API_SIGNUP_URL = "https://twitter.com/
|
8
|
+
API_SIGNUP_URL = "https://apps.twitter.com/app/new"
|
9
9
|
|
10
10
|
|
11
11
|
#:nocov:
|
@@ -13,7 +13,6 @@ module Chatterbot
|
|
13
13
|
puts str.colorize(:red)
|
14
14
|
end
|
15
15
|
|
16
|
-
#:nocov:
|
17
16
|
def green(str)
|
18
17
|
puts str.colorize(:green)
|
19
18
|
end
|
@@ -52,27 +51,35 @@ module Chatterbot
|
|
52
51
|
# sleep here so that if launchy has any output (which it does
|
53
52
|
# sometimes), it doesn't interfere with our input prompt
|
54
53
|
|
55
|
-
sleep(
|
54
|
+
sleep(2)
|
56
55
|
|
57
56
|
puts "Paste your PIN and hit enter when you have completed authorization.\n\n"
|
58
57
|
print "> "
|
59
58
|
|
60
|
-
STDIN.readline.chomp
|
59
|
+
STDIN.readline.chomp.strip
|
61
60
|
rescue Interrupt => e
|
62
61
|
exit
|
63
62
|
end
|
64
63
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
green "****************************************"
|
70
|
-
green "**** API SETUP TIME! ****"
|
71
|
-
green "****************************************"
|
72
|
-
green "****************************************"
|
64
|
+
def ask_yes_no(q)
|
65
|
+
prompt = "> "
|
66
|
+
response = ""
|
67
|
+
|
73
68
|
|
69
|
+
while ! ["y", "n"].include?(response)
|
70
|
+
puts "#{q} [Y/N]"
|
71
|
+
print prompt
|
72
|
+
response = $stdin.gets.chomp.downcase[0]
|
73
|
+
end
|
74
74
|
|
75
|
-
|
75
|
+
if response == "y"
|
76
|
+
true
|
77
|
+
else
|
78
|
+
false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def send_to_app_creation
|
76
83
|
puts "Please hit enter, and I will send you to #{API_SIGNUP_URL} to start the process."
|
77
84
|
puts "(If it doesn't work, you can open a browser and paste the URL in manually)"
|
78
85
|
|
@@ -81,21 +88,82 @@ module Chatterbot
|
|
81
88
|
STDIN.readline
|
82
89
|
|
83
90
|
Launchy.open(API_SIGNUP_URL)
|
91
|
+
|
84
92
|
# pause to allow any launchy output
|
85
|
-
sleep(
|
93
|
+
sleep(2)
|
86
94
|
|
87
95
|
puts "\n\n"
|
96
|
+
|
97
|
+
|
98
|
+
puts "Once you've filled out the app form, click on the 'Keys and Access Tokens' link"
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# Ask the user to get an API key from Twitter.
|
103
|
+
def get_api_key
|
104
|
+
|
105
|
+
green "****************************************"
|
106
|
+
green "****************************************"
|
107
|
+
green "**** API SETUP TIME! ****"
|
108
|
+
green "****************************************"
|
109
|
+
green "****************************************"
|
110
|
+
|
111
|
+
|
112
|
+
puts "\n\nWelcome to Chatterbot. Let's walk through the steps to get a bot running.\n\n"
|
113
|
+
|
114
|
+
|
115
|
+
#
|
116
|
+
# At this point, we don't have any API credentials at all for
|
117
|
+
# this bot, but it's possible the user has already setup an app.
|
118
|
+
# Let's ask!
|
119
|
+
#
|
88
120
|
|
89
|
-
|
121
|
+
puts "Hey, looks like you need to get an API key from Twitter before you can get started.\n\n"
|
122
|
+
|
123
|
+
app_already_exists = ask_yes_no("Have you already set up an app with Twitter?")
|
124
|
+
|
125
|
+
if app_already_exists
|
126
|
+
puts "Terrific! Let's get your bot running!\n\n"
|
127
|
+
else
|
128
|
+
puts "OK, I can help with that!\n\n"
|
129
|
+
send_to_app_creation
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
print "\n\nPaste the 'Consumer Key' here: "
|
90
134
|
STDOUT.flush
|
91
|
-
config[:consumer_key] = STDIN.readline.chomp
|
135
|
+
config[:consumer_key] = STDIN.readline.chomp.strip
|
92
136
|
|
93
|
-
print "Paste the '
|
137
|
+
print "Paste the 'Consumer Secret' here: "
|
94
138
|
STDOUT.flush
|
95
|
-
config[:consumer_secret] = STDIN.readline.chomp
|
139
|
+
config[:consumer_secret] = STDIN.readline.chomp.strip
|
140
|
+
|
96
141
|
|
97
|
-
|
98
|
-
|
142
|
+
puts "\n\nNow it's time to authorize your bot!\n\n"
|
143
|
+
|
144
|
+
if ! app_already_exists && ask_yes_no("Do you want to authorize a bot using the account that created the app?")
|
145
|
+
puts "OK, on the app page, you can click the 'Create my access token' button to proceed.\n\n"
|
146
|
+
|
147
|
+
print "Paste the 'Access Token' here: "
|
148
|
+
STDOUT.flush
|
149
|
+
config[:access_token] = STDIN.readline.chomp.strip
|
150
|
+
|
151
|
+
|
152
|
+
print "\n\nPaste the 'Access Token Secret' here: "
|
153
|
+
STDOUT.flush
|
154
|
+
config[:access_token_secret] = STDIN.readline.chomp.strip
|
155
|
+
|
156
|
+
|
157
|
+
# reset the client so we can re-init with new OAuth credentials
|
158
|
+
reset_client
|
159
|
+
|
160
|
+
# at this point we should have a fully validated client, so grab
|
161
|
+
# the screen name
|
162
|
+
@screen_name = client.user.screen_name rescue nil
|
163
|
+
else
|
164
|
+
reset_client
|
165
|
+
end
|
166
|
+
|
99
167
|
|
100
168
|
#
|
101
169
|
# capture ctrl-c and exit without a stack trace
|
data/lib/chatterbot/version.rb
CHANGED
data/spec/bot_spec.rb
CHANGED
@@ -5,88 +5,13 @@ describe "Chatterbot::Bot" do
|
|
5
5
|
@bot = Chatterbot::Bot.new
|
6
6
|
end
|
7
7
|
|
8
|
-
describe "Streaming API" do
|
9
|
-
it "should call streaming_client.user" do
|
10
|
-
expect(@bot.streaming_client).to receive(:user)
|
11
|
-
@bot.stream!
|
12
|
-
end
|
13
|
-
end
|
14
8
|
|
15
9
|
describe "REST API" do
|
16
10
|
it "should work" do
|
17
|
-
|
18
|
-
|
11
|
+
allow(@bot).to receive(:require_login).and_return(false)
|
12
|
+
allow(@bot).to receive(:client).and_return(fake_home_timeline(3))
|
19
13
|
@bot.register_handler(:home_timeline) {}
|
20
14
|
@bot.run!
|
21
15
|
end
|
22
16
|
end
|
23
|
-
|
24
|
-
describe "run_or_stream" do
|
25
|
-
it "should use streaming if specified" do
|
26
|
-
expect(@bot).to receive(:stream!)
|
27
|
-
@bot.streaming = true
|
28
|
-
@bot.run_or_stream
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should use streaming if required by handler" do
|
32
|
-
expect(@bot).to receive(:stream!)
|
33
|
-
@bot.register_handler(:deleted) {}
|
34
|
-
@bot.run_or_stream
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should use REST if specified" do
|
38
|
-
expect(@bot).to receive(:run!)
|
39
|
-
@bot.run_or_stream
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
describe "stream!" do
|
46
|
-
before(:each) do
|
47
|
-
@sc = double(Twitter::Client)
|
48
|
-
expect(@bot).to receive(:streaming_client).and_return(@sc)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "tweaks settings for searches" do
|
52
|
-
@bot.register_handler(:search, "hello") {}
|
53
|
-
expect(@sc).to receive(:filter)
|
54
|
-
|
55
|
-
@bot.stream!
|
56
|
-
end
|
57
|
-
|
58
|
-
it "calls :user for non-searches" do
|
59
|
-
@bot.register_handler(:home_timeline) {}
|
60
|
-
expect(@sc).to receive(:user)
|
61
|
-
|
62
|
-
@bot.stream!
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "streamify_search_options" do
|
67
|
-
it "works with string" do
|
68
|
-
expect( @bot.streamify_search_options("hello there") ).
|
69
|
-
to eql({track:"hello there"})
|
70
|
-
|
71
|
-
|
72
|
-
expect( @bot.streamify_search_options("hello there, friend") ).
|
73
|
-
to eql({track:"hello there, friend"})
|
74
|
-
end
|
75
|
-
|
76
|
-
it "works with array" do
|
77
|
-
expect( @bot.streamify_search_options(["hello there"]) ).
|
78
|
-
to eql({track:"hello there"})
|
79
|
-
|
80
|
-
expect( @bot.streamify_search_options(["hello there", "friend"]) ).
|
81
|
-
to eql({track:"hello there, friend"})
|
82
|
-
end
|
83
|
-
|
84
|
-
it "works with hash" do
|
85
|
-
opts = {filter:"hello"}
|
86
|
-
expect( @bot.streamify_search_options(opts) ).
|
87
|
-
to eql(opts)
|
88
|
-
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
17
|
end
|
data/spec/client_spec.rb
CHANGED
@@ -8,9 +8,6 @@ describe "Chatterbot::Client" do
|
|
8
8
|
it "should initialize client" do
|
9
9
|
expect(@bot.client).to be_a(Twitter::REST::Client)
|
10
10
|
end
|
11
|
-
it "should initialize streaming client" do
|
12
|
-
expect(@bot.streaming_client).to be_a(Twitter::Streaming::Client)
|
13
|
-
end
|
14
11
|
|
15
12
|
describe "reset!" do
|
16
13
|
it "should reset a bunch of stuff" do
|
@@ -139,12 +136,11 @@ describe "Chatterbot::Client" do
|
|
139
136
|
and_return(double(:token => "access_token", :secret => "access_secret"))
|
140
137
|
|
141
138
|
expect(@bot).to receive(:get_screen_name)
|
142
|
-
expect(@bot).to receive(:update_config)
|
143
139
|
|
144
140
|
@bot.login
|
145
141
|
|
146
|
-
expect(@bot.config[:
|
147
|
-
expect(@bot.config[:
|
142
|
+
expect(@bot.config[:access_token]).to eq("access_token")
|
143
|
+
expect(@bot.config[:access_token_secret]).to eq("access_secret")
|
148
144
|
end
|
149
145
|
|
150
146
|
it "handles errors" do
|
data/spec/config_manager_spec.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
require 'tempfile'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
3
5
|
|
4
6
|
describe "Chatterbot::ConfigManager" do
|
5
7
|
before(:each) do
|
6
|
-
|
8
|
+
tempdir = Dir.tmpdir
|
9
|
+
|
10
|
+
@tmp_config_dest = File.join(tempdir, 'bot.yml')
|
7
11
|
@config = Chatterbot::ConfigManager.new(@tmp_config_dest, {:consumer_key => "bar"})
|
8
12
|
end
|
13
|
+
|
9
14
|
after(:each) do
|
10
15
|
if File.exist?(@tmp_config_dest)
|
11
16
|
File.unlink(@tmp_config_dest)
|
@@ -17,10 +22,6 @@ describe "Chatterbot::ConfigManager" do
|
|
17
22
|
expect(@config.delete(:baz)).to be_nil
|
18
23
|
end
|
19
24
|
|
20
|
-
it "works with missing key" do
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
25
|
it "retains read-only data" do
|
25
26
|
expect(@config[:consumer_key]).to eql("bar")
|
26
27
|
expect(@config.delete(:consumer_key)).to be_nil
|
data/spec/config_spec.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
require 'tempfile'
|
3
|
+
require 'tmpdir'
|
3
4
|
|
4
5
|
describe "Chatterbot::Config" do
|
5
6
|
before(:each) do
|
6
7
|
@bot = Chatterbot::Bot.new
|
7
|
-
|
8
|
+
tempdir = Dir.tmpdir
|
9
|
+
@tmp_config_dest = File.join(tempdir, 'bot.yml')
|
8
10
|
allow(@bot).to receive(:config_file).and_return(@tmp_config_dest)
|
9
11
|
end
|
12
|
+
|
10
13
|
after(:each) do
|
11
14
|
if File.exist?(@tmp_config_dest)
|
12
15
|
File.unlink(@tmp_config_dest)
|
data/spec/dsl_spec.rb
CHANGED
@@ -100,7 +100,7 @@ describe "Chatterbot::DSL" do
|
|
100
100
|
|
101
101
|
describe "search" do
|
102
102
|
it "passes along to bot object" do
|
103
|
-
allow(@bot).to receive(:
|
103
|
+
allow(@bot).to receive(:run!)
|
104
104
|
expect(@bot).to receive(:register_handler).with(:search, ["foo"])
|
105
105
|
search("foo") {}
|
106
106
|
end
|
@@ -118,39 +118,7 @@ describe "Chatterbot::DSL" do
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
describe "favorited" do
|
122
|
-
it "passes along to bot object" do
|
123
|
-
expect(@bot).to receive(:register_handler).with(:favorited, instance_of(Proc))
|
124
|
-
|
125
|
-
favorited {}
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe "followed" do
|
130
|
-
it "passes along to bot object" do
|
131
|
-
expect(@bot).to receive(:register_handler).with(:followed, instance_of(Proc))
|
132
|
-
|
133
|
-
followed {}
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "deleted" do
|
138
|
-
it "passes along to bot object" do
|
139
|
-
expect(@bot).to receive(:register_handler).with(:deleted, instance_of(Proc))
|
140
|
-
|
141
|
-
deleted {}
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
121
|
|
146
|
-
describe "streaming" do
|
147
|
-
it "passes along to bot object" do
|
148
|
-
expect(@bot).to receive(:streaming=).with(true)
|
149
|
-
use_streaming
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
|
154
122
|
it "#retweet passes along to bot object" do
|
155
123
|
expect(@bot).to receive(:retweet).with(1234)
|
156
124
|
retweet(1234)
|
@@ -187,10 +155,17 @@ describe "Chatterbot::DSL" do
|
|
187
155
|
end
|
188
156
|
|
189
157
|
it "#reply passes along to bot object" do
|
190
|
-
|
191
|
-
reply
|
158
|
+
source = double(Twitter::Tweet)
|
159
|
+
expect(@bot).to receive(:reply).with("hello sailor!", source, {})
|
160
|
+
reply "hello sailor!", source
|
192
161
|
end
|
193
162
|
|
163
|
+
it "#reply passes along to bot object with media" do
|
164
|
+
source = double(Twitter::Tweet)
|
165
|
+
expect(@bot).to receive(:reply).with("hello sailor!", source, {media:"/tmp/foo.jpg"})
|
166
|
+
reply "hello sailor!", source, media:"/tmp/foo.jpg"
|
167
|
+
end
|
168
|
+
|
194
169
|
describe "#direct_message" do
|
195
170
|
it "passes along to bot object" do
|
196
171
|
expect(@bot).to receive(:direct_message).with("hello sailor!", nil)
|
Binary file
|
data/spec/search_spec.rb
CHANGED
@@ -7,7 +7,6 @@ describe "Chatterbot::Search" do
|
|
7
7
|
bot.search("foo")
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
10
|
it "calls update_since_id" do
|
12
11
|
bot = test_bot
|
13
12
|
|
@@ -32,6 +31,46 @@ describe "Chatterbot::Search" do
|
|
32
31
|
bot.search(["foo", "bar"])
|
33
32
|
end
|
34
33
|
|
34
|
+
it "encloses search queries in quotes" do
|
35
|
+
bot = test_bot
|
36
|
+
|
37
|
+
allow(bot).to receive(:client).and_return(fake_search(100, 1))
|
38
|
+
expect(bot.client).to receive(:search).
|
39
|
+
with("\"foo bar baz\"", {
|
40
|
+
:result_type=>"recent",
|
41
|
+
:since_id => 1,
|
42
|
+
:since_id_reply => 1
|
43
|
+
})
|
44
|
+
|
45
|
+
bot.search("foo bar baz")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "doesn't enclose search queries in quotes if not exact" do
|
49
|
+
bot = test_bot
|
50
|
+
|
51
|
+
allow(bot).to receive(:client).and_return(fake_search(100, 1))
|
52
|
+
expect(bot.client).to receive(:search).
|
53
|
+
with("foo bar baz", {
|
54
|
+
:result_type=>"recent",
|
55
|
+
:since_id => 1,
|
56
|
+
:since_id_reply => 1
|
57
|
+
})
|
58
|
+
|
59
|
+
bot.search("foo bar baz", exact:false)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "passes along since_id" do
|
63
|
+
bot = test_bot
|
64
|
+
allow(bot).to receive(:since_id).and_return(123)
|
65
|
+
allow(bot).to receive(:since_id_reply).and_return(456)
|
66
|
+
|
67
|
+
allow(bot).to receive(:client).and_return(fake_search(100, 1))
|
68
|
+
expect(bot.client).to receive(:search).with("foo", {:since_id => 123, :result_type => "recent", :since_id_reply => 456})
|
69
|
+
|
70
|
+
bot.search("foo")
|
71
|
+
end
|
72
|
+
|
73
|
+
|
35
74
|
it "accepts extra params" do
|
36
75
|
bot = test_bot
|
37
76
|
|