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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3@karotz --create
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in karotz.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,3 @@
1
+ this will be a wrapper for the karotz rest-api.
2
+
3
+ early development, expect more comming this week!
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
@@ -0,0 +1,3 @@
1
+ module Karotz
2
+ VERSION = "0.0.1"
3
+ end
data/lib/karotz.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "karotz/version"
2
+ require "karotz/client"
3
+
4
+ module Karotz
5
+ # Your code goes here...
6
+ end
@@ -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&timestamp=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
@@ -0,0 +1,6 @@
1
+ $:.unshift File.join(File.dirname(__FILE__),'..','..','lib')
2
+
3
+ require "rspec"
4
+ require "pry"
5
+
6
+ require "karotz"
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