artoo-leapmotion 0.1.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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +67 -0
- data/LICENSE +13 -0
- data/README.md +78 -0
- data/Rakefile +10 -0
- data/artoo-leapmotion.gemspec +27 -0
- data/examples/leap.rb +26 -0
- data/examples/leap_gesture.rb +22 -0
- data/lib/artoo-leapmotion.rb +3 -0
- data/lib/artoo-leapmotion/version.rb +5 -0
- data/lib/artoo/adaptors/leapmotion.rb +41 -0
- data/lib/artoo/drivers/leapmotion.rb +49 -0
- data/lib/artoo/drivers/leapmotion/frame.rb +24 -0
- data/lib/artoo/drivers/leapmotion/gesture.rb +67 -0
- data/lib/artoo/drivers/leapmotion/hand.rb +25 -0
- data/lib/artoo/drivers/leapmotion/pointable.rb +25 -0
- data/test/adaptors/leapmotion_adaptor_test.rb +6 -0
- data/test/drivers/leapmotion_driver_test.rb +50 -0
- data/test/test_helper.rb +6 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: aedf45038f5032ebcb7bc5b37f4c9b6dc187c21c
|
4
|
+
data.tar.gz: 274954450e8dac24847a4cfd3343491ec0882fa4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2db5410b5f963a0b0b2a08a722dbf69c2bce39d1441e10bb7b3affa3ea8e1790e06c736df116a5d1a43ffcf659f4a7fadf1469b8d54d62180d4aa2c36c703eab
|
7
|
+
data.tar.gz: 1db64734a6e116c20b30c403dad080b27c591a26843b8d623160e600d8aae3643aa80574c96e8e0c6f2450db0d77e84452bf5bacf330a0d48163d24fb584c3ea
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
artoo-leapmotion (0.1.1)
|
5
|
+
artoo (~> 1.0.0.rc2)
|
6
|
+
hybridgroup-celluloid-websocket-client
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
artoo (1.0.0.rc3)
|
12
|
+
celluloid (~> 0.14.1)
|
13
|
+
celluloid-io (~> 0.14.1)
|
14
|
+
multi_json (~> 1.6)
|
15
|
+
pry (~> 0.9)
|
16
|
+
rake (~> 10.0)
|
17
|
+
reel (~> 0.4.0.pre)
|
18
|
+
thor (~> 0.18.1)
|
19
|
+
celluloid (0.14.1)
|
20
|
+
timers (>= 1.0.0)
|
21
|
+
celluloid-io (0.14.1)
|
22
|
+
celluloid (>= 0.14.1)
|
23
|
+
nio4r (>= 0.4.5)
|
24
|
+
certified (0.1.1)
|
25
|
+
coderay (1.0.9)
|
26
|
+
http (0.4.0)
|
27
|
+
certified
|
28
|
+
http_parser.rb
|
29
|
+
http_parser.rb (0.5.3)
|
30
|
+
hybridgroup-celluloid-websocket-client (0.0.3)
|
31
|
+
celluloid-io
|
32
|
+
websocket-driver
|
33
|
+
metaclass (0.0.1)
|
34
|
+
method_source (0.8.2)
|
35
|
+
minitest (5.0.6)
|
36
|
+
minitest-happy (1.0.0)
|
37
|
+
mocha (0.14.0)
|
38
|
+
metaclass (~> 0.0.1)
|
39
|
+
multi_json (1.7.7)
|
40
|
+
nio4r (0.4.6)
|
41
|
+
pry (0.9.12.2)
|
42
|
+
coderay (~> 1.0.5)
|
43
|
+
method_source (~> 0.8)
|
44
|
+
slop (~> 3.4)
|
45
|
+
rack (1.5.2)
|
46
|
+
rake (10.1.0)
|
47
|
+
reel (0.4.0.pre)
|
48
|
+
celluloid-io (>= 0.8.0)
|
49
|
+
http (>= 0.2.0)
|
50
|
+
http_parser.rb (>= 0.5.3)
|
51
|
+
rack (>= 1.4.0)
|
52
|
+
websocket_parser (>= 0.1.2)
|
53
|
+
slop (3.4.6)
|
54
|
+
thor (0.18.1)
|
55
|
+
timers (1.1.0)
|
56
|
+
websocket-driver (0.2.1)
|
57
|
+
websocket_parser (0.1.4)
|
58
|
+
http
|
59
|
+
|
60
|
+
PLATFORMS
|
61
|
+
ruby
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
artoo-leapmotion!
|
65
|
+
minitest (~> 5.0)
|
66
|
+
minitest-happy
|
67
|
+
mocha (~> 0.14.0)
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright (c) 2013 The Hybrid Group
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# Artoo Adaptor For Leap Motion
|
2
|
+
|
3
|
+
This repository contains the Artoo (http://artoo.io/) adaptor for the Leap Motion controller (https://www.leapmotion.com/).
|
4
|
+
|
5
|
+
It borrows code from https://github.com/glejeune/ruby-leap-motion-ws, thanks @glejeune
|
6
|
+
|
7
|
+
Artoo is a open source micro-framework for robotics using Ruby.
|
8
|
+
|
9
|
+
For more information abut Artoo, check out our repo at https://github.com/hybridgroup/artoo
|
10
|
+
|
11
|
+
[](https://codeclimate.com/github/hybridgroup/artoo-leapmotion) [](https://travis-ci.org/hybridgroup/artoo-leapmotion)
|
12
|
+
|
13
|
+
## Installing
|
14
|
+
|
15
|
+
```
|
16
|
+
gem install artoo-leapmotion --pre
|
17
|
+
```
|
18
|
+
|
19
|
+
## Using
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
require 'artoo'
|
23
|
+
|
24
|
+
connection :leapmotion, :adaptor => :leapmotion, :port => '127.0.0.1:6437'
|
25
|
+
device :leapmotion, :driver => :leapmotion
|
26
|
+
|
27
|
+
work do
|
28
|
+
on leapmotion, :open => :on_open
|
29
|
+
on leapmotion, :frame => :on_frame
|
30
|
+
on leapmotion, :close => :on_close
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_open(*args)
|
34
|
+
puts args
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_frame(*args)
|
38
|
+
frame = args[1]
|
39
|
+
puts frame
|
40
|
+
puts frame.hands
|
41
|
+
puts frame.gestures
|
42
|
+
puts frame.pointables
|
43
|
+
end
|
44
|
+
|
45
|
+
def on_close(*args)
|
46
|
+
puts args
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
## Connecting to Leap Motion
|
51
|
+
|
52
|
+
### OSX
|
53
|
+
|
54
|
+
The normal OSX download of the Leap Motion software from https://www.leapmotion.com/setup should work with Artoo.
|
55
|
+
|
56
|
+
More instructions need to go here...
|
57
|
+
|
58
|
+
### Ubuntu
|
59
|
+
|
60
|
+
The Linux download of the Leap Motion software can be obtained from https://developer.leapmotion.com/downloads (requires free signup)
|
61
|
+
|
62
|
+
The main steps are:
|
63
|
+
- Connect your computer and the Leap Motion controller
|
64
|
+
- Connect to the device via Artoo
|
65
|
+
|
66
|
+
You will need to run the `leapd` daemon in order to connect your Artoo code to your Leap Motion controller.
|
67
|
+
|
68
|
+
```
|
69
|
+
$ leapd
|
70
|
+
```
|
71
|
+
|
72
|
+
Once your computer is communcating with the Leap Motion controller, the `leapd` program exposes a websocket-based interface to receive data.
|
73
|
+
|
74
|
+
### Windows
|
75
|
+
|
76
|
+
The normal Windows download of the Leap Motion software from https://www.leapmotion.com/setup should work with Artoo.
|
77
|
+
|
78
|
+
More instructions need to go here...
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "artoo-leapmotion/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "artoo-leapmotion"
|
7
|
+
s.version = Artoo::Leapmotion::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Ron Evans"]
|
10
|
+
s.email = ["artoo@hybridgroup.com"]
|
11
|
+
s.homepage = "https://github.com/hybridgroup/artoo-"
|
12
|
+
s.summary = %q{Artoo adaptor and driver for Leap Motion}
|
13
|
+
s.description = %q{Artoo adaptor and driver for Leap Motion}
|
14
|
+
|
15
|
+
s.rubyforge_project = "artoo-leapmotion"
|
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
|
+
s.add_runtime_dependency 'artoo', '~> 1.0.0.rc2'
|
23
|
+
s.add_runtime_dependency 'hybridgroup-celluloid-websocket-client'
|
24
|
+
s.add_development_dependency 'minitest', '~> 5.0'
|
25
|
+
s.add_development_dependency 'minitest-happy'
|
26
|
+
s.add_development_dependency 'mocha', '~> 0.14.0'
|
27
|
+
end
|
data/examples/leap.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'artoo'
|
2
|
+
|
3
|
+
connection :leapmotion, :adaptor => :leapmotion, :port => '127.0.0.1:6437'
|
4
|
+
device :leapmotion, :driver => :leapmotion
|
5
|
+
|
6
|
+
work do
|
7
|
+
on leapmotion, :open => :on_open
|
8
|
+
on leapmotion, :frame => :on_frame
|
9
|
+
on leapmotion, :close => :on_close
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_open(*args)
|
13
|
+
puts args
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_frame(*args)
|
17
|
+
frame = args[1]
|
18
|
+
puts frame
|
19
|
+
puts frame.hands
|
20
|
+
puts frame.gestures
|
21
|
+
puts frame.pointables
|
22
|
+
end
|
23
|
+
|
24
|
+
def on_close(*args)
|
25
|
+
puts args
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'artoo'
|
2
|
+
|
3
|
+
connection :leapmotion, :adaptor => :leapmotion, :port => '127.0.0.1:6437'
|
4
|
+
device :leapmotion, :driver => :leapmotion
|
5
|
+
|
6
|
+
work do
|
7
|
+
on leapmotion, :open => :on_open
|
8
|
+
on leapmotion, :gesture => :on_gesture
|
9
|
+
on leapmotion, :close => :on_close
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_open(*args)
|
13
|
+
puts args
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_gesture(*args)
|
17
|
+
puts args[1]
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_close(*args)
|
21
|
+
puts args
|
22
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'artoo/adaptors/adaptor'
|
2
|
+
require 'celluloid/websocket/client'
|
3
|
+
|
4
|
+
module Artoo
|
5
|
+
module Adaptors
|
6
|
+
# Connect to a leapmotion device
|
7
|
+
# @see device documentation for more information
|
8
|
+
class Leapmotion < Adaptor
|
9
|
+
finalizer :finalize
|
10
|
+
attr_reader :leap
|
11
|
+
|
12
|
+
# Closes connection with device if connected
|
13
|
+
# @return [Boolean]
|
14
|
+
def finalize
|
15
|
+
disconnect if connected?
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a connection with device
|
19
|
+
# @return [Boolean]
|
20
|
+
def connect
|
21
|
+
@leap = Celluloid::WebSocket::Client.new("ws://#{port.host}:#{port.port}/v3.json")
|
22
|
+
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
# Closes connection with device
|
27
|
+
# @return [Boolean]
|
28
|
+
def disconnect
|
29
|
+
leap.close
|
30
|
+
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
# Uses method missing to call device actions
|
35
|
+
# @see device documentation
|
36
|
+
def method_missing(method_name, *arguments, &block)
|
37
|
+
leap.send(method_name, *arguments, &block)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'artoo/drivers/driver'
|
2
|
+
require 'artoo/drivers/leapmotion/frame'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Artoo
|
6
|
+
module Drivers
|
7
|
+
# The leapmotion driver behaviors
|
8
|
+
class Leapmotion < Driver
|
9
|
+
|
10
|
+
# Start driver and any required connections
|
11
|
+
def start_driver
|
12
|
+
begin
|
13
|
+
connection.handler = current_actor
|
14
|
+
connection.start
|
15
|
+
|
16
|
+
super
|
17
|
+
rescue Exception => e
|
18
|
+
Logger.error "Error starting Leapmotion driver!"
|
19
|
+
Logger.error e.message
|
20
|
+
Logger.error e.backtrace.inspect
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def on_open
|
25
|
+
publish(event_topic_name("open"))
|
26
|
+
data = JSON.dump("enableGestures" => true)
|
27
|
+
connection.text(data)
|
28
|
+
end
|
29
|
+
|
30
|
+
def on_message(data)
|
31
|
+
message = JSON.parse(data)
|
32
|
+
if message.key?("id") and message.key?("timestamp")
|
33
|
+
frame = Artoo::Drivers::Leapmotion::Frame.new(message)
|
34
|
+
publish(event_topic_name("frame"), frame)
|
35
|
+
|
36
|
+
frame.gestures.each {|g| publish(event_topic_name("gesture"), g)}
|
37
|
+
else
|
38
|
+
publish(event_topic_name("error"), data)
|
39
|
+
end
|
40
|
+
rescue Exception => e
|
41
|
+
publish(event_topic_name("error"), data)
|
42
|
+
end
|
43
|
+
|
44
|
+
def on_close(code, reason)
|
45
|
+
publish(event_topic_name("close"), code, reason)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'artoo/drivers/leapmotion/gesture'
|
2
|
+
require 'artoo/drivers/leapmotion/pointable'
|
3
|
+
require 'artoo/drivers/leapmotion/hand'
|
4
|
+
|
5
|
+
module Artoo
|
6
|
+
module Drivers
|
7
|
+
# The leapmotion driver behaviors
|
8
|
+
class Leapmotion < Driver
|
9
|
+
class Frame
|
10
|
+
attr_reader :gestures, :pointables, :hands, :id, :timestamp, :r, :s, :t
|
11
|
+
def initialize(data)
|
12
|
+
@hands = Artoo::Drivers::Leapmotion::Hand.list(data)
|
13
|
+
@gestures = Artoo::Drivers::Leapmotion::Gesture.list(data)
|
14
|
+
@pointables = Artoo::Drivers::Leapmotion::Pointable.list(data)
|
15
|
+
@id = data["id"]
|
16
|
+
@timestamp = data["timestamp"]
|
17
|
+
@r = data["r"]
|
18
|
+
@s = data["s"]
|
19
|
+
@t = data["t"]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Artoo
|
2
|
+
module Drivers
|
3
|
+
# The leapmotion driver behaviors
|
4
|
+
class Leapmotion < Driver
|
5
|
+
# Recognized movement by the user
|
6
|
+
#
|
7
|
+
# There is 4 Gesture subclasses :
|
8
|
+
#
|
9
|
+
# Circle - A circular movement by a finger.
|
10
|
+
# Swipe - A straight line movement by the hand with fingers extended.
|
11
|
+
# KeyTap - A downward tapping movement by a finger.
|
12
|
+
# ScreenTap - A forward tapping movement by a finger.
|
13
|
+
class Gesture
|
14
|
+
class Error < StandardError; end
|
15
|
+
|
16
|
+
def self.list(data)
|
17
|
+
gestures = []
|
18
|
+
if data["gestures"]
|
19
|
+
data["gestures"].each do |gesture|
|
20
|
+
gestures << make_gesture(gesture)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return gestures
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.make_gesture(data)
|
27
|
+
unless data.has_key? "type"
|
28
|
+
raise Error, "gesture type unknown"
|
29
|
+
end
|
30
|
+
name = data["type"][0].upcase << data["type"][1..-1]
|
31
|
+
unless class_exists?(name)
|
32
|
+
raise Error, "gesture class `#{self}::#{name}' invalid"
|
33
|
+
end
|
34
|
+
const_get(name).new(data)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def self.class_exists?(class_name)
|
40
|
+
klass = const_get(class_name)
|
41
|
+
return klass.is_a?(Class)
|
42
|
+
rescue NameError
|
43
|
+
return false
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.define_gesture *names
|
47
|
+
names.each do |n|
|
48
|
+
name = n.to_s
|
49
|
+
unless class_exists?(name)
|
50
|
+
c = Class.new(self) do
|
51
|
+
def initialize(data)
|
52
|
+
data.each do |k, v|
|
53
|
+
instance_variable_set("@#{k}", v)
|
54
|
+
self.class.send(:define_method, k.to_sym, lambda { instance_variable_get("@#{k}") })
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
const_set name, c
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
define_gesture :Circle, :KeyTap, :ScreenTap, :Swipe
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Artoo
|
2
|
+
module Drivers
|
3
|
+
# The leapmotion driver behaviors
|
4
|
+
class Leapmotion < Driver
|
5
|
+
class Hand
|
6
|
+
def self.list(data)
|
7
|
+
hands = []
|
8
|
+
if data["hands"]
|
9
|
+
data["hands"].each do |hand|
|
10
|
+
hands << Artoo::Drivers::Leapmotion::Hand.new(hand)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
return hands
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(data)
|
17
|
+
data.each do |k, v|
|
18
|
+
instance_variable_set("@#{k}", v)
|
19
|
+
self.class.send(:define_method, k.to_sym, lambda { instance_variable_get("@#{k}") })
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Artoo
|
2
|
+
module Drivers
|
3
|
+
# The leapmotion driver behaviors
|
4
|
+
class Leapmotion < Driver
|
5
|
+
class Pointable
|
6
|
+
def self.list(data)
|
7
|
+
pointables = []
|
8
|
+
if data["pointables"]
|
9
|
+
data["pointables"].each do |pointable|
|
10
|
+
pointables << Artoo::Drivers::Leapmotion::Pointable.new(pointable)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
return pointables
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(data)
|
17
|
+
data.each do |k, v|
|
18
|
+
instance_variable_set("@#{k}", v)
|
19
|
+
self.class.send(:define_method, k.to_sym, lambda { instance_variable_get("@#{k}") })
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
|
2
|
+
require 'artoo/drivers/leapmotion'
|
3
|
+
|
4
|
+
def valid_frame
|
5
|
+
{
|
6
|
+
id: '123',
|
7
|
+
timestamp: '123456789'
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Artoo::Drivers::Leapmotion do
|
12
|
+
before do
|
13
|
+
@device = mock('device')
|
14
|
+
@driver = Artoo::Drivers::Leapmotion.new(:parent => @device)
|
15
|
+
@connection = mock('connection')
|
16
|
+
@device.stubs(:connection).returns(@connection)
|
17
|
+
@frame = mock('frame')
|
18
|
+
@frame.stubs(:gestures).returns([])
|
19
|
+
Artoo::Drivers::Leapmotion::Frame.stubs(:new).returns(@frame)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'Leapmotion#on_open' do
|
23
|
+
@device.expects(:event_topic_name).with("open").returns("hi_open")
|
24
|
+
@connection.expects(:text)
|
25
|
+
@driver.on_open
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'Leapmotion#on_message with a frame but no gesture' do
|
29
|
+
@device.expects(:event_topic_name).with("frame")
|
30
|
+
@device.expects(:event_topic_name).with("gesture").never
|
31
|
+
@driver.on_message(JSON.dump(valid_frame))
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'Leapmotion#on_message with a gesture' do
|
35
|
+
@device.expects(:event_topic_name).with("frame")
|
36
|
+
@device.expects(:event_topic_name).with("gesture")
|
37
|
+
@frame.stubs(:gestures).returns(['123'])
|
38
|
+
@driver.on_message(JSON.dump(valid_frame))
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'Leapmotion#error' do
|
42
|
+
@device.expects(:event_topic_name).with("error")
|
43
|
+
@driver.on_message("no good")
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'Leapmotion#on_close' do
|
47
|
+
@device.expects(:event_topic_name).with("close").returns("hi_bye")
|
48
|
+
@driver.on_close(2, "huh")
|
49
|
+
end
|
50
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: artoo-leapmotion
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ron Evans
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: artoo
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.0.rc2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.0.rc2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hybridgroup-celluloid-websocket-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest-happy
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.14.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.14.0
|
83
|
+
description: Artoo adaptor and driver for Leap Motion
|
84
|
+
email:
|
85
|
+
- artoo@hybridgroup.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- Gemfile
|
91
|
+
- Gemfile.lock
|
92
|
+
- LICENSE
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- artoo-leapmotion.gemspec
|
96
|
+
- examples/leap.rb
|
97
|
+
- examples/leap_gesture.rb
|
98
|
+
- lib/artoo-leapmotion.rb
|
99
|
+
- lib/artoo-leapmotion/version.rb
|
100
|
+
- lib/artoo/adaptors/leapmotion.rb
|
101
|
+
- lib/artoo/drivers/leapmotion.rb
|
102
|
+
- lib/artoo/drivers/leapmotion/frame.rb
|
103
|
+
- lib/artoo/drivers/leapmotion/gesture.rb
|
104
|
+
- lib/artoo/drivers/leapmotion/hand.rb
|
105
|
+
- lib/artoo/drivers/leapmotion/pointable.rb
|
106
|
+
- test/adaptors/leapmotion_adaptor_test.rb
|
107
|
+
- test/drivers/leapmotion_driver_test.rb
|
108
|
+
- test/test_helper.rb
|
109
|
+
homepage: https://github.com/hybridgroup/artoo-
|
110
|
+
licenses: []
|
111
|
+
metadata: {}
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
requirements: []
|
127
|
+
rubyforge_project: artoo-leapmotion
|
128
|
+
rubygems_version: 2.0.3
|
129
|
+
signing_key:
|
130
|
+
specification_version: 4
|
131
|
+
summary: Artoo adaptor and driver for Leap Motion
|
132
|
+
test_files: []
|