lita-wordnik 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 +7 -0
- data/.gitignore +18 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/README.md +41 -0
- data/Rakefile +1 -0
- data/lib/lita/handlers/wordnik.rb +73 -0
- data/lib/lita-wordnik.rb +1 -0
- data/lita-wordnik.gemspec +23 -0
- data/spec/lita/handlers/wordnik_spec.rb +69 -0
- data/spec/spec_helper.rb +10 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 04e7612f43af97a846b2a720e130cdcdd25475a0
|
4
|
+
data.tar.gz: fbeeeb8f1d1b2838327bfcab5227ebf5d7fbcdd9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4acd1c210978f0042a4a0ae61e0a6305729ce433e3de9641a9da6ea79a2bdbd9dd23e853b8a85b7329a469c4ab17f9a76c5965bc32f443ae85abcad819b350fa
|
7
|
+
data.tar.gz: dfe0590571736facf54dfc64585b5ee220d64fc9c1be928c898140e62ed42ece62bec2d9187ecca0895b290372d23c91971cd0b17402d268d208d3cc7ba9c5b8
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# lita-wordnik
|
2
|
+
|
3
|
+
[](https://travis-ci.org/jimmycuadra/lita-wordnik)
|
4
|
+
[](https://codeclimate.com/github/jimmycuadra/lita-wordnik)
|
5
|
+
[](https://coveralls.io/r/jimmycuadra/lita-wordnik)
|
6
|
+
|
7
|
+
**lita-wordnik** is a handler for [Lita](https://github.com/jimmycuadra/lita) that adds dictionary functionality backed by [Wordnik](http://www.wordnik.com/).
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add lita-wordnik to your Lita instance's Gemfile:
|
12
|
+
|
13
|
+
``` ruby
|
14
|
+
gem "lita-wordnik"
|
15
|
+
```
|
16
|
+
|
17
|
+
## Configuration
|
18
|
+
|
19
|
+
### Required attributes
|
20
|
+
|
21
|
+
* `api_key` - Your API key for Wordnik. Register for one at the [Wordnik Developer](http://developer.wordnik.com/) page.
|
22
|
+
|
23
|
+
### Example
|
24
|
+
|
25
|
+
```
|
26
|
+
Lita.configure do |config|
|
27
|
+
config.handlers.wordnik.api_key = "abc123"
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
## Usage
|
32
|
+
|
33
|
+
To get the definition for a word:
|
34
|
+
|
35
|
+
```
|
36
|
+
Lita: define WORD
|
37
|
+
```
|
38
|
+
|
39
|
+
## License
|
40
|
+
|
41
|
+
[MIT](http://opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "lita"
|
2
|
+
|
3
|
+
module Lita
|
4
|
+
module Handlers
|
5
|
+
class Wordnik < Handler
|
6
|
+
def self.default_config(config)
|
7
|
+
config.api_key = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
route(/define\s+(.+)/i, :define, command: true, help: {
|
11
|
+
"define WORD" => "Get the definition for WORD."
|
12
|
+
})
|
13
|
+
|
14
|
+
def define(response)
|
15
|
+
return unless validate(response)
|
16
|
+
word = response.matches[0][0]
|
17
|
+
definition = get_definition(word)
|
18
|
+
response.reply(definition)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def get_definition(word)
|
24
|
+
word = encode_word(word)
|
25
|
+
url = "http://api.wordnik.com/v4/word.json/#{word}/definitions"
|
26
|
+
Lita.logger.debug("Making Wordnik API request to #{url}.")
|
27
|
+
process_response http.get(
|
28
|
+
url,
|
29
|
+
api_key: Lita.config.handlers.wordnik.api_key,
|
30
|
+
limit: 1,
|
31
|
+
includeRelated: false,
|
32
|
+
useCanonical: true,
|
33
|
+
includeTags: false
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def encode_word(word)
|
38
|
+
begin
|
39
|
+
URI.parse(word)
|
40
|
+
return word
|
41
|
+
rescue URI::InvalidURIError
|
42
|
+
return URI.encode(word)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def process_response(response)
|
47
|
+
case response.status
|
48
|
+
when 400
|
49
|
+
"Wordnik didn't understand that word."
|
50
|
+
when 404
|
51
|
+
"Wordnik doesn't have any definitions for that."
|
52
|
+
when 200
|
53
|
+
data = MultiJson.load(response.body).first
|
54
|
+
"#{data["word"]} (#{data["partOfSpeech"]}): #{data["text"]}"
|
55
|
+
else
|
56
|
+
Lita.logger.error("Wordnik request failed: #{response.inspect}")
|
57
|
+
"Wordnik request failed. See the Lita logs."
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate(response)
|
62
|
+
if Lita.config.handlers.wordnik.api_key.nil?
|
63
|
+
response.reply "Wordnik API key required."
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
70
|
+
Lita.register_handler(Wordnik)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/lita-wordnik.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "lita/handlers/wordnik"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-wordnik"
|
3
|
+
spec.version = "0.0.1"
|
4
|
+
spec.authors = ["Jimmy Cuadra"]
|
5
|
+
spec.email = ["jimmy@jimmycuadra.com"]
|
6
|
+
spec.description = %q{A Lita handler for dictionary functionality backed by Wordnik.}
|
7
|
+
spec.summary = %q{A Lita handler for dictionary functionality backed by Wordnik.}
|
8
|
+
spec.homepage = "https://github.com/jimmycuadra/lita-wordnik"
|
9
|
+
spec.license = "MIT"
|
10
|
+
|
11
|
+
spec.files = `git ls-files`.split($/)
|
12
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
13
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
14
|
+
spec.require_paths = ["lib"]
|
15
|
+
|
16
|
+
spec.add_runtime_dependency "lita", "~> 2.1"
|
17
|
+
|
18
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
19
|
+
spec.add_development_dependency "rake"
|
20
|
+
spec.add_development_dependency "rspec", "~> 2.14"
|
21
|
+
spec.add_development_dependency "simplecov"
|
22
|
+
spec.add_development_dependency "coveralls"
|
23
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lita::Handlers::Wordnik, lita_handler: true do
|
4
|
+
it { routes_command("define computer").to(:define) }
|
5
|
+
|
6
|
+
it "sets the API key to nil by default" do
|
7
|
+
expect(Lita.config.handlers.wordnik.api_key).to be_nil
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#define" do
|
11
|
+
it "replies that the API key is required" do
|
12
|
+
send_command("define computer")
|
13
|
+
expect(replies.last).to include("API key required")
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when the API key is set" do
|
17
|
+
let(:body) do
|
18
|
+
<<-BODY.chomp
|
19
|
+
[
|
20
|
+
{
|
21
|
+
"word": "computer",
|
22
|
+
"text": "A device that computes, especially a programmable electronic \
|
23
|
+
machine that performs high-speed mathematical or logical operations or that \
|
24
|
+
assembles, stores, correlates, or otherwise processes information.",
|
25
|
+
"partOfSpeech": "noun"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
BODY
|
29
|
+
end
|
30
|
+
let(:response) { double("Faraday::Response", status: 200, body: body) }
|
31
|
+
|
32
|
+
before do
|
33
|
+
Lita.config.handlers.wordnik.api_key = "abc123"
|
34
|
+
allow_any_instance_of(
|
35
|
+
Faraday::Connection
|
36
|
+
).to receive(:get).and_return(response)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "replies with the definition" do
|
40
|
+
send_command("define computer")
|
41
|
+
expect(replies.last).to include("computer (noun): A device that")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "URL encodes words" do
|
45
|
+
word = "a phrase with a % sign in it"
|
46
|
+
expect(URI).to receive(:encode).with(word)
|
47
|
+
send_command("define #{word}")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "replies that Wordnik didn't understand the word on 400 status" do
|
51
|
+
allow(response).to receive(:status).and_return(400)
|
52
|
+
send_command("define computer")
|
53
|
+
expect(replies.last).to include("didn't understand")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "replies that Wordnik has no definitions on 404 status" do
|
57
|
+
allow(response).to receive(:status).and_return(404)
|
58
|
+
send_command("define computer")
|
59
|
+
expect(replies.last).to include("doesn't have any definitions")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "logs an error and replies that the request completely failed" do
|
63
|
+
allow(response).to receive(:status).and_return(500)
|
64
|
+
send_command("define computer")
|
65
|
+
expect(replies.last).to include("request failed")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require "simplecov"
|
2
|
+
require "coveralls"
|
3
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
4
|
+
SimpleCov::Formatter::HTMLFormatter,
|
5
|
+
Coveralls::SimpleCov::Formatter
|
6
|
+
]
|
7
|
+
SimpleCov.start { add_filter "/spec/" }
|
8
|
+
|
9
|
+
require "lita-wordnik"
|
10
|
+
require "lita/rspec"
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-wordnik
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jimmy Cuadra
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-12 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: '2.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.14'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.14'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
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: coveralls
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: A Lita handler for dictionary functionality backed by Wordnik.
|
98
|
+
email:
|
99
|
+
- jimmy@jimmycuadra.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- .gitignore
|
105
|
+
- .travis.yml
|
106
|
+
- Gemfile
|
107
|
+
- README.md
|
108
|
+
- Rakefile
|
109
|
+
- lib/lita-wordnik.rb
|
110
|
+
- lib/lita/handlers/wordnik.rb
|
111
|
+
- lita-wordnik.gemspec
|
112
|
+
- spec/lita/handlers/wordnik_spec.rb
|
113
|
+
- spec/spec_helper.rb
|
114
|
+
homepage: https://github.com/jimmycuadra/lita-wordnik
|
115
|
+
licenses:
|
116
|
+
- MIT
|
117
|
+
metadata: {}
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
requirements: []
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 2.0.3
|
135
|
+
signing_key:
|
136
|
+
specification_version: 4
|
137
|
+
summary: A Lita handler for dictionary functionality backed by Wordnik.
|
138
|
+
test_files:
|
139
|
+
- spec/lita/handlers/wordnik_spec.rb
|
140
|
+
- spec/spec_helper.rb
|
141
|
+
has_rdoc:
|