WWT 0.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/WWT.gemspec +27 -0
- data/lib/WWT.rb +20 -0
- data/lib/WWT/WWTClient.rb +59 -0
- data/lib/WWT/WWT_layer.rb +30 -0
- data/lib/WWT/version.rb +3 -0
- metadata +78 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/WWT.gemspec
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "WWT/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "WWT"
|
|
7
|
+
s.version = Wwt::VERSION
|
|
8
|
+
s.authors = ["Start Lynn"]
|
|
9
|
+
s.email = ["stuart@zooniverse.org"]
|
|
10
|
+
s.homepage = ""
|
|
11
|
+
s.summary = %q{This is a gem that allows you to control the microsoft WWT desktop client remotely from ruby}
|
|
12
|
+
s.description = %q{This gem exposes the WWT remote API(or at least most of it) to ruby. It works by sending given commands to an open port on the
|
|
13
|
+
machine running WWT.}
|
|
14
|
+
|
|
15
|
+
s.rubyforge_project = "WWT"
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
# specify any dependencies here; for example:
|
|
23
|
+
# s.add_development_dependency "rspec"
|
|
24
|
+
s.add_dependency "rest-client"
|
|
25
|
+
s.add_dependency "hpricot"
|
|
26
|
+
|
|
27
|
+
end
|
data/lib/WWT.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "WWT/WWTClient"
|
|
2
|
+
require "WWT/WWT_layer"
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module WWT
|
|
6
|
+
class << self
|
|
7
|
+
def new(options={})
|
|
8
|
+
WWTClient.new(options)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def method_missing(method, *args, &block)
|
|
12
|
+
return super unless new.respond_to?(method)
|
|
13
|
+
new.send(method, *args, &block)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def respond_to?(method, include_private = false)
|
|
17
|
+
new.respond_to?(method, include_private) || super(method, include_private)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'rest_client'
|
|
2
|
+
require 'Hpricot'
|
|
3
|
+
require 'WWT/WWT_layer'
|
|
4
|
+
|
|
5
|
+
class WWTClient
|
|
6
|
+
|
|
7
|
+
attr_accessor :url, :port
|
|
8
|
+
|
|
9
|
+
Default_host = "http://0.0.0.0"
|
|
10
|
+
Default_port = "5050"
|
|
11
|
+
|
|
12
|
+
def initialize(url=nil,port=nil)
|
|
13
|
+
@url ||= Default_host
|
|
14
|
+
@port ||= Default_port
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def method_missing(method_name,*args)
|
|
18
|
+
args ||= []
|
|
19
|
+
data = args.first.delete(:data) || ""
|
|
20
|
+
data = data.join(",") if data.class==Array
|
|
21
|
+
args_list = make_arg_list(args.first.merge({:cmd=>method_name}))
|
|
22
|
+
call_command args_list,data
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def new_layer (*args)
|
|
26
|
+
result = self.new args.first
|
|
27
|
+
return WWT_layer.new(self,result.first["newlayerid"][:content])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def call_command(args_list,data="")
|
|
31
|
+
parse_responce(RestClient.post "#{@url}:#{@port}/layerApi.aspx?#{args_list}", data)
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def make_arg_list (args)
|
|
36
|
+
args.to_a.inject(""){|str, arg| str+="&#{arg[0].to_s}=#{arg[1].to_s}"}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def look_at(subject)
|
|
40
|
+
self.mode :lookat=>subject
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def move(command)
|
|
44
|
+
self.call_command( make_arg_list({:cmd=>:move, :move=>command}))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#not working just yet
|
|
48
|
+
def layers
|
|
49
|
+
self.layerlist :layersonly=>true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def parse_responce(responce)
|
|
53
|
+
|
|
54
|
+
parse = Hpricot(responce)
|
|
55
|
+
raise "WWT error #{parse.search('h2').inner_html}"if responce.match(/Error/)
|
|
56
|
+
parse.search("layerapi").collect{|l| l.children.map{|c| {c.name =>{:content=>c.inner_html, :properties=>c.attributes}}}}.first
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
class WWT_layer
|
|
2
|
+
attr_accessor :telescope ,:layer_id
|
|
3
|
+
|
|
4
|
+
def initialize(telescope,layer_id)
|
|
5
|
+
@telescope= telescope
|
|
6
|
+
@layer_id = layer_id
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def method_missing (method_name, *args)
|
|
10
|
+
set_property(method_name.to_s.gsub("=",""),args.first) if method_name.match(/.*=/)
|
|
11
|
+
get_property(method_name) if args.count==0
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def get_property(property_name)
|
|
15
|
+
name = WWT_layer.sanitize_property_name(property_name.to_s)
|
|
16
|
+
puts "#{name}"
|
|
17
|
+
result = @telescope.getprop :id=>layer_id, :propname => name
|
|
18
|
+
result[1]["layer"][:properties][name.downcase]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def set_property(property_name,args)
|
|
22
|
+
name = WWT_layer.sanitize_property_name(property_name.to_s)
|
|
23
|
+
@telescope.setprop :id => layer_id, :propname => name, :propvalue=>args
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.sanitize_property_name(name)
|
|
27
|
+
name.split("_").map{|w| w.capitalize}.join("")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
data/lib/WWT/version.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: WWT
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Start Lynn
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2011-09-14 00:00:00.000000000Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rest-client
|
|
16
|
+
requirement: &70282162367840 !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: *70282162367840
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: hpricot
|
|
27
|
+
requirement: &70282162367420 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
29
|
+
requirements:
|
|
30
|
+
- - ! '>='
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: *70282162367420
|
|
36
|
+
description: ! "This gem exposes the WWT remote API(or at least most of it) to ruby.
|
|
37
|
+
It works by sending given commands to an open port on the \n machine running
|
|
38
|
+
WWT."
|
|
39
|
+
email:
|
|
40
|
+
- stuart@zooniverse.org
|
|
41
|
+
executables: []
|
|
42
|
+
extensions: []
|
|
43
|
+
extra_rdoc_files: []
|
|
44
|
+
files:
|
|
45
|
+
- .gitignore
|
|
46
|
+
- Gemfile
|
|
47
|
+
- Rakefile
|
|
48
|
+
- WWT.gemspec
|
|
49
|
+
- lib/WWT.rb
|
|
50
|
+
- lib/WWT/WWTClient.rb
|
|
51
|
+
- lib/WWT/WWT_layer.rb
|
|
52
|
+
- lib/WWT/version.rb
|
|
53
|
+
homepage: ''
|
|
54
|
+
licenses: []
|
|
55
|
+
post_install_message:
|
|
56
|
+
rdoc_options: []
|
|
57
|
+
require_paths:
|
|
58
|
+
- lib
|
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
|
+
none: false
|
|
61
|
+
requirements:
|
|
62
|
+
- - ! '>='
|
|
63
|
+
- !ruby/object:Gem::Version
|
|
64
|
+
version: '0'
|
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
|
+
none: false
|
|
67
|
+
requirements:
|
|
68
|
+
- - ! '>='
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '0'
|
|
71
|
+
requirements: []
|
|
72
|
+
rubyforge_project: WWT
|
|
73
|
+
rubygems_version: 1.8.10
|
|
74
|
+
signing_key:
|
|
75
|
+
specification_version: 3
|
|
76
|
+
summary: This is a gem that allows you to control the microsoft WWT desktop client
|
|
77
|
+
remotely from ruby
|
|
78
|
+
test_files: []
|