lita-danish-image-search 0.1.0
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 +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +3 -0
- data/README.md +22 -0
- data/Rakefile +6 -0
- data/lib/lita/handlers/danish_image_search.rb +87 -0
- data/lib/lita-danish-image-search.rb +12 -0
- data/lita-danish-image-search.gemspec +26 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/danish_image_search_spec.rb +97 -0
- data/spec/spec_helper.rb +14 -0
- data/templates/.gitkeep +0 -0
- metadata +170 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a38389213d86d449c77ea4b59dc3ed8b22214b693a1a040fa34f45f0557cb8fb
|
4
|
+
data.tar.gz: 153b377ac54536e86c4b9a37db12158d2290715486b3e98628ccd110029a965e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 708acb2623456515ae77a98968b24cb66937c6eb6e5feddda18683f326e34688034d37ccec0eac101031e3e2ed9e665238acd796a8acf211f719982d597d11dc
|
7
|
+
data.tar.gz: 3b36e2e0a27fd3d279ead973aeec13dd5f16e92f9f12abdc41fe136318ff4018eba89d1b77efa8a8d0de58cd5a17aba696d7cb90cf1e7d7b52bee626546445b1
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# lita-danish-image-search
|
2
|
+
|
3
|
+
[](https://travis-ci.org/danishsarwr/lita-danish-image-search)
|
4
|
+
[](https://coveralls.io/r/danishsarwr/lita-danish-image-search)
|
5
|
+
|
6
|
+
TODO: Add a description of the plugin.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add lita-danish-image-search to your Lita instance's Gemfile:
|
11
|
+
|
12
|
+
``` ruby
|
13
|
+
gem "lita-danish-image-search"
|
14
|
+
```
|
15
|
+
|
16
|
+
## Configuration
|
17
|
+
|
18
|
+
TODO: Describe any configuration attributes the plugin exposes.
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
TODO: Describe the plugin's features and how to use them.
|
data/Rakefile
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
module Lita
|
2
|
+
module Handlers
|
3
|
+
class DanishImageSearch < Handler
|
4
|
+
# insert handler code here
|
5
|
+
URL = "https://www.googleapis.com/customsearch/v1"
|
6
|
+
VALID_SAFE_VALUES = %w(high medium off)
|
7
|
+
|
8
|
+
config :safe_search, types: [String, Symbol], default: :high do
|
9
|
+
validate do |value|
|
10
|
+
unless VALID_SAFE_VALUES.include?(value.to_s.strip)
|
11
|
+
"valid values are :high, :medium, or :off"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
route(/(?:image|img)(?:\s+me)? (.+)/i, :fetch, command: true, help: {
|
17
|
+
"image QUERY" => "Displays a random image from Google Images matching the query."
|
18
|
+
})
|
19
|
+
|
20
|
+
route(/(?:animate|gif)(?:\s+me)? (.+)/i, :fetch_anim, command: true, help: {
|
21
|
+
"animate QUERY" => "Displays a random animation from Google Images matching the query."
|
22
|
+
})
|
23
|
+
|
24
|
+
def fetch_anim(response)
|
25
|
+
fetch(response, true)
|
26
|
+
end
|
27
|
+
|
28
|
+
def fetch(response, animated = false)
|
29
|
+
query = response.matches[0][0]
|
30
|
+
|
31
|
+
query_params = {
|
32
|
+
v: "1.0",
|
33
|
+
searchType: 'image',
|
34
|
+
q: query,
|
35
|
+
safe: config.safe_search,
|
36
|
+
fields: 'items(link)',
|
37
|
+
rsz: 8,
|
38
|
+
cx: 'a0ee38aab0d0f7bcc',
|
39
|
+
key: 'AIzaSyDyY2ijQCoSf9z5rqaE2aeKX9Ul-pEUnWQ'
|
40
|
+
}
|
41
|
+
|
42
|
+
if animated
|
43
|
+
animated_params = {
|
44
|
+
fileType: "gif",
|
45
|
+
hq: "animated",
|
46
|
+
tbs: "itp:animated"
|
47
|
+
}
|
48
|
+
query_params.merge!(animated_params)
|
49
|
+
end
|
50
|
+
|
51
|
+
http_response = http.get(
|
52
|
+
URL,
|
53
|
+
query_params
|
54
|
+
)
|
55
|
+
|
56
|
+
data = MultiJson.load(http_response.body)
|
57
|
+
|
58
|
+
if http_response.status == 200
|
59
|
+
choice = data["items"].sample if data["items"]
|
60
|
+
if choice
|
61
|
+
response.reply ensure_extension(choice["link"])
|
62
|
+
else
|
63
|
+
response.reply %{No images found for "#{query}".}
|
64
|
+
end
|
65
|
+
else
|
66
|
+
reason = data["error"]["message"] || "unknown error"
|
67
|
+
Lita.logger.warn(
|
68
|
+
"Couldn't get image from Google: #{reason}"
|
69
|
+
)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def ensure_extension(url)
|
76
|
+
if [".gif", ".jpg", ".jpeg", ".png"].any? { |ext| url.end_with?(ext) }
|
77
|
+
url
|
78
|
+
else
|
79
|
+
"#{url}#.png"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
Lita.register_handler(DanishImageSearch)
|
85
|
+
|
86
|
+
end
|
87
|
+
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/danish_image_search"
|
8
|
+
|
9
|
+
Lita::Handlers::DanishImageSearch.template_root File.expand_path(
|
10
|
+
File.join("..", "..", "templates"),
|
11
|
+
__FILE__
|
12
|
+
)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-danish-image-search"
|
3
|
+
spec.version = "0.1.0"
|
4
|
+
spec.authors = ["danishsarwr"]
|
5
|
+
spec.email = ["danishsarwr@gmail.com"]
|
6
|
+
spec.description = "A lita Image Search bot that returns the Image search results "
|
7
|
+
spec.summary = "Final Project for UCAS SIAT for the course Intelligent Software Engineering"
|
8
|
+
spec.homepage = "https://github.com/danishsarwr/danish-imagesearch.git"
|
9
|
+
spec.license = "Any"
|
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.0"
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", ">= 1.3"
|
20
|
+
spec.add_development_dependency "pry-byebug"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rack-test"
|
23
|
+
spec.add_development_dependency "rspec", ">= 3.0.0"
|
24
|
+
spec.add_development_dependency "simplecov"
|
25
|
+
spec.add_development_dependency "coveralls"
|
26
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lita::Handlers::DanishImageSearch, lita_handler: true do
|
4
|
+
it { is_expected.to route_command("image me foo").to(:fetch) }
|
5
|
+
it { is_expected.to route_command("image foo").to(:fetch) }
|
6
|
+
it { is_expected.to route_command("img foo").to(:fetch) }
|
7
|
+
it { is_expected.to route_command("img me foo").to(:fetch) }
|
8
|
+
it { is_expected.to route_command("IMAGE FOO").to(:fetch) }
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
describe "#foo" do
|
13
|
+
let(:response) { double("Faraday::Response", status: 200,) }
|
14
|
+
let(:fail_response) { double("Faraday::Response", status: 500) }
|
15
|
+
|
16
|
+
context "Success" do
|
17
|
+
before do
|
18
|
+
allow_any_instance_of(
|
19
|
+
Faraday::Connection
|
20
|
+
).to receive(:get).and_return(response)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "replies with a matching image URL on success" do
|
24
|
+
allow(response).to receive(:body).and_return(<<-JSON.chomp
|
25
|
+
{
|
26
|
+
"items": [
|
27
|
+
{
|
28
|
+
"link": "http://www.example.com/path/to/an/image"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
}
|
32
|
+
JSON
|
33
|
+
)
|
34
|
+
send_command("image carl")
|
35
|
+
expect(replies.last).to eq(
|
36
|
+
"http://www.example.com/path/to/an/image#.png"
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "doesn't append a fake file extension if the image URL has a common image extension" do
|
41
|
+
allow(response).to receive(:body).and_return(<<-JSON.chomp
|
42
|
+
{
|
43
|
+
"items": [
|
44
|
+
{
|
45
|
+
"link": "http://www.example.com/path/to/an/image.jpg"
|
46
|
+
}
|
47
|
+
]
|
48
|
+
}
|
49
|
+
JSON
|
50
|
+
)
|
51
|
+
send_command("image carl")
|
52
|
+
expect(replies.last).to eq(
|
53
|
+
"http://www.example.com/path/to/an/image.jpg"
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "replies that no images were found if the results are empty" do
|
58
|
+
allow(response).to receive(:body).and_return(<<-JSON.chomp
|
59
|
+
{"items": [] }
|
60
|
+
JSON
|
61
|
+
)
|
62
|
+
send_command("image carl")
|
63
|
+
expect(replies.last).to eq(%{No images found for "carl".})
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "Failure" do
|
73
|
+
before do
|
74
|
+
allow_any_instance_of(
|
75
|
+
Faraday::Connection
|
76
|
+
).to receive(:get).and_return(fail_response)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "logs a warning on failure" do
|
80
|
+
allow(fail_response).to receive(:body).and_return(<<-JSON.chomp
|
81
|
+
{
|
82
|
+
"error":
|
83
|
+
{
|
84
|
+
"code": 500,
|
85
|
+
"message": "google fail"
|
86
|
+
}
|
87
|
+
}
|
88
|
+
JSON
|
89
|
+
)
|
90
|
+
expect(Lita.logger).to receive(:warn).with(/google fail/)
|
91
|
+
send_command("image carl")
|
92
|
+
expect(replies).to be_empty
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
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-danish-image-search"
|
10
|
+
require "lita/rspec"
|
11
|
+
|
12
|
+
# A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
|
13
|
+
# was generated with Lita 4, the compatibility mode should be left disabled.
|
14
|
+
Lita.version_3_compatibility_mode = false
|
data/templates/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-danish-image-search
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- danishsarwr
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-12-18 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.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
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: pry-byebug
|
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: 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
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: coveralls
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: 'A lita Image Search bot that returns the Image search results '
|
126
|
+
email:
|
127
|
+
- danishsarwr@gmail.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".travis.yml"
|
134
|
+
- Gemfile
|
135
|
+
- README.md
|
136
|
+
- Rakefile
|
137
|
+
- lib/lita-danish-image-search.rb
|
138
|
+
- lib/lita/handlers/danish_image_search.rb
|
139
|
+
- lita-danish-image-search.gemspec
|
140
|
+
- locales/en.yml
|
141
|
+
- spec/lita/handlers/danish_image_search_spec.rb
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
- templates/.gitkeep
|
144
|
+
homepage: https://github.com/danishsarwr/danish-imagesearch.git
|
145
|
+
licenses:
|
146
|
+
- Any
|
147
|
+
metadata:
|
148
|
+
lita_plugin_type: handler
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubygems_version: 3.0.8
|
165
|
+
signing_key:
|
166
|
+
specification_version: 4
|
167
|
+
summary: Final Project for UCAS SIAT for the course Intelligent Software Engineering
|
168
|
+
test_files:
|
169
|
+
- spec/lita/handlers/danish_image_search_spec.rb
|
170
|
+
- spec/spec_helper.rb
|