michael-ken 0.0.1 → 0.0.2
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/Manifest.txt +16 -9
- data/README.textile +173 -0
- data/README.txt +34 -6
- data/Rakefile +1 -1
- data/examples/artist.rb +20 -0
- data/lib/ken.rb +17 -2
- data/lib/ken/attribute.rb +52 -0
- data/lib/ken/collection.rb +5 -0
- data/lib/ken/property.rb +56 -2
- data/lib/ken/resource.rb +129 -31
- data/lib/ken/session.rb +0 -2
- data/lib/ken/type.rb +14 -1
- data/lib/ken/util.rb +23 -0
- data/lib/ken/version.rb +1 -1
- data/lib/ken/view.rb +43 -0
- data/spec/fixtures/music_artist.json +102 -0
- data/spec/fixtures/the_police.json +891 -0
- data/spec/integration/ken_spec.rb +34 -0
- data/spec/spec_helper.rb +28 -1
- data/spec/unit/attribute_spec.rb +50 -0
- data/spec/unit/property_spec.rb +30 -0
- data/spec/unit/resource_spec.rb +63 -0
- data/spec/{session_spec.rb → unit/session_spec.rb} +1 -3
- data/spec/unit/type_spec.rb +21 -0
- data/spec/unit/view_spec.rb +26 -0
- data/tasks/gemspec.rb +23 -0
- metadata +16 -7
- data/.gitignore +0 -14
- data/ken.gemspec +0 -32
- data/spec/mql_spec.rb +0 -16
- data/spec/property_spec.rb +0 -0
- data/spec/resource_spec.rb +0 -28
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
|
+
|
5
|
+
describe Ken do
|
6
|
+
before :all do
|
7
|
+
# Ken::Logger.new(STDOUT, :info)
|
8
|
+
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Ken.get('/en/the_police')" do
|
12
|
+
it 'should return a Ken::Resource' do
|
13
|
+
the_police = Ken.get("/en/the_police")
|
14
|
+
the_police.should be_kind_of(Ken::Resource)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "Ken::Resource" do
|
19
|
+
before :all do
|
20
|
+
@the_police = Ken.get("/en/the_police")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should provide attributes" do
|
24
|
+
@the_police.attributes.should have_at_least(1).items
|
25
|
+
@the_police.attributes.first.should be_kind_of(Ken::Attribute)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have views" do
|
29
|
+
@the_police.views.should have_at_least(1).items
|
30
|
+
@the_police.views.first.should be_kind_of(Ken::View)
|
31
|
+
@the_police.views.first.type.should be_kind_of(Ken::Type)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,40 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'spec'
|
4
|
+
require 'json'
|
4
5
|
|
5
6
|
SPEC_ROOT = Pathname(__FILE__).dirname.expand_path
|
6
7
|
require SPEC_ROOT.parent + 'lib/ken'
|
7
8
|
|
9
|
+
def load_fixture(fixture_name)
|
10
|
+
fname = "#{File.dirname(__FILE__)}/fixtures/#{fixture_name}.json"
|
11
|
+
unless File.exists?(fname)
|
12
|
+
open(fname, "w") do |file|
|
13
|
+
puts "WARNING: Fixtures could not be loaded."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
JSON.parse open(fname,"r").read
|
17
|
+
end
|
18
|
+
|
19
|
+
# this will append a <br /> to every logged message, which produces
|
20
|
+
# nicely formatted DataMapper debug outputs in Textmate's RSpec Bundle's output
|
21
|
+
module Ken
|
22
|
+
class Logger
|
23
|
+
def prep_msg(message, level)
|
24
|
+
level << delimiter << message << "<br/>"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# debugging helper (textmate rspec bundle)
|
30
|
+
# TODO remove before release
|
31
|
+
ESCAPE_TABLE = { '&'=>'&', '<'=>'<', '>'=>'>', '"'=>'"', "'"=>''', }
|
32
|
+
def h(value)
|
33
|
+
value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
|
34
|
+
end
|
8
35
|
|
9
36
|
Spec::Runner.configure do |config|
|
10
37
|
config.after(:all) do
|
11
|
-
|
38
|
+
|
12
39
|
end
|
13
40
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
|
+
|
5
|
+
describe Ken::Attribute do
|
6
|
+
before :all do
|
7
|
+
Ken::Logger.new(STDOUT, :info)
|
8
|
+
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
9
|
+
data = load_fixture('the_police')
|
10
|
+
@the_police = Ken::Resource.new(data)
|
11
|
+
|
12
|
+
@attribute = @unique_value_attribute = @the_police.attributes[2] # /music/artist/active_start
|
13
|
+
@unique_object_attribute = @the_police.attributes[11] # /music/artist/origin
|
14
|
+
@non_unique_value_attribute = @the_police.attributes[8] # /common/topic/alias
|
15
|
+
@non_unique_object_attribute = @the_police.attributes[4] # /music/artist/album
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have values" do
|
19
|
+
@attribute.values.should_not be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "with unique value type" do
|
23
|
+
it "should be unique and no object_type" do
|
24
|
+
@unique_value_attribute.unique?.should == true
|
25
|
+
@unique_value_attribute.object_type?.should == false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with unique object type" do
|
30
|
+
it "be unique and an object type" do
|
31
|
+
@unique_object_attribute.unique?.should == true
|
32
|
+
@unique_object_attribute.object_type?.should == true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with non-unique value type" do
|
37
|
+
it "be unique and an object type" do
|
38
|
+
@non_unique_value_attribute.unique?.should == false
|
39
|
+
@non_unique_value_attribute.object_type?.should == false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "with non-unique object type" do
|
44
|
+
it "be unique and an object type" do
|
45
|
+
@non_unique_object_attribute.unique?.should == false
|
46
|
+
@non_unique_object_attribute.object_type?.should == true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
|
+
|
5
|
+
describe Ken::Property do
|
6
|
+
before :all do
|
7
|
+
Ken::Logger.new(STDOUT, :info)
|
8
|
+
# Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
9
|
+
data = load_fixture('music_artist')
|
10
|
+
@type = Ken::Type.new(data)
|
11
|
+
@value_property = @type.properties[1]
|
12
|
+
@object_property = @type.properties[3]
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should be a valid property instance' do
|
16
|
+
@value_property.should be_kind_of(Ken::Property)
|
17
|
+
@object_property.should be_kind_of(Ken::Property)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should have a type' do
|
21
|
+
@value_property.type.should be_kind_of(Ken::Type)
|
22
|
+
@object_property.type.should be_kind_of(Ken::Type)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should distinguish wheter it is an object or value type' do
|
26
|
+
@value_property.object_type?.should == false
|
27
|
+
@object_property.object_type?.should == true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
|
+
|
5
|
+
describe Ken::Resource do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
Ken::Logger.new(STDOUT, :info)
|
9
|
+
# Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
10
|
+
data = load_fixture('the_police')
|
11
|
+
@the_police = Ken::Resource.new(data)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should have types' do
|
15
|
+
@the_police.types.should have_at_least(1).items
|
16
|
+
@the_police.types.first.should be_kind_of(Ken::Type)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have views' do
|
20
|
+
@the_police.views.should have(6).items
|
21
|
+
@the_police.views.first.should be_kind_of(Ken::View)
|
22
|
+
@the_police.views.first.type.should be_kind_of(Ken::Type)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should have an id and a name' do
|
26
|
+
@the_police.id.should be_kind_of(::String)
|
27
|
+
@the_police.name.should be_kind_of(::String)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should have attributes' do
|
31
|
+
@the_police.attributes.should_not be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should deal with non-unique value type attributes' do
|
35
|
+
pending
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should deal with unique object type attributes' do
|
39
|
+
pending
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should deal with non-unique object type attributes' do
|
43
|
+
pending
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should load attributes only on demand' do
|
47
|
+
@the_police.attributes_loaded?.should == false
|
48
|
+
@the_police.attributes
|
49
|
+
@the_police.attributes_loaded?.should == true
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should load schema only on demand when calling types' do
|
53
|
+
@the_police.schema_loaded?.should == false
|
54
|
+
@the_police.types
|
55
|
+
@the_police.schema_loaded?.should == true
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should load schema only on demand when calling views' do
|
59
|
+
@the_police.schema_loaded?.should == false
|
60
|
+
@the_police.views
|
61
|
+
@the_police.schema_loaded?.should == true
|
62
|
+
end
|
63
|
+
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'pathname'
|
2
|
-
|
3
|
-
require Pathname(__FILE__).dirname.expand_path + 'spec_helper'
|
2
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
3
|
|
5
4
|
describe Ken::Session do
|
6
|
-
|
7
5
|
before :all do
|
8
6
|
Ken::Logger.new(STDOUT, :info)
|
9
7
|
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
|
+
|
5
|
+
describe Ken::Type do
|
6
|
+
before :all do
|
7
|
+
Ken::Logger.new(STDOUT, :info)
|
8
|
+
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
9
|
+
|
10
|
+
# fetch a type
|
11
|
+
@type = Ken.get("/en/the_police").types.first
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should have an id and a name' do
|
15
|
+
puts @type.id
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should have properties' do
|
19
|
+
@type.properties.should have_at_least(1).items
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
4
|
+
|
5
|
+
describe Ken::View do
|
6
|
+
before :all do
|
7
|
+
Ken::Logger.new(STDOUT, :info)
|
8
|
+
data = load_fixture('the_police')
|
9
|
+
@the_police = Ken::Resource.new(data)
|
10
|
+
|
11
|
+
@view = @the_police.views.first
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have a type" do
|
15
|
+
@view.type.should_not be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have properties" do
|
19
|
+
@view.properties.should_not be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have attributes" do
|
23
|
+
@view.properties.should_not be_nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
data/tasks/gemspec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
desc "Generate gemspec"
|
2
|
+
task :gemspec do |x|
|
3
|
+
# Clean up extraneous files before checking manifest
|
4
|
+
%x[rake clean]
|
5
|
+
|
6
|
+
# Check the manifest before generating the gemspec
|
7
|
+
manifest = %x[rake check_manifest]
|
8
|
+
manifest.gsub!("(in /usr/local/projects/dm/dm-core)\n", "")
|
9
|
+
|
10
|
+
unless manifest.empty?
|
11
|
+
print "\n", "#"*68, "\n"
|
12
|
+
print <<-EOS
|
13
|
+
Manifest.txt is not up-to-date. Please review the changes below.
|
14
|
+
If the changes are correct, run 'rake check_manifest | patch'
|
15
|
+
and then run this command again.
|
16
|
+
EOS
|
17
|
+
print "#"*68, "\n\n"
|
18
|
+
puts manifest
|
19
|
+
else
|
20
|
+
%x[rake debug_gem > #{GEM_NAME}.gemspec]
|
21
|
+
puts "Successfully created gemspec for #{GEM_NAME}!"
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: michael-ken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Aufreiter
|
@@ -35,31 +35,40 @@ extra_rdoc_files:
|
|
35
35
|
- TODO
|
36
36
|
- History.txt
|
37
37
|
files:
|
38
|
-
- .gitignore
|
39
38
|
- History.txt
|
40
39
|
- LICENSE
|
41
40
|
- Manifest.txt
|
42
41
|
- README.txt
|
42
|
+
- README.textile
|
43
43
|
- Rakefile
|
44
44
|
- TODO
|
45
|
-
-
|
45
|
+
- examples/artist.rb
|
46
46
|
- lib/ken.rb
|
47
|
+
- lib/ken/attribute.rb
|
47
48
|
- lib/ken/collection.rb
|
48
49
|
- lib/ken/logger.rb
|
49
50
|
- lib/ken/property.rb
|
50
51
|
- lib/ken/resource.rb
|
51
52
|
- lib/ken/session.rb
|
52
53
|
- lib/ken/type.rb
|
54
|
+
- lib/ken/util.rb
|
53
55
|
- lib/ken/version.rb
|
54
|
-
-
|
55
|
-
- spec/
|
56
|
-
- spec/
|
57
|
-
- spec/
|
56
|
+
- lib/ken/view.rb
|
57
|
+
- spec/unit/attribute_spec.rb
|
58
|
+
- spec/unit/property_spec.rb
|
59
|
+
- spec/unit/resource_spec.rb
|
60
|
+
- spec/unit/session_spec.rb
|
61
|
+
- spec/unit/type_spec.rb
|
62
|
+
- spec/unit/view_spec.rb
|
63
|
+
- spec/integration/ken_spec.rb
|
64
|
+
- spec/fixtures/music_artist.json
|
65
|
+
- spec/fixtures/the_police.json
|
58
66
|
- spec/spec.opts
|
59
67
|
- spec/spec_helper.rb
|
60
68
|
- tasks/hoe.rb
|
61
69
|
- tasks/install.rb
|
62
70
|
- tasks/spec.rb
|
71
|
+
- tasks/gemspec.rb
|
63
72
|
has_rdoc: true
|
64
73
|
homepage: http://github.com/michael/ken
|
65
74
|
post_install_message:
|
data/.gitignore
DELETED
data/ken.gemspec
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = %q{ken}
|
3
|
-
s.version = "0.0.1"
|
4
|
-
|
5
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
-
s.authors = ["Michael Aufreiter"]
|
7
|
-
s.date = %q{2009-02-10}
|
8
|
-
s.description = %q{Ruby API for accessing Freebase}
|
9
|
-
s.email = ["ma [a] zive [d] at"]
|
10
|
-
s.extra_rdoc_files = ["README.txt", "LICENSE", "TODO", "History.txt"]
|
11
|
-
s.files = [".gitignore", "History.txt", "LICENSE", "Manifest.txt", "README.txt", "Rakefile", "TODO", "ken.gemspec", "lib/ken.rb", "lib/ken/collection.rb", "lib/ken/logger.rb", "lib/ken/property.rb", "lib/ken/resource.rb", "lib/ken/session.rb", "lib/ken/type.rb", "lib/ken/version.rb", "spec/mql_spec.rb", "spec/property_spec.rb", "spec/resource_spec.rb", "spec/session_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/hoe.rb", "tasks/install.rb", "tasks/spec.rb"]
|
12
|
-
s.has_rdoc = true
|
13
|
-
s.homepage = %q{http://github.com/michael/ken}
|
14
|
-
s.rdoc_options = ["--main", "README.txt"]
|
15
|
-
s.require_paths = ["lib"]
|
16
|
-
s.rubyforge_project = %q{ken}
|
17
|
-
s.rubygems_version = %q{1.3.1}
|
18
|
-
s.summary = %q{Ruby API for accessing Freebase}
|
19
|
-
|
20
|
-
if s.respond_to? :specification_version then
|
21
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
|
-
s.specification_version = 2
|
23
|
-
|
24
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
25
|
-
s.add_runtime_dependency(%q<extlib>, [">= 0"])
|
26
|
-
else
|
27
|
-
s.add_dependency(%q<extlib>, [">= 0"])
|
28
|
-
end
|
29
|
-
else
|
30
|
-
s.add_dependency(%q<extlib>, [">= 0"])
|
31
|
-
end
|
32
|
-
end
|
data/spec/mql_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
|
3
|
-
require Pathname(__FILE__).dirname.expand_path + 'spec_helper'
|
4
|
-
|
5
|
-
describe Ken do
|
6
|
-
before :all do
|
7
|
-
# Ken::Logger.new(STDOUT, :info)
|
8
|
-
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should return a Ken::Resource' do
|
12
|
-
the_police = Ken.get("/en/the_police")
|
13
|
-
the_police.should be_kind_of(Ken::Resource)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
data/spec/property_spec.rb
DELETED
File without changes
|
data/spec/resource_spec.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
|
3
|
-
require Pathname(__FILE__).dirname.expand_path + 'spec_helper'
|
4
|
-
|
5
|
-
describe Ken::Resource do
|
6
|
-
before :all do
|
7
|
-
Ken::Logger.new(STDOUT, :info)
|
8
|
-
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
9
|
-
|
10
|
-
# fetch a resource
|
11
|
-
@the_police = Ken.get("/en/the_police")
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should have types' do
|
15
|
-
@the_police.types.should have_at_least(1).items
|
16
|
-
@the_police.types.first.should be_kind_of(Ken::Type)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should have an id and a name' do
|
20
|
-
@the_police.id.should be_kind_of(::String)
|
21
|
-
@the_police.name.should be_kind_of(::String)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should get known attributes' do
|
25
|
-
# expected London
|
26
|
-
@the_police.read_attribute('origin').should == "London"
|
27
|
-
end
|
28
|
-
end
|