lyracyst 0.0.5 → 0.0.6

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: 36f67dfe963fa4783cee935575cb1c2102f6d8c4
4
- data.tar.gz: be91d0d61356c970bda520dd555076968e259bde
3
+ metadata.gz: 8723f57fb79a4ce8acbe30465686e5c04f8fd93c
4
+ data.tar.gz: 7ac5df788e079525c4bd72c53ebea08ca08cb23a
5
5
  SHA512:
6
- metadata.gz: 8215028afaf58b54cdd9e7d9b816fda64fe1c11381af4815e3503be7fd4c451a0c9471a8c88b87ec3a0d454d17c02bc727eae1e7d05dd1739c2e08c4a707b4d9
7
- data.tar.gz: 7c3fbcd3e37ef7d6358f36b113b0a6331f687f4a0e6841e5c2a03f6762184f8da866fd5064a5bdce5b399d944cd48dbab737db5102c5f2da8c0e17a97539aa4a
6
+ metadata.gz: 6b4fc7346156ff36f9080d1f211ed8a019dd1954510e4cfbc6861e13f933a02e45631989a18542738515ac41ca6346520c859f63033404aba25ce5e13884a961
7
+ data.tar.gz: b5f8385b1dcb2d6f20742d6bf75095d4618652a4b28f1d754024108d12f1ada0c90caacc99150e31baa18e8f5cd65ba8f5cf65d3f84d5430b3fd90295c642cba
data/bin/lyracyst CHANGED
@@ -1,4 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+ require 'lyracyst/fetch'
5
+ require 'lyracyst/search'
6
+ require 'lyracyst/version'
7
+
2
8
  # The program takes a search term and returns a list.
3
9
  # The list can be either definitions, related words,
4
10
  # rhymes, or all three at once.
@@ -6,238 +12,76 @@
6
12
  # Author:: Drew Prentice (mailto:weirdpercent@gmail.com)
7
13
  # Copyright:: Copyright (c) 2014 Drew Prentice
8
14
  # License:: MIT
15
+ module Lyracyst
16
+ environment = 'ruby'
17
+ program :name, 'lyracyst'
18
+ program :version, VERSION
19
+ program :description, 'A powerful word search tool that fetches definitions, related words, and rhymes.'
9
20
 
10
- require 'rubygems'
11
- require 'commander/import'
12
- #require 'configatron'
13
- require 'multi_json'
14
- #require 'nokogiri'
15
- require 'open-uri/cached'
16
- require 'wordnik'
17
-
18
- OpenURI::Cache.cache_path = 'tmp/open-uri'
19
- environment='ruby'
20
- result=''
21
-
22
- # Handles tasks related to fetching queries
23
- class Fetch
24
-
25
- # Opens URL and returns the JSON response.
26
- #
27
- # @param url [String] The query URL
28
- # @param result [String] The JSON response.
29
- def search(url, result)
30
- result=open(url).read
31
- end
32
-
33
- # Sets today's date and writes it with querycount to syncqc.json.
34
- #
35
- # @param dateint [Fixnum] Today's date in integer form.
36
- # @param querycount [Fixnum] Number of daily queries in integer form.
37
- def update(dateint, querycount)
38
- qct={'date' => dateint, 'querycount' => querycount}
39
- fo=File.open("json/synqc.json", "w+")
40
- tofile=MultiJson.dump(qct)
41
- fo.print tofile
42
- fo.close
43
- end
44
-
45
- # Extracts related words from JSON response and prints them.
46
- #
47
- # @param x [Fixnum] Integer always set to zero.
48
- # @param y [Fixnum] Number of items in resulta Array minus 1.
49
- # @param resulta [Array] An array of values from JSON response.
50
- def rel(x, y, resulta)
51
- while x <= y
52
- resultl=resulta[x]
53
- list=resultl['list']
54
- cat=list['category'].gsub(/\(|\)/, '')
55
- puts "Related words: #{list['category']} - #{list['synonyms']}"
56
- x+=1
21
+ command :get do |c|
22
+ c.syntax = 'lyracyst get word'
23
+ c.summary = 'Fetches all sources'
24
+ c.description = 'Searches definitions, related words, and rhymes for a given query'
25
+ c.example 'Fetches info about the word test', 'lyracyst get test'
26
+ #c.option = '--lang en_US', String, 'Sets search language'
27
+ #c.option = '--fmt json', String, 'Sets XML or JSON format'
28
+ c.action do |args, options|
29
+ #options.default :lang => 'en_US', :fmt => 'json'
30
+ lang = 'en_US'
31
+ fmt = 'json'
32
+ search = args[0]
33
+ fmt = 'json'
34
+ result = []
35
+ s = Lyracyst::Search.new
36
+ puts "Getting all for [#{search}]"
37
+ s.define(search)
38
+ s.related(search, result, lang, fmt)
39
+ s.rhyme(search, result)
57
40
  end
58
41
  end
59
42
 
60
- # Submits search term and parameters to Altervista.
61
- # searchlang can be de_DE, el_GR, en_US, es_ES, fr_FR,
62
- # it_IT, no_NO, pt_PT, ro_RO, ru_RU, or sk_SK.
63
- # dataoutput only takes 'json' right now. This method calls
64
- # {Fetch#search} and {Fetch#update}.
65
- #
66
- # @param search [String] The word or phrase to search for.
67
- # @param dateint [Fixnum] Today's date in integer form.
68
- # @param result [String] The JSON response.
69
- # @param environment [String] Execution environment, right now just ruby.
70
- # @param querycount [Fixnum] Number of daily queries in integer form.
71
- def submit(search, dateint, result, environment, querycount)
72
- urlprefix='http://thesaurus.altervista.org/thesaurus/v1'
73
- apikey=ENV['THESAURUS']
74
- searchlang='en_US'
75
- dataoutput='json'
76
- url="#{urlprefix}?key=#{apikey}&word=#{search}&language=#{searchlang}&output=#{dataoutput}"
77
- if environment == 'javascript'
78
- url="#{url}&callback=synonymSearch"
43
+ command :define do |c|
44
+ c.syntax = 'lyracyst define word'
45
+ c.summary = 'Fetches definitions'
46
+ c.description = 'Uses the Wordnik API to get definitions'
47
+ c.example 'Uses the Wordnik API to get definitions of the word test', 'lyracyst define test'
48
+ c.action do |args, options|
49
+ search = args[0]
50
+ s = Lyracyst::Search.new
51
+ puts "Getting definitions for [#{search}]"
52
+ s.define(search)
79
53
  end
80
- f=Fetch.new()
81
- resultj=f.search(url, result)
82
- resultp=MultiJson.load(resultj)
83
- resulta=resultp['response']
84
- x=0
85
- y=resulta.length-1
86
- f.rel(x, y, resulta)
87
- querycount+=1
88
- f.update(dateint, querycount)
89
54
  end
90
55
 
91
- # Formats rhyme results, assumes a space means a
92
- # word contraction, i.e. raison d'etre and inserts
93
- # an apostrophe. Also removes Arpabet numbers.
94
- #
95
- # @param x [Fixnum] Integer always set to zero.
96
- # @param y [Fixnum] Number of items in resulta Array minus 1.
97
- # @param parse [String] The rhyming word to be formatted.
98
- def parse(x, y, parse)
99
- while x <= y
100
- if parse[x] =~ / \d/
101
- fix=parse[x]
102
- parse[x]=fix.gsub(/ \d/ , "")
103
- end
104
- if parse[x] =~ / /
105
- fix=parse[x]
106
- parse[x]=fix.gsub(' ', "'")
107
- end
108
- print "#{parse[x]} "
109
- x+=1
56
+ command :related do |c|
57
+ c.syntax = 'lyracyst related word'
58
+ c.summary = 'Fetches related words'
59
+ c.description = 'Uses the Altervista API to get related words'
60
+ c.example 'Uses the Altervista API to get words related to test', 'lyracyst related test'
61
+ #c.option = '--lang', String, 'Sets search language'
62
+ c.action do |args, options|
63
+ lang = 'en_US'
64
+ fmt = 'json'
65
+ search = args[0]
66
+ result = []
67
+ s = Lyracyst::Search.new
68
+ puts "Getting related words for [#{search}]"
69
+ s.related(search, result, lang, fmt)
110
70
  end
111
71
  end
112
- end
113
72
 
114
- # The Search class defines three methods for submitting queries.
115
- class Search
116
- # Altervista.org's thesaurus service provides related words.
117
- # The service limits each API key to 5000 queries a day. If
118
- # maximum number of queries has been reached, this methods
119
- # will exit. This method calls {Fetch#update} and {Fetch#submit}.
120
- #
121
- # @param search [String] The word or phrase to search for.
122
- # @param result [String] The JSON response.
123
- def related(search, result)
124
- environment='ruby'; maxqueries=5000; querycount=0; t=Time.now; y=t.year.to_s; m=t.month; d=t.day;
125
- if m < 10 then m="0#{m}" else m=m.to_s; end
126
- if d < 10 then d="0#{d}" else d=d.to_s; end
127
- date="#{y}#{m}#{d}"
128
- dateint=date.to_i
129
- if File.exist?("json/synqc.json") == true
130
- rl=File.readlines("json/synqc.json")
131
- rl=rl[0]
132
- loadrl=MultiJson.load(rl)
133
- testdate=loadrl['date']
134
- testcount=loadrl['querycount']
135
- pdateint=testdate.to_i
136
- if dateint > pdateint == true
137
- f=Fetch.new()
138
- f.update(dateint, querycount)
139
- end
140
- else
141
- testcount=0
142
- end
143
- if testcount < maxqueries
144
- f=Fetch.new()
145
- f.submit(search, dateint, result, environment, querycount)
146
- else
147
- puts "Max queries per day has been reached."
148
- end
149
- end
150
- # Wordnik.com's service provides definitions. The logger
151
- # defaults to Rails.logger or Logger.new(STDOUT). Set to
152
- # Logger.new('/dev/null') to disable logging.
153
- #
154
- # @param search [String] The word or phrase to search for.
155
- def define(search)
156
- apikey=ENV['WORDNIK']
157
- Wordnik.configure do |cfg|
158
- cfg.api_key=apikey
159
- cfg.response_format='json'
160
- cfg.logger = Logger.new('/dev/null')
73
+ command :rhyme do |c|
74
+ c.syntax = 'lyracyst rhyme word'
75
+ c.summary = 'Fetches rhymes'
76
+ c.description = 'Uses the ARPABET system to get rhymes'
77
+ c.example 'Uses the ARPABET system to get rhymes with test', 'lyracyst rhyme test'
78
+ c.option '--some-switch', 'Some switch that does something'
79
+ c.action do |args, options|
80
+ result = []
81
+ search = args[0]
82
+ s = Lyracyst::Search.new
83
+ puts "Getting rhymes for [#{search}]"
84
+ s.rhyme(search, result)
161
85
  end
162
- define=Wordnik.word.get_definitions(search)
163
- define.map { |defi|
164
- text=defi['text']; att=defi['attributionText']; part=defi['partOfSpeech'];
165
- puts "Definition: #{part} - #{text}"
166
- #puts "Definition: #{part} - #{text} - #{att}" #With attribution to source
167
- }
168
- end
169
-
170
- # ARPA created ARPABET decades ago to find words that
171
- # rhyme. The technology is still quite relevant today.
172
- # This program uses the Heroku app based on ARPABET.
173
- #
174
- # @param search [String] The word or phrase to search for.
175
- def rhyme(search)
176
- url="http://arpabet.heroku.com/words/#{search}"
177
- f=Fetch.new()
178
- result=f.search(url, result) #submit search query
179
- parse=MultiJson.load(result)
180
- print "Rhymes with: "
181
- x=0
182
- y=parse.length - 1
183
- f.parse(x, y, parse)
184
- print "\n"
185
- end
186
- end
187
-
188
- program :name, 'lyracyst'
189
- program :version, '0.0.5'
190
- program :description, 'A powerful word search tool that fetches definitions, related words, and rhymes.'
191
- command :get do |c|
192
- c.syntax = 'lyracyst get [options]'
193
- c.summary = 'Fetches all sources'
194
- c.description = 'Searches definitions, related words, and rhymes for a given query'
195
- c.example 'Searches definitions, related words, and rhymes for a given query', 'lyracyst get test'
196
- c.action do |args, options|
197
- search=args[0]
198
- s=Search.new
199
- puts "Searching for [#{search}]:"
200
- s.define(search)
201
- s.related(search, result)
202
- s.rhyme(search)
203
- end
204
- end
205
-
206
- command :define do |c|
207
- c.syntax = 'lyracyst define [options]'
208
- c.summary = 'Fetches definitions'
209
- c.description = 'Uses the Wordnik API to get definitions'
210
- c.example 'Uses the Wordnik API to get definitions', 'lyracyst define test'
211
- c.action do |args, options|
212
- search=args[0]
213
- s=Search.new
214
- puts "Searching for [#{search}]:"
215
- s.define(search)
216
- end
217
- end
218
-
219
- command :related do |c|
220
- c.syntax = 'lyracyst related [options]'
221
- c.summary = 'Fetches related words'
222
- c.description = 'Uses the Altervista API to get related words'
223
- c.example 'Uses the Altervista API to get related words', 'lyracyst related test'
224
- c.action do |args, options|
225
- search=args[0]
226
- s=Search.new
227
- puts "Searching for [#{search}]:"
228
- s.related(search)
229
- end
230
- end
231
-
232
- command :rhyme do |c|
233
- c.syntax = 'lyracyst rhyme [options]'
234
- c.summary = 'Fetches rhymes'
235
- c.description = 'Uses the ARPABET system to get rhymes'
236
- c.example 'Uses the ARPABET system to get rhymes', 'lyracyst rhyme test'
237
- c.action do |args, options|
238
- search=args[0]
239
- s=Search.new
240
- puts "Searching for [#{search}]:"
241
- s.rhyme(search)
242
86
  end
243
87
  end
data/lib/lyracyst.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+ require './lib/lyracyst/fetch.rb'
5
+ require './lib/lyracyst/search.rb'
6
+ require './lib/lyracyst/version.rb'
7
+
2
8
  # The program takes a search term and returns a list.
3
9
  # The list can be either definitions, related words,
4
10
  # rhymes, or all three at once.
@@ -6,238 +12,76 @@
6
12
  # Author:: Drew Prentice (mailto:weirdpercent@gmail.com)
7
13
  # Copyright:: Copyright (c) 2014 Drew Prentice
8
14
  # License:: MIT
15
+ module Lyracyst
16
+ environment = 'ruby'
17
+ program :name, 'lyracyst'
18
+ program :version, VERSION
19
+ program :description, 'A powerful word search tool that fetches definitions, related words, and rhymes.'
9
20
 
10
- require 'rubygems'
11
- require 'commander/import'
12
- #require 'configatron'
13
- require 'multi_json'
14
- #require 'nokogiri'
15
- require 'open-uri/cached'
16
- require 'wordnik'
17
-
18
- OpenURI::Cache.cache_path = 'tmp/open-uri'
19
- environment='ruby'
20
- result=''
21
-
22
- # Handles tasks related to fetching queries
23
- class Fetch
24
-
25
- # Opens URL and returns the JSON response.
26
- #
27
- # @param url [String] The query URL
28
- # @param result [String] The JSON response.
29
- def search(url, result)
30
- result=open(url).read
31
- end
32
-
33
- # Sets today's date and writes it with querycount to syncqc.json.
34
- #
35
- # @param dateint [Fixnum] Today's date in integer form.
36
- # @param querycount [Fixnum] Number of daily queries in integer form.
37
- def update(dateint, querycount)
38
- qct={'date' => dateint, 'querycount' => querycount}
39
- fo=File.open("json/synqc.json", "w+")
40
- tofile=MultiJson.dump(qct)
41
- fo.print tofile
42
- fo.close
43
- end
44
-
45
- # Extracts related words from JSON response and prints them.
46
- #
47
- # @param x [Fixnum] Integer always set to zero.
48
- # @param y [Fixnum] Number of items in resulta Array minus 1.
49
- # @param resulta [Array] An array of values from JSON response.
50
- def rel(x, y, resulta)
51
- while x <= y
52
- resultl=resulta[x]
53
- list=resultl['list']
54
- cat=list['category'].gsub(/\(|\)/, '')
55
- puts "Related words: #{list['category']} - #{list['synonyms']}"
56
- x+=1
21
+ command :get do |c|
22
+ c.syntax = 'lyracyst get word'
23
+ c.summary = 'Fetches all sources'
24
+ c.description = 'Searches definitions, related words, and rhymes for a given query'
25
+ c.example 'Fetches info about the word test', 'lyracyst get test'
26
+ #c.option = '--lang en_US', String, 'Sets search language'
27
+ #c.option = '--fmt json', String, 'Sets XML or JSON format'
28
+ c.action do |args, options|
29
+ #options.default :lang => 'en_US', :fmt => 'json'
30
+ lang = 'en_US'
31
+ fmt = 'json'
32
+ search = args[0]
33
+ fmt = 'json'
34
+ result = []
35
+ s = Lyracyst::Search.new
36
+ puts "Getting all for [#{search}]"
37
+ s.define(search)
38
+ s.related(search, result, lang, fmt)
39
+ s.rhyme(search, result)
57
40
  end
58
41
  end
59
42
 
60
- # Submits search term and parameters to Altervista.
61
- # searchlang can be de_DE, el_GR, en_US, es_ES, fr_FR,
62
- # it_IT, no_NO, pt_PT, ro_RO, ru_RU, or sk_SK.
63
- # dataoutput only takes 'json' right now. This method calls
64
- # {Fetch#search} and {Fetch#update}.
65
- #
66
- # @param search [String] The word or phrase to search for.
67
- # @param dateint [Fixnum] Today's date in integer form.
68
- # @param result [String] The JSON response.
69
- # @param environment [String] Execution environment, right now just ruby.
70
- # @param querycount [Fixnum] Number of daily queries in integer form.
71
- def submit(search, dateint, result, environment, querycount)
72
- urlprefix='http://thesaurus.altervista.org/thesaurus/v1'
73
- apikey=ENV['THESAURUS']
74
- searchlang='en_US'
75
- dataoutput='json'
76
- url="#{urlprefix}?key=#{apikey}&word=#{search}&language=#{searchlang}&output=#{dataoutput}"
77
- if environment == 'javascript'
78
- url="#{url}&callback=synonymSearch"
43
+ command :define do |c|
44
+ c.syntax = 'lyracyst define word'
45
+ c.summary = 'Fetches definitions'
46
+ c.description = 'Uses the Wordnik API to get definitions'
47
+ c.example 'Uses the Wordnik API to get definitions of the word test', 'lyracyst define test'
48
+ c.action do |args, options|
49
+ search = args[0]
50
+ s = Lyracyst::Search.new
51
+ puts "Getting definitions for [#{search}]"
52
+ s.define(search)
79
53
  end
80
- f=Fetch.new()
81
- resultj=f.search(url, result)
82
- resultp=MultiJson.load(resultj)
83
- resulta=resultp['response']
84
- x=0
85
- y=resulta.length-1
86
- f.rel(x, y, resulta)
87
- querycount+=1
88
- f.update(dateint, querycount)
89
54
  end
90
55
 
91
- # Formats rhyme results, assumes a space means a
92
- # word contraction, i.e. raison d'etre and inserts
93
- # an apostrophe. Also removes Arpabet numbers.
94
- #
95
- # @param x [Fixnum] Integer always set to zero.
96
- # @param y [Fixnum] Number of items in resulta Array minus 1.
97
- # @param parse [String] The rhyming word to be formatted.
98
- def parse(x, y, parse)
99
- while x <= y
100
- if parse[x] =~ / \d/
101
- fix=parse[x]
102
- parse[x]=fix.gsub(/ \d/ , "")
103
- end
104
- if parse[x] =~ / /
105
- fix=parse[x]
106
- parse[x]=fix.gsub(' ', "'")
107
- end
108
- print "#{parse[x]} "
109
- x+=1
56
+ command :related do |c|
57
+ c.syntax = 'lyracyst related word'
58
+ c.summary = 'Fetches related words'
59
+ c.description = 'Uses the Altervista API to get related words'
60
+ c.example 'Uses the Altervista API to get words related to test', 'lyracyst related test'
61
+ #c.option = '--lang', String, 'Sets search language'
62
+ c.action do |args, options|
63
+ lang = 'en_US'
64
+ fmt = 'json'
65
+ search = args[0]
66
+ result = []
67
+ s = Lyracyst::Search.new
68
+ puts "Getting related words for [#{search}]"
69
+ s.related(search, result, lang, fmt)
110
70
  end
111
71
  end
112
- end
113
72
 
114
- # The Search class defines three methods for submitting queries.
115
- class Search
116
- # Altervista.org's thesaurus service provides related words.
117
- # The service limits each API key to 5000 queries a day. If
118
- # maximum number of queries has been reached, this methods
119
- # will exit. This method calls {Fetch#update} and {Fetch#submit}.
120
- #
121
- # @param search [String] The word or phrase to search for.
122
- # @param result [String] The JSON response.
123
- def related(search, result)
124
- environment='ruby'; maxqueries=5000; querycount=0; t=Time.now; y=t.year.to_s; m=t.month; d=t.day;
125
- if m < 10 then m="0#{m}" else m=m.to_s; end
126
- if d < 10 then d="0#{d}" else d=d.to_s; end
127
- date="#{y}#{m}#{d}"
128
- dateint=date.to_i
129
- if File.exist?("json/synqc.json") == true
130
- rl=File.readlines("json/synqc.json")
131
- rl=rl[0]
132
- loadrl=MultiJson.load(rl)
133
- testdate=loadrl['date']
134
- testcount=loadrl['querycount']
135
- pdateint=testdate.to_i
136
- if dateint > pdateint == true
137
- f=Fetch.new()
138
- f.update(dateint, querycount)
139
- end
140
- else
141
- testcount=0
142
- end
143
- if testcount < maxqueries
144
- f=Fetch.new()
145
- f.submit(search, dateint, result, environment, querycount)
146
- else
147
- puts "Max queries per day has been reached."
148
- end
149
- end
150
- # Wordnik.com's service provides definitions. The logger
151
- # defaults to Rails.logger or Logger.new(STDOUT). Set to
152
- # Logger.new('/dev/null') to disable logging.
153
- #
154
- # @param search [String] The word or phrase to search for.
155
- def define(search)
156
- apikey=ENV['WORDNIK']
157
- Wordnik.configure do |cfg|
158
- cfg.api_key=apikey
159
- cfg.response_format='json'
160
- cfg.logger = Logger.new('/dev/null')
73
+ command :rhyme do |c|
74
+ c.syntax = 'lyracyst rhyme word'
75
+ c.summary = 'Fetches rhymes'
76
+ c.description = 'Uses the ARPABET system to get rhymes'
77
+ c.example 'Uses the ARPABET system to get rhymes with test', 'lyracyst rhyme test'
78
+ c.option '--some-switch', 'Some switch that does something'
79
+ c.action do |args, options|
80
+ result = []
81
+ search = args[0]
82
+ s = Lyracyst::Search.new
83
+ puts "Getting rhymes for [#{search}]"
84
+ s.rhyme(search, result)
161
85
  end
162
- define=Wordnik.word.get_definitions(search)
163
- define.map { |defi|
164
- text=defi['text']; att=defi['attributionText']; part=defi['partOfSpeech'];
165
- puts "Definition: #{part} - #{text}"
166
- #puts "Definition: #{part} - #{text} - #{att}" #With attribution to source
167
- }
168
- end
169
-
170
- # ARPA created ARPABET decades ago to find words that
171
- # rhyme. The technology is still quite relevant today.
172
- # This program uses the Heroku app based on ARPABET.
173
- #
174
- # @param search [String] The word or phrase to search for.
175
- def rhyme(search)
176
- url="http://arpabet.heroku.com/words/#{search}"
177
- f=Fetch.new()
178
- result=f.search(url, result) #submit search query
179
- parse=MultiJson.load(result)
180
- print "Rhymes with: "
181
- x=0
182
- y=parse.length - 1
183
- f.parse(x, y, parse)
184
- print "\n"
185
- end
186
- end
187
-
188
- program :name, 'lyracyst'
189
- program :version, '0.0.5'
190
- program :description, 'A powerful word search tool that fetches definitions, related words, and rhymes.'
191
- command :get do |c|
192
- c.syntax = 'lyracyst get [options]'
193
- c.summary = 'Fetches all sources'
194
- c.description = 'Searches definitions, related words, and rhymes for a given query'
195
- c.example 'Searches definitions, related words, and rhymes for a given query', 'lyracyst get test'
196
- c.action do |args, options|
197
- search=args[0]
198
- s=Search.new
199
- puts "Searching for [#{search}]:"
200
- s.define(search)
201
- s.related(search, result)
202
- s.rhyme(search)
203
- end
204
- end
205
-
206
- command :define do |c|
207
- c.syntax = 'lyracyst define [options]'
208
- c.summary = 'Fetches definitions'
209
- c.description = 'Uses the Wordnik API to get definitions'
210
- c.example 'Uses the Wordnik API to get definitions', 'lyracyst define test'
211
- c.action do |args, options|
212
- search=args[0]
213
- s=Search.new
214
- puts "Searching for [#{search}]:"
215
- s.define(search)
216
- end
217
- end
218
-
219
- command :related do |c|
220
- c.syntax = 'lyracyst related [options]'
221
- c.summary = 'Fetches related words'
222
- c.description = 'Uses the Altervista API to get related words'
223
- c.example 'Uses the Altervista API to get related words', 'lyracyst related test'
224
- c.action do |args, options|
225
- search=args[0]
226
- s=Search.new
227
- puts "Searching for [#{search}]:"
228
- s.related(search)
229
- end
230
- end
231
-
232
- command :rhyme do |c|
233
- c.syntax = 'lyracyst rhyme [options]'
234
- c.summary = 'Fetches rhymes'
235
- c.description = 'Uses the ARPABET system to get rhymes'
236
- c.example 'Uses the ARPABET system to get rhymes', 'lyracyst rhyme test'
237
- c.action do |args, options|
238
- search=args[0]
239
- s=Search.new
240
- puts "Searching for [#{search}]:"
241
- s.rhyme(search)
242
86
  end
243
87
  end
@@ -0,0 +1,83 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+ # require 'configatron'
4
+ require 'multi_json'
5
+ require 'open-uri/cached'
6
+
7
+ module Lyracyst
8
+ # Handles tasks related to fetching queries
9
+ class Fetch
10
+ # Opens URL and returns the JSON response.
11
+ #
12
+ # @param url [String] The query URL
13
+ # @param result [String] The JSON response.
14
+ def search(url, result)
15
+ OpenURI::Cache.cache_path = 'tmp/open-uri'
16
+ uri = URI.parse(url)
17
+ status = uri.open.meta[:status]
18
+ if status[0] == '200'
19
+ result = uri.open.read
20
+ return result
21
+ else
22
+ puts "HTTP Status #{status[0]} #{status[1]}"
23
+ end
24
+ end
25
+ # Sets today's date and writes it with querycount to syncqc.json.
26
+ #
27
+ # @param dateint [Fixnum] Today's date in integer form.
28
+ # @param querycount [Fixnum] Number of daily queries in integer form.
29
+ def update(dateint, querycount)
30
+ qct = { 'date' => dateint, 'querycount' => querycount }
31
+ if File.exist?('json/synqc.json') == true
32
+ fo = File.open('json/synqc.json', "w+")
33
+ else
34
+ fo = File.new('json/synqc.json', "w+")
35
+ end
36
+ tofile = MultiJson.dump(qct)
37
+ fo.print tofile
38
+ fo.close
39
+ end
40
+ # Extracts related words from JSON response and prints them.
41
+ #
42
+ # @param x [Fixnum] Integer always set to zero.
43
+ # @param y [Fixnum] Number of items in resulta Array minus 1.
44
+ # @param resulta [Array] An array of values from JSON response.
45
+ def rel(x, y, resulta)
46
+ while x <= y
47
+ resultl = resulta[x]
48
+ list = resultl['list']
49
+ puts "Related words: #{list['category'].gsub(/\(|\)/, '')} - #{list['synonyms']}"
50
+ x += 1
51
+ end
52
+ end
53
+ # Submits search term and parameters to Altervista.
54
+ # lang can be de_DE, el_GR, en_US, es_ES, fr_FR,
55
+ # it_IT, no_NO, pt_PT, ro_RO, ru_RU, or sk_SK.
56
+ # fmt only takes 'json' right now. This method calls
57
+ # {Fetch#search}, {Fetch#rel} and {Fetch#update}.
58
+ #
59
+ # @param search [String] The word or phrase to search for.
60
+ # @param dateint [Fixnum] Today's date.
61
+ # @param result [String] The JSON response.
62
+ # @param querycount [Fixnum] Number of queries today.
63
+ # @param lang [String] Search language code
64
+ # @param fmt [String] json or xml, currently just json.
65
+ def submit(search, dateint, result, querycount, lang, fmt)
66
+ urlprefix = 'http://thesaurus.altervista.org/thesaurus/v1'
67
+ apikey = ENV['THESAURUS']
68
+ url = "#{urlprefix}?key=#{apikey}&word=#{search}&language=#{lang}&output=#{fmt}"
69
+ #if environment == 'javascript'
70
+ #url = "#{url}&callback=synonymSearch"
71
+ #end
72
+ f = Lyracyst::Fetch.new
73
+ resultj = f.search(url, result)
74
+ resultp = MultiJson.load(resultj)
75
+ resulta = resultp['response']
76
+ x = 0
77
+ y = resulta.length - 1
78
+ f.rel(x, y, resulta)
79
+ querycount += 1
80
+ #f.update(dateint, querycount) # FIXME Won't run in Aruba/Cucumber
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,92 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+ # require 'configatron'
4
+ require 'multi_json'
5
+ require 'wordnik'
6
+
7
+ module Lyracyst
8
+ # Defines three methods for submitting queries.
9
+ class Search
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 methods
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 {Fetch#update} and {Fetch#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] json or xml, currently just json.
21
+ def related(search, result, lang, fmt)
22
+ environment = 'ruby'
23
+ maxqueries = 5000
24
+ querycount = 0
25
+ t = Time.now
26
+ y = t.year.to_s
27
+ m = t.month
28
+ d = t.day
29
+ if m < 10 then m = "0#{m}" else m = m.to_s; end
30
+ if d < 10 then d = "0#{d}" else d = d.to_s; end
31
+ date = "#{y}#{m}#{d}"
32
+ dateint = date.to_i
33
+ if File.exist?('json/synqc.json') == true
34
+ rl = File.readlines('json/synqc.json')
35
+ rl = rl[0]
36
+ loadrl = MultiJson.load(rl)
37
+ testdate = loadrl['date']
38
+ testcount = loadrl['querycount']
39
+ pdateint = testdate.to_i
40
+ if dateint > pdateint == true
41
+ f = Lyracyst::Fetch.new
42
+ f.update(dateint, querycount)
43
+ end
44
+ else
45
+ testcount = 0
46
+ end
47
+ if testcount < maxqueries
48
+ f = Lyracyst::Fetch.new
49
+ f.submit(search, dateint, result, querycount, lang, fmt)
50
+ else
51
+ puts 'Max queries per day has been reached.'
52
+ end
53
+ end
54
+ # Wordnik.com's service provides definitions. The logger
55
+ # defaults to Rails.logger or Logger.new(STDOUT). Set to
56
+ # Logger.new('/dev/null') to disable logging.
57
+ #
58
+ # @param search [String] The word or phrase to search for.
59
+ def define(search)
60
+ apikey = ENV['WORDNIK']
61
+ Wordnik.configure do |cfg|
62
+ cfg.api_key = apikey
63
+ cfg.response_format = 'json'
64
+ cfg.logger = Logger.new('/dev/null')
65
+ end
66
+ define = Wordnik.word.get_definitions(search)
67
+ if define != ''
68
+ define.map { |defi|
69
+ text = defi['text']
70
+ # att = defi['attributionText']
71
+ part = defi['partOfSpeech']
72
+ puts "Definition: #{part} - #{text}"
73
+ # puts "Definition: #{part} - #{text} - #{att}" #With attribution
74
+ }
75
+ else
76
+ puts 'Wordnik returned an empty string.'
77
+ end
78
+ end
79
+ # ARPA created ARPABET decades ago to find words that
80
+ # rhyme. The technology is still quite relevant today.
81
+ # This program uses the Heroku app based on ARPABET.
82
+ # This method calls {Fetch#search}.
83
+ #
84
+ # @param search [String] The word or phrase to search for.
85
+ def rhyme(search, result)
86
+ url = "http://arpabet.heroku.com/words/#{search}"
87
+ f = Lyracyst::Fetch.new
88
+ result = f.search(url, result)
89
+ puts "Rhymes with: #{result}"
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,4 @@
1
+ module Lyracyst
2
+ # Semantic program version
3
+ VERSION = '0.0.6'
4
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lyracyst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-04-10 00:00:00.000000000 Z
11
+ date: 2014-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: configatron
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: multi_json
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.3'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.3'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: wordnik
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +94,48 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '4.12'
97
+ - !ruby/object:Gem::Dependency
98
+ name: aruba
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.5'
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.7'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.7'
125
+ - !ruby/object:Gem::Dependency
126
+ name: cucumber
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.3'
69
139
  description: Search Wordnik, thesaurus.altervista.org, and Arpabet from the command
70
140
  line.
71
141
  email:
@@ -76,11 +146,10 @@ extensions: []
76
146
  extra_rdoc_files: []
77
147
  files:
78
148
  - bin/lyracyst
79
- - changelog.md
80
149
  - lib/lyracyst.rb
81
- - license.md
82
- - readme.md
83
- - scaffold.md
150
+ - lib/lyracyst/fetch.rb
151
+ - lib/lyracyst/search.rb
152
+ - lib/lyracyst/version.rb
84
153
  homepage: http://github.com/weirdpercent/lyracyst
85
154
  licenses:
86
155
  - MIT
data/changelog.md DELETED
@@ -1,17 +0,0 @@
1
- Changelog
2
- ===
3
-
4
- Version 0.0.5 - Basic documentation
5
- - Command-line interface works
6
- - No more Code Climate because it doesn't like commander gem
7
- - Fixed /bin executable
8
-
9
- Version 0.0.1 - Feature complete
10
- - Ruby environment works
11
- - Secure Travis build works
12
- - JSON data handling works
13
- - Definitions work
14
- - Related words work
15
- - Thesaurus daily query limit enforced
16
- - Rhymes work
17
- - Improved Code Climate
data/license.md DELETED
@@ -1,22 +0,0 @@
1
- The MIT License (MIT)
2
- ========
3
-
4
- **Copyright (c) 2014 Drew Prentice**
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in all
14
- copies or substantial portions of the Software.
15
-
16
- **THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.**
data/readme.md DELETED
@@ -1,94 +0,0 @@
1
- lyracyst
2
- ===
3
-
4
- [![lyracyst](lyra.jpg)](http://en.wikipedia.org/wiki/File:Lyra_constellation_detail_long_exposure.jpg)
5
-
6
- Constellation Lyra photo by [Scott Roy Atwood](http://en.wikipedia.org/wiki/File:Lyra_constellation_detail_long_exposure.jpg)
7
-
8
- [![Build Status](https://travis-ci.org/weirdpercent/lyracyst.png?branch=master)](https://travis-ci.org/weirdpercent/lyracyst)[![Gem Version](https://badge.fury.io/rb/lyracyst.svg)](http://badge.fury.io/rb/lyracyst)[![Dependency Status](https://gemnasium.com/weirdpercent/lyracyst.png)](https://gemnasium.com/weirdpercent/lyracyst)
9
-
10
- A powerful word search tool for writers of all kinds.
11
-
12
- ### Synopsis
13
-
14
- Search [Wordnik](http://www.wordnik.com/), [thesaurus.altervista.org](http://thesaurus.altervista.org/), and [Arpabet](http://en.wikipedia.org/wiki/Arpabet) from the command line. Get API search keys as follows:
15
- Altervista - http://thesaurus.altervista.org/mykey
16
- Wordnik - http://developer.wordnik.com/
17
- Put them in environment variables THESAURUS and WORDNIK respectively. Adding these to .bashrc or .zshrc is the easiest way.
18
-
19
- ### Features
20
-
21
- - Open URI fetching w/ transparent caching
22
- - Definitions from Wordnik
23
- - Rhymes from arpabet.heroku.com
24
- - Related words from thesaurus.altervista.org
25
- - JSON parsing
26
-
27
- ### Usage
28
-
29
- gem install lyracyst
30
- lyracyst get test
31
-
32
- ### Code Example
33
-
34
- s=Search.new
35
- s.define(search) # Wordnik definitions
36
- s.related(search, result) # Altervista related words
37
- s.rhyme(search) # Arpabet rhymes
38
-
39
- ### Motivation
40
-
41
- I do a lot of writing and I wanted a tool for constructing song lyrics, poetry, and stories that rock.
42
-
43
- ### Tests
44
-
45
- TODO
46
-
47
- ### Developers
48
-
49
- bundle install
50
- rake lyracyst:get[test]
51
-
52
- ### Contributing workflow
53
-
54
- Here’s how we suggest you go about proposing a change to this project:
55
-
56
- 1. [Fork this project][fork] to your account.
57
- 2. [Create a branch][branch] for the change you intend to make.
58
- 3. Make your changes to your fork.
59
- 4. [Send a pull request][pr] from your fork’s branch to our `master` branch.
60
-
61
- Using the web-based interface to make changes is fine too, and will help you
62
- by automatically forking the project and prompting to send a pull request too.
63
-
64
- [fork]: http://help.github.com/forking/
65
- [branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository
66
- [pr]: http://help.github.com/pull-requests/
67
-
68
- ### License
69
-
70
- The MIT License (MIT)
71
-
72
- **Copyright (c) 2014 Drew Prentice**
73
-
74
- Permission is hereby granted, free of charge, to any person obtaining a copy
75
- of this software and associated documentation files (the "Software"), to deal
76
- in the Software without restriction, including without limitation the rights
77
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
78
- copies of the Software, and to permit persons to whom the Software is
79
- furnished to do so, subject to the following conditions:
80
-
81
- The above copyright notice and this permission notice shall be included in all
82
- copies or substantial portions of the Software.
83
-
84
- **THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
85
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
86
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
87
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
88
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
89
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
90
- SOFTWARE.**
91
-
92
- ### Gratitude
93
-
94
- Many thanks to all contributors to the gems used in this project!
data/scaffold.md DELETED
@@ -1,14 +0,0 @@
1
- ### Generate eye-popping scaffolds for rails
2
-
3
- rails g beautiful_scaffold scaffoldname title:string id:integer calc:float about:text cost:price rainbow:color doc:richtext markup:wysiwyg
4
-
5
- Types available:
6
-
7
- - integer
8
- - float
9
- - text
10
- - string
11
- - price
12
- - color
13
- - richtext
14
- - wysiwyg