michael-ken 0.1.1 → 0.1.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/VERSION +1 -1
- data/ken.gemspec +2 -2
- data/lib/ken.rb +7 -5
- data/lib/ken/resource.rb +28 -42
- data/lib/ken/session.rb +7 -9
- data/lib/ken/util.rb +0 -9
- data/lib/ken/view.rb +9 -9
- data/test/integration/ken_test.rb +2 -2
- data/test/test_helper.rb +10 -0
- data/test/unit/resource_test.rb +10 -0
- data/test/unit/session_test.rb +1 -1
- data/test/unit/view_test.rb +2 -2
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/ken.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{ken}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["michael"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-08-23}
|
10
10
|
s.email = %q{ma[at]zive[dot]at}
|
11
11
|
s.extra_rdoc_files = [
|
12
12
|
"LICENSE",
|
data/lib/ken.rb
CHANGED
@@ -2,7 +2,6 @@ require 'pathname'
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'net/http'
|
4
4
|
require 'json'
|
5
|
-
require 'extlib'
|
6
5
|
require 'extlib/assertions'
|
7
6
|
require 'addressable/uri'
|
8
7
|
|
@@ -41,6 +40,7 @@ module Ken
|
|
41
40
|
|
42
41
|
FETCH_DATA_QUERY = {
|
43
42
|
# :id => id, # needs to be merge!d in instance method
|
43
|
+
:guid => nil,
|
44
44
|
:name => nil,
|
45
45
|
:"ken:type" => [{
|
46
46
|
:id => nil,
|
@@ -59,7 +59,8 @@ module Ken
|
|
59
59
|
:id => nil,
|
60
60
|
:link => nil,
|
61
61
|
:name => nil,
|
62
|
-
:optional => true
|
62
|
+
:optional => true,
|
63
|
+
:limit => 999999
|
63
64
|
}
|
64
65
|
],
|
65
66
|
:"/type/reflect/any_reverse" => [
|
@@ -67,14 +68,16 @@ module Ken
|
|
67
68
|
:id => nil,
|
68
69
|
:link => nil,
|
69
70
|
:name => nil,
|
70
|
-
:optional => true
|
71
|
+
:optional => true,
|
72
|
+
:limit => 999999
|
71
73
|
}
|
72
74
|
],
|
73
75
|
:"/type/reflect/any_value" => [
|
74
76
|
{
|
75
77
|
:link => nil,
|
76
78
|
:value => nil,
|
77
|
-
:optional => true
|
79
|
+
:optional => true,
|
80
|
+
:limit => 999999
|
78
81
|
# TODO: support multiple language
|
79
82
|
# :lang => "/lang/en",
|
80
83
|
# :type => "/type/text"
|
@@ -82,7 +85,6 @@ module Ken
|
|
82
85
|
]
|
83
86
|
}
|
84
87
|
|
85
|
-
|
86
88
|
# Executes an Mql Query against the Freebase API and returns the result as
|
87
89
|
# a <tt>Collection</tt> of <tt>Resources</tt>.
|
88
90
|
#
|
data/lib/ken/resource.rb
CHANGED
@@ -2,48 +2,7 @@ module Ken
|
|
2
2
|
class Resource
|
3
3
|
include Extlib::Assertions
|
4
4
|
|
5
|
-
|
6
|
-
# :id => id, # needs to be merge!d in instance method
|
7
|
-
:name => nil,
|
8
|
-
:"ken:type" => [{
|
9
|
-
:id => nil,
|
10
|
-
:name => nil,
|
11
|
-
:properties => [{
|
12
|
-
:id => nil,
|
13
|
-
:name => nil,
|
14
|
-
:expected_type => nil,
|
15
|
-
:unique => nil,
|
16
|
-
:reverse_property => nil,
|
17
|
-
:master_property => nil,
|
18
|
-
}]
|
19
|
-
}],
|
20
|
-
:"/type/reflect/any_master" => [
|
21
|
-
{
|
22
|
-
:id => nil,
|
23
|
-
:link => nil,
|
24
|
-
:name => nil,
|
25
|
-
:optional => true
|
26
|
-
}
|
27
|
-
],
|
28
|
-
:"/type/reflect/any_reverse" => [
|
29
|
-
{
|
30
|
-
:id => nil,
|
31
|
-
:link => nil,
|
32
|
-
:name => nil,
|
33
|
-
:optional => true
|
34
|
-
}
|
35
|
-
],
|
36
|
-
:"/type/reflect/any_value" => [
|
37
|
-
{
|
38
|
-
:link => nil,
|
39
|
-
:value => nil,
|
40
|
-
:optional => true
|
41
|
-
# TODO: support multiple language
|
42
|
-
# :lang => "/lang/en",
|
43
|
-
# :type => "/type/text"
|
44
|
-
}
|
45
|
-
]
|
46
|
-
}
|
5
|
+
attr_reader :data
|
47
6
|
|
48
7
|
# initializes a resource using a json result
|
49
8
|
def initialize(data)
|
@@ -58,6 +17,12 @@ module Ken
|
|
58
17
|
@data["id"] || ""
|
59
18
|
end
|
60
19
|
|
20
|
+
# resource guid
|
21
|
+
# @api public
|
22
|
+
def guid
|
23
|
+
@data['guid'] || ""
|
24
|
+
end
|
25
|
+
|
61
26
|
# resource name
|
62
27
|
# @api public
|
63
28
|
def name
|
@@ -87,6 +52,20 @@ module Ken
|
|
87
52
|
@views ||= Ken::Collection.new(types.map { |type| Ken::View.new(self, type) })
|
88
53
|
end
|
89
54
|
|
55
|
+
# returns individual view based on the requested type id
|
56
|
+
# @api public
|
57
|
+
def view(type)
|
58
|
+
views.each { |v| return v if v.type.id =~ /^#{Regexp.escape(type)}$/}
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
|
62
|
+
# returns individual type based on the requested type id
|
63
|
+
# @api public
|
64
|
+
def type(type)
|
65
|
+
types.each { |t| return t if t.id =~ /^#{Regexp.escape(type)}$/}
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
|
90
69
|
# returns all the properties from all assigned types
|
91
70
|
# @api public
|
92
71
|
def properties
|
@@ -104,6 +83,13 @@ module Ken
|
|
104
83
|
@attributes.values
|
105
84
|
end
|
106
85
|
|
86
|
+
# search for an attribute by name and return it
|
87
|
+
# @api public
|
88
|
+
def attribute(name)
|
89
|
+
attributes.each { |a| return a if a.property.id == name }
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
|
107
93
|
# returns true if type information is already loaded
|
108
94
|
# @api public
|
109
95
|
def schema_loaded?
|
data/lib/ken/session.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Ken
|
2
|
-
class << self
|
2
|
+
class << self
|
3
3
|
attr_accessor :session
|
4
4
|
end
|
5
5
|
|
@@ -16,14 +16,14 @@ module Ken
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
class AttributeNotFound < StandardError; end
|
20
|
-
class PropertyNotFound < StandardError; end
|
21
|
-
class ResourceNotFound < StandardError; end
|
19
|
+
class AttributeNotFound < StandardError ; end
|
20
|
+
class PropertyNotFound < StandardError ; end
|
21
|
+
class ResourceNotFound < StandardError ; end
|
22
|
+
class ViewNotFound < StandardError ; end
|
22
23
|
|
23
24
|
# partially taken from chris eppstein's freebase api
|
24
25
|
# http://github.com/chriseppstein/freebase/tree
|
25
26
|
class Session
|
26
|
-
|
27
27
|
public
|
28
28
|
# Initialize a new Ken Session
|
29
29
|
# Ken::Session.new(host{String, IO}, username{String}, password{String})
|
@@ -69,11 +69,10 @@ module Ken
|
|
69
69
|
end
|
70
70
|
end # handle_read_error
|
71
71
|
|
72
|
-
|
73
|
-
#
|
72
|
+
# Perform a mqlread and return the results
|
73
|
+
# Specify :cursor => true to batch the results of a query, sending multiple requests if necessary.
|
74
74
|
# TODO: should support multiple queries
|
75
75
|
# you should be able to pass an array of queries
|
76
|
-
# Specify :cursor => true to batch the results of a query, sending multiple requests if necessary.
|
77
76
|
def mqlread(query, options = {})
|
78
77
|
Ken.logger.info ">>> Sending Query: #{query.to_json}"
|
79
78
|
cursor = options[:cursor]
|
@@ -126,6 +125,5 @@ module Ken
|
|
126
125
|
end
|
127
126
|
Ken.logger.info("Wrote response to #{fname}")
|
128
127
|
end
|
129
|
-
|
130
128
|
end # class Session
|
131
129
|
end # module Ken
|
data/lib/ken/util.rb
CHANGED
@@ -16,12 +16,3 @@ module Ken
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
class Object
|
20
|
-
# nice for debugging
|
21
|
-
# usage: print_call_stack(:method_name, 2, 10)
|
22
|
-
def print_call_stack(from = 2, to = nil, html = false)
|
23
|
-
(from..(to ? to : caller.length)).each do |idx|
|
24
|
-
p "[#{idx}]: #{caller[idx]}#{html ? '<br />' : ''}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/ken/view.rb
CHANGED
@@ -34,23 +34,23 @@ module Ken
|
|
34
34
|
@resource.attributes.select { |a| a.property.type == @type}
|
35
35
|
end
|
36
36
|
|
37
|
+
# search for an attribute by name and return it
|
38
|
+
# @api public
|
39
|
+
def attribute(name)
|
40
|
+
attributes.each { |a| return a if a.property.id =~ /\/#{name}$/ }
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
37
44
|
# returns properties which are member of the view's type
|
38
45
|
# @api public
|
39
46
|
def properties
|
40
47
|
@resource.properties.select { |p| p.type == @type}
|
41
48
|
end
|
42
49
|
|
43
|
-
# delegate to
|
50
|
+
# delegate to attribute
|
44
51
|
def method_missing sym
|
45
|
-
|
52
|
+
attribute(sym.to_s)
|
46
53
|
end
|
47
54
|
|
48
|
-
private
|
49
|
-
# search for an attribute by name and return it
|
50
|
-
# @api private
|
51
|
-
def attribute_get(name)
|
52
|
-
attributes.each { |a| return a if a.property.id =~ /\/#{name}$/ }
|
53
|
-
raise AttributeNotFound
|
54
|
-
end
|
55
55
|
end
|
56
56
|
end
|
@@ -5,7 +5,7 @@ class KenTest < Test::Unit::TestCase
|
|
5
5
|
setup do
|
6
6
|
Ken::Session.new('http://www.freebase.com', 'ma', 'xxxxx')
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
should 'return a Ken::Resource' do
|
10
10
|
the_police = Ken.get("/en/the_police")
|
11
11
|
the_police.should be_kind_of(Ken::Resource)
|
@@ -48,7 +48,7 @@ class KenTest < Test::Unit::TestCase
|
|
48
48
|
],
|
49
49
|
:type => "/film/film"
|
50
50
|
}
|
51
|
-
|
51
|
+
|
52
52
|
resources = Ken.all(query)
|
53
53
|
resources.length.should == 3
|
54
54
|
resources.first.name.should == "Star Wars Episode IV: A New Hope"
|
data/test/test_helper.rb
CHANGED
@@ -48,4 +48,14 @@ class Test::Unit::TestCase
|
|
48
48
|
matcher.negative_failure_message = "Expected #{receiver} not to be false but it was"
|
49
49
|
receiver.eql?(false)
|
50
50
|
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class Object
|
54
|
+
# nice for debugging
|
55
|
+
# usage: print_call_stack(:method_name, 2, 10)
|
56
|
+
def print_call_stack(from = 2, to = nil, html = false)
|
57
|
+
(from..(to ? to : caller.length)).each do |idx|
|
58
|
+
p "[#{idx}]: #{caller[idx]}#{html ? '<br />' : ''}"
|
59
|
+
end
|
60
|
+
end
|
51
61
|
end
|
data/test/unit/resource_test.rb
CHANGED
@@ -18,6 +18,16 @@ class ResourceTest < Test::Unit::TestCase
|
|
18
18
|
@the_police.views.first.type.should be_kind_of(Ken::Type)
|
19
19
|
end
|
20
20
|
|
21
|
+
should "return individual view based requested type id" do
|
22
|
+
@the_police.view('/music/artist').should be_kind_of(Ken::View)
|
23
|
+
@the_police.view('/location/location').should be_nil # not existent view
|
24
|
+
end
|
25
|
+
|
26
|
+
should "return individual type based requested type id" do
|
27
|
+
@the_police.type('/music/artist').should be_kind_of(Ken::Type)
|
28
|
+
@the_police.type('/location/location').should be_nil # not existent type
|
29
|
+
end
|
30
|
+
|
21
31
|
should 'have a full set of attributes' do
|
22
32
|
@the_police.attributes.should_not be_nil
|
23
33
|
end
|
data/test/unit/session_test.rb
CHANGED
@@ -9,7 +9,7 @@ class SessionTest < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
should 'return the correct set of types' do
|
11
11
|
result = Ken.session.mqlread({:id => "/en/the_police", :type => []})
|
12
|
-
result['type'].length.should
|
12
|
+
result['type'].length.should >= 1
|
13
13
|
end
|
14
14
|
|
15
15
|
should 'raise a Ken::MqlReadError if node does not exist' do
|
data/test/unit/view_test.rb
CHANGED
@@ -26,7 +26,7 @@ class ViewTest < Test::Unit::TestCase
|
|
26
26
|
|
27
27
|
context "when accessing a direct attribute" do
|
28
28
|
setup do
|
29
|
-
@genre = @view.genre
|
29
|
+
@genre = @view.attribute('genre')
|
30
30
|
@album = @view.album
|
31
31
|
end
|
32
32
|
|
@@ -41,7 +41,7 @@ class ViewTest < Test::Unit::TestCase
|
|
41
41
|
end
|
42
42
|
|
43
43
|
should "raise AttributeNotFound when invalid propertyname is supplied" do
|
44
|
-
|
44
|
+
@view.not_existing_attribute.should be_nil
|
45
45
|
end
|
46
46
|
end # context
|
47
47
|
end # context
|
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.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- michael
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-08-23 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -89,6 +89,7 @@ files:
|
|
89
89
|
- test/unit/view_test.rb
|
90
90
|
has_rdoc: false
|
91
91
|
homepage: http://github.com/michael/ken
|
92
|
+
licenses:
|
92
93
|
post_install_message:
|
93
94
|
rdoc_options:
|
94
95
|
- --charset=UTF-8
|
@@ -109,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
110
|
requirements: []
|
110
111
|
|
111
112
|
rubyforge_project:
|
112
|
-
rubygems_version: 1.
|
113
|
+
rubygems_version: 1.3.5
|
113
114
|
signing_key:
|
114
115
|
specification_version: 3
|
115
116
|
summary: Ruby API for Accessing the Freebase
|