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 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
- Dinosaurus::Thesaurus.synonyms_of(word)
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
@@ -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 { text: word, results: [] } if word.blank?
16
+ return Dinosaurus::Results.new if word.blank?
30
17
  res = get(url_for(word))
31
18
 
32
19
  if res.code == 200
33
- { text: word, results: JSON.parse(res.body) }
20
+ json = JSON.parse(res.body)
21
+ Dinosaurus::Results.new(json)
34
22
  # Word does not exist.
35
23
  elsif res.code == 404
36
- { text: word, results: [] }
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
 
@@ -1,3 +1,3 @@
1
1
  module Dinosaurus
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -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')[:results]
25
- results["noun"]["syn"].should include("news")
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 [] for nonsense words" do
22
+ it "should return {} for nonsense words" do
52
23
  VCR.use_cassette('nonsense') do
53
- subject.lookup('hsdfkjhsf')[:results].should == []
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')[:results].should == []
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.6
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-25 00:00:00.000000000 Z
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: &70257631167000 !ruby/object:Gem::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: *70257631167000
24
+ version_requirements: *70298320695400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: vcr
27
- requirement: &70257631165340 !ruby/object:Gem::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: *70257631165340
35
+ version_requirements: *70298320694980
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: httparty
38
- requirement: &70257631178460 !ruby/object:Gem::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: *70257631178460
46
+ version_requirements: *70298320694440
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &70257631176920 !ruby/object:Gem::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: *70257631176920
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