karotz 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/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/README +3 -0
- data/Rakefile +1 -0
- data/karotz.gemspec +26 -0
- data/lib/karotz/client.rb +47 -0
- data/lib/karotz/version.rb +3 -0
- data/lib/karotz.rb +6 -0
- data/spec/karotz_spec.rb +72 -0
- data/spec/spec_helper.rb +6 -0
- metadata +113 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3@karotz --create
|
data/Gemfile
ADDED
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/karotz.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "karotz/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "karotz"
|
7
|
+
s.version = Karotz::VERSION
|
8
|
+
s.authors = ["Peter Schröder"]
|
9
|
+
s.email = ["phoetmail@googlemail.com"]
|
10
|
+
s.homepage = "http://github.com/phoet/karotz"
|
11
|
+
s.description = s.summary = %q{ruby bindings for karotz rest api}
|
12
|
+
|
13
|
+
s.rubyforge_project = "karotz"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_development_dependency "rspec"
|
21
|
+
s.add_development_dependency "pry"
|
22
|
+
|
23
|
+
s.add_runtime_dependency "httpclient"
|
24
|
+
s.add_runtime_dependency "httpi"
|
25
|
+
s.add_runtime_dependency "crack"
|
26
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'httpi'
|
3
|
+
require 'uri'
|
4
|
+
require 'httpclient'
|
5
|
+
|
6
|
+
module Karotz
|
7
|
+
class Client
|
8
|
+
API = "http://api.karotz.com/api/karotz/"
|
9
|
+
DIGEST = OpenSSL::Digest::Digest.new('sha1')
|
10
|
+
|
11
|
+
def self.start_url(installid, apikey, secret, once=(rand(9999999) + 1000000), timestamp=Time.now.to_i)
|
12
|
+
params = {
|
13
|
+
'installid' => installid,
|
14
|
+
'apikey' => apikey,
|
15
|
+
'once' => once.to_s,
|
16
|
+
'timestamp' => timestamp.to_s,
|
17
|
+
}
|
18
|
+
query = create_query(params)
|
19
|
+
hmac = OpenSSL::HMAC.digest(DIGEST, secret, query)
|
20
|
+
signed = Base64.encode64(hmac).strip
|
21
|
+
p url = "#{API}start?#{query}&signature=#{URI.encode(signed)}"
|
22
|
+
url
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.ears(interactive_id, params={:reset => true})
|
26
|
+
raise "interactive_id is needed!" unless interactive_id
|
27
|
+
HTTPI.get "#{API}ears?#{create_query({ :interactiveid => interactive_id }.merge(params))}"
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def self.led(interactive_id, params={:action => :pulse, :color => "00FF00", :period => 3000, :pulse => 500})
|
32
|
+
raise "interactive_id is needed!" unless interactive_id
|
33
|
+
HTTPI.get "#{API}led?#{create_query({ :interactiveid => interactive_id }.merge(params))}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.interactivemode(interactive_id, params={:action => :stop})
|
37
|
+
HTTPI.get "#{API}interactivemode?#{create_query({ :interactiveid => interactive_id }.merge(params))}"
|
38
|
+
end
|
39
|
+
|
40
|
+
private()
|
41
|
+
|
42
|
+
def self.create_query(params)
|
43
|
+
params.sort.map { |key, value| "#{key}=#{URI.encode(value.to_s)}" }.join('&')
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
data/lib/karotz.rb
ADDED
data/spec/karotz_spec.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
module Karotz
|
4
|
+
describe Client do
|
5
|
+
|
6
|
+
COLORS = {
|
7
|
+
:blue => '0000FF',
|
8
|
+
:red => 'FF0000',
|
9
|
+
:green => '00FF00',
|
10
|
+
:yellow => 'FFFF00'
|
11
|
+
}
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
@install_id = ENV['KAROTZ_INSTALL_ID']
|
15
|
+
@api_key = ENV['KAROTZ_API_KEY']
|
16
|
+
@secret = ENV['KAROTZ_SECRET']
|
17
|
+
# currently retrieved via
|
18
|
+
# http://www.karotz.com/authentication/run/karotz/API_KEY
|
19
|
+
# cause login-process does throws 502 BAD_GATEWAY
|
20
|
+
@interactive_id = "4b434bfc-b4a0-4f69-9420-04f2b37a61ed"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should create a signed url" do
|
24
|
+
Client.start_url(@install_id, @api_key, @secret, '7112317', '1324833464').should eql('http://api.karotz.com/api/karotz/start?apikey=7afdd4b7-3bc8-4469-bda2-1d8bc1e218a0&installid=1a9bf66d-6a47-4f6e-a260-d42fd70a5583&once=7112317×tamp=1324833464&signature=hhE0T+UwSTD1aCfaE6MJXshYDHs=')
|
25
|
+
end
|
26
|
+
|
27
|
+
context "ears" do
|
28
|
+
|
29
|
+
it "should wiggle the ears" do
|
30
|
+
Client.ears(@interactive_id)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should make the bull" do
|
34
|
+
params = {
|
35
|
+
:left => 0,
|
36
|
+
:right => 0,
|
37
|
+
:relative => false
|
38
|
+
}
|
39
|
+
Client.ears(@interactive_id, params)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should look sad" do
|
43
|
+
params = {
|
44
|
+
:left => 90,
|
45
|
+
:right => 90,
|
46
|
+
:relative => false
|
47
|
+
}
|
48
|
+
Client.ears(@interactive_id, params)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should reset the ears" do
|
52
|
+
params = {
|
53
|
+
:reset => true
|
54
|
+
}
|
55
|
+
Client.ears(@interactive_id, params)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "led" do
|
60
|
+
it "should pulse" do
|
61
|
+
Client.led(@interactive_id)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "interactivemode" do
|
66
|
+
it "should stop the mode" do
|
67
|
+
Client.interactivemode(@interactive_id)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: karotz
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Peter Schröder
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &2156037940 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2156037940
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: pry
|
27
|
+
requirement: &2156037520 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2156037520
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: httpclient
|
38
|
+
requirement: &2156037100 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2156037100
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: httpi
|
49
|
+
requirement: &2156036680 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2156036680
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: crack
|
60
|
+
requirement: &2156036260 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2156036260
|
69
|
+
description: ruby bindings for karotz rest api
|
70
|
+
email:
|
71
|
+
- phoetmail@googlemail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rvmrc
|
78
|
+
- Gemfile
|
79
|
+
- README
|
80
|
+
- Rakefile
|
81
|
+
- karotz.gemspec
|
82
|
+
- lib/karotz.rb
|
83
|
+
- lib/karotz/client.rb
|
84
|
+
- lib/karotz/version.rb
|
85
|
+
- spec/karotz_spec.rb
|
86
|
+
- spec/spec_helper.rb
|
87
|
+
homepage: http://github.com/phoet/karotz
|
88
|
+
licenses: []
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project: karotz
|
107
|
+
rubygems_version: 1.8.10
|
108
|
+
signing_key:
|
109
|
+
specification_version: 3
|
110
|
+
summary: ruby bindings for karotz rest api
|
111
|
+
test_files:
|
112
|
+
- spec/karotz_spec.rb
|
113
|
+
- spec/spec_helper.rb
|