majortom_connector 0.0.2 → 0.0.3
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/README.rdoc +29 -17
- data/lib/majortom_connector/config.rb +29 -0
- data/lib/majortom_connector/connector.rb +65 -0
- data/lib/majortom_connector/request.rb +36 -37
- data/lib/majortom_connector/result.rb +28 -28
- data/lib/majortom_connector/version.rb +1 -1
- data/lib/majortom_connector.rb +6 -62
- data/majortom_connector.gemspec +1 -2
- metadata +13 -11
data/README.rdoc
CHANGED
@@ -4,40 +4,52 @@ This gem provides easy access to any MaJorToM-Server.
|
|
4
4
|
|
5
5
|
== Requirements
|
6
6
|
|
7
|
-
*
|
7
|
+
* JSON for ruby - http://flori.github.com/json/
|
8
8
|
|
9
9
|
== Install
|
10
10
|
|
11
|
-
* sudo gem install majortom_connector
|
12
|
-
* Copy the majortom-server.yml from the examples folder into the config folder of your Rails app and configure it to your needs.
|
11
|
+
* sudo gem install majortom_connector (mandatory)
|
12
|
+
* Copy the majortom-server.yml from the examples folder into the config folder of your Rails app and configure it to your needs (optional).
|
13
13
|
|
14
14
|
== Usage
|
15
15
|
|
16
|
+
This documentation describes the use of majortom_connector version 0.0.3.
|
17
|
+
|
16
18
|
1. Before executing any request, you must connect to the server with
|
17
|
-
MajortomConnector.connect "base_iri_or_map_id"
|
18
|
-
2.
|
19
|
+
c = MajortomConnector.connect "base_iri_or_map_id"
|
20
|
+
2. In case you did not provide and edit the config/majortom-server.yml you can configure the connector by calling
|
21
|
+
c.config.(host|port|context|api_key|map_id) = your_value
|
22
|
+
3. Check the completeness of your configuration with
|
23
|
+
c.ready?
|
24
|
+
or check, whether the configured server actually responds with
|
25
|
+
c.established?
|
26
|
+
4. Start the topic map madness.
|
19
27
|
* Get the _id_ of the map you are connected with
|
20
|
-
|
28
|
+
c.topic_map_id
|
21
29
|
* Get all maps that are on the server
|
22
|
-
|
30
|
+
c.list_maps
|
23
31
|
* Find the id of a map with given base locator
|
24
|
-
|
32
|
+
c.find_topic_map_id_by_base_iri(base_iri)
|
25
33
|
* Get all topics of the connected map*
|
26
|
-
|
34
|
+
c.topics
|
27
35
|
* Fire a TMQL query against the server*
|
28
|
-
|
36
|
+
c.tmql(query)
|
29
37
|
* Fire a SPARQL query against the server
|
30
|
-
|
38
|
+
c.sparql(query)
|
31
39
|
* Do a search in the fulltext index of the map that was created while loading
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
40
|
+
c.search(query)
|
41
|
+
* Receive an XTM or CTM serialization of your map with
|
42
|
+
c.to_xtm and c.to_ctm
|
43
|
+
* In case you want to clear the query cache, you can call
|
44
|
+
c.clear_cache
|
45
|
+
5. Get your data from the connector by calling
|
46
|
+
data = c.request.result
|
47
|
+
The result object has several values:
|
48
|
+
* +http_status+, +http_message+ and +http_body+ represent the data from the HTTP response
|
36
49
|
* +code+ says, whether all went fine (if it's 0) or not
|
37
50
|
* +message+ has a message from the server for you ('OK' or any error message)
|
38
51
|
* +data+ contains the actual data that was returned from the server if no error occured
|
39
|
-
* +jtmqr+ contains the JTMQR that comes with all methods marked with * above
|
40
52
|
|
41
|
-
==
|
53
|
+
== External documentation
|
42
54
|
|
43
55
|
* You can find the JTMQR result format there: https://code.google.com/p/tmql/wiki/JTMQR
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module MajortomConnector
|
2
|
+
class Config
|
3
|
+
|
4
|
+
attr_accessor :host, :port, :context, :api_key, :map_id
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
load_server_config
|
8
|
+
end
|
9
|
+
|
10
|
+
def ready?
|
11
|
+
!(@host.blank? || @port.blank? || @context.blank? || @api_key.blank?)
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def load_server_config
|
17
|
+
begin
|
18
|
+
# Usual way of loading the configuration is from file.
|
19
|
+
file_config = YAML.load_file(File.join(::Rails.root, 'config', 'majortom-server.yml'))
|
20
|
+
@host = file_config['server']['host']
|
21
|
+
@port = file_config['server']['port']
|
22
|
+
@context = file_config['server']['context']
|
23
|
+
@api_key = file_config['user']['api_key']
|
24
|
+
rescue Exception
|
25
|
+
# Wow! The config file was not there!
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module MajortomConnector
|
2
|
+
class Connector
|
3
|
+
|
4
|
+
def initialize(id_or_base_iri)
|
5
|
+
return unless ready?
|
6
|
+
config.map_id = id_or_base_iri.match(/^http/) ? find_topic_map_id_by_base_iri(id_or_base_iri) : id_or_base_iri
|
7
|
+
end
|
8
|
+
|
9
|
+
def topic_map_id
|
10
|
+
config.map_id ||= ""
|
11
|
+
end
|
12
|
+
|
13
|
+
def list_maps
|
14
|
+
request.run('topicmaps') if ready?
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_topic_map_id_by_base_iri(base_iri)
|
18
|
+
request.run('resolvetm', base_iri).data if ready?
|
19
|
+
end
|
20
|
+
|
21
|
+
def topics
|
22
|
+
request.run('topics') if ready?
|
23
|
+
end
|
24
|
+
|
25
|
+
def tmql(query)
|
26
|
+
request.run('tmql', query) if ready?
|
27
|
+
end
|
28
|
+
|
29
|
+
def sparql(query)
|
30
|
+
request.run('sparql', query) if ready?
|
31
|
+
end
|
32
|
+
|
33
|
+
def search(query = "")
|
34
|
+
request.run('beru', query) if ready?
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_xtm
|
38
|
+
request.run('xtm') if ready?
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_ctm
|
42
|
+
request.run('ctm') if ready?
|
43
|
+
end
|
44
|
+
|
45
|
+
def clear_cache
|
46
|
+
request.run('clearcache') if ready?
|
47
|
+
end
|
48
|
+
|
49
|
+
def ready?
|
50
|
+
config.ready?
|
51
|
+
end
|
52
|
+
|
53
|
+
def established?
|
54
|
+
ready? && request.run('connectiontest').code == "0"
|
55
|
+
end
|
56
|
+
|
57
|
+
def request
|
58
|
+
@request ||= Request.new(config)
|
59
|
+
end
|
60
|
+
|
61
|
+
def config
|
62
|
+
@config ||= Config.new
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,83 +1,82 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
require 'net/http'
|
3
|
-
|
4
1
|
module MajortomConnector
|
5
2
|
class Request
|
6
|
-
|
7
|
-
AVAILABLE_COMMANDS =
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
|
4
|
+
AVAILABLE_COMMANDS = {
|
5
|
+
'topics' => 'topics',
|
6
|
+
'topicmaps' => 'list_maps',
|
7
|
+
'resolvetm' => 'find_topic_map_id_by_base_iri',
|
8
|
+
'xtm' => 'to_xtm',
|
9
|
+
'ctm' => 'to_ctm',
|
10
|
+
'tmql' => 'tmql',
|
11
|
+
'sparql' => 'sparql',
|
12
|
+
'beru' => 'search',
|
13
|
+
'clearcache' => 'clear_cache',
|
14
|
+
'connectiontest' => 'established?'
|
15
|
+
}
|
18
16
|
|
19
17
|
attr_reader :result
|
20
18
|
|
21
|
-
|
22
|
-
new(config).run(command, query)
|
23
|
-
end
|
24
|
-
|
19
|
+
|
25
20
|
def self.available_commands
|
26
21
|
AVAILABLE_COMMANDS
|
27
22
|
end
|
28
23
|
|
29
24
|
def self.command_available?(command)
|
30
|
-
available_commands.include?(command)
|
25
|
+
available_commands.keys.include?(command)
|
31
26
|
end
|
32
27
|
|
33
28
|
def initialize(config)
|
34
|
-
@
|
29
|
+
@config = config
|
35
30
|
end
|
36
31
|
|
37
32
|
def run(command, param = "")
|
38
|
-
raise ArgumentError, "Command #{command} not available. Try one of the following: #{MajortomConnector::Request.available_commands.join(', ')}" unless self.class.command_available?(command)
|
39
|
-
@
|
33
|
+
raise ArgumentError, "Command #{MajortomConnector::Request.available_commands[command]} not available. Try one of the following: #{MajortomConnector::Request.available_commands.values.join(', ')}" unless self.class.command_available?(command)
|
34
|
+
@result = Result.new
|
40
35
|
post(command, param) if %w[tmql sparql beru].include?(command)
|
41
36
|
get(command, param) if %w[topics topicmaps resolvetm clearcache].include?(command)
|
42
37
|
stream(command) if %w[xtm ctm].include?(command)
|
43
|
-
|
38
|
+
test if %w[connectiontest].include?(command)
|
39
|
+
return @result
|
44
40
|
end
|
45
41
|
|
46
42
|
def successful?
|
47
|
-
@
|
43
|
+
@result.result_successful?
|
48
44
|
end
|
49
|
-
|
50
|
-
protected
|
51
|
-
|
45
|
+
|
52
46
|
def get(command, query = "")
|
53
|
-
@
|
47
|
+
@result.parse(Net::HTTP.get_response(URI.parse("#{server_uri}/tm/#{command}#{parameter_builder(command, query)}")))
|
54
48
|
end
|
55
49
|
|
56
50
|
def post(command, query)
|
57
|
-
|
58
|
-
@mts_result.parse(HTTParty.post("#{server_uri}/tm/#{command}/#{@mts_config['map']['id']}/", post_options))
|
51
|
+
@result.parse(Net::HTTP.post_form(URI.parse("#{server_uri}/tm/#{command}/#{@config.map_id}/"), {:query => query, :apikey => @config.api_key}))
|
59
52
|
end
|
60
53
|
|
61
54
|
def stream(command)
|
62
55
|
buffer = ""
|
63
|
-
response = Net::HTTP.get_response(URI.parse("#{
|
64
|
-
|
56
|
+
response = Net::HTTP.get_response(URI.parse("#{server_uri}/tm/#{command}/#{@config.map_id}?apikey=#{@config.api_key}")) do |res|
|
57
|
+
res.read_body do |segment|
|
65
58
|
buffer << segment
|
66
59
|
end
|
67
60
|
end
|
68
|
-
@
|
61
|
+
@result.parse(response, command, buffer)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test
|
65
|
+
@result.parse(Net::HTTP.get_response(URI.parse("#{server_uri}/")), 'html')
|
69
66
|
end
|
70
67
|
|
68
|
+
protected
|
69
|
+
|
71
70
|
def server_uri
|
72
|
-
"#{@
|
71
|
+
"#{@config.host}:#{@config.port}/#{@config.context}"
|
73
72
|
end
|
74
73
|
|
75
74
|
def parameter_builder(command, query = "")
|
76
75
|
parameter = case command
|
77
|
-
when 'topics', 'clearcache' then "/#{@
|
76
|
+
when 'topics', 'clearcache' then "/#{@config.map_id}?"
|
78
77
|
when 'resolvetm' then "?bl=#{query}&"
|
79
78
|
else "?"
|
80
|
-
end << "apikey=#{@
|
79
|
+
end << "apikey=#{@config.api_key}"
|
81
80
|
end
|
82
81
|
end
|
83
82
|
end
|
@@ -1,43 +1,43 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module MajortomConnector
|
2
4
|
class Result
|
3
5
|
|
4
|
-
attr_reader :
|
6
|
+
attr_reader :http_status
|
7
|
+
attr_reader :http_message
|
8
|
+
attr_reader :http_body
|
5
9
|
|
10
|
+
attr_reader :code
|
6
11
|
attr_reader :message
|
7
|
-
|
8
12
|
attr_reader :data
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
|
14
|
+
def request_successful?
|
15
|
+
@http_status == "200" ? true : false
|
16
|
+
end
|
17
|
+
|
18
|
+
def response_successful?
|
13
19
|
@code == "0" ? true : false
|
14
20
|
end
|
15
21
|
|
16
|
-
def parse
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
20
|
-
|
21
|
-
if @data.kind_of?(Hash) && @data.has_key?('version')
|
22
|
-
send("handle_jtmqr_v#{@data['version'].to_i}")
|
23
|
-
end
|
24
|
-
end
|
22
|
+
def parse(response, format = "", buffer = nil)
|
23
|
+
@http_status = response.code
|
24
|
+
@http_message = response.message
|
25
|
+
@http_body = response.read_body
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
27
|
+
return unless @http_status == "200"
|
28
|
+
|
29
|
+
case format
|
30
|
+
when 'xtm', 'ctm'
|
31
|
+
@code = "0"
|
32
|
+
@data = buffer
|
33
|
+
when 'html'
|
34
|
+
@code = "0"
|
35
|
+
else
|
36
|
+
json = JSON.parse(@http_body)
|
37
|
+
@data = json['data']
|
38
|
+
@code = json['code']
|
39
|
+
@message = json['msg']
|
36
40
|
end
|
37
41
|
end
|
38
|
-
|
39
|
-
def handle_jtmqr_v2
|
40
|
-
# JTMQR v2 is currently not supported by MaJorToM-Server
|
41
|
-
end
|
42
42
|
end
|
43
43
|
end
|
data/lib/majortom_connector.rb
CHANGED
@@ -1,68 +1,12 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
require dir + 'majortom_connector/result'
|
6
|
-
require dir + 'majortom_connector/request'
|
1
|
+
require 'majortom_connector/config'
|
2
|
+
require 'majortom_connector/connector'
|
3
|
+
require 'majortom_connector/result'
|
4
|
+
require 'majortom_connector/request'
|
7
5
|
|
8
6
|
module MajortomConnector
|
7
|
+
|
9
8
|
def self.connect(id_or_base_iri = "")
|
10
9
|
raise ArgumentError, 'Parameter must not be blank' if id_or_base_iri.blank?
|
11
|
-
|
12
|
-
config.merge!({'map' => {'id' => id}})
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.topic_map_id
|
16
|
-
config['map']['id'] ||= ""
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.list_maps
|
20
|
-
request.run('topicmaps')
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.find_topic_map_id_by_base_iri(base_iri)
|
24
|
-
request.run('resolvetm', base_iri).data
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.topics
|
28
|
-
request.run('topics')
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.tmql(query)
|
32
|
-
request.run('tmql', query)
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.sparql(query)
|
36
|
-
request.run('sparql', query)
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.search(query = "")
|
40
|
-
request.run('beru', query)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.to_xtm
|
44
|
-
request.run('xtm')
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.to_ctm
|
48
|
-
request.run('ctm')
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.clear_cache
|
52
|
-
request.run('clearcache')
|
53
|
-
end
|
54
|
-
|
55
|
-
protected
|
56
|
-
|
57
|
-
def self.request
|
58
|
-
@mts_request ||= Request.new(config)
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.config
|
62
|
-
@mts_config ||= load_server_config
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.load_server_config
|
66
|
-
YAML.load_file(File.join(::Rails.root, 'config', 'majortom-server.yml'))
|
10
|
+
connector = Connector.new(id_or_base_iri)
|
67
11
|
end
|
68
12
|
end
|
data/majortom_connector.gemspec
CHANGED
@@ -19,6 +19,5 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency('
|
23
|
-
s.post_install_message = %q{You have successfully installed the majortom_connector gem. Don't forget to put the majortom-server.yml into rails' config folder.}
|
22
|
+
s.add_dependency('json', '>= 1.5.1')
|
24
23
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: majortom_connector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sven Windisch
|
@@ -15,23 +15,23 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-17 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: json
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 1
|
30
30
|
segments:
|
31
|
-
-
|
32
|
-
-
|
33
|
-
-
|
34
|
-
version:
|
31
|
+
- 1
|
32
|
+
- 5
|
33
|
+
- 1
|
34
|
+
version: 1.5.1
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
37
|
description: Provides easy and configurable access to MaJorToM-Server data stores.
|
@@ -51,6 +51,8 @@ files:
|
|
51
51
|
- Rakefile
|
52
52
|
- examples/majortom-server.yml
|
53
53
|
- lib/majortom_connector.rb
|
54
|
+
- lib/majortom_connector/config.rb
|
55
|
+
- lib/majortom_connector/connector.rb
|
54
56
|
- lib/majortom_connector/request.rb
|
55
57
|
- lib/majortom_connector/result.rb
|
56
58
|
- lib/majortom_connector/version.rb
|
@@ -59,7 +61,7 @@ has_rdoc: true
|
|
59
61
|
homepage: https://github.com/semantosoph/majortom_connector
|
60
62
|
licenses: []
|
61
63
|
|
62
|
-
post_install_message:
|
64
|
+
post_install_message:
|
63
65
|
rdoc_options: []
|
64
66
|
|
65
67
|
require_paths:
|