wordnik 0.1.0 → 0.2.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.
data/CHANGELOG CHANGED
@@ -1,2 +1,8 @@
1
- 0.1.0:
2
- * First release
1
+ 0.1.1 - 2009-11-10
2
+ ------------------
3
+ - finish adding tests
4
+ - numerous bug fixes
5
+
6
+ 0.1.0 - 2009-11-07
7
+ ------------------
8
+ - First release
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ begin
11
11
  gem.homepage = "http://github.com/ealdent/wordnik"
12
12
  gem.authors = ["Jason Adams"]
13
13
  gem.add_dependency "httparty", ">= 0.4.5"
14
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
+ gem.add_development_dependency "shoulda", ">= 0"
15
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
16
  end
17
17
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -1,4 +1,89 @@
1
1
  require 'httparty'
2
- require 'singleton'
3
- require 'wordnik/wordnik'
4
- require 'wordnik/word'
2
+
3
+ class Wordnik
4
+ include HTTParty
5
+
6
+ attr_reader :api_key
7
+
8
+ base_uri 'http://api.wordnik.com/api'
9
+
10
+ def initialize(api_key = nil)
11
+ @api_key = (api_key || File.read('.api-key').strip || '').dup
12
+ unless @api_key.blank?
13
+ self.class.default_params :api_key => @api_key
14
+ end
15
+ end
16
+
17
+ def api_key=(api_key)
18
+ @api_key = api_key.to_s.dup
19
+ self.class.default_params :api_key => @api_key
20
+ @api_key
21
+ end
22
+
23
+ def lookup(word)
24
+ do_request("word.json/#{word.downcase}")
25
+ end
26
+
27
+ def define(word, *args)
28
+ options = args.last.is_a?(Hash) ? args.pop : {}
29
+ unless options.key?(:count)
30
+ options[:count] = args.any? ? args.first.to_i : 100
31
+ end
32
+ do_request("word.json/#{word.downcase}/definitions", options)
33
+ end
34
+
35
+ def frequency(word)
36
+ do_request("word.json/#{word.downcase}/frequency")
37
+ end
38
+
39
+ def examples(word)
40
+ do_request("word.json/#{word.downcase}/examples")
41
+ end
42
+
43
+ def autocomplete(word_fragment, count = 100)
44
+ do_request("suggest.json/#{word_fragment.downcase}", :count => count)
45
+ end
46
+
47
+ def word_of_the_day
48
+ do_request("wordoftheday.json")
49
+ end
50
+
51
+ def random(has_definition = true)
52
+ do_request("words.json/randomWord", :hasDictionaryDef => has_definition)
53
+ end
54
+
55
+ def punctuation(word)
56
+ do_request("word.json/#{word.downcase}/punctuationFactor")
57
+ end
58
+
59
+ protected
60
+
61
+ def do_request(request, options = {})
62
+ handle_result(self.class.get("/#{request}", sanitize_options(options)))
63
+ end
64
+
65
+ def handle_result(result)
66
+ if result.is_a?(String)
67
+ raise 'Error in result.'
68
+ elsif result.is_a?(Hash) && result.key?('type') && result['type'] == 'error'
69
+ raise "Error in result: #{result['message']}"
70
+ else
71
+ result
72
+ end
73
+ end
74
+
75
+ def sanitize_options(opts)
76
+ options = {}
77
+
78
+ options[:count] = opts[:count].to_i if opts.key?(:count)
79
+ options[:hasDictionaryDef] = !!opts[:hasDictionaryDef] if opts.key?(:hasDictionaryDef)
80
+
81
+ if opts.key?(:partOfSpeech)
82
+ options[:partOfSpeech] = opts[:partOfSpeech].reject do |pos|
83
+ ![:noun, :verb, :adjective, :adverb, :idiom, :article, :abbreviation, :preposition, :prefix, :interjection, :suffix].include?(pos.to_sym)
84
+ end
85
+ end
86
+
87
+ options
88
+ end
89
+ end
@@ -1,7 +1,89 @@
1
1
  require 'helper'
2
2
 
3
+ # In order to run any tests, you must copy your API key into a file in the
4
+ # same directory that you run your tests from, or else set the environment
5
+ # variable WORDNIK_API_KEY to the api key you wish to use.
3
6
  class TestWordnik < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
7
+ context "initializing a Wordnik object" do
8
+ should "instantiate given an API key" do
9
+ assert_equal Wordnik.new('TESTTESTETESTTESTSETESTTESTTETST').nil?, false
10
+ end
11
+ end
12
+
13
+ context "a single Wordnik instance" do
14
+ setup do
15
+ @api_key = (File.exists?('.api-key') ? File.read('.api-key') : ENV['WORDNIK_API_KEY']).strip
16
+ raise "No API key available." unless @api_key
17
+
18
+ @wordnik = Wordnik.new(@api_key)
19
+ @test_word = 'test'
20
+ @test_word_fragment = 'invas'
21
+ end
22
+
23
+ should "make its api-key accessible" do
24
+ assert_equal @wordnik.api_key, @api_key
25
+ end
26
+
27
+ should "lookup the id for a word" do
28
+ word = @wordnik.lookup(@test_word)
29
+
30
+ assert_equal word.is_a?(Hash), true
31
+ assert_equal word.empty?, false
32
+ assert_equal word.member?('id'), true
33
+ assert_equal word['id'].to_i > 0, true
34
+ end
35
+
36
+ should "lookup definitions for a word" do
37
+ definitions = @wordnik.define(@test_word)
38
+
39
+ assert_equal definitions.is_a?(Array), true
40
+ assert_equal definitions.empty?, false
41
+ assert_equal definitions.first.is_a?(Hash), true
42
+ assert_equal definitions.first.member?('id'), true
43
+ end
44
+
45
+ should "find frequency counts for a word" do
46
+ frequency = @wordnik.frequency(@test_word)
47
+
48
+ assert_equal frequency.is_a?(Hash), true
49
+ assert_equal frequency.member?('frequency'), true
50
+ end
51
+
52
+ should "find examples for a word" do
53
+ examples = @wordnik.examples(@test_word)
54
+
55
+ assert_equal examples.is_a?(Array), true
56
+ assert_equal examples.empty?, false
57
+ end
58
+
59
+ should "autocomplete a word fragment" do
60
+ suggestions = @wordnik.autocomplete(@test_word_fragment)
61
+
62
+ assert_equal suggestions.is_a?(Hash), true
63
+ assert_equal suggestions['match'].is_a?(Array), true
64
+ assert_equal suggestions['match'].empty?, false
65
+ end
66
+
67
+ should "get the word of the day" do
68
+ word = @wordnik.word_of_the_day
69
+
70
+ assert_equal word.is_a?(Hash), true
71
+ assert_equal word.member?('wordstring'), true
72
+ end
73
+
74
+ should "get a random word" do
75
+ word = @wordnik.random
76
+
77
+ assert_equal word.is_a?(Hash), true
78
+ assert_equal word.member?('wordstring'), true
79
+ end
80
+
81
+ should "get punctuation info for a word" do
82
+ punctuation = @wordnik.punctuation(@test_word)
83
+
84
+ assert_equal punctuation.is_a?(Hash), true
85
+ assert_equal punctuation.key?('wordId'), true
86
+ assert_equal punctuation.key?('periodCount'), true
87
+ end
6
88
  end
7
89
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{wordnik}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jason Adams"]
12
- s.date = %q{2009-11-07}
12
+ s.date = %q{2010-03-12}
13
13
  s.description = %q{Ruby interface to the Wordnik API. Details at http://docs.wordnik.com/api/methods.}
14
14
  s.email = %q{jasonmadams@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -19,20 +19,20 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
+ "CHANGELOG",
22
23
  "LICENSE",
23
24
  "README.rdoc",
24
25
  "Rakefile",
25
26
  "VERSION",
26
27
  "lib/wordnik.rb",
27
- "lib/wordnik/word.rb",
28
- "lib/wordnik/wordnik.rb",
29
28
  "test/helper.rb",
30
- "test/test_wordnik.rb"
29
+ "test/test_wordnik.rb",
30
+ "wordnik.gemspec"
31
31
  ]
32
32
  s.homepage = %q{http://github.com/ealdent/wordnik}
33
33
  s.rdoc_options = ["--charset=UTF-8"]
34
34
  s.require_paths = ["lib"]
35
- s.rubygems_version = %q{1.3.5}
35
+ s.rubygems_version = %q{1.3.6}
36
36
  s.summary = %q{Ruby interface to the Wordnik API}
37
37
  s.test_files = [
38
38
  "test/helper.rb",
@@ -44,12 +44,15 @@ Gem::Specification.new do |s|
44
44
  s.specification_version = 3
45
45
 
46
46
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
47
+ s.add_runtime_dependency(%q<httparty>, [">= 0.4.5"])
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
48
49
  else
49
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
50
+ s.add_dependency(%q<httparty>, [">= 0.4.5"])
51
+ s.add_dependency(%q<shoulda>, [">= 0"])
50
52
  end
51
53
  else
52
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
54
+ s.add_dependency(%q<httparty>, [">= 0.4.5"])
55
+ s.add_dependency(%q<shoulda>, [">= 0"])
53
56
  end
54
57
  end
55
58
 
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wordnik
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Jason Adams
@@ -9,29 +14,35 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-11-07 00:00:00 -05:00
17
+ date: 2010-03-12 00:00:00 -05:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: httparty
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 4
30
+ - 5
23
31
  version: 0.4.5
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
- name: thoughtbot-shoulda
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
35
+ name: shoulda
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
33
43
  version: "0"
34
- version:
44
+ type: :development
45
+ version_requirements: *id002
35
46
  description: Ruby interface to the Wordnik API. Details at http://docs.wordnik.com/api/methods.
36
47
  email: jasonmadams@gmail.com
37
48
  executables: []
@@ -50,8 +61,6 @@ files:
50
61
  - Rakefile
51
62
  - VERSION
52
63
  - lib/wordnik.rb
53
- - lib/wordnik/word.rb
54
- - lib/wordnik/wordnik.rb
55
64
  - test/helper.rb
56
65
  - test/test_wordnik.rb
57
66
  - wordnik.gemspec
@@ -68,18 +77,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
68
77
  requirements:
69
78
  - - ">="
70
79
  - !ruby/object:Gem::Version
80
+ segments:
81
+ - 0
71
82
  version: "0"
72
- version:
73
83
  required_rubygems_version: !ruby/object:Gem::Requirement
74
84
  requirements:
75
85
  - - ">="
76
86
  - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
77
89
  version: "0"
78
- version:
79
90
  requirements: []
80
91
 
81
92
  rubyforge_project:
82
- rubygems_version: 1.3.5
93
+ rubygems_version: 1.3.6
83
94
  signing_key:
84
95
  specification_version: 3
85
96
  summary: Ruby interface to the Wordnik API
@@ -1,35 +0,0 @@
1
- module Wordnik
2
- class Word
3
- attr_reader :word
4
-
5
- def initialize(word, eager = false)
6
- @word = word.dup.freeze
7
- load_all if eager
8
- end
9
-
10
- def wordnik_id
11
- @wordnik_id ||= Wordnik.instance.lookup(word)['id']
12
- end
13
-
14
- def definitions
15
- @definitions ||= Wordnik.instance.define(word)
16
- end
17
-
18
- def frequencies
19
- @frequencies ||= Wordnik.instance.frequency(word)
20
- end
21
-
22
- def examples
23
- @examples ||= Wordnik.instance.examples(word)
24
- end
25
-
26
- private
27
-
28
- def load_all
29
- wordnik_id
30
- definitions
31
- frequencies
32
- examples
33
- end
34
- end
35
- end
@@ -1,61 +0,0 @@
1
- module Wordnik
2
- class Wordnik
3
- include Singleton
4
- include HTTParty
5
-
6
- attr_reader :api_key
7
-
8
- base_uri 'http://api.wordnik.com/api'
9
-
10
- def initialize(api_key = nil)
11
- @api_key = (api_key || File.read('.api-key').strip || '').dup
12
- self.class.default_params :api_key => @api_key
13
- end
14
-
15
- def api_key=(api_key)
16
- @api_key = api_key.dup
17
- end
18
-
19
- def lookup(word)
20
- do_request("word.json/#{word.downcase}")
21
- end
22
-
23
- def define(word, count = 100)
24
- do_request("word.json/#{word.downcase}/definitions", :count => count)
25
- end
26
-
27
- def frequency(word)
28
- do_request("word.json/#{word.downcase}/frequency")
29
- end
30
-
31
- def examples(word)
32
- do_request("word.json/#{word.downcase}/examples")
33
- end
34
-
35
- def autocomplete(word_fragment, count = 100)
36
- do_request("suggest.json/#{word_fragment.downcase}", :count => count)
37
- end
38
-
39
- def word_of_the_day
40
- do_request("wordoftheday.json")
41
- end
42
-
43
- def random(has_definition = true)
44
- do_request("words.json/randomWord", :hasDictionaryDef => has_definition)
45
- end
46
-
47
- protected
48
-
49
- def do_request(request, options = {})
50
- handle_result(self.class.get("/#{request}", options))
51
- end
52
-
53
- def handle_result(result)
54
- if result.is_a?(String)
55
- raise 'Error in result.'
56
- else
57
- result
58
- end
59
- end
60
- end
61
- end