freebase-api 0.1

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.
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreebaseAPI do
4
+
5
+ it "should have a default logger" do
6
+ FreebaseAPI.logger.should be_kind_of(Logger)
7
+ end
8
+
9
+ it "should have a default session" do
10
+ FreebaseAPI.session.should be_kind_of(FreebaseAPI::Session)
11
+ end
12
+
13
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+ require 'tempfile'
3
+
4
+ describe FreebaseAPI::Image do
5
+
6
+ let(:options) { { :maxheight => 20, :maxwidth => 20 } }
7
+ let(:image) { FreebaseAPI::Image.get('/en/bob_dylan', options) }
8
+
9
+ let(:data) {
10
+ load_data 'img.jpg'
11
+ }
12
+
13
+ before {
14
+ stubbed_session = mock('session')
15
+ FreebaseAPI.stub(:session).and_return(stubbed_session)
16
+ stubbed_session.stub(:image).and_return(data)
17
+ }
18
+
19
+ describe ".get" do
20
+ let(:stubbed_session) { mock('session').as_null_object }
21
+
22
+ before {
23
+ FreebaseAPI.stub(:session).and_return(stubbed_session)
24
+ }
25
+
26
+ it "should make a Image API call" do
27
+ stubbed_session.should_receive(:image).with('/en/bob_dylan', :maxheight => 20, :maxwidth => 20).and_return(data)
28
+ image
29
+ end
30
+
31
+ it "should return an image" do
32
+ image.should be_kind_of FreebaseAPI::Image
33
+ end
34
+ end
35
+
36
+ describe "#id" do
37
+ it "should return the topic related ID" do
38
+ image.id.should == '/en/bob_dylan'
39
+ end
40
+ end
41
+
42
+ describe "#size" do
43
+ it "should return the topic related ID" do
44
+ image.size.should == data.size
45
+ end
46
+ end
47
+
48
+ describe "#store" do
49
+ it "should store the image" do
50
+ Dir::Tmpname.create 'freebase-api' do |file|
51
+ image.store(file)
52
+ File.size(file).should == data.size
53
+ File.unlink(file)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,165 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreebaseAPI::Session do
4
+
5
+ let(:session) { FreebaseAPI::Session.new }
6
+ let(:dummy_session) { FreebaseAPI::Session.new(:key => "GOOGLE_API_KEY", :env => :sandbox, :query_options => { :lang => :fr, :limit => 1 }) }
7
+
8
+ it "should include HTTParty" do
9
+ FreebaseAPI::Session.should include(HTTParty)
10
+ end
11
+
12
+ describe "#key" do
13
+ context "when key has been set manually" do
14
+ it "should return the API key" do
15
+ dummy_session.key.should == 'GOOGLE_API_KEY'
16
+ end
17
+ end
18
+
19
+ context "with the env variables defined" do
20
+ before { ENV['GOOGLE_API_KEY'] = 'ENV_GOOGLE_API_KEY' }
21
+ it "should return the API key" do
22
+ session.key.should == 'ENV_GOOGLE_API_KEY'
23
+ end
24
+ after { ENV['GOOGLE_API_KEY'] = nil }
25
+ end
26
+ end
27
+
28
+ describe "#env" do
29
+ it "should return the environnment" do
30
+ dummy_session.env.should == :sandbox
31
+ end
32
+ end
33
+
34
+ describe "#query_options" do
35
+ it "should return the environnment" do
36
+ dummy_session.query_options.should == { :lang => :fr, :limit => 1 }
37
+ end
38
+ end
39
+
40
+ describe "#surl" do
41
+ context "in a sandbox environnment" do
42
+ it "should return the sandbox service URL" do
43
+ dummy_session.send(:surl, 'service').should == 'https://www.googleapis.com/freebase/v1sandbox/service'
44
+ end
45
+ end
46
+
47
+ context "in a stable environnment" do
48
+ it "should return the sandbox service URL" do
49
+ session.send(:surl, 'service').should == 'https://www.googleapis.com/freebase/v1/service'
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#mqlread" do
55
+ let(:query) {
56
+ {
57
+ :type => '/internet/website',
58
+ :id => '/en/github',
59
+ :'/common/topic/official_website' => nil
60
+ }
61
+ }
62
+
63
+ let(:request) {
64
+ session.mqlread(query)
65
+ }
66
+
67
+ context "when the query is successful" do
68
+ it "should run a MQL query and return the result" do
69
+ request.should == {
70
+ "/common/topic/official_website" => "http://github.com/",
71
+ "id" => "/en/github",
72
+ "type" => "/internet/website"
73
+ }
74
+ end
75
+ end
76
+
77
+ context "when the query has failed" do
78
+ let(:session) { FreebaseAPI::Session.new :key => 'nil' }
79
+
80
+ it "should raise en error" do
81
+ expect {
82
+ request
83
+ }.to raise_error(FreebaseAPI::Error)
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "#image" do
89
+ let(:request) {
90
+ session.image('/en/bob_dylan')
91
+ }
92
+
93
+ context "when the query is successful" do
94
+ it "should not raise any error" do
95
+ expect {
96
+ request
97
+ }.to_not raise_error(FreebaseAPI::Error)
98
+ end
99
+
100
+ it "should return some data" do
101
+ request.size.should > 1000
102
+ end
103
+ end
104
+
105
+ context "when the query has failed" do
106
+ let(:session) { FreebaseAPI::Session.new :key => 'nil' }
107
+
108
+ it "should raise en error" do
109
+ expect {
110
+ request
111
+ }.to raise_error(FreebaseAPI::Error)
112
+ end
113
+ end
114
+ end
115
+
116
+ describe "#search" do
117
+ let(:request) {
118
+ session.search('bob dylan')
119
+ }
120
+
121
+ context "when the query is successful" do
122
+ it "should not raise any error" do
123
+ expect {
124
+ request
125
+ }.to_not raise_error(FreebaseAPI::Error)
126
+ end
127
+
128
+ it "should return some topics" do
129
+ request.should_not be_empty
130
+ end
131
+ end
132
+
133
+ context "when the query has failed" do
134
+ let(:session) { FreebaseAPI::Session.new :key => 'nil' }
135
+
136
+ it "should raise en error" do
137
+ expect {
138
+ request
139
+ }.to raise_error(FreebaseAPI::Error)
140
+ end
141
+ end
142
+ end
143
+
144
+ describe "#topic" do
145
+ let(:request) {
146
+ session.topic('/en/github', :filter => '/common/topic/official_website')
147
+ }
148
+
149
+ context "when the query is successful" do
150
+ it "should run a topic query and return the result" do
151
+ request['property'].should have(1).elements
152
+ end
153
+ end
154
+
155
+ context "when the query has failed" do
156
+ let(:session) { FreebaseAPI::Session.new :key => 'nil' }
157
+
158
+ it "should raise en error" do
159
+ expect {
160
+ request
161
+ }.to raise_error(FreebaseAPI::Error)
162
+ end
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,18 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
9
+
10
+ require 'rspec'
11
+ require 'freebase-api'
12
+ require 'support/helpers'
13
+
14
+ RSpec.configure do |config|
15
+ config.include FreebaseAPI::Helpers
16
+ end
17
+
18
+ FreebaseAPI.logger.level = Logger::FATAL
@@ -0,0 +1,12 @@
1
+ module FreebaseAPI
2
+ # Helpers for Rspec
3
+ module Helpers
4
+ def load_fixture(fixture)
5
+ JSON.parse(IO.read(File.join(File.dirname(__FILE__), "..", "fixtures", "#{fixture}.json")))
6
+ end
7
+
8
+ def load_data(file)
9
+ IO.read(File.join(File.dirname(__FILE__), "..", "fixtures", file))
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreebaseAPI::Topic do
4
+
5
+ let(:options) { { :lang => :en } }
6
+ let(:topic) { FreebaseAPI::Topic.get('/en/github', options) }
7
+ let(:new_topic) { FreebaseAPI::Topic.new('/en/github') }
8
+
9
+ let(:data) { load_fixture 'topic' }
10
+
11
+ before {
12
+ stubbed_session = mock('session')
13
+ FreebaseAPI.stub(:session).and_return(stubbed_session)
14
+ stubbed_session.stub(:topic).and_return(data)
15
+ stubbed_session.stub(:image).and_return(nil)
16
+ }
17
+
18
+ describe ".get" do
19
+ let(:stubbed_session) { mock('session').as_null_object }
20
+
21
+ before {
22
+ FreebaseAPI::Topic.any_instance.stub(:build)
23
+ FreebaseAPI.stub(:session).and_return(stubbed_session)
24
+ }
25
+
26
+ it "should make a Topic API call" do
27
+ stubbed_session.should_receive(:topic).with('/en/github', :lang => :en, :filter => 'commons').and_return(data)
28
+ topic
29
+ end
30
+
31
+ it "should return a topic" do
32
+ topic.should be_kind_of FreebaseAPI::Topic
33
+ end
34
+ end
35
+
36
+ describe ".search" do
37
+ let(:stubbed_session) { mock('session') }
38
+ let(:topic_search) { FreebaseAPI::Topic.search('dylan') }
39
+ let(:data) { load_fixture 'search' }
40
+ let(:item) { topic_search.values.first }
41
+
42
+ before {
43
+ FreebaseAPI.stub(:session).and_return(stubbed_session)
44
+ stubbed_session.stub(:search).and_return(data)
45
+ }
46
+
47
+ it "should make a Search API call" do
48
+ stubbed_session.should_receive(:search).with('dylan', {}).and_return(data)
49
+ topic_search
50
+ end
51
+
52
+ it "should return an hash" do
53
+ topic_search.should be_kind_of Hash
54
+ end
55
+
56
+ it "should return ordered scores" do
57
+ topic_search.keys.first.should == 72.587578
58
+ topic_search.keys.last.should == 20.738529
59
+ end
60
+
61
+ it "should return topics" do
62
+ item.should be_kind_of(FreebaseAPI::Topic)
63
+ end
64
+
65
+ it "should store the id" do
66
+ item.id.should == '/m/01vrncs'
67
+ end
68
+
69
+ it "should store some properties" do
70
+ item.properties.keys.should == ["/type/object/name", "/common/topic/notable_for"]
71
+ end
72
+ end
73
+
74
+ describe "#id" do
75
+ context "when the topic has been sync yet" do
76
+ it "should return the topic ID" do
77
+ new_topic.id.should == '/en/github'
78
+ end
79
+ end
80
+
81
+ context "when the topic has been sync" do
82
+ it "should return the topic ID" do
83
+ topic.id.should == '/m/04g0kcw'
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "#text" do
89
+ it "should return the topic text" do
90
+ topic.text.should == "GitHub"
91
+ end
92
+ end
93
+
94
+ describe "#lang" do
95
+ it "should return the topic language" do
96
+ topic.lang.should == 'en'
97
+ end
98
+ end
99
+
100
+ describe "#name" do
101
+ it "should return the topic name" do
102
+ topic.name.should == 'GitHub'
103
+ end
104
+ end
105
+
106
+ describe "#types" do
107
+ it "should return all the topic types" do
108
+ topic.types.should == ["/common/topic", "/internet/website", "/base/technologyofdoing/proposal_agent"]
109
+ end
110
+ end
111
+
112
+ describe "#description" do
113
+ it "should return the topic description" do
114
+ topic.description.should start_with "GitHub is a web-based hosting service for software development projects that use the Git revision control system."
115
+ end
116
+ end
117
+
118
+ describe "#properties" do
119
+ it "should return the properties values which are topics" do
120
+ link = topic.properties['/internet/website/category'].first
121
+ link.should be_kind_of(FreebaseAPI::Topic)
122
+ link.name.should == 'Revision control'
123
+ end
124
+
125
+ it "should return the properties values which are data" do
126
+ link = topic.properties['/common/topic/official_website'].first
127
+ link.should be_kind_of(FreebaseAPI::Attribute)
128
+ link.value.should == 'http://github.com/'
129
+ end
130
+
131
+ context "with a property exclusion constraint" do
132
+ let(:topic) { FreebaseAPI::Topic.get('/en/github', :exclude => '/internet') }
133
+
134
+ it "should not return these properties" do
135
+ topic.properties.should_not have_key('/internet/website/category')
136
+ end
137
+
138
+ it "should return the properties that do not match this exclusion" do
139
+ topic.properties.should have_key('/common/topic/official_website')
140
+ end
141
+ end
142
+ end
143
+
144
+ describe "#property" do
145
+ it "should return the asked property" do
146
+ property = topic.property('/type/object/type')
147
+ property.should have(3).elements
148
+ end
149
+ end
150
+
151
+ describe "#properties domains" do
152
+ it "should return an hash containing the properties domains" do
153
+ topic.properties_domains.should == { 'common' => 16, 'internet' => 1,'type' => 30 }
154
+ end
155
+ end
156
+
157
+ describe "#image" do
158
+ it "should return an Image" do
159
+ topic.image.should be_kind_of(FreebaseAPI::Image)
160
+ end
161
+
162
+ it "should be the topic image" do
163
+ topic.image.id.should == topic.id
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - rbx-19mode
4
+ - jruby-19mode
5
+ - 1.9.2
6
+ - 1.9.3
7
+ - ruby-head
8
+ - jruby-head
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: freebase-api
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Aymeric Brisse
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: &1 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.10'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *1
25
+ description: A library to use the Freebase API
26
+ email:
27
+ - aymeric.brisse@mperfect-memory.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - .rspec
34
+ - Gemfile
35
+ - Gemfile.lock
36
+ - LICENSE.txt
37
+ - README.markdown
38
+ - Rakefile
39
+ - freebase-api.gemspec
40
+ - lib/freebase-api.rb
41
+ - lib/freebase_api/attribute.rb
42
+ - lib/freebase_api/exceptions.rb
43
+ - lib/freebase_api/ext/hash.rb
44
+ - lib/freebase_api/image.rb
45
+ - lib/freebase_api/session.rb
46
+ - lib/freebase_api/topic.rb
47
+ - lib/freebase_api/version.rb
48
+ - spec/attribute_spec.rb
49
+ - spec/fixtures/img.jpg
50
+ - spec/fixtures/search.json
51
+ - spec/fixtures/topic.json
52
+ - spec/freebase_api_spec.rb
53
+ - spec/image_spec.rb
54
+ - spec/session_spec.rb
55
+ - spec/spec_helper.rb
56
+ - spec/support/helpers.rb
57
+ - spec/topic_spec.rb
58
+ - travis.yml
59
+ homepage: https://github.com/PerfectMemory/freebase-api
60
+ licenses: []
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.10
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Provides access to both a raw-access and an abstract-layer to the Freebase
83
+ API
84
+ test_files:
85
+ - spec/attribute_spec.rb
86
+ - spec/fixtures/img.jpg
87
+ - spec/fixtures/search.json
88
+ - spec/fixtures/topic.json
89
+ - spec/freebase_api_spec.rb
90
+ - spec/image_spec.rb
91
+ - spec/session_spec.rb
92
+ - spec/spec_helper.rb
93
+ - spec/support/helpers.rb
94
+ - spec/topic_spec.rb
95
+ has_rdoc: