dinosaurus 0.0.6 → 0.0.7
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.
- data/lib/dinosaurus.rb +18 -1
- data/lib/dinosaurus/results.rb +31 -0
- data/lib/dinosaurus/thesaurus.rb +5 -18
- data/lib/dinosaurus/version.rb +1 -1
- data/spec/dinosaurus/dinosaurus_spec.rb +36 -0
- data/spec/dinosaurus/results_spec.rb +46 -0
- data/spec/dinosaurus/thesaurus_spec.rb +7 -34
- metadata +15 -10
data/lib/dinosaurus.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "dinosaurus/logging"
|
2
2
|
require "dinosaurus/configuration"
|
3
|
+
require "dinosaurus/results"
|
3
4
|
require "dinosaurus/thesaurus"
|
4
5
|
require "dinosaurus/version"
|
5
6
|
|
@@ -9,6 +10,22 @@ module Dinosaurus
|
|
9
10
|
end
|
10
11
|
|
11
12
|
def self.synonyms_of(word)
|
12
|
-
|
13
|
+
results = lookup(word)
|
14
|
+
results.synonyms
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.antonyms_of(word)
|
18
|
+
results = lookup(word)
|
19
|
+
results.antonyms
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.similar_to(word)
|
23
|
+
results = lookup(word)
|
24
|
+
results.similar_terms
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.related_to(word)
|
28
|
+
results = lookup(word)
|
29
|
+
results.related_terms
|
13
30
|
end
|
14
31
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "active_support/core_ext/hash/indifferent_access"
|
2
|
+
|
3
|
+
module Dinosaurus
|
4
|
+
class Results < HashWithIndifferentAccess
|
5
|
+
|
6
|
+
def initialize(data = {})
|
7
|
+
super(data)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Define some convenience methods.
|
11
|
+
{ 'synonyms' => :syn,
|
12
|
+
'antonyms' => :ant,
|
13
|
+
'similar_terms' => :sim,
|
14
|
+
'related_terms' => :rel
|
15
|
+
}.each do |name, key|
|
16
|
+
define_method name do
|
17
|
+
grouped(key)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def grouped(key)
|
24
|
+
group = []
|
25
|
+
self.each do |pos, type|
|
26
|
+
group += type[key] if type[key]
|
27
|
+
end
|
28
|
+
group
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/dinosaurus/thesaurus.rb
CHANGED
@@ -5,39 +5,26 @@ require "active_support/core_ext/object/blank"
|
|
5
5
|
|
6
6
|
module Dinosaurus
|
7
7
|
class MissingApiKeyError < StandardError; end
|
8
|
+
class RemoteServiceError < StandardError; end
|
8
9
|
|
9
10
|
class Thesaurus
|
10
11
|
include HTTParty
|
11
12
|
base_uri "words.bighugelabs.com"
|
12
13
|
format :json
|
13
14
|
|
14
|
-
def self.synonyms_of(word)
|
15
|
-
# No-op if the word is blank.
|
16
|
-
return [] if word.blank?
|
17
|
-
lookup = lookup(word)
|
18
|
-
|
19
|
-
synonyms = []
|
20
|
-
lookup[:results].each do |part_of_speech, types|
|
21
|
-
synonyms += types['syn'] if types['syn']
|
22
|
-
synonyms += types['sim'] if types['sim']
|
23
|
-
synonyms += types['rel'] if types['rel']
|
24
|
-
end
|
25
|
-
synonyms
|
26
|
-
end
|
27
|
-
|
28
15
|
def self.lookup(word)
|
29
|
-
return
|
16
|
+
return Dinosaurus::Results.new if word.blank?
|
30
17
|
res = get(url_for(word))
|
31
18
|
|
32
19
|
if res.code == 200
|
33
|
-
|
20
|
+
json = JSON.parse(res.body)
|
21
|
+
Dinosaurus::Results.new(json)
|
34
22
|
# Word does not exist.
|
35
23
|
elsif res.code == 404
|
36
|
-
|
24
|
+
Dinosaurus::Results.new
|
37
25
|
else
|
38
26
|
warning = "DINOSAURUS_WARNING: #{res.code}. WORD: #{word}."
|
39
27
|
Logging.logger.warn(warning)
|
40
|
-
{ text: word }
|
41
28
|
end
|
42
29
|
end
|
43
30
|
|
data/lib/dinosaurus/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Dinosaurus do
|
4
|
+
let(:res) { Dinosaurus::Results.new }
|
5
|
+
before do
|
6
|
+
Dinosaurus.stub(:lookup) { res }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "synonyms_of" do
|
10
|
+
it "should return synonyms" do
|
11
|
+
res.should_receive(:synonyms)
|
12
|
+
Dinosaurus.synonyms_of('normal')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "antonyms_of" do
|
17
|
+
it "should return antonyms" do
|
18
|
+
res.should_receive(:antonyms)
|
19
|
+
Dinosaurus.antonyms_of('normal')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "related_to" do
|
24
|
+
it "should return related terms" do
|
25
|
+
res.should_receive(:related_terms)
|
26
|
+
Dinosaurus.related_to('normal')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "similar_to" do
|
31
|
+
it "should return similar terms" do
|
32
|
+
res.should_receive(:similar_terms)
|
33
|
+
Dinosaurus.similar_to('normal')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Dinosaurus::Results do
|
4
|
+
subject { Dinosaurus::Results }
|
5
|
+
|
6
|
+
let(:noun) do
|
7
|
+
{ 'syn' => %w[syn1 syn2 syn3],
|
8
|
+
'sim' => %w[sim1 sim2],
|
9
|
+
'ant' => %w[ant1] }
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:res) do
|
13
|
+
{
|
14
|
+
'noun' => noun,
|
15
|
+
'verb' => {
|
16
|
+
'rel' => %w[rel1 rel2 rel3],
|
17
|
+
'syn' => %w[vsyn1]
|
18
|
+
}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should make synonyms available" do
|
23
|
+
results = subject.new(res)
|
24
|
+
results.synonyms.should == %w[syn1 syn2 syn3 vsyn1]
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should make all antonyms available" do
|
28
|
+
results = subject.new(res)
|
29
|
+
results.antonyms.should == %w[ant1]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should make similar terms available" do
|
33
|
+
results = subject.new(res)
|
34
|
+
results.similar_terms.should == %w[sim1 sim2]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should make related terms available" do
|
38
|
+
results = subject.new(res)
|
39
|
+
results.related_terms.should == %w[rel1 rel2 rel3]
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should make nouns available" do
|
43
|
+
results = subject.new(res)
|
44
|
+
results[:noun].should == noun
|
45
|
+
end
|
46
|
+
end
|
@@ -3,39 +3,10 @@ require "spec_helper"
|
|
3
3
|
describe Dinosaurus::Thesaurus do
|
4
4
|
subject { Dinosaurus::Thesaurus }
|
5
5
|
|
6
|
-
describe "synonyms_of" do
|
7
|
-
it "should return synonyms" do
|
8
|
-
VCR.use_cassette('normal') do
|
9
|
-
results = subject.synonyms_of('normal')
|
10
|
-
# Should include similar and related.
|
11
|
-
results.should include(*%w[sane convention average])
|
12
|
-
# Should not include antynoms.
|
13
|
-
results.should_not include(*%w[abnormal])
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should return [] if the word is blank" do
|
18
|
-
subject.synonyms_of('').should == []
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
6
|
it "should return results" do
|
23
7
|
VCR.use_cassette('word') do
|
24
|
-
results = subject.lookup('word')
|
25
|
-
results
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should return related terms" do
|
30
|
-
VCR.use_cassette('normal') do
|
31
|
-
results = subject.lookup('normal')[:results]
|
32
|
-
results['adjective']['rel'].should include('sane')
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should return the lookup word" do
|
37
|
-
VCR.use_cassette('word') do
|
38
|
-
subject.lookup('word')[:text].should == 'word'
|
8
|
+
results = subject.lookup('word')
|
9
|
+
results.should be_instance_of(Dinosaurus::Results)
|
39
10
|
end
|
40
11
|
end
|
41
12
|
|
@@ -48,15 +19,15 @@ describe Dinosaurus::Thesaurus do
|
|
48
19
|
end
|
49
20
|
end
|
50
21
|
|
51
|
-
it "should return
|
22
|
+
it "should return {} for nonsense words" do
|
52
23
|
VCR.use_cassette('nonsense') do
|
53
|
-
subject.lookup('hsdfkjhsf')
|
24
|
+
subject.lookup('hsdfkjhsf').should == {}
|
54
25
|
end
|
55
26
|
end
|
56
27
|
|
57
28
|
it "should handle two words" do
|
58
29
|
VCR.use_cassette('meal_people') do
|
59
|
-
subject.lookup('meal people')
|
30
|
+
subject.lookup('meal people').should == {}
|
60
31
|
end
|
61
32
|
end
|
62
33
|
|
@@ -66,4 +37,6 @@ describe Dinosaurus::Thesaurus do
|
|
66
37
|
subject.lookup('word')
|
67
38
|
end.to raise_error(Dinosaurus::MissingApiKeyError)
|
68
39
|
end
|
40
|
+
|
41
|
+
it "should raise if the server 500"
|
69
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dinosaurus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70298320695400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70298320695400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: vcr
|
27
|
-
requirement: &
|
27
|
+
requirement: &70298320694980 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70298320694980
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: httparty
|
38
|
-
requirement: &
|
38
|
+
requirement: &70298320694440 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70298320694440
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &70298320693940 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70298320693940
|
58
58
|
description: Ruby wrapper for the Big Huge Thesaurus APIs.
|
59
59
|
email:
|
60
60
|
- dtuite@gmail.com
|
@@ -73,8 +73,11 @@ files:
|
|
73
73
|
- lib/dinosaurus/configuration.rb
|
74
74
|
- lib/dinosaurus/logging.rb
|
75
75
|
- lib/dinosaurus/railties.rb
|
76
|
+
- lib/dinosaurus/results.rb
|
76
77
|
- lib/dinosaurus/thesaurus.rb
|
77
78
|
- lib/dinosaurus/version.rb
|
79
|
+
- spec/dinosaurus/dinosaurus_spec.rb
|
80
|
+
- spec/dinosaurus/results_spec.rb
|
78
81
|
- spec/dinosaurus/thesaurus_spec.rb
|
79
82
|
- spec/fixtures/vcr_cassettes/meal_people.yml
|
80
83
|
- spec/fixtures/vcr_cassettes/nonsense.yml
|
@@ -106,6 +109,8 @@ signing_key:
|
|
106
109
|
specification_version: 3
|
107
110
|
summary: Lookup synonyms, antonyms etc. using the Big Huge Thesaurus API.
|
108
111
|
test_files:
|
112
|
+
- spec/dinosaurus/dinosaurus_spec.rb
|
113
|
+
- spec/dinosaurus/results_spec.rb
|
109
114
|
- spec/dinosaurus/thesaurus_spec.rb
|
110
115
|
- spec/fixtures/vcr_cassettes/meal_people.yml
|
111
116
|
- spec/fixtures/vcr_cassettes/nonsense.yml
|