lyracyst 0.0.7 → 0.0.8
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 +4 -4
- data/LICENSE.md +22 -22
- data/bin/lyracyst +293 -81
- data/lib/lyracyst.rb +293 -81
- data/lib/lyracyst/rhymebrain.rb +138 -0
- data/lib/lyracyst/version.rb +1 -1
- data/lib/lyracyst/wordnik.rb +326 -0
- metadata +29 -46
- data/lib/lyracyst/define.rb +0 -35
- data/lib/lyracyst/get.rb +0 -21
- data/lib/lyracyst/relate.rb +0 -171
- data/lib/lyracyst/rhyme.rb +0 -48
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lyracyst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drew Prentice
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.6'
|
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
|
-
version: '
|
26
|
+
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: gli
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: httpi
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.1'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: multi_json
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,19 +81,19 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0.5'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: rainbow
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '2.0'
|
76
90
|
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '2.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: aruba
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,34 +150,6 @@ dependencies:
|
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '10.3'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rspec
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '2.14'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '2.14'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: spinach
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0.8'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0.8'
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
154
|
name: yard
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,7 +164,7 @@ dependencies:
|
|
178
164
|
- - "~>"
|
179
165
|
- !ruby/object:Gem::Version
|
180
166
|
version: '0.8'
|
181
|
-
description: Search Wordnik, thesaurus.altervista.org, and
|
167
|
+
description: Search Wordnik, thesaurus.altervista.org, and Rhymebrain from the command
|
182
168
|
line.
|
183
169
|
email: weirdpercent@gmail.com
|
184
170
|
executables:
|
@@ -190,11 +176,9 @@ files:
|
|
190
176
|
- LICENSE.md
|
191
177
|
- bin/lyracyst
|
192
178
|
- lib/lyracyst.rb
|
193
|
-
- lib/lyracyst/
|
194
|
-
- lib/lyracyst/get.rb
|
195
|
-
- lib/lyracyst/relate.rb
|
196
|
-
- lib/lyracyst/rhyme.rb
|
179
|
+
- lib/lyracyst/rhymebrain.rb
|
197
180
|
- lib/lyracyst/version.rb
|
181
|
+
- lib/lyracyst/wordnik.rb
|
198
182
|
homepage: http://github.com/weirdpercent/lyracyst
|
199
183
|
licenses:
|
200
184
|
- MIT
|
@@ -221,7 +205,6 @@ rubyforge_project:
|
|
221
205
|
rubygems_version: 2.2.2
|
222
206
|
signing_key:
|
223
207
|
specification_version: 4
|
224
|
-
summary: A powerful word search tool
|
225
|
-
rhymes.
|
208
|
+
summary: A powerful word search tool.
|
226
209
|
test_files: []
|
227
210
|
has_rdoc:
|
data/lib/lyracyst/define.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'wordnik'
|
3
|
-
|
4
|
-
module Lyracyst
|
5
|
-
# The Wordnik class defines methods for interacting with The
|
6
|
-
# Wordnik API.
|
7
|
-
class Define
|
8
|
-
# Wordnik.com's service provides definitions. The logger
|
9
|
-
# defaults to Rails.logger or Logger.new(STDOUT). Set to
|
10
|
-
# Logger.new('/dev/null') to disable logging.
|
11
|
-
#
|
12
|
-
# @param search [String] The word or phrase to search for.
|
13
|
-
# @param fmt [String] The response format, json or xml.
|
14
|
-
def define(search, fmt)
|
15
|
-
apikey = ENV['WORDNIK']
|
16
|
-
Wordnik.configure do |cfg|
|
17
|
-
cfg.api_key = apikey
|
18
|
-
cfg.response_format = fmt
|
19
|
-
cfg.logger = Logger.new('/dev/null')
|
20
|
-
end
|
21
|
-
defi = Wordnik.word.get_definitions(search)
|
22
|
-
if defi != ''
|
23
|
-
defi.map { |d|
|
24
|
-
text = d['text']
|
25
|
-
# att = d['attributionText']
|
26
|
-
part = d['partOfSpeech']
|
27
|
-
puts "Definition: #{part} - #{text}"
|
28
|
-
# puts "Definition: #{part} - #{text} - #{att}" # With attribution
|
29
|
-
}
|
30
|
-
else
|
31
|
-
puts 'Wordnik returned an empty string.'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/lyracyst/get.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
module Lyracyst
|
3
|
-
#The Get class defines a method to search all sources.
|
4
|
-
class Get
|
5
|
-
# Get searches each source with the same query.
|
6
|
-
#
|
7
|
-
# @param search [String] The word to search for.
|
8
|
-
# @param result [Array] The response array.
|
9
|
-
# @param lang [String] The search language.
|
10
|
-
# @param fmt [String] The response format, json or xml.
|
11
|
-
def get(search, result, lang, fmt)
|
12
|
-
de = Lyracyst::Define.new
|
13
|
-
re = Lyracyst::Relate.new
|
14
|
-
rh = Lyracyst::Rhyme.new
|
15
|
-
de.define(search, fmt)
|
16
|
-
re.relate(search, result, lang, fmt)
|
17
|
-
result = []
|
18
|
-
rh.rhyme(search, result)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/lyracyst/relate.rb
DELETED
@@ -1,171 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'httpi'
|
3
|
-
require 'multi_json'
|
4
|
-
require 'multi_xml'
|
5
|
-
|
6
|
-
module Lyracyst
|
7
|
-
# The Relate class defines methods for interacting with the
|
8
|
-
# Altervista API.
|
9
|
-
class Relate
|
10
|
-
# Altervista.org's thesaurus service provides related words.
|
11
|
-
# The service limits each API key to 5000 queries a day. If
|
12
|
-
# maximum number of queries has been reached, this method
|
13
|
-
# will exit. Search language can be it_IT, fr_FR, de_DE,
|
14
|
-
# en_US, el_GR, es_ES, de_DE, no_NO, pt_PT, ro_RO, ru_RU,
|
15
|
-
# sk_SK. This method calls {Related#update} and {Related#submit}.
|
16
|
-
#
|
17
|
-
# @param search [String] The word or phrase to search for.
|
18
|
-
# @param result [Array] The JSON response.
|
19
|
-
# @param lang [String] Search language code.
|
20
|
-
# @param fmt [String] Results format, json or xml.
|
21
|
-
def relate(search, result, lang, fmt)
|
22
|
-
max = 5000
|
23
|
-
t = Time.now
|
24
|
-
y = t.year.to_s
|
25
|
-
m = t.month
|
26
|
-
d = t.day
|
27
|
-
if m < 10 then m = "0#{m}" else m = m.to_s; end
|
28
|
-
if d < 10 then d = "0#{d}" else d = d.to_s; end
|
29
|
-
date = "#{y}#{m}#{d}"
|
30
|
-
dateint = date.to_i
|
31
|
-
if File.exist?('json/synqc.json') == true
|
32
|
-
rl = File.readlines('json/synqc.json')
|
33
|
-
rl = rl[0]
|
34
|
-
loadrl = MultiJson.load(rl)
|
35
|
-
testdate = loadrl['date']
|
36
|
-
querycount = loadrl['querycount']
|
37
|
-
pdateint = testdate.to_i
|
38
|
-
if dateint > pdateint == true
|
39
|
-
re = Lyracyst::Relate.new
|
40
|
-
#re.update(dateint, querycount)
|
41
|
-
end
|
42
|
-
else
|
43
|
-
querycount = 0
|
44
|
-
new = { 'date' => dateint, 'querycount' => querycount }
|
45
|
-
#fo = File.open('json/synqc.json', "w+") # FIXME json dir operations fail in Cucumber
|
46
|
-
#tofile = MultiJson.dump(new)
|
47
|
-
#fo.print tofile
|
48
|
-
#fo.close
|
49
|
-
end
|
50
|
-
if querycount < max
|
51
|
-
urlprefix = 'http://thesaurus.altervista.org/thesaurus/v1'
|
52
|
-
apikey = ENV['THESAURUS']
|
53
|
-
url = "#{urlprefix}?key=#{apikey}&word=#{search}&language=#{lang}&output=#{fmt}"
|
54
|
-
re = Lyracyst::Relate.new
|
55
|
-
re.submit(url, dateint, result, querycount)
|
56
|
-
else
|
57
|
-
puts 'Max queries per day for related words has been reached.'
|
58
|
-
end
|
59
|
-
end
|
60
|
-
# Opens URL and returns response. HTTPI supports multiple HTTP
|
61
|
-
# clients, and selects the 'best' in the following order:
|
62
|
-
# httpclient, curb, em_http, excon, net_http, net_http_persistent.
|
63
|
-
# For C extensions, curb is recommended. For pure Ruby, use excon.
|
64
|
-
# You can specify a client to use like this:
|
65
|
-
# request = HTTPI::Request.new(url)
|
66
|
-
# HTTPI.get(request, :curb)
|
67
|
-
#
|
68
|
-
# @param url [String] The query URL
|
69
|
-
# @param result [Array] The response
|
70
|
-
# @param rtype [String] Results format, json or xml.
|
71
|
-
def http(url, result, rtype)
|
72
|
-
request = HTTPI::Request.new(url)
|
73
|
-
HTTPI.log = false
|
74
|
-
request = HTTPI.get(request)
|
75
|
-
if request.code == 200
|
76
|
-
if request.headers['Content-Type'] =~ /json/
|
77
|
-
rtype = 'json'
|
78
|
-
result = request.body
|
79
|
-
elsif request.headers['Content-Type'] =~ /xml/
|
80
|
-
rtype = 'xml'
|
81
|
-
result = request.body
|
82
|
-
else
|
83
|
-
puts "HTTP Content Type #{request.headers['Content-Type']}"
|
84
|
-
end
|
85
|
-
else
|
86
|
-
puts "HTTP Status #{request.code}"
|
87
|
-
puts "HTTP Body #{request.body}"
|
88
|
-
end
|
89
|
-
return result, rtype
|
90
|
-
end
|
91
|
-
# Parses a JSON response into a Ruby object. multi_json supports
|
92
|
-
# multiple JSON parsers, and selects the 'best' in the following order:
|
93
|
-
# oj, yajl, json, json_pure, okjson. For C extensions, oj is recommended.
|
94
|
-
# For pure Ruby, use json_pure. This method calls {Related#extract}.
|
95
|
-
#
|
96
|
-
# @param result [String] The response body.
|
97
|
-
def pjson(result)
|
98
|
-
resulta = MultiJson.load(result)
|
99
|
-
resulta = resulta['response']
|
100
|
-
re = Lyracyst::Relate.new
|
101
|
-
re.extract(resulta)
|
102
|
-
end
|
103
|
-
# Parses a XML response into a Ruby object. multi_xml supports
|
104
|
-
# multiple XML parsers, and selects the 'best' in the following order:
|
105
|
-
# ox, libxml, nokogiri, rexml. For C extensions, ox is recommended. For
|
106
|
-
# pure Ruby, use REXML. This method calls {Related#extract}.
|
107
|
-
#
|
108
|
-
# @param result [String] The response body.
|
109
|
-
def pxml(result)
|
110
|
-
resulta = MultiXml.parse(result)
|
111
|
-
resulta = resulta['response']
|
112
|
-
re = Lyracyst::Relate.new
|
113
|
-
re.extract(resulta)
|
114
|
-
end
|
115
|
-
# Extracts related words from the response and prints them.
|
116
|
-
#
|
117
|
-
# @param resulta [Array] An array of values from the response.
|
118
|
-
def extract(resulta)
|
119
|
-
x = 0
|
120
|
-
y = resulta.length - 1
|
121
|
-
while x <= y
|
122
|
-
item=resulta[x]
|
123
|
-
item=item['list']
|
124
|
-
puts "Related words: #{item['category'].gsub(/\(|\)/, '')} - #{item['synonyms']}"
|
125
|
-
x += 1
|
126
|
-
end
|
127
|
-
end
|
128
|
-
# Submits search term and parameters to Altervista.
|
129
|
-
# This method calls {Related#http}, {Related#pjson},
|
130
|
-
# {Related#pxml} and {Related#update}.
|
131
|
-
#
|
132
|
-
# @param url [String] The assembled search URL.
|
133
|
-
# @param dateint [Fixnum] Today's date.
|
134
|
-
# @param result [String] The JSON response.
|
135
|
-
# @param querycount [Fixnum] Number of queries today.
|
136
|
-
def submit(url, dateint, result, querycount)
|
137
|
-
#if ENVIRONMENT == 'javascript'
|
138
|
-
#url = "#{url}&callback=synonymSearch"
|
139
|
-
#end
|
140
|
-
re = Lyracyst::Relate.new
|
141
|
-
rtype = ''
|
142
|
-
result = re.http(url, result, rtype)
|
143
|
-
rtype = result[1]
|
144
|
-
result = result[0]
|
145
|
-
if rtype == 'json'
|
146
|
-
re.pjson(result)
|
147
|
-
elsif rtype == 'xml'
|
148
|
-
re.pxml(result)
|
149
|
-
else
|
150
|
-
puts "Invalid data format."
|
151
|
-
end
|
152
|
-
querycount += 1
|
153
|
-
#re.update(dateint, querycount)
|
154
|
-
end
|
155
|
-
# Sets today's date and writes it with querycount to syncqc.json.
|
156
|
-
#
|
157
|
-
# @param dateint [Fixnum] Today's date in integer form.
|
158
|
-
# @param querycount [Fixnum] Number of daily queries in integer form.
|
159
|
-
def update(dateint, querycount)
|
160
|
-
qct = { 'date' => dateint, 'querycount' => querycount }
|
161
|
-
if File.exist?('json/synqc.json') == true
|
162
|
-
fo = File.open('json/synqc.json', "w+")
|
163
|
-
else
|
164
|
-
fo = File.new('json/synqc.json', "w+")
|
165
|
-
end
|
166
|
-
tofile = MultiJson.dump(qct)
|
167
|
-
fo.print tofile
|
168
|
-
fo.close
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
data/lib/lyracyst/rhyme.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'httpi'
|
3
|
-
require 'multi_json'
|
4
|
-
module Lyracyst
|
5
|
-
# The Rhyme class uses the ARPABET Heroku app to fetch rhymes.
|
6
|
-
class Rhyme
|
7
|
-
# ARPA created ARPABET decades ago to find words that
|
8
|
-
# rhyme. The technology is still quite relevant today.
|
9
|
-
# This program uses the Heroku app based on ARPABET.
|
10
|
-
# This method calls {Rhyme#http}.
|
11
|
-
#
|
12
|
-
# @param search [String] The word or phrase to search for.
|
13
|
-
def rhyme(search, result)
|
14
|
-
url = "http://arpabet.heroku.com/words/#{search}"
|
15
|
-
rh = Lyracyst::Rhyme.new
|
16
|
-
rtype = ''
|
17
|
-
result = rh.http(url, result)
|
18
|
-
resulta = MultiJson.load(result)
|
19
|
-
print "Rhymes with: "
|
20
|
-
resulta.map { |x|
|
21
|
-
print " #{x}"
|
22
|
-
}
|
23
|
-
print "\n"
|
24
|
-
end
|
25
|
-
# Opens URL and returns response. HTTPI supports multiple HTTP
|
26
|
-
# clients, and selects the 'best' in the following order:
|
27
|
-
# httpclient, curb, em_http, excon, net_http, net_http_persistent.
|
28
|
-
# For C extensions, curb is recommended. For pure Ruby, use excon.
|
29
|
-
# You can specify a client to use like this:
|
30
|
-
# request = HTTPI::Request.new(url)
|
31
|
-
# HTTPI.get(request, :curb)
|
32
|
-
#
|
33
|
-
# @param url [String] The query URL
|
34
|
-
# @param result [Array] The response
|
35
|
-
def http(url, result)
|
36
|
-
request = HTTPI::Request.new(url)
|
37
|
-
HTTPI.log = false
|
38
|
-
request = HTTPI.get(request)
|
39
|
-
if request.code == 200
|
40
|
-
result = request.body
|
41
|
-
else
|
42
|
-
puts "HTTP Status #{request.code}"
|
43
|
-
puts "HTTP Body #{request.body}"
|
44
|
-
end
|
45
|
-
return result
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|