lita-answers 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4a22ca9edfca01b8a6e308e45d82f90a0cb19800
4
- data.tar.gz: 29a4d8ef2bd301b7e4417ec28673dfc82387cd07
3
+ metadata.gz: d01e59cbede30610d45fd3d2ac3903e9ee5e489e
4
+ data.tar.gz: 8cd8dc7969fe17ac7b2e7a8a24614a12874a1f7d
5
5
  SHA512:
6
- metadata.gz: 1a2d478cfc9403f8ba41598015909e8ab380f5c3d983947335bf8c1b7724f67951e63282ab48b57e8d710adba325d07dddd49feac0b0bb811e364679671ef0b4
7
- data.tar.gz: a1e6b0a78062ebf9ae2bf2e4124ce3b1b0e4cc5165ceecb820f7519319fec89601f4b1f97a1ab8898809efb7a532dbb716215ec4d0b792e4fbd3a6a8c5847b11
6
+ metadata.gz: 5286be556438f66025da6441786f1ca011e72b6dce1e32606f9d8977a4a6ed29a3713826fcff1143defc4557d0432ded3fa3ed188006f1f69115c8ca29afeaac
7
+ data.tar.gz: 18ffa7ffaf210acd35d2669736952402547f8d321d9b38eab1ef4c9ff2bee356053bd049f2e205d7a0f95380c55c3e0c68cb9e8b592f49e8666cca9a51aa4ff0
@@ -1,3 +1,4 @@
1
1
  require 'lita/handlers/answers'
2
2
  require 'knowledgebase'
3
3
  require 'nlp'
4
+ require 'ruby_docs/documentation'
@@ -7,6 +7,17 @@ module Lita
7
7
  QUESTION = /(?:'|")(#{TEXT.source}\?)(?:'|")/
8
8
  ANSWER = /(?:'|")(#{TEXT.source}\.?)(?:'|")/
9
9
 
10
+
11
+ route(/^(\w+)([\.#]|::)?(\w+)?$/, :documentation, command: true, help: {
12
+ "Array#map" => "# Array#map\n\n(from ruby core)\n---\n ary.collect { |item| block } -> new_ary\n..."
13
+ # Array
14
+ # map
15
+ # Array.map
16
+ # Array#map
17
+ # Array::map
18
+ # Array map – not
19
+ })
20
+
10
21
  route(/^all\squestions$/i, :index, command: true, help: {
11
22
  "all questions" => "You could ask me the following questions: 1) ... 2) ..."
12
23
  })
@@ -27,6 +38,12 @@ module Lita
27
38
  "forget 'question?'" => "Forgot 'question?'"
28
39
  })
29
40
 
41
+ def documentation(response)
42
+ question = response.matches.join
43
+ reply = RubyDocs::Documentation.search(question)
44
+ response.reply(reply)
45
+ end
46
+
30
47
  def index(response)
31
48
  questions = Knowledgebase.all
32
49
  if questions.any?
@@ -0,0 +1,25 @@
1
+ require 'json'
2
+ require 'net/http'
3
+ require 'uri'
4
+
5
+ # TODO: test
6
+ module RubyDocs
7
+ class Documentation
8
+ API_URL = "http://api.rubydocs.com/search"
9
+
10
+ class << self
11
+ def search(question, project = nil, version = nil)
12
+ response = Net::HTTP.get_response api_uri(question, project, version)
13
+ response_hash = JSON.parse(response.body)
14
+ response_hash['content']
15
+ end
16
+
17
+ def api_uri(question, project, version)
18
+ api_url = "#{API_URL}?q=#{question}"
19
+ api_url << "&project=#{project}" unless project.nil? || project.empty?
20
+ api_url << "&version=#{version}" unless version.nil? || version.empty?
21
+ URI.parse api_url
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-answers"
3
- spec.version = "0.0.2"
3
+ spec.version = "0.0.3"
4
4
  spec.authors = ["Sergey Alekseev"]
5
5
  spec.email = ["sergey.alekseev.minsk@gmail.com"]
6
6
  spec.description = "A Lita handler for a question answering (QA) system. Allows you to use CRUD operations and simple NLP. " \
@@ -15,9 +15,9 @@ Gem::Specification.new do |spec|
15
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
16
  spec.require_paths = ["lib"]
17
17
 
18
- spec.add_runtime_dependency "lita", "~> 2.7"
18
+ spec.add_runtime_dependency "lita", ">= 2.7"
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "bundler", ">= 1.3"
21
21
  spec.add_development_dependency "rake"
22
22
  spec.add_development_dependency "rspec", ">= 2.14"
23
23
  spec.add_development_dependency "simplecov"
@@ -9,6 +9,16 @@ describe Lita::Handlers::Answers, lita_handler: true do
9
9
  it { routes_command("answer 'question?'").to :show }
10
10
  it { routes_command("forget 'question?'").to :destroy }
11
11
  it { routes_command("all questions").to :index }
12
+ it { routes_command("Array#map").to :documentation }
13
+ end
14
+
15
+ describe '#documentation' do
16
+ it 'displays documentation from RubyDocs.org' do
17
+ documentation_content = "# Array#map\n\n(from ruby core)\n---\n ary.collect { |item| block } -> new_ary\n..."
18
+ Net::HTTP.stub(:get_response).and_return double(body: { 'content' => documentation_content }.to_json)
19
+ send_command 'Array#map'
20
+ expect(replies.last).to eq(documentation_content)
21
+ end
12
22
  end
13
23
 
14
24
  describe 'commands' do
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-answers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Alekseev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-26 00:00:00.000000000 Z
11
+ date: 2014-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
@@ -125,6 +125,7 @@ files:
125
125
  - lib/lita-answers.rb
126
126
  - lib/lita/handlers/answers.rb
127
127
  - lib/nlp.rb
128
+ - lib/ruby_docs/documentation.rb
128
129
  - lita-answers.gemspec
129
130
  - spec/knowledgebase_spec.rb
130
131
  - spec/lita/handlers/answers_spec.rb