lita-howdoi 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f0535a6257ca2a07da4a8c5cf0a74275fb1c1cee
4
+ data.tar.gz: a3777d785c4e8a2331698973d098cbeb8fd2eb0b
5
+ SHA512:
6
+ metadata.gz: 6d7e0ae3270e9435c110195a124b9f09520077f4605f04d5e947cd60ecdba05f4e2ce01ceb59b2f556e93706cc1cbac3194e84de1a8ff4be84b3ba5cd2d241d8
7
+ data.tar.gz: aaf2482961147295fb74be388d914f434f5312b2a63232e15b99b6427cbfb430a9d94e1e5dcf7dd32f75ad4175b544442c16c74451b8eab378c3bc585d3a74a0
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # lita-howdoi
2
+
3
+ Crawls Stack Overflow for the first answer it finds with a solution to some query.
4
+
5
+ ## Installation
6
+
7
+ Add lita-howdoi to your Lita instance's Gemfile:
8
+
9
+ ``` ruby
10
+ gem "lita-howdoi"
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```
16
+ @robot: howdoi split a string in ruby
17
+ ...
18
+ ```
19
+
20
+ ## License
21
+
22
+ [MIT](http://opensource.org/licenses/MIT)
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,68 @@
1
+ require 'nokogiri'
2
+
3
+ module Lita
4
+ module Handlers
5
+ class Howdoi < Handler
6
+ GOOGLE_SEARCH_URL = "http://www.google.com/search?q=site:stackoverflow.com+"
7
+
8
+ route(/^howdoi (.*)$/, :howdoi, command: true, help: {
9
+ "howdoi QUERY" => "Searches Stack Overflow for the first answer it finds with a solution to QUERY.",
10
+ })
11
+
12
+ def get_url(url)
13
+ http.get(url).body
14
+ end
15
+
16
+ def is_question?(stackoverflow_url)
17
+ stackoverflow_url =~ %r(/questions/\d+/)
18
+ end
19
+
20
+ def get_google_links(args)
21
+ page = get_url(URI.escape(GOOGLE_SEARCH_URL + args.join("+")))
22
+ html = Nokogiri.HTML(page)
23
+ posts = []
24
+ html.css('.r a').each do |link|
25
+ posts << link[:href].gsub("/url?q=", "").gsub(/&(.*)/, "") if is_question?(link[:href])
26
+ end
27
+ posts
28
+ end
29
+
30
+ def get_link_at_pos(links, pos)
31
+ link = nil
32
+ pos.times do |i|
33
+ break if i > links.size
34
+ link = links[i]
35
+ end
36
+ link
37
+ end
38
+
39
+ def howdoi(chat)
40
+ args = chat.matches[0].last.split
41
+ links = get_google_links(args)
42
+ link = get_link_at_pos(links, 1)
43
+
44
+ if link
45
+ page = get_url link
46
+ html = Nokogiri.HTML(page)
47
+ ans = html.at_css(".answer")
48
+
49
+ if ans
50
+ instruction = ans.css("pre").children.
51
+ collect(&:content).
52
+ join(" " * 5 + '-' * 50 + "\n") ||
53
+ ans.at_css("code").content
54
+ if instruction
55
+ chat.reply "```\n#{instruction}```"
56
+ else
57
+ chat.reply "```\n#{ans.at('.post-text').content}```"
58
+ end
59
+ end
60
+ else
61
+ chat.reply "Sorry, couldn't find any help with that topic"
62
+ end
63
+ end
64
+ end
65
+
66
+ Lita.register_handler(Howdoi)
67
+ end
68
+ end
@@ -0,0 +1,12 @@
1
+ require "lita"
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join("..", "..", "locales", "*.yml"), __FILE__
5
+ )]
6
+
7
+ require "lita/handlers/howdoi"
8
+
9
+ Lita::Handlers::Howdoi.template_root File.expand_path(
10
+ File.join("..", "..", "templates"),
11
+ __FILE__
12
+ )
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "lita-howdoi"
3
+ spec.version = "0.0.1"
4
+ spec.authors = ["Taylor Lapeyre"]
5
+ spec.email = ["taylorlapeyre@gmail.com"]
6
+ spec.description = "Crawls Stack Overflow for the first answer it finds with a solution to some query."
7
+ spec.summary = "Crawls Stack Overflow for the first answer it finds with a solution to some query."
8
+ spec.homepage = "https://github.com/taylorlapeyre/lita-howdoi"
9
+ spec.license = "MIT"
10
+ spec.metadata = { "lita_plugin_type" => "handler" }
11
+
12
+ spec.files = `git ls-files`.split($/)
13
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.require_paths = ["lib"]
16
+
17
+ spec.add_runtime_dependency "lita", ">= 4.2"
18
+ spec.add_runtime_dependency "nokogiri"
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rack-test"
23
+ spec.add_development_dependency "rspec", ">= 3.0.0"
24
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ howdoi:
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Handlers::Howdoi, lita_handler: true do
4
+
5
+ it { is_expected.to route_command("howdoi do a thing").to(:howdoi) }
6
+ it { is_expected.to route_command("howdoi 2 do a thing").to(:howdoi) }
7
+
8
+ it "can return an answer" do
9
+ send_command("howdoi split a string in ruby")
10
+ expect(replies.last).to match /\.split/
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ require "lita-howdoi"
2
+ require "lita/rspec"
3
+
4
+ # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
5
+ # was generated with Lita 4, the compatibility mode should be left disabled.
6
+ Lita.version_3_compatibility_mode = false
File without changes
metadata ADDED
@@ -0,0 +1,144 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-howdoi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Taylor Lapeyre
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lita
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0
97
+ description: Crawls Stack Overflow for the first answer it finds with a solution to
98
+ some query.
99
+ email:
100
+ - taylorlapeyre@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - Gemfile
107
+ - README.md
108
+ - Rakefile
109
+ - lib/lita-howdoi.rb
110
+ - lib/lita/handlers/howdoi.rb
111
+ - lita-howdoi.gemspec
112
+ - locales/en.yml
113
+ - spec/lita/handlers/howdoi_spec.rb
114
+ - spec/spec_helper.rb
115
+ - templates/.gitkeep
116
+ homepage: https://github.com/taylorlapeyre/lita-howdoi
117
+ licenses:
118
+ - MIT
119
+ metadata:
120
+ lita_plugin_type: handler
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubyforge_project:
137
+ rubygems_version: 2.4.5
138
+ signing_key:
139
+ specification_version: 4
140
+ summary: Crawls Stack Overflow for the first answer it finds with a solution to some
141
+ query.
142
+ test_files:
143
+ - spec/lita/handlers/howdoi_spec.rb
144
+ - spec/spec_helper.rb