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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in WWT.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Wwt
2
+ VERSION = "0.0.1"
3
+ end
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: []