cleverbot 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Gemfile.lock +6 -0
- data/README.rdoc +22 -0
- data/VERSION +1 -1
- data/cleverbot.gemspec +9 -2
- data/lib/cleverbot.rb +3 -0
- data/lib/cleverbot/client.rb +91 -0
- data/lib/cleverbot/parser.rb +44 -0
- data/spec/cleverbot/client_spec.rb +181 -0
- data/spec/cleverbot/parser_spec.rb +84 -0
- metadata +28 -13
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -3,10 +3,15 @@ GEM
|
|
3
3
|
specs:
|
4
4
|
diff-lcs (1.1.3)
|
5
5
|
git (1.2.5)
|
6
|
+
httparty (0.8.0)
|
7
|
+
multi_json
|
8
|
+
multi_xml
|
6
9
|
jeweler (1.6.4)
|
7
10
|
bundler (~> 1.0)
|
8
11
|
git (>= 1.2.5)
|
9
12
|
rake
|
13
|
+
multi_json (1.0.3)
|
14
|
+
multi_xml (0.4.0)
|
10
15
|
rake (0.9.2)
|
11
16
|
rcov (0.9.10)
|
12
17
|
rdoc (3.9.4)
|
@@ -24,6 +29,7 @@ PLATFORMS
|
|
24
29
|
|
25
30
|
DEPENDENCIES
|
26
31
|
bundler (~> 1.0)
|
32
|
+
httparty (~> 0.8.0)
|
27
33
|
jeweler (~> 1.6)
|
28
34
|
rcov (~> 0.9)
|
29
35
|
rdoc (~> 3.9)
|
data/README.rdoc
CHANGED
@@ -2,6 +2,28 @@
|
|
2
2
|
|
3
3
|
Ruby wrapper for Cleverbot.
|
4
4
|
|
5
|
+
== Examples
|
6
|
+
|
7
|
+
=== Talk to Cleverbot with Cleverbot::Client.write
|
8
|
+
|
9
|
+
@params = Cleverbot::Client.write 'Hi.'
|
10
|
+
@params['message'] # => "How are you?"
|
11
|
+
@params['sessionid'] # => "ABC01234567"
|
12
|
+
|
13
|
+
@params.keep_if { |key, value| Cleverbot::Client::DEFAULT_PARAMS.keys.include? key }
|
14
|
+
@params['message'] # => nil
|
15
|
+
@params['sessionid'] # => "ABC01234567"
|
16
|
+
|
17
|
+
@params = Cleverbot::Client.write 'Good, you?', @params
|
18
|
+
@params['message'] # => "Good."
|
19
|
+
@params['sessionid'] # => "ABC01234567"
|
20
|
+
|
21
|
+
=== Talk to Cleverbot with Cleverbot::Client#write to manage parameters.
|
22
|
+
|
23
|
+
@client = Cleverbot::Client.new
|
24
|
+
@client.write 'Hi.' # => "How are you?"
|
25
|
+
@client.write 'Good, you?' # => "Good."
|
26
|
+
|
5
27
|
== Contributing to cleverbot
|
6
28
|
|
7
29
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/cleverbot.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cleverbot}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Benjamin Manns"]
|
12
|
-
s.date = %q{2011-09-
|
12
|
+
s.date = %q{2011-09-16}
|
13
13
|
s.description = %q{Ruby wrapper for Cleverbot.}
|
14
14
|
s.email = %q{benmanns@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,6 +28,10 @@ Gem::Specification.new do |s|
|
|
28
28
|
"VERSION",
|
29
29
|
"cleverbot.gemspec",
|
30
30
|
"lib/cleverbot.rb",
|
31
|
+
"lib/cleverbot/client.rb",
|
32
|
+
"lib/cleverbot/parser.rb",
|
33
|
+
"spec/cleverbot/client_spec.rb",
|
34
|
+
"spec/cleverbot/parser_spec.rb",
|
31
35
|
"spec/cleverbot_spec.rb",
|
32
36
|
"spec/spec_helper.rb"
|
33
37
|
]
|
@@ -41,12 +45,14 @@ Gem::Specification.new do |s|
|
|
41
45
|
s.specification_version = 3
|
42
46
|
|
43
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
48
|
+
s.add_runtime_dependency(%q<httparty>, ["~> 0.8.0"])
|
44
49
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
45
50
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6"])
|
46
51
|
s.add_development_dependency(%q<rcov>, ["~> 0.9"])
|
47
52
|
s.add_development_dependency(%q<rdoc>, ["~> 3.9"])
|
48
53
|
s.add_development_dependency(%q<rspec>, ["~> 2.3"])
|
49
54
|
else
|
55
|
+
s.add_dependency(%q<httparty>, ["~> 0.8.0"])
|
50
56
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
51
57
|
s.add_dependency(%q<jeweler>, ["~> 1.6"])
|
52
58
|
s.add_dependency(%q<rcov>, ["~> 0.9"])
|
@@ -54,6 +60,7 @@ Gem::Specification.new do |s|
|
|
54
60
|
s.add_dependency(%q<rspec>, ["~> 2.3"])
|
55
61
|
end
|
56
62
|
else
|
63
|
+
s.add_dependency(%q<httparty>, ["~> 0.8.0"])
|
57
64
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
58
65
|
s.add_dependency(%q<jeweler>, ["~> 1.6"])
|
59
66
|
s.add_dependency(%q<rcov>, ["~> 0.9"])
|
data/lib/cleverbot.rb
CHANGED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'cleverbot/parser'
|
2
|
+
|
3
|
+
module Cleverbot
|
4
|
+
# Ruby wrapper for Cleverbot.com.
|
5
|
+
class Client
|
6
|
+
include HTTParty
|
7
|
+
|
8
|
+
# The default form variables for POSTing to Cleverbot.com
|
9
|
+
DEFAULT_PARAMS = {
|
10
|
+
'stimulus' => '',
|
11
|
+
'start' => 'y',
|
12
|
+
'sessionid' => '',
|
13
|
+
'vText8' => '',
|
14
|
+
'vText7' => '',
|
15
|
+
'vText6' => '',
|
16
|
+
'vText5' => '',
|
17
|
+
'vText4' => '',
|
18
|
+
'vText3' => '',
|
19
|
+
'vText2' => '',
|
20
|
+
'icognoid' => 'wsf',
|
21
|
+
'icognocheck' => '',
|
22
|
+
'fno' => '0',
|
23
|
+
'prevref' => '',
|
24
|
+
'emotionaloutput' => '',
|
25
|
+
'emotionalhistory' => '',
|
26
|
+
'asbotname' => '',
|
27
|
+
'ttsvoice' => '',
|
28
|
+
'typing' => '',
|
29
|
+
'lineref' => '',
|
30
|
+
'sub' => 'Say',
|
31
|
+
'islearning' => '1',
|
32
|
+
'cleanslate' => 'false',
|
33
|
+
}
|
34
|
+
|
35
|
+
# The path to the form endpoint on Cleverbot.com.
|
36
|
+
PATH = '/webservicemin'
|
37
|
+
|
38
|
+
base_uri 'http://www.cleverbot.com'
|
39
|
+
|
40
|
+
parser Parser
|
41
|
+
|
42
|
+
# Holds the parameters for an instantiated Cleverbot::Base.
|
43
|
+
attr_reader :params
|
44
|
+
|
45
|
+
# Creates a digest from the form parameters.
|
46
|
+
#
|
47
|
+
# ==== Parameters
|
48
|
+
#
|
49
|
+
# [<tt>body</tt>] <tt>String</tt> to be digested.
|
50
|
+
def self.digest body
|
51
|
+
Digest::MD5.hexdigest body[9...29]
|
52
|
+
end
|
53
|
+
|
54
|
+
# Sends a message to Cleverbot.com and returns a <tt>Hash</tt> containing the parameters received.
|
55
|
+
#
|
56
|
+
# ==== Parameters
|
57
|
+
#
|
58
|
+
# [<tt>message</tt>] Optional <tt>String</tt> holding the message to be sent. Defaults to <tt>''</tt>.
|
59
|
+
# [<tt>params</tt>] Optional <tt>Hash</tt> with form parameters. Merged with DEFAULT_PARAMS. Defaults to <tt>{}</tt>.
|
60
|
+
def self.write message='', params={}
|
61
|
+
body = DEFAULT_PARAMS.merge params
|
62
|
+
body['stimulus'] = message
|
63
|
+
body['icognocheck'] = digest HashConversions.to_params(body)
|
64
|
+
|
65
|
+
post(PATH, :body => body).parsed_response
|
66
|
+
end
|
67
|
+
|
68
|
+
# Initializes a Cleverbot::Base with given parameters.
|
69
|
+
#
|
70
|
+
# ==== Parameters
|
71
|
+
#
|
72
|
+
# [<tt>params</tt>] Optional <tt>Hash</tt> holding the initial parameters. Defaults to <tt>{}</tt>.
|
73
|
+
def initialize params={}
|
74
|
+
@params = params
|
75
|
+
end
|
76
|
+
|
77
|
+
# Sends a message and returns a <tt>String</tt> with the message received. Updates #params to maintain state.
|
78
|
+
#
|
79
|
+
# ==== Parameters
|
80
|
+
#
|
81
|
+
# [<tt>message</tt>] Optional <tt>String</tt> holding the message to be sent. Defaults to <tt>''</tt>.
|
82
|
+
def write message=''
|
83
|
+
response = self.class.write message, @params
|
84
|
+
message = response['message']
|
85
|
+
response.keep_if { |key, value| DEFAULT_PARAMS.keys.include? key }
|
86
|
+
@params.merge! response
|
87
|
+
@params.delete_if { |key, value| DEFAULT_PARAMS[key] == value }
|
88
|
+
message
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Cleverbot
|
4
|
+
# Used in Cleverbot::Client to parse responses from Cleverbot.com.
|
5
|
+
class Parser < HTTParty::Parser
|
6
|
+
# Keys that correspond to the <tt>Array</tt> that Cleverbot.com returns.
|
7
|
+
# They are combined with the <tt>Array</tt> to form a response <tt>Hash</tt>.
|
8
|
+
KEYS = [
|
9
|
+
'message',
|
10
|
+
'sessionid',
|
11
|
+
'logurl',
|
12
|
+
'vText8',
|
13
|
+
'vText7',
|
14
|
+
'vText6',
|
15
|
+
'vText5',
|
16
|
+
'vText4',
|
17
|
+
'vText3',
|
18
|
+
'vText2',
|
19
|
+
'prevref',
|
20
|
+
nil,
|
21
|
+
'emotionalhistory',
|
22
|
+
'ttsLocMP3',
|
23
|
+
'ttsLocTXT',
|
24
|
+
'ttsLocTXT3',
|
25
|
+
'ttsText',
|
26
|
+
'lineref',
|
27
|
+
'lineURL',
|
28
|
+
'linePOST',
|
29
|
+
'lineChoices',
|
30
|
+
'lineChoicesAbbrev',
|
31
|
+
'typingData',
|
32
|
+
'divert',
|
33
|
+
]
|
34
|
+
|
35
|
+
# Formats supported by the parser.
|
36
|
+
# Parser handles <tt>text/html</tt> responses only with #html.
|
37
|
+
SupportedFormats = { 'text/html' => :html }
|
38
|
+
|
39
|
+
# Splits the body on <tt>"\\r"</tt> and zips the result with KEYS, which is then formed into a <tt>Hash</tt>.
|
40
|
+
def html
|
41
|
+
Hash[KEYS.zip(body.split("\r"))]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
|
+
|
3
|
+
describe Cleverbot::Client do
|
4
|
+
subject { Cleverbot::Client }
|
5
|
+
|
6
|
+
it { should <= HTTParty }
|
7
|
+
|
8
|
+
describe '::DEFAULT_PARAMS' do
|
9
|
+
subject { Cleverbot::Client::DEFAULT_PARAMS }
|
10
|
+
|
11
|
+
it do
|
12
|
+
should == {
|
13
|
+
'stimulus' => '',
|
14
|
+
'start' => 'y',
|
15
|
+
'sessionid' => '',
|
16
|
+
'vText8' => '',
|
17
|
+
'vText7' => '',
|
18
|
+
'vText6' => '',
|
19
|
+
'vText5' => '',
|
20
|
+
'vText4' => '',
|
21
|
+
'vText3' => '',
|
22
|
+
'vText2' => '',
|
23
|
+
'icognoid' => 'wsf',
|
24
|
+
'icognocheck' => '',
|
25
|
+
'fno' => '0',
|
26
|
+
'prevref' => '',
|
27
|
+
'emotionaloutput' => '',
|
28
|
+
'emotionalhistory' => '',
|
29
|
+
'asbotname' => '',
|
30
|
+
'ttsvoice' => '',
|
31
|
+
'typing' => '',
|
32
|
+
'lineref' => '',
|
33
|
+
'sub' => 'Say',
|
34
|
+
'islearning' => '1',
|
35
|
+
'cleanslate' => 'false',
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '::PATH' do
|
41
|
+
subject { Cleverbot::Client::PATH }
|
42
|
+
|
43
|
+
it { should == '/webservicemin' }
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '.base_uri' do
|
47
|
+
subject { Cleverbot::Client.base_uri }
|
48
|
+
|
49
|
+
it { should == 'http://www.cleverbot.com' }
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '.parser' do
|
53
|
+
subject { Cleverbot::Client.parser }
|
54
|
+
|
55
|
+
it { should == Cleverbot::Parser }
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '.digest' do
|
59
|
+
subject { Cleverbot::Client.digest @body }
|
60
|
+
context 'given a body of 0123456789abcdefghijklmnopqrstuvwxyz' do
|
61
|
+
before :each do
|
62
|
+
@body = '0123456789abcdefghijklmnopqrstuvwxyz'
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should call Digest::MD5.hexdigest with 9abcdefghijklmnopqrs' do
|
66
|
+
Digest::MD5.should_receive(:hexdigest).with @body[9..28]
|
67
|
+
subject
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'when Digest::MD5.hexdigest returns abcd' do
|
71
|
+
before :each do
|
72
|
+
Digest::MD5.stub!(:hexdigest).and_return 'abcd'
|
73
|
+
end
|
74
|
+
|
75
|
+
it { should == 'abcd' }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '.write' do
|
81
|
+
subject { Cleverbot::Client.write @message, @params }
|
82
|
+
|
83
|
+
context 'with params {}' do
|
84
|
+
before :each do
|
85
|
+
@params = {}
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'with an empty message' do
|
89
|
+
before :each do
|
90
|
+
@message = ''
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should post to PATH' do
|
94
|
+
Cleverbot::Client.should_receive(:post).with(Cleverbot::Client::PATH, hash_including).and_return mock(:parsed_response => {})
|
95
|
+
subject
|
96
|
+
end
|
97
|
+
|
98
|
+
Cleverbot::Client::DEFAULT_PARAMS.each do |key, value|
|
99
|
+
next if ['stimulus', 'icognocheck'].include? key
|
100
|
+
it "should add #{key} => #{value.inspect} to the post body" do
|
101
|
+
Cleverbot::Client.should_receive(:post).with(Cleverbot::Client::PATH, :body => hash_including(key => value)).and_return mock(:parsed_response => {})
|
102
|
+
subject
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should add stimulus => "" to the post body' do
|
107
|
+
Cleverbot::Client.should_receive(:post).with(Cleverbot::Client::PATH, :body => hash_including('stimulus' => '')).and_return mock(:parsed_response => {})
|
108
|
+
subject
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'when digest returns abcd' do
|
112
|
+
before :each do
|
113
|
+
Digest::MD5.stub!(:hexdigest).and_return 'abcd'
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should add icognocheck => "abcd" to the post body' do
|
117
|
+
Cleverbot::Client.should_receive(:post).with(Cleverbot::Client::PATH, :body => hash_including('icognocheck' => 'abcd')).and_return mock(:parsed_response => {})
|
118
|
+
subject
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'when the parsed response is {}' do
|
123
|
+
before :each do
|
124
|
+
Cleverbot::Client.stub!(:post).and_return mock(:parsed_response => {})
|
125
|
+
end
|
126
|
+
|
127
|
+
it { should == {} }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe '#initialize' do
|
134
|
+
subject { Cleverbot::Client.new @params }
|
135
|
+
|
136
|
+
context 'with params { "a" => "b" }' do
|
137
|
+
before :each do
|
138
|
+
@params = { 'a' => 'b' }
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'sets #params to { "a" => "b" }' do
|
142
|
+
subject.params.should == { 'a' => 'b' }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe '#write' do
|
148
|
+
before :each do
|
149
|
+
@client = Cleverbot::Client.new
|
150
|
+
end
|
151
|
+
|
152
|
+
subject { @client.write @message }
|
153
|
+
|
154
|
+
context 'with an empty message' do
|
155
|
+
before :each do
|
156
|
+
@message = ''
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should call .write with "" and #params' do
|
160
|
+
Cleverbot::Client.should_receive(:write).with(@message, @client.params).and_return({})
|
161
|
+
subject
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'when .write returns { "message" => "Hi.", "sessionid" => "abcd" }' do
|
165
|
+
before :each do
|
166
|
+
Cleverbot::Client.stub!(:write).and_return 'message' => 'Hi.', 'sessionid' => 'abcd'
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'should set #params[sessionid] to abcd' do
|
170
|
+
subject
|
171
|
+
@client.params['sessionid'].should == 'abcd'
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'should not set #params[message] to Hi.' do
|
175
|
+
subject
|
176
|
+
@client.params['message'].should_not == 'abcd'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
|
+
|
3
|
+
describe Cleverbot::Parser do
|
4
|
+
subject { Cleverbot::Parser }
|
5
|
+
|
6
|
+
it { should <= HTTParty::Parser }
|
7
|
+
|
8
|
+
it { should be_supports_format :html }
|
9
|
+
|
10
|
+
describe '::KEYS' do
|
11
|
+
subject { Cleverbot::Parser::KEYS }
|
12
|
+
|
13
|
+
it do
|
14
|
+
should == [
|
15
|
+
'message',
|
16
|
+
'sessionid',
|
17
|
+
'logurl',
|
18
|
+
'vText8',
|
19
|
+
'vText7',
|
20
|
+
'vText6',
|
21
|
+
'vText5',
|
22
|
+
'vText4',
|
23
|
+
'vText3',
|
24
|
+
'vText2',
|
25
|
+
'prevref',
|
26
|
+
nil,
|
27
|
+
'emotionalhistory',
|
28
|
+
'ttsLocMP3',
|
29
|
+
'ttsLocTXT',
|
30
|
+
'ttsLocTXT3',
|
31
|
+
'ttsText',
|
32
|
+
'lineref',
|
33
|
+
'lineURL',
|
34
|
+
'linePOST',
|
35
|
+
'lineChoices',
|
36
|
+
'lineChoicesAbbrev',
|
37
|
+
'typingData',
|
38
|
+
'divert',
|
39
|
+
]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#call' do
|
44
|
+
subject { Cleverbot::Parser.call @body, @format }
|
45
|
+
|
46
|
+
context 'with a format of :html' do
|
47
|
+
before :each do
|
48
|
+
@format = :html
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with an empty body' do
|
52
|
+
before :each do
|
53
|
+
@body = ''
|
54
|
+
end
|
55
|
+
|
56
|
+
it { should be_nil }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'with an body of 0\r1\r2' do
|
60
|
+
before :each do
|
61
|
+
@body = (0..2).to_a.join "\r"
|
62
|
+
end
|
63
|
+
|
64
|
+
(0..2).each do |key|
|
65
|
+
it { should include({ Cleverbot::Parser::KEYS[key] => key.to_s }) }
|
66
|
+
end
|
67
|
+
(3..(Cleverbot::Parser::KEYS.length - 1)).each do |key|
|
68
|
+
it { should include({ Cleverbot::Parser::KEYS[key] => nil }) }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'with a body of length greater than KEYS.length' do
|
73
|
+
before :each do
|
74
|
+
@body = (0..Cleverbot::Parser::KEYS.length).to_a.join "\r"
|
75
|
+
end
|
76
|
+
|
77
|
+
(0..(Cleverbot::Parser::KEYS.length - 1)).each do |key|
|
78
|
+
it { should include({ Cleverbot::Parser::KEYS[key] => key.to_s }) }
|
79
|
+
end
|
80
|
+
it { should_not have_key Cleverbot::Parser::KEYS.length }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cleverbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,23 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-16 00:00:00.000000000 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: httparty
|
17
|
+
requirement: &17723180 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.8.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *17723180
|
15
26
|
- !ruby/object:Gem::Dependency
|
16
27
|
name: bundler
|
17
|
-
requirement: &
|
28
|
+
requirement: &17722640 !ruby/object:Gem::Requirement
|
18
29
|
none: false
|
19
30
|
requirements:
|
20
31
|
- - ~>
|
@@ -22,10 +33,10 @@ dependencies:
|
|
22
33
|
version: '1.0'
|
23
34
|
type: :development
|
24
35
|
prerelease: false
|
25
|
-
version_requirements: *
|
36
|
+
version_requirements: *17722640
|
26
37
|
- !ruby/object:Gem::Dependency
|
27
38
|
name: jeweler
|
28
|
-
requirement: &
|
39
|
+
requirement: &17722040 !ruby/object:Gem::Requirement
|
29
40
|
none: false
|
30
41
|
requirements:
|
31
42
|
- - ~>
|
@@ -33,10 +44,10 @@ dependencies:
|
|
33
44
|
version: '1.6'
|
34
45
|
type: :development
|
35
46
|
prerelease: false
|
36
|
-
version_requirements: *
|
47
|
+
version_requirements: *17722040
|
37
48
|
- !ruby/object:Gem::Dependency
|
38
49
|
name: rcov
|
39
|
-
requirement: &
|
50
|
+
requirement: &17719820 !ruby/object:Gem::Requirement
|
40
51
|
none: false
|
41
52
|
requirements:
|
42
53
|
- - ~>
|
@@ -44,10 +55,10 @@ dependencies:
|
|
44
55
|
version: '0.9'
|
45
56
|
type: :development
|
46
57
|
prerelease: false
|
47
|
-
version_requirements: *
|
58
|
+
version_requirements: *17719820
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: rdoc
|
50
|
-
requirement: &
|
61
|
+
requirement: &17719320 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - ~>
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: '3.9'
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *17719320
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: rspec
|
61
|
-
requirement: &
|
72
|
+
requirement: &17718800 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,7 +77,7 @@ dependencies:
|
|
66
77
|
version: '2.3'
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *17718800
|
70
81
|
description: Ruby wrapper for Cleverbot.
|
71
82
|
email: benmanns@gmail.com
|
72
83
|
executables: []
|
@@ -86,6 +97,10 @@ files:
|
|
86
97
|
- VERSION
|
87
98
|
- cleverbot.gemspec
|
88
99
|
- lib/cleverbot.rb
|
100
|
+
- lib/cleverbot/client.rb
|
101
|
+
- lib/cleverbot/parser.rb
|
102
|
+
- spec/cleverbot/client_spec.rb
|
103
|
+
- spec/cleverbot/parser_spec.rb
|
89
104
|
- spec/cleverbot_spec.rb
|
90
105
|
- spec/spec_helper.rb
|
91
106
|
has_rdoc: true
|
@@ -104,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
119
|
version: '0'
|
105
120
|
segments:
|
106
121
|
- 0
|
107
|
-
hash:
|
122
|
+
hash: 1100025997213852890
|
108
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
124
|
none: false
|
110
125
|
requirements:
|